Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2025 CP2K developers group <https://cp2k.org> !
4 : ! !
5 : ! SPDX-License-Identifier: GPL-2.0-or-later !
6 : !--------------------------------------------------------------------------------------------------!
7 :
8 : ! **************************************************************************************************
9 : !> \brief Contains routines for contraction without dgemms. PLEASE DO NOT MODIFY.
10 : !> \notes Contains specific routines for contraction. The compiler flag
11 : !> -D__MAX_CONTR defines the maximum angular momentum up to which
12 : !> specialized code will be used. Default setting is d-functions.
13 : !> Increasing -D__MAX_CONTR produces faster code but might overburden
14 : !> the optimization capabilities of some poor compilers.
15 : !> This file contains specific code up to g-functions. If you need more
16 : !> look at cp2k/tools/hfx_tools/contraction/
17 : !> \par History
18 : !> 07.2009 created [Manuel Guidon]
19 : !> \author Manuel Guidon
20 : ! **************************************************************************************************
21 :
22 : MODULE hfx_contraction_methods
23 :
24 : !** This defines the default behaviour
25 : #ifndef __MAX_CONTR
26 : #define __MAX_CONTR 2
27 : #endif
28 :
29 : USE kinds, ONLY: dp
30 : #include "../base/base_uses.f90"
31 :
32 : IMPLICIT NONE
33 :
34 : PRIVATE
35 : PUBLIC :: contract
36 :
37 : CONTAINS
38 :
39 : ! **************************************************************************************************
40 : !> \brief ...
41 : !> \param ncoa ...
42 : !> \param ncob ...
43 : !> \param ncoc ...
44 : !> \param ncod ...
45 : !> \param nsoa ...
46 : !> \param nsob ...
47 : !> \param nsoc ...
48 : !> \param nsod ...
49 : !> \param n_a ...
50 : !> \param n_b ...
51 : !> \param n_c ...
52 : !> \param n_d ...
53 : !> \param nl_a ...
54 : !> \param nl_b ...
55 : !> \param nl_c ...
56 : !> \param nl_d ...
57 : !> \param work ...
58 : !> \param sphi_a ...
59 : !> \param sphi_b ...
60 : !> \param sphi_c ...
61 : !> \param sphi_d ...
62 : !> \param primitives ...
63 : !> \param buffer1 ...
64 : !> \param buffer2 ...
65 : ! **************************************************************************************************
66 475914875 : SUBROUTINE contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
67 475914875 : n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work, &
68 475914875 : sphi_a, sphi_b, sphi_c, sphi_d, &
69 475914875 : primitives, &
70 475914875 : buffer1, buffer2)
71 :
72 : INTEGER, INTENT(IN) :: ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
73 : n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d
74 : REAL(dp), DIMENSION(ncoa*ncob*ncoc*ncod), INTENT(IN) :: work
75 : REAL(dp), DIMENSION(ncoa, nsoa*nl_a), INTENT(IN) :: sphi_a
76 : REAL(dp), DIMENSION(ncob, nsob*nl_b), INTENT(IN) :: sphi_b
77 : REAL(dp), DIMENSION(ncoc, nsoc*nl_c), INTENT(IN) :: sphi_c
78 : REAL(dp), DIMENSION(ncod, nsod*nl_d), INTENT(IN) :: sphi_d
79 :
80 : REAL(dp), DIMENSION(nsoa*nl_a, nsob*nl_b, nsoc*nl_c, nsod*nl_d) :: primitives
81 : REAL(dp), DIMENSION(ncoa*ncob*ncoc*ncod) :: buffer1, buffer2
82 :
83 : #if !defined(__LIBINT)
84 : MARK_USED(ncoa)
85 : MARK_USED(ncob)
86 : MARK_USED(ncoc)
87 : MARK_USED(ncod)
88 : MARK_USED(nsoa)
89 : MARK_USED(nsob)
90 : MARK_USED(nsoc)
91 : MARK_USED(nsod)
92 : MARK_USED(n_a)
93 : MARK_USED(n_b)
94 : MARK_USED(n_c)
95 : MARK_USED(n_d)
96 : MARK_USED(nl_a)
97 : MARK_USED(nl_b)
98 : MARK_USED(nl_c)
99 : MARK_USED(nl_d)
100 : MARK_USED(sphi_a)
101 : MARK_USED(sphi_b)
102 : MARK_USED(sphi_c)
103 : MARK_USED(sphi_d)
104 : MARK_USED(work)
105 : MARK_USED(primitives)
106 : MARK_USED(buffer1)
107 : MARK_USED(buffer2)
108 : CPABORT("libint not compiled in")
109 : #else
110 794889545 : SELECT CASE (n_a)
111 : CASE (0)
112 725135588 : SELECT CASE (n_b)
113 : CASE (0)
114 472350062 : SELECT CASE (n_c)
115 : CASE (0)
116 383187946 : SELECT CASE (n_d)
117 : CASE (0)
118 : #if __MAX_CONTR > 0 || __MAX_CONTR == 0
119 : CALL contract_ssss(work, &
120 : nl_a, nl_b, nl_c, nl_d, &
121 : sphi_a, sphi_b, sphi_c, sphi_d, &
122 : primitives, &
123 122233851 : buffer1, buffer2)
124 : #else
125 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
126 : work, nl_a, nl_b, nl_c, nl_d, &
127 : sphi_a, &
128 : sphi_b, &
129 : sphi_c, &
130 : sphi_d, &
131 : primitives, &
132 : buffer1, buffer2)
133 : #endif
134 : CASE (1)
135 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
136 : CALL contract_sssp(work, &
137 : nl_a, nl_b, nl_c, nl_d, &
138 : sphi_a, sphi_b, sphi_c, sphi_d, &
139 : primitives, &
140 34242143 : buffer1, buffer2)
141 : #else
142 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
143 : work, nl_a, nl_b, nl_c, nl_d, &
144 : sphi_a, &
145 : sphi_b, &
146 : sphi_c, &
147 : sphi_d, &
148 : primitives, &
149 : buffer1, buffer2)
150 : #endif
151 : CASE (2)
152 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
153 : CALL contract_sssd(work, &
154 : nl_a, nl_b, nl_c, nl_d, &
155 : sphi_a, sphi_b, sphi_c, sphi_d, &
156 : primitives, &
157 3272334 : buffer1, buffer2)
158 : #else
159 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
160 : work, nl_a, nl_b, nl_c, nl_d, &
161 : sphi_a, &
162 : sphi_b, &
163 : sphi_c, &
164 : sphi_d, &
165 : primitives, &
166 : buffer1, buffer2)
167 : #endif
168 : CASE (3)
169 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
170 : CALL contract_sssf(work, &
171 : nl_a, nl_b, nl_c, nl_d, &
172 : sphi_a, sphi_b, sphi_c, sphi_d, &
173 : primitives, &
174 : buffer1, buffer2)
175 : #else
176 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
177 : work, nl_a, nl_b, nl_c, nl_d, &
178 : sphi_a, &
179 : sphi_b, &
180 : sphi_c, &
181 : sphi_d, &
182 : primitives, &
183 18509 : buffer1, buffer2)
184 : #endif
185 : CASE (4)
186 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
187 : CALL contract_sssg(work, &
188 : nl_a, nl_b, nl_c, nl_d, &
189 : sphi_a, sphi_b, sphi_c, sphi_d, &
190 : primitives, &
191 : buffer1, buffer2)
192 : #else
193 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
194 : work, nl_a, nl_b, nl_c, nl_d, &
195 : sphi_a, &
196 : sphi_b, &
197 : sphi_c, &
198 : sphi_d, &
199 : primitives, &
200 0 : buffer1, buffer2)
201 : #endif
202 : CASE DEFAULT
203 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
204 : work, nl_a, nl_b, nl_c, nl_d, &
205 : sphi_a, &
206 : sphi_b, &
207 : sphi_c, &
208 : sphi_d, &
209 : primitives, &
210 159766837 : buffer1, buffer2)
211 : END SELECT
212 : CASE (1)
213 183003536 : SELECT CASE (n_d)
214 : CASE (0)
215 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
216 : CALL contract_ssps(work, &
217 : nl_a, nl_b, nl_c, nl_d, &
218 : sphi_a, sphi_b, sphi_c, sphi_d, &
219 : primitives, &
220 72620570 : buffer1, buffer2)
221 : #else
222 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
223 : work, nl_a, nl_b, nl_c, nl_d, &
224 : sphi_a, &
225 : sphi_b, &
226 : sphi_c, &
227 : sphi_d, &
228 : primitives, &
229 : buffer1, buffer2)
230 : #endif
231 : CASE (1)
232 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
233 : CALL contract_sspp(work, &
234 : nl_a, nl_b, nl_c, nl_d, &
235 : sphi_a, sphi_b, sphi_c, sphi_d, &
236 : primitives, &
237 25790420 : buffer1, buffer2)
238 : #else
239 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
240 : work, nl_a, nl_b, nl_c, nl_d, &
241 : sphi_a, &
242 : sphi_b, &
243 : sphi_c, &
244 : sphi_d, &
245 : primitives, &
246 : buffer1, buffer2)
247 : #endif
248 : CASE (2)
249 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
250 : CALL contract_sspd(work, &
251 : nl_a, nl_b, nl_c, nl_d, &
252 : sphi_a, sphi_b, sphi_c, sphi_d, &
253 : primitives, &
254 2745195 : buffer1, buffer2)
255 : #else
256 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
257 : work, nl_a, nl_b, nl_c, nl_d, &
258 : sphi_a, &
259 : sphi_b, &
260 : sphi_c, &
261 : sphi_d, &
262 : primitives, &
263 : buffer1, buffer2)
264 : #endif
265 : CASE (3)
266 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
267 : CALL contract_sspf(work, &
268 : nl_a, nl_b, nl_c, nl_d, &
269 : sphi_a, sphi_b, sphi_c, sphi_d, &
270 : primitives, &
271 : buffer1, buffer2)
272 : #else
273 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
274 : work, nl_a, nl_b, nl_c, nl_d, &
275 : sphi_a, &
276 : sphi_b, &
277 : sphi_c, &
278 : sphi_d, &
279 : primitives, &
280 31073 : buffer1, buffer2)
281 : #endif
282 : CASE (4)
283 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
284 : CALL contract_sspg(work, &
285 : nl_a, nl_b, nl_c, nl_d, &
286 : sphi_a, sphi_b, sphi_c, sphi_d, &
287 : primitives, &
288 : buffer1, buffer2)
289 : #else
290 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
291 : work, nl_a, nl_b, nl_c, nl_d, &
292 : sphi_a, &
293 : sphi_b, &
294 : sphi_c, &
295 : sphi_d, &
296 : primitives, &
297 0 : buffer1, buffer2)
298 : #endif
299 : CASE DEFAULT
300 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
301 : work, nl_a, nl_b, nl_c, nl_d, &
302 : sphi_a, &
303 : sphi_b, &
304 : sphi_c, &
305 : sphi_d, &
306 : primitives, &
307 101187258 : buffer1, buffer2)
308 : END SELECT
309 : CASE (2)
310 14634496 : SELECT CASE (n_d)
311 : CASE (0)
312 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
313 : CALL contract_ssds(work, &
314 : nl_a, nl_b, nl_c, nl_d, &
315 : sphi_a, sphi_b, sphi_c, sphi_d, &
316 : primitives, &
317 5373319 : buffer1, buffer2)
318 : #else
319 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
320 : work, nl_a, nl_b, nl_c, nl_d, &
321 : sphi_a, &
322 : sphi_b, &
323 : sphi_c, &
324 : sphi_d, &
325 : primitives, &
326 : buffer1, buffer2)
327 : #endif
328 : CASE (1)
329 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
330 : CALL contract_ssdp(work, &
331 : nl_a, nl_b, nl_c, nl_d, &
332 : sphi_a, sphi_b, sphi_c, sphi_d, &
333 : primitives, &
334 3055006 : buffer1, buffer2)
335 : #else
336 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
337 : work, nl_a, nl_b, nl_c, nl_d, &
338 : sphi_a, &
339 : sphi_b, &
340 : sphi_c, &
341 : sphi_d, &
342 : primitives, &
343 : buffer1, buffer2)
344 : #endif
345 : CASE (2)
346 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
347 : CALL contract_ssdd(work, &
348 : nl_a, nl_b, nl_c, nl_d, &
349 : sphi_a, sphi_b, sphi_c, sphi_d, &
350 : primitives, &
351 759711 : buffer1, buffer2)
352 : #else
353 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
354 : work, nl_a, nl_b, nl_c, nl_d, &
355 : sphi_a, &
356 : sphi_b, &
357 : sphi_c, &
358 : sphi_d, &
359 : primitives, &
360 : buffer1, buffer2)
361 : #endif
362 : CASE (3)
363 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
364 : CALL contract_ssdf(work, &
365 : nl_a, nl_b, nl_c, nl_d, &
366 : sphi_a, sphi_b, sphi_c, sphi_d, &
367 : primitives, &
368 : buffer1, buffer2)
369 : #else
370 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
371 : work, nl_a, nl_b, nl_c, nl_d, &
372 : sphi_a, &
373 : sphi_b, &
374 : sphi_c, &
375 : sphi_d, &
376 : primitives, &
377 7672 : buffer1, buffer2)
378 : #endif
379 : CASE (4)
380 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
381 : CALL contract_ssdg(work, &
382 : nl_a, nl_b, nl_c, nl_d, &
383 : sphi_a, sphi_b, sphi_c, sphi_d, &
384 : primitives, &
385 : buffer1, buffer2)
386 : #else
387 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
388 : work, nl_a, nl_b, nl_c, nl_d, &
389 : sphi_a, &
390 : sphi_b, &
391 : sphi_c, &
392 : sphi_d, &
393 : primitives, &
394 0 : buffer1, buffer2)
395 : #endif
396 : CASE DEFAULT
397 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
398 : work, nl_a, nl_b, nl_c, nl_d, &
399 : sphi_a, &
400 : sphi_b, &
401 : sphi_c, &
402 : sphi_d, &
403 : primitives, &
404 9195708 : buffer1, buffer2)
405 : END SELECT
406 : CASE (3)
407 93041 : SELECT CASE (n_d)
408 : CASE (0)
409 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
410 : CALL contract_ssfs(work, &
411 : nl_a, nl_b, nl_c, nl_d, &
412 : sphi_a, sphi_b, sphi_c, sphi_d, &
413 : primitives, &
414 : buffer1, buffer2)
415 : #else
416 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
417 : work, nl_a, nl_b, nl_c, nl_d, &
418 : sphi_a, &
419 : sphi_b, &
420 : sphi_c, &
421 : sphi_d, &
422 : primitives, &
423 27572 : buffer1, buffer2)
424 : #endif
425 : CASE (1)
426 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
427 : CALL contract_ssfp(work, &
428 : nl_a, nl_b, nl_c, nl_d, &
429 : sphi_a, sphi_b, sphi_c, sphi_d, &
430 : primitives, &
431 : buffer1, buffer2)
432 : #else
433 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
434 : work, nl_a, nl_b, nl_c, nl_d, &
435 : sphi_a, &
436 : sphi_b, &
437 : sphi_c, &
438 : sphi_d, &
439 : primitives, &
440 24558 : buffer1, buffer2)
441 : #endif
442 : CASE (2)
443 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
444 : CALL contract_ssfd(work, &
445 : nl_a, nl_b, nl_c, nl_d, &
446 : sphi_a, sphi_b, sphi_c, sphi_d, &
447 : primitives, &
448 : buffer1, buffer2)
449 : #else
450 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
451 : work, nl_a, nl_b, nl_c, nl_d, &
452 : sphi_a, &
453 : sphi_b, &
454 : sphi_c, &
455 : sphi_d, &
456 : primitives, &
457 6173 : buffer1, buffer2)
458 : #endif
459 : CASE (3)
460 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
461 : CALL contract_ssff(work, &
462 : nl_a, nl_b, nl_c, nl_d, &
463 : sphi_a, sphi_b, sphi_c, sphi_d, &
464 : primitives, &
465 : buffer1, buffer2)
466 : #else
467 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
468 : work, nl_a, nl_b, nl_c, nl_d, &
469 : sphi_a, &
470 : sphi_b, &
471 : sphi_c, &
472 : sphi_d, &
473 : primitives, &
474 7166 : buffer1, buffer2)
475 : #endif
476 : CASE (4)
477 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
478 : CALL contract_ssfg(work, &
479 : nl_a, nl_b, nl_c, nl_d, &
480 : sphi_a, sphi_b, sphi_c, sphi_d, &
481 : primitives, &
482 : buffer1, buffer2)
483 : #else
484 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
485 : work, nl_a, nl_b, nl_c, nl_d, &
486 : sphi_a, &
487 : sphi_b, &
488 : sphi_c, &
489 : sphi_d, &
490 : primitives, &
491 0 : buffer1, buffer2)
492 : #endif
493 : CASE DEFAULT
494 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
495 : work, nl_a, nl_b, nl_c, nl_d, &
496 : sphi_a, &
497 : sphi_b, &
498 : sphi_c, &
499 : sphi_d, &
500 : primitives, &
501 65469 : buffer1, buffer2)
502 : END SELECT
503 : CASE (4)
504 0 : SELECT CASE (n_d)
505 : CASE (0)
506 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
507 : CALL contract_ssgs(work, &
508 : nl_a, nl_b, nl_c, nl_d, &
509 : sphi_a, sphi_b, sphi_c, sphi_d, &
510 : primitives, &
511 : buffer1, buffer2)
512 : #else
513 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
514 : work, nl_a, nl_b, nl_c, nl_d, &
515 : sphi_a, &
516 : sphi_b, &
517 : sphi_c, &
518 : sphi_d, &
519 : primitives, &
520 0 : buffer1, buffer2)
521 : #endif
522 : CASE (1)
523 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
524 : CALL contract_ssgp(work, &
525 : nl_a, nl_b, nl_c, nl_d, &
526 : sphi_a, sphi_b, sphi_c, sphi_d, &
527 : primitives, &
528 : buffer1, buffer2)
529 : #else
530 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
531 : work, nl_a, nl_b, nl_c, nl_d, &
532 : sphi_a, &
533 : sphi_b, &
534 : sphi_c, &
535 : sphi_d, &
536 : primitives, &
537 0 : buffer1, buffer2)
538 : #endif
539 : CASE (2)
540 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
541 : CALL contract_ssgd(work, &
542 : nl_a, nl_b, nl_c, nl_d, &
543 : sphi_a, sphi_b, sphi_c, sphi_d, &
544 : primitives, &
545 : buffer1, buffer2)
546 : #else
547 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
548 : work, nl_a, nl_b, nl_c, nl_d, &
549 : sphi_a, &
550 : sphi_b, &
551 : sphi_c, &
552 : sphi_d, &
553 : primitives, &
554 0 : buffer1, buffer2)
555 : #endif
556 : CASE (3)
557 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
558 : CALL contract_ssgf(work, &
559 : nl_a, nl_b, nl_c, nl_d, &
560 : sphi_a, sphi_b, sphi_c, sphi_d, &
561 : primitives, &
562 : buffer1, buffer2)
563 : #else
564 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
565 : work, nl_a, nl_b, nl_c, nl_d, &
566 : sphi_a, &
567 : sphi_b, &
568 : sphi_c, &
569 : sphi_d, &
570 : primitives, &
571 0 : buffer1, buffer2)
572 : #endif
573 : CASE (4)
574 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
575 : CALL contract_ssgg(work, &
576 : nl_a, nl_b, nl_c, nl_d, &
577 : sphi_a, sphi_b, sphi_c, sphi_d, &
578 : primitives, &
579 : buffer1, buffer2)
580 : #else
581 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
582 : work, nl_a, nl_b, nl_c, nl_d, &
583 : sphi_a, &
584 : sphi_b, &
585 : sphi_c, &
586 : sphi_d, &
587 : primitives, &
588 0 : buffer1, buffer2)
589 : #endif
590 : CASE DEFAULT
591 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
592 : work, nl_a, nl_b, nl_c, nl_d, &
593 : sphi_a, &
594 : sphi_b, &
595 : sphi_c, &
596 : sphi_d, &
597 : primitives, &
598 0 : buffer1, buffer2)
599 : END SELECT
600 : CASE DEFAULT
601 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
602 : work, nl_a, nl_b, nl_c, nl_d, &
603 : sphi_a, &
604 : sphi_b, &
605 : sphi_c, &
606 : sphi_d, &
607 : primitives, &
608 270215272 : buffer1, buffer2)
609 : END SELECT
610 : CASE (1)
611 72739463 : SELECT CASE (n_c)
612 : CASE (0)
613 55286380 : SELECT CASE (n_d)
614 : CASE (0)
615 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
616 : CALL contract_spss(work, &
617 : nl_a, nl_b, nl_c, nl_d, &
618 : sphi_a, sphi_b, sphi_c, sphi_d, &
619 : primitives, &
620 15953045 : buffer1, buffer2)
621 : #else
622 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
623 : work, nl_a, nl_b, nl_c, nl_d, &
624 : sphi_a, &
625 : sphi_b, &
626 : sphi_c, &
627 : sphi_d, &
628 : primitives, &
629 : buffer1, buffer2)
630 : #endif
631 : CASE (1)
632 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
633 : CALL contract_spsp(work, &
634 : nl_a, nl_b, nl_c, nl_d, &
635 : sphi_a, sphi_b, sphi_c, sphi_d, &
636 : primitives, &
637 6579337 : buffer1, buffer2)
638 : #else
639 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
640 : work, nl_a, nl_b, nl_c, nl_d, &
641 : sphi_a, &
642 : sphi_b, &
643 : sphi_c, &
644 : sphi_d, &
645 : primitives, &
646 : buffer1, buffer2)
647 : #endif
648 : CASE (2)
649 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
650 : CALL contract_spsd(work, &
651 : nl_a, nl_b, nl_c, nl_d, &
652 : sphi_a, sphi_b, sphi_c, sphi_d, &
653 : primitives, &
654 1492916 : buffer1, buffer2)
655 : #else
656 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
657 : work, nl_a, nl_b, nl_c, nl_d, &
658 : sphi_a, &
659 : sphi_b, &
660 : sphi_c, &
661 : sphi_d, &
662 : primitives, &
663 : buffer1, buffer2)
664 : #endif
665 : CASE (3)
666 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
667 : CALL contract_spsf(work, &
668 : nl_a, nl_b, nl_c, nl_d, &
669 : sphi_a, sphi_b, sphi_c, sphi_d, &
670 : primitives, &
671 : buffer1, buffer2)
672 : #else
673 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
674 : work, nl_a, nl_b, nl_c, nl_d, &
675 : sphi_a, &
676 : sphi_b, &
677 : sphi_c, &
678 : sphi_d, &
679 : primitives, &
680 19044 : buffer1, buffer2)
681 : #endif
682 : CASE (4)
683 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
684 : CALL contract_spsg(work, &
685 : nl_a, nl_b, nl_c, nl_d, &
686 : sphi_a, sphi_b, sphi_c, sphi_d, &
687 : primitives, &
688 : buffer1, buffer2)
689 : #else
690 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
691 : work, nl_a, nl_b, nl_c, nl_d, &
692 : sphi_a, &
693 : sphi_b, &
694 : sphi_c, &
695 : sphi_d, &
696 : primitives, &
697 0 : buffer1, buffer2)
698 : #endif
699 : CASE DEFAULT
700 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
701 : work, nl_a, nl_b, nl_c, nl_d, &
702 : sphi_a, &
703 : sphi_b, &
704 : sphi_c, &
705 : sphi_d, &
706 : primitives, &
707 24044342 : buffer1, buffer2)
708 : END SELECT
709 : CASE (1)
710 25290131 : SELECT CASE (n_d)
711 : CASE (0)
712 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
713 : CALL contract_spps(work, &
714 : nl_a, nl_b, nl_c, nl_d, &
715 : sphi_a, sphi_b, sphi_c, sphi_d, &
716 : primitives, &
717 6993377 : buffer1, buffer2)
718 : #else
719 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
720 : work, nl_a, nl_b, nl_c, nl_d, &
721 : sphi_a, &
722 : sphi_b, &
723 : sphi_c, &
724 : sphi_d, &
725 : primitives, &
726 : buffer1, buffer2)
727 : #endif
728 : CASE (1)
729 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
730 : CALL contract_sppp(work, &
731 : nl_a, nl_b, nl_c, nl_d, &
732 : sphi_a, sphi_b, sphi_c, sphi_d, &
733 : primitives, &
734 7434941 : buffer1, buffer2)
735 : #else
736 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
737 : work, nl_a, nl_b, nl_c, nl_d, &
738 : sphi_a, &
739 : sphi_b, &
740 : sphi_c, &
741 : sphi_d, &
742 : primitives, &
743 : buffer1, buffer2)
744 : #endif
745 : CASE (2)
746 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
747 : CALL contract_sppd(work, &
748 : nl_a, nl_b, nl_c, nl_d, &
749 : sphi_a, sphi_b, sphi_c, sphi_d, &
750 : primitives, &
751 853405 : buffer1, buffer2)
752 : #else
753 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
754 : work, nl_a, nl_b, nl_c, nl_d, &
755 : sphi_a, &
756 : sphi_b, &
757 : sphi_c, &
758 : sphi_d, &
759 : primitives, &
760 : buffer1, buffer2)
761 : #endif
762 : CASE (3)
763 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
764 : CALL contract_sppf(work, &
765 : nl_a, nl_b, nl_c, nl_d, &
766 : sphi_a, sphi_b, sphi_c, sphi_d, &
767 : primitives, &
768 : buffer1, buffer2)
769 : #else
770 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
771 : work, nl_a, nl_b, nl_c, nl_d, &
772 : sphi_a, &
773 : sphi_b, &
774 : sphi_c, &
775 : sphi_d, &
776 : primitives, &
777 7270 : buffer1, buffer2)
778 : #endif
779 : CASE (4)
780 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
781 : CALL contract_sppg(work, &
782 : nl_a, nl_b, nl_c, nl_d, &
783 : sphi_a, sphi_b, sphi_c, sphi_d, &
784 : primitives, &
785 : buffer1, buffer2)
786 : #else
787 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
788 : work, nl_a, nl_b, nl_c, nl_d, &
789 : sphi_a, &
790 : sphi_b, &
791 : sphi_c, &
792 : sphi_d, &
793 : primitives, &
794 0 : buffer1, buffer2)
795 : #endif
796 : CASE DEFAULT
797 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
798 : work, nl_a, nl_b, nl_c, nl_d, &
799 : sphi_a, &
800 : sphi_b, &
801 : sphi_c, &
802 : sphi_d, &
803 : primitives, &
804 15288993 : buffer1, buffer2)
805 : END SELECT
806 : CASE (2)
807 4794706 : SELECT CASE (n_d)
808 : CASE (0)
809 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
810 : CALL contract_spds(work, &
811 : nl_a, nl_b, nl_c, nl_d, &
812 : sphi_a, sphi_b, sphi_c, sphi_d, &
813 : primitives, &
814 1760088 : buffer1, buffer2)
815 : #else
816 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
817 : work, nl_a, nl_b, nl_c, nl_d, &
818 : sphi_a, &
819 : sphi_b, &
820 : sphi_c, &
821 : sphi_d, &
822 : primitives, &
823 : buffer1, buffer2)
824 : #endif
825 : CASE (1)
826 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
827 : CALL contract_spdp(work, &
828 : nl_a, nl_b, nl_c, nl_d, &
829 : sphi_a, sphi_b, sphi_c, sphi_d, &
830 : primitives, &
831 879320 : buffer1, buffer2)
832 : #else
833 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
834 : work, nl_a, nl_b, nl_c, nl_d, &
835 : sphi_a, &
836 : sphi_b, &
837 : sphi_c, &
838 : sphi_d, &
839 : primitives, &
840 : buffer1, buffer2)
841 : #endif
842 : CASE (2)
843 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
844 : CALL contract_spdd(work, &
845 : nl_a, nl_b, nl_c, nl_d, &
846 : sphi_a, sphi_b, sphi_c, sphi_d, &
847 : primitives, &
848 361169 : buffer1, buffer2)
849 : #else
850 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
851 : work, nl_a, nl_b, nl_c, nl_d, &
852 : sphi_a, &
853 : sphi_b, &
854 : sphi_c, &
855 : sphi_d, &
856 : primitives, &
857 : buffer1, buffer2)
858 : #endif
859 : CASE (3)
860 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
861 : CALL contract_spdf(work, &
862 : nl_a, nl_b, nl_c, nl_d, &
863 : sphi_a, sphi_b, sphi_c, sphi_d, &
864 : primitives, &
865 : buffer1, buffer2)
866 : #else
867 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
868 : work, nl_a, nl_b, nl_c, nl_d, &
869 : sphi_a, &
870 : sphi_b, &
871 : sphi_c, &
872 : sphi_d, &
873 : primitives, &
874 7184 : buffer1, buffer2)
875 : #endif
876 : CASE (4)
877 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
878 : CALL contract_spdg(work, &
879 : nl_a, nl_b, nl_c, nl_d, &
880 : sphi_a, sphi_b, sphi_c, sphi_d, &
881 : primitives, &
882 : buffer1, buffer2)
883 : #else
884 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
885 : work, nl_a, nl_b, nl_c, nl_d, &
886 : sphi_a, &
887 : sphi_b, &
888 : sphi_c, &
889 : sphi_d, &
890 : primitives, &
891 0 : buffer1, buffer2)
892 : #endif
893 : CASE DEFAULT
894 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
895 : work, nl_a, nl_b, nl_c, nl_d, &
896 : sphi_a, &
897 : sphi_b, &
898 : sphi_c, &
899 : sphi_d, &
900 : primitives, &
901 3007761 : buffer1, buffer2)
902 : END SELECT
903 : CASE (3)
904 41570 : SELECT CASE (n_d)
905 : CASE (0)
906 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
907 : CALL contract_spfs(work, &
908 : nl_a, nl_b, nl_c, nl_d, &
909 : sphi_a, sphi_b, sphi_c, sphi_d, &
910 : primitives, &
911 : buffer1, buffer2)
912 : #else
913 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
914 : work, nl_a, nl_b, nl_c, nl_d, &
915 : sphi_a, &
916 : sphi_b, &
917 : sphi_c, &
918 : sphi_d, &
919 : primitives, &
920 14713 : buffer1, buffer2)
921 : #endif
922 : CASE (1)
923 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
924 : CALL contract_spfp(work, &
925 : nl_a, nl_b, nl_c, nl_d, &
926 : sphi_a, sphi_b, sphi_c, sphi_d, &
927 : primitives, &
928 : buffer1, buffer2)
929 : #else
930 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
931 : work, nl_a, nl_b, nl_c, nl_d, &
932 : sphi_a, &
933 : sphi_b, &
934 : sphi_c, &
935 : sphi_d, &
936 : primitives, &
937 5708 : buffer1, buffer2)
938 : #endif
939 : CASE (2)
940 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
941 : CALL contract_spfd(work, &
942 : nl_a, nl_b, nl_c, nl_d, &
943 : sphi_a, sphi_b, sphi_c, sphi_d, &
944 : primitives, &
945 : buffer1, buffer2)
946 : #else
947 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
948 : work, nl_a, nl_b, nl_c, nl_d, &
949 : sphi_a, &
950 : sphi_b, &
951 : sphi_c, &
952 : sphi_d, &
953 : primitives, &
954 4464 : buffer1, buffer2)
955 : #endif
956 : CASE (3)
957 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
958 : CALL contract_spff(work, &
959 : nl_a, nl_b, nl_c, nl_d, &
960 : sphi_a, sphi_b, sphi_c, sphi_d, &
961 : primitives, &
962 : buffer1, buffer2)
963 : #else
964 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
965 : work, nl_a, nl_b, nl_c, nl_d, &
966 : sphi_a, &
967 : sphi_b, &
968 : sphi_c, &
969 : sphi_d, &
970 : primitives, &
971 1972 : buffer1, buffer2)
972 : #endif
973 : CASE (4)
974 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
975 : CALL contract_spfg(work, &
976 : nl_a, nl_b, nl_c, nl_d, &
977 : sphi_a, sphi_b, sphi_c, sphi_d, &
978 : primitives, &
979 : buffer1, buffer2)
980 : #else
981 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
982 : work, nl_a, nl_b, nl_c, nl_d, &
983 : sphi_a, &
984 : sphi_b, &
985 : sphi_c, &
986 : sphi_d, &
987 : primitives, &
988 0 : buffer1, buffer2)
989 : #endif
990 : CASE DEFAULT
991 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
992 : work, nl_a, nl_b, nl_c, nl_d, &
993 : sphi_a, &
994 : sphi_b, &
995 : sphi_c, &
996 : sphi_d, &
997 : primitives, &
998 26857 : buffer1, buffer2)
999 : END SELECT
1000 : CASE (4)
1001 0 : SELECT CASE (n_d)
1002 : CASE (0)
1003 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1004 : CALL contract_spgs(work, &
1005 : nl_a, nl_b, nl_c, nl_d, &
1006 : sphi_a, sphi_b, sphi_c, sphi_d, &
1007 : primitives, &
1008 : buffer1, buffer2)
1009 : #else
1010 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1011 : work, nl_a, nl_b, nl_c, nl_d, &
1012 : sphi_a, &
1013 : sphi_b, &
1014 : sphi_c, &
1015 : sphi_d, &
1016 : primitives, &
1017 0 : buffer1, buffer2)
1018 : #endif
1019 : CASE (1)
1020 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1021 : CALL contract_spgp(work, &
1022 : nl_a, nl_b, nl_c, nl_d, &
1023 : sphi_a, sphi_b, sphi_c, sphi_d, &
1024 : primitives, &
1025 : buffer1, buffer2)
1026 : #else
1027 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1028 : work, nl_a, nl_b, nl_c, nl_d, &
1029 : sphi_a, &
1030 : sphi_b, &
1031 : sphi_c, &
1032 : sphi_d, &
1033 : primitives, &
1034 0 : buffer1, buffer2)
1035 : #endif
1036 : CASE (2)
1037 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1038 : CALL contract_spgd(work, &
1039 : nl_a, nl_b, nl_c, nl_d, &
1040 : sphi_a, sphi_b, sphi_c, sphi_d, &
1041 : primitives, &
1042 : buffer1, buffer2)
1043 : #else
1044 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1045 : work, nl_a, nl_b, nl_c, nl_d, &
1046 : sphi_a, &
1047 : sphi_b, &
1048 : sphi_c, &
1049 : sphi_d, &
1050 : primitives, &
1051 0 : buffer1, buffer2)
1052 : #endif
1053 : CASE (3)
1054 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1055 : CALL contract_spgf(work, &
1056 : nl_a, nl_b, nl_c, nl_d, &
1057 : sphi_a, sphi_b, sphi_c, sphi_d, &
1058 : primitives, &
1059 : buffer1, buffer2)
1060 : #else
1061 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1062 : work, nl_a, nl_b, nl_c, nl_d, &
1063 : sphi_a, &
1064 : sphi_b, &
1065 : sphi_c, &
1066 : sphi_d, &
1067 : primitives, &
1068 0 : buffer1, buffer2)
1069 : #endif
1070 : CASE (4)
1071 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1072 : CALL contract_spgg(work, &
1073 : nl_a, nl_b, nl_c, nl_d, &
1074 : sphi_a, sphi_b, sphi_c, sphi_d, &
1075 : primitives, &
1076 : buffer1, buffer2)
1077 : #else
1078 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1079 : work, nl_a, nl_b, nl_c, nl_d, &
1080 : sphi_a, &
1081 : sphi_b, &
1082 : sphi_c, &
1083 : sphi_d, &
1084 : primitives, &
1085 0 : buffer1, buffer2)
1086 : #endif
1087 : CASE DEFAULT
1088 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1089 : work, nl_a, nl_b, nl_c, nl_d, &
1090 : sphi_a, &
1091 : sphi_b, &
1092 : sphi_c, &
1093 : sphi_d, &
1094 : primitives, &
1095 0 : buffer1, buffer2)
1096 : END SELECT
1097 : CASE DEFAULT
1098 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1099 : work, nl_a, nl_b, nl_c, nl_d, &
1100 : sphi_a, &
1101 : sphi_b, &
1102 : sphi_c, &
1103 : sphi_d, &
1104 : primitives, &
1105 42367953 : buffer1, buffer2)
1106 : END SELECT
1107 : CASE (2)
1108 9756180 : SELECT CASE (n_c)
1109 : CASE (0)
1110 7211025 : SELECT CASE (n_d)
1111 : CASE (0)
1112 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1113 : CALL contract_sdss(work, &
1114 : nl_a, nl_b, nl_c, nl_d, &
1115 : sphi_a, sphi_b, sphi_c, sphi_d, &
1116 : primitives, &
1117 1574076 : buffer1, buffer2)
1118 : #else
1119 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1120 : work, nl_a, nl_b, nl_c, nl_d, &
1121 : sphi_a, &
1122 : sphi_b, &
1123 : sphi_c, &
1124 : sphi_d, &
1125 : primitives, &
1126 : buffer1, buffer2)
1127 : #endif
1128 : CASE (1)
1129 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1130 : CALL contract_sdsp(work, &
1131 : nl_a, nl_b, nl_c, nl_d, &
1132 : sphi_a, sphi_b, sphi_c, sphi_d, &
1133 : primitives, &
1134 1355850 : buffer1, buffer2)
1135 : #else
1136 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1137 : work, nl_a, nl_b, nl_c, nl_d, &
1138 : sphi_a, &
1139 : sphi_b, &
1140 : sphi_c, &
1141 : sphi_d, &
1142 : primitives, &
1143 : buffer1, buffer2)
1144 : #endif
1145 : CASE (2)
1146 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1147 : CALL contract_sdsd(work, &
1148 : nl_a, nl_b, nl_c, nl_d, &
1149 : sphi_a, sphi_b, sphi_c, sphi_d, &
1150 : primitives, &
1151 431715 : buffer1, buffer2)
1152 : #else
1153 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1154 : work, nl_a, nl_b, nl_c, nl_d, &
1155 : sphi_a, &
1156 : sphi_b, &
1157 : sphi_c, &
1158 : sphi_d, &
1159 : primitives, &
1160 : buffer1, buffer2)
1161 : #endif
1162 : CASE (3)
1163 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1164 : CALL contract_sdsf(work, &
1165 : nl_a, nl_b, nl_c, nl_d, &
1166 : sphi_a, sphi_b, sphi_c, sphi_d, &
1167 : primitives, &
1168 : buffer1, buffer2)
1169 : #else
1170 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1171 : work, nl_a, nl_b, nl_c, nl_d, &
1172 : sphi_a, &
1173 : sphi_b, &
1174 : sphi_c, &
1175 : sphi_d, &
1176 : primitives, &
1177 3094 : buffer1, buffer2)
1178 : #endif
1179 : CASE (4)
1180 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1181 : CALL contract_sdsg(work, &
1182 : nl_a, nl_b, nl_c, nl_d, &
1183 : sphi_a, sphi_b, sphi_c, sphi_d, &
1184 : primitives, &
1185 : buffer1, buffer2)
1186 : #else
1187 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1188 : work, nl_a, nl_b, nl_c, nl_d, &
1189 : sphi_a, &
1190 : sphi_b, &
1191 : sphi_c, &
1192 : sphi_d, &
1193 : primitives, &
1194 0 : buffer1, buffer2)
1195 : #endif
1196 : CASE DEFAULT
1197 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1198 : work, nl_a, nl_b, nl_c, nl_d, &
1199 : sphi_a, &
1200 : sphi_b, &
1201 : sphi_c, &
1202 : sphi_d, &
1203 : primitives, &
1204 3364735 : buffer1, buffer2)
1205 : END SELECT
1206 : CASE (1)
1207 4153482 : SELECT CASE (n_d)
1208 : CASE (0)
1209 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1210 : CALL contract_sdps(work, &
1211 : nl_a, nl_b, nl_c, nl_d, &
1212 : sphi_a, sphi_b, sphi_c, sphi_d, &
1213 : primitives, &
1214 1199562 : buffer1, buffer2)
1215 : #else
1216 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1217 : work, nl_a, nl_b, nl_c, nl_d, &
1218 : sphi_a, &
1219 : sphi_b, &
1220 : sphi_c, &
1221 : sphi_d, &
1222 : primitives, &
1223 : buffer1, buffer2)
1224 : #endif
1225 : CASE (1)
1226 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1227 : CALL contract_sdpp(work, &
1228 : nl_a, nl_b, nl_c, nl_d, &
1229 : sphi_a, sphi_b, sphi_c, sphi_d, &
1230 : primitives, &
1231 699808 : buffer1, buffer2)
1232 : #else
1233 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1234 : work, nl_a, nl_b, nl_c, nl_d, &
1235 : sphi_a, &
1236 : sphi_b, &
1237 : sphi_c, &
1238 : sphi_d, &
1239 : primitives, &
1240 : buffer1, buffer2)
1241 : #endif
1242 : CASE (2)
1243 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1244 : CALL contract_sdpd(work, &
1245 : nl_a, nl_b, nl_c, nl_d, &
1246 : sphi_a, sphi_b, sphi_c, sphi_d, &
1247 : primitives, &
1248 366344 : buffer1, buffer2)
1249 : #else
1250 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1251 : work, nl_a, nl_b, nl_c, nl_d, &
1252 : sphi_a, &
1253 : sphi_b, &
1254 : sphi_c, &
1255 : sphi_d, &
1256 : primitives, &
1257 : buffer1, buffer2)
1258 : #endif
1259 : CASE (3)
1260 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1261 : CALL contract_sdpf(work, &
1262 : nl_a, nl_b, nl_c, nl_d, &
1263 : sphi_a, sphi_b, sphi_c, sphi_d, &
1264 : primitives, &
1265 : buffer1, buffer2)
1266 : #else
1267 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1268 : work, nl_a, nl_b, nl_c, nl_d, &
1269 : sphi_a, &
1270 : sphi_b, &
1271 : sphi_c, &
1272 : sphi_d, &
1273 : primitives, &
1274 6500 : buffer1, buffer2)
1275 : #endif
1276 : CASE (4)
1277 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1278 : CALL contract_sdpg(work, &
1279 : nl_a, nl_b, nl_c, nl_d, &
1280 : sphi_a, sphi_b, sphi_c, sphi_d, &
1281 : primitives, &
1282 : buffer1, buffer2)
1283 : #else
1284 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1285 : work, nl_a, nl_b, nl_c, nl_d, &
1286 : sphi_a, &
1287 : sphi_b, &
1288 : sphi_c, &
1289 : sphi_d, &
1290 : primitives, &
1291 0 : buffer1, buffer2)
1292 : #endif
1293 : CASE DEFAULT
1294 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1295 : work, nl_a, nl_b, nl_c, nl_d, &
1296 : sphi_a, &
1297 : sphi_b, &
1298 : sphi_c, &
1299 : sphi_d, &
1300 : primitives, &
1301 2272214 : buffer1, buffer2)
1302 : END SELECT
1303 : CASE (2)
1304 958529 : SELECT CASE (n_d)
1305 : CASE (0)
1306 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1307 : CALL contract_sdds(work, &
1308 : nl_a, nl_b, nl_c, nl_d, &
1309 : sphi_a, sphi_b, sphi_c, sphi_d, &
1310 : primitives, &
1311 268310 : buffer1, buffer2)
1312 : #else
1313 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1314 : work, nl_a, nl_b, nl_c, nl_d, &
1315 : sphi_a, &
1316 : sphi_b, &
1317 : sphi_c, &
1318 : sphi_d, &
1319 : primitives, &
1320 : buffer1, buffer2)
1321 : #endif
1322 : CASE (1)
1323 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1324 : CALL contract_sddp(work, &
1325 : nl_a, nl_b, nl_c, nl_d, &
1326 : sphi_a, sphi_b, sphi_c, sphi_d, &
1327 : primitives, &
1328 280547 : buffer1, buffer2)
1329 : #else
1330 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1331 : work, nl_a, nl_b, nl_c, nl_d, &
1332 : sphi_a, &
1333 : sphi_b, &
1334 : sphi_c, &
1335 : sphi_d, &
1336 : primitives, &
1337 : buffer1, buffer2)
1338 : #endif
1339 : CASE (2)
1340 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
1341 : CALL contract_sddd(work, &
1342 : nl_a, nl_b, nl_c, nl_d, &
1343 : sphi_a, sphi_b, sphi_c, sphi_d, &
1344 : primitives, &
1345 131344 : buffer1, buffer2)
1346 : #else
1347 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1348 : work, nl_a, nl_b, nl_c, nl_d, &
1349 : sphi_a, &
1350 : sphi_b, &
1351 : sphi_c, &
1352 : sphi_d, &
1353 : primitives, &
1354 : buffer1, buffer2)
1355 : #endif
1356 : CASE (3)
1357 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1358 : CALL contract_sddf(work, &
1359 : nl_a, nl_b, nl_c, nl_d, &
1360 : sphi_a, sphi_b, sphi_c, sphi_d, &
1361 : primitives, &
1362 : buffer1, buffer2)
1363 : #else
1364 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1365 : work, nl_a, nl_b, nl_c, nl_d, &
1366 : sphi_a, &
1367 : sphi_b, &
1368 : sphi_c, &
1369 : sphi_d, &
1370 : primitives, &
1371 1505 : buffer1, buffer2)
1372 : #endif
1373 : CASE (4)
1374 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1375 : CALL contract_sddg(work, &
1376 : nl_a, nl_b, nl_c, nl_d, &
1377 : sphi_a, sphi_b, sphi_c, sphi_d, &
1378 : primitives, &
1379 : buffer1, buffer2)
1380 : #else
1381 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1382 : work, nl_a, nl_b, nl_c, nl_d, &
1383 : sphi_a, &
1384 : sphi_b, &
1385 : sphi_c, &
1386 : sphi_d, &
1387 : primitives, &
1388 0 : buffer1, buffer2)
1389 : #endif
1390 : CASE DEFAULT
1391 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1392 : work, nl_a, nl_b, nl_c, nl_d, &
1393 : sphi_a, &
1394 : sphi_b, &
1395 : sphi_c, &
1396 : sphi_d, &
1397 : primitives, &
1398 681706 : buffer1, buffer2)
1399 : END SELECT
1400 : CASE (3)
1401 10506 : SELECT CASE (n_d)
1402 : CASE (0)
1403 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1404 : CALL contract_sdfs(work, &
1405 : nl_a, nl_b, nl_c, nl_d, &
1406 : sphi_a, sphi_b, sphi_c, sphi_d, &
1407 : primitives, &
1408 : buffer1, buffer2)
1409 : #else
1410 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1411 : work, nl_a, nl_b, nl_c, nl_d, &
1412 : sphi_a, &
1413 : sphi_b, &
1414 : sphi_c, &
1415 : sphi_d, &
1416 : primitives, &
1417 1993 : buffer1, buffer2)
1418 : #endif
1419 : CASE (1)
1420 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1421 : CALL contract_sdfp(work, &
1422 : nl_a, nl_b, nl_c, nl_d, &
1423 : sphi_a, sphi_b, sphi_c, sphi_d, &
1424 : primitives, &
1425 : buffer1, buffer2)
1426 : #else
1427 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1428 : work, nl_a, nl_b, nl_c, nl_d, &
1429 : sphi_a, &
1430 : sphi_b, &
1431 : sphi_c, &
1432 : sphi_d, &
1433 : primitives, &
1434 3692 : buffer1, buffer2)
1435 : #endif
1436 : CASE (2)
1437 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1438 : CALL contract_sdfd(work, &
1439 : nl_a, nl_b, nl_c, nl_d, &
1440 : sphi_a, sphi_b, sphi_c, sphi_d, &
1441 : primitives, &
1442 : buffer1, buffer2)
1443 : #else
1444 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1445 : work, nl_a, nl_b, nl_c, nl_d, &
1446 : sphi_a, &
1447 : sphi_b, &
1448 : sphi_c, &
1449 : sphi_d, &
1450 : primitives, &
1451 1002 : buffer1, buffer2)
1452 : #endif
1453 : CASE (3)
1454 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1455 : CALL contract_sdff(work, &
1456 : nl_a, nl_b, nl_c, nl_d, &
1457 : sphi_a, sphi_b, sphi_c, sphi_d, &
1458 : primitives, &
1459 : buffer1, buffer2)
1460 : #else
1461 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1462 : work, nl_a, nl_b, nl_c, nl_d, &
1463 : sphi_a, &
1464 : sphi_b, &
1465 : sphi_c, &
1466 : sphi_d, &
1467 : primitives, &
1468 1826 : buffer1, buffer2)
1469 : #endif
1470 : CASE (4)
1471 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1472 : CALL contract_sdfg(work, &
1473 : nl_a, nl_b, nl_c, nl_d, &
1474 : sphi_a, sphi_b, sphi_c, sphi_d, &
1475 : primitives, &
1476 : buffer1, buffer2)
1477 : #else
1478 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1479 : work, nl_a, nl_b, nl_c, nl_d, &
1480 : sphi_a, &
1481 : sphi_b, &
1482 : sphi_c, &
1483 : sphi_d, &
1484 : primitives, &
1485 0 : buffer1, buffer2)
1486 : #endif
1487 : CASE DEFAULT
1488 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1489 : work, nl_a, nl_b, nl_c, nl_d, &
1490 : sphi_a, &
1491 : sphi_b, &
1492 : sphi_c, &
1493 : sphi_d, &
1494 : primitives, &
1495 8513 : buffer1, buffer2)
1496 : END SELECT
1497 : CASE (4)
1498 0 : SELECT CASE (n_d)
1499 : CASE (0)
1500 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1501 : CALL contract_sdgs(work, &
1502 : nl_a, nl_b, nl_c, nl_d, &
1503 : sphi_a, sphi_b, sphi_c, sphi_d, &
1504 : primitives, &
1505 : buffer1, buffer2)
1506 : #else
1507 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1508 : work, nl_a, nl_b, nl_c, nl_d, &
1509 : sphi_a, &
1510 : sphi_b, &
1511 : sphi_c, &
1512 : sphi_d, &
1513 : primitives, &
1514 0 : buffer1, buffer2)
1515 : #endif
1516 : CASE (1)
1517 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1518 : CALL contract_sdgp(work, &
1519 : nl_a, nl_b, nl_c, nl_d, &
1520 : sphi_a, sphi_b, sphi_c, sphi_d, &
1521 : primitives, &
1522 : buffer1, buffer2)
1523 : #else
1524 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1525 : work, nl_a, nl_b, nl_c, nl_d, &
1526 : sphi_a, &
1527 : sphi_b, &
1528 : sphi_c, &
1529 : sphi_d, &
1530 : primitives, &
1531 0 : buffer1, buffer2)
1532 : #endif
1533 : CASE (2)
1534 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1535 : CALL contract_sdgd(work, &
1536 : nl_a, nl_b, nl_c, nl_d, &
1537 : sphi_a, sphi_b, sphi_c, sphi_d, &
1538 : primitives, &
1539 : buffer1, buffer2)
1540 : #else
1541 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1542 : work, nl_a, nl_b, nl_c, nl_d, &
1543 : sphi_a, &
1544 : sphi_b, &
1545 : sphi_c, &
1546 : sphi_d, &
1547 : primitives, &
1548 0 : buffer1, buffer2)
1549 : #endif
1550 : CASE (3)
1551 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1552 : CALL contract_sdgf(work, &
1553 : nl_a, nl_b, nl_c, nl_d, &
1554 : sphi_a, sphi_b, sphi_c, sphi_d, &
1555 : primitives, &
1556 : buffer1, buffer2)
1557 : #else
1558 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1559 : work, nl_a, nl_b, nl_c, nl_d, &
1560 : sphi_a, &
1561 : sphi_b, &
1562 : sphi_c, &
1563 : sphi_d, &
1564 : primitives, &
1565 0 : buffer1, buffer2)
1566 : #endif
1567 : CASE (4)
1568 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1569 : CALL contract_sdgg(work, &
1570 : nl_a, nl_b, nl_c, nl_d, &
1571 : sphi_a, sphi_b, sphi_c, sphi_d, &
1572 : primitives, &
1573 : buffer1, buffer2)
1574 : #else
1575 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1576 : work, nl_a, nl_b, nl_c, nl_d, &
1577 : sphi_a, &
1578 : sphi_b, &
1579 : sphi_c, &
1580 : sphi_d, &
1581 : primitives, &
1582 0 : buffer1, buffer2)
1583 : #endif
1584 : CASE DEFAULT
1585 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1586 : work, nl_a, nl_b, nl_c, nl_d, &
1587 : sphi_a, &
1588 : sphi_b, &
1589 : sphi_c, &
1590 : sphi_d, &
1591 : primitives, &
1592 0 : buffer1, buffer2)
1593 : END SELECT
1594 : CASE DEFAULT
1595 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1596 : work, nl_a, nl_b, nl_c, nl_d, &
1597 : sphi_a, &
1598 : sphi_b, &
1599 : sphi_c, &
1600 : sphi_d, &
1601 : primitives, &
1602 6327168 : buffer1, buffer2)
1603 : END SELECT
1604 : CASE (3)
1605 97265 : SELECT CASE (n_c)
1606 : CASE (0)
1607 62818 : SELECT CASE (n_d)
1608 : CASE (0)
1609 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1610 : CALL contract_sfss(work, &
1611 : nl_a, nl_b, nl_c, nl_d, &
1612 : sphi_a, sphi_b, sphi_c, sphi_d, &
1613 : primitives, &
1614 : buffer1, buffer2)
1615 : #else
1616 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1617 : work, nl_a, nl_b, nl_c, nl_d, &
1618 : sphi_a, &
1619 : sphi_b, &
1620 : sphi_c, &
1621 : sphi_d, &
1622 : primitives, &
1623 9536 : buffer1, buffer2)
1624 : #endif
1625 : CASE (1)
1626 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1627 : CALL contract_sfsp(work, &
1628 : nl_a, nl_b, nl_c, nl_d, &
1629 : sphi_a, sphi_b, sphi_c, sphi_d, &
1630 : primitives, &
1631 : buffer1, buffer2)
1632 : #else
1633 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1634 : work, nl_a, nl_b, nl_c, nl_d, &
1635 : sphi_a, &
1636 : sphi_b, &
1637 : sphi_c, &
1638 : sphi_d, &
1639 : primitives, &
1640 16667 : buffer1, buffer2)
1641 : #endif
1642 : CASE (2)
1643 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1644 : CALL contract_sfsd(work, &
1645 : nl_a, nl_b, nl_c, nl_d, &
1646 : sphi_a, sphi_b, sphi_c, sphi_d, &
1647 : primitives, &
1648 : buffer1, buffer2)
1649 : #else
1650 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1651 : work, nl_a, nl_b, nl_c, nl_d, &
1652 : sphi_a, &
1653 : sphi_b, &
1654 : sphi_c, &
1655 : sphi_d, &
1656 : primitives, &
1657 2841 : buffer1, buffer2)
1658 : #endif
1659 : CASE (3)
1660 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1661 : CALL contract_sfsf(work, &
1662 : nl_a, nl_b, nl_c, nl_d, &
1663 : sphi_a, sphi_b, sphi_c, sphi_d, &
1664 : primitives, &
1665 : buffer1, buffer2)
1666 : #else
1667 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1668 : work, nl_a, nl_b, nl_c, nl_d, &
1669 : sphi_a, &
1670 : sphi_b, &
1671 : sphi_c, &
1672 : sphi_d, &
1673 : primitives, &
1674 3944 : buffer1, buffer2)
1675 : #endif
1676 : CASE (4)
1677 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1678 : CALL contract_sfsg(work, &
1679 : nl_a, nl_b, nl_c, nl_d, &
1680 : sphi_a, sphi_b, sphi_c, sphi_d, &
1681 : primitives, &
1682 : buffer1, buffer2)
1683 : #else
1684 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1685 : work, nl_a, nl_b, nl_c, nl_d, &
1686 : sphi_a, &
1687 : sphi_b, &
1688 : sphi_c, &
1689 : sphi_d, &
1690 : primitives, &
1691 0 : buffer1, buffer2)
1692 : #endif
1693 : CASE DEFAULT
1694 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1695 : work, nl_a, nl_b, nl_c, nl_d, &
1696 : sphi_a, &
1697 : sphi_b, &
1698 : sphi_c, &
1699 : sphi_d, &
1700 : primitives, &
1701 32988 : buffer1, buffer2)
1702 : END SELECT
1703 : CASE (1)
1704 37249 : SELECT CASE (n_d)
1705 : CASE (0)
1706 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1707 : CALL contract_sfps(work, &
1708 : nl_a, nl_b, nl_c, nl_d, &
1709 : sphi_a, sphi_b, sphi_c, sphi_d, &
1710 : primitives, &
1711 : buffer1, buffer2)
1712 : #else
1713 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1714 : work, nl_a, nl_b, nl_c, nl_d, &
1715 : sphi_a, &
1716 : sphi_b, &
1717 : sphi_c, &
1718 : sphi_d, &
1719 : primitives, &
1720 9789 : buffer1, buffer2)
1721 : #endif
1722 : CASE (1)
1723 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1724 : CALL contract_sfpp(work, &
1725 : nl_a, nl_b, nl_c, nl_d, &
1726 : sphi_a, sphi_b, sphi_c, sphi_d, &
1727 : primitives, &
1728 : buffer1, buffer2)
1729 : #else
1730 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1731 : work, nl_a, nl_b, nl_c, nl_d, &
1732 : sphi_a, &
1733 : sphi_b, &
1734 : sphi_c, &
1735 : sphi_d, &
1736 : primitives, &
1737 3738 : buffer1, buffer2)
1738 : #endif
1739 : CASE (2)
1740 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1741 : CALL contract_sfpd(work, &
1742 : nl_a, nl_b, nl_c, nl_d, &
1743 : sphi_a, sphi_b, sphi_c, sphi_d, &
1744 : primitives, &
1745 : buffer1, buffer2)
1746 : #else
1747 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1748 : work, nl_a, nl_b, nl_c, nl_d, &
1749 : sphi_a, &
1750 : sphi_b, &
1751 : sphi_c, &
1752 : sphi_d, &
1753 : primitives, &
1754 5344 : buffer1, buffer2)
1755 : #endif
1756 : CASE (3)
1757 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1758 : CALL contract_sfpf(work, &
1759 : nl_a, nl_b, nl_c, nl_d, &
1760 : sphi_a, sphi_b, sphi_c, sphi_d, &
1761 : primitives, &
1762 : buffer1, buffer2)
1763 : #else
1764 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1765 : work, nl_a, nl_b, nl_c, nl_d, &
1766 : sphi_a, &
1767 : sphi_b, &
1768 : sphi_c, &
1769 : sphi_d, &
1770 : primitives, &
1771 1423 : buffer1, buffer2)
1772 : #endif
1773 : CASE (4)
1774 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1775 : CALL contract_sfpg(work, &
1776 : nl_a, nl_b, nl_c, nl_d, &
1777 : sphi_a, sphi_b, sphi_c, sphi_d, &
1778 : primitives, &
1779 : buffer1, buffer2)
1780 : #else
1781 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1782 : work, nl_a, nl_b, nl_c, nl_d, &
1783 : sphi_a, &
1784 : sphi_b, &
1785 : sphi_c, &
1786 : sphi_d, &
1787 : primitives, &
1788 0 : buffer1, buffer2)
1789 : #endif
1790 : CASE DEFAULT
1791 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1792 : work, nl_a, nl_b, nl_c, nl_d, &
1793 : sphi_a, &
1794 : sphi_b, &
1795 : sphi_c, &
1796 : sphi_d, &
1797 : primitives, &
1798 20294 : buffer1, buffer2)
1799 : END SELECT
1800 : CASE (2)
1801 12482 : SELECT CASE (n_d)
1802 : CASE (0)
1803 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1804 : CALL contract_sfds(work, &
1805 : nl_a, nl_b, nl_c, nl_d, &
1806 : sphi_a, sphi_b, sphi_c, sphi_d, &
1807 : primitives, &
1808 : buffer1, buffer2)
1809 : #else
1810 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1811 : work, nl_a, nl_b, nl_c, nl_d, &
1812 : sphi_a, &
1813 : sphi_b, &
1814 : sphi_c, &
1815 : sphi_d, &
1816 : primitives, &
1817 1487 : buffer1, buffer2)
1818 : #endif
1819 : CASE (1)
1820 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1821 : CALL contract_sfdp(work, &
1822 : nl_a, nl_b, nl_c, nl_d, &
1823 : sphi_a, sphi_b, sphi_c, sphi_d, &
1824 : primitives, &
1825 : buffer1, buffer2)
1826 : #else
1827 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1828 : work, nl_a, nl_b, nl_c, nl_d, &
1829 : sphi_a, &
1830 : sphi_b, &
1831 : sphi_c, &
1832 : sphi_d, &
1833 : primitives, &
1834 2991 : buffer1, buffer2)
1835 : #endif
1836 : CASE (2)
1837 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1838 : CALL contract_sfdd(work, &
1839 : nl_a, nl_b, nl_c, nl_d, &
1840 : sphi_a, sphi_b, sphi_c, sphi_d, &
1841 : primitives, &
1842 : buffer1, buffer2)
1843 : #else
1844 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1845 : work, nl_a, nl_b, nl_c, nl_d, &
1846 : sphi_a, &
1847 : sphi_b, &
1848 : sphi_c, &
1849 : sphi_d, &
1850 : primitives, &
1851 1109 : buffer1, buffer2)
1852 : #endif
1853 : CASE (3)
1854 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1855 : CALL contract_sfdf(work, &
1856 : nl_a, nl_b, nl_c, nl_d, &
1857 : sphi_a, sphi_b, sphi_c, sphi_d, &
1858 : primitives, &
1859 : buffer1, buffer2)
1860 : #else
1861 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1862 : work, nl_a, nl_b, nl_c, nl_d, &
1863 : sphi_a, &
1864 : sphi_b, &
1865 : sphi_c, &
1866 : sphi_d, &
1867 : primitives, &
1868 1579 : buffer1, buffer2)
1869 : #endif
1870 : CASE (4)
1871 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1872 : CALL contract_sfdg(work, &
1873 : nl_a, nl_b, nl_c, nl_d, &
1874 : sphi_a, sphi_b, sphi_c, sphi_d, &
1875 : primitives, &
1876 : buffer1, buffer2)
1877 : #else
1878 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1879 : work, nl_a, nl_b, nl_c, nl_d, &
1880 : sphi_a, &
1881 : sphi_b, &
1882 : sphi_c, &
1883 : sphi_d, &
1884 : primitives, &
1885 0 : buffer1, buffer2)
1886 : #endif
1887 : CASE DEFAULT
1888 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1889 : work, nl_a, nl_b, nl_c, nl_d, &
1890 : sphi_a, &
1891 : sphi_b, &
1892 : sphi_c, &
1893 : sphi_d, &
1894 : primitives, &
1895 7166 : buffer1, buffer2)
1896 : END SELECT
1897 : CASE (3)
1898 5622 : SELECT CASE (n_d)
1899 : CASE (0)
1900 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1901 : CALL contract_sffs(work, &
1902 : nl_a, nl_b, nl_c, nl_d, &
1903 : sphi_a, sphi_b, sphi_c, sphi_d, &
1904 : primitives, &
1905 : buffer1, buffer2)
1906 : #else
1907 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1908 : work, nl_a, nl_b, nl_c, nl_d, &
1909 : sphi_a, &
1910 : sphi_b, &
1911 : sphi_c, &
1912 : sphi_d, &
1913 : primitives, &
1914 1793 : buffer1, buffer2)
1915 : #endif
1916 : CASE (1)
1917 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1918 : CALL contract_sffp(work, &
1919 : nl_a, nl_b, nl_c, nl_d, &
1920 : sphi_a, sphi_b, sphi_c, sphi_d, &
1921 : primitives, &
1922 : buffer1, buffer2)
1923 : #else
1924 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1925 : work, nl_a, nl_b, nl_c, nl_d, &
1926 : sphi_a, &
1927 : sphi_b, &
1928 : sphi_c, &
1929 : sphi_d, &
1930 : primitives, &
1931 705 : buffer1, buffer2)
1932 : #endif
1933 : CASE (2)
1934 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1935 : CALL contract_sffd(work, &
1936 : nl_a, nl_b, nl_c, nl_d, &
1937 : sphi_a, sphi_b, sphi_c, sphi_d, &
1938 : primitives, &
1939 : buffer1, buffer2)
1940 : #else
1941 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1942 : work, nl_a, nl_b, nl_c, nl_d, &
1943 : sphi_a, &
1944 : sphi_b, &
1945 : sphi_c, &
1946 : sphi_d, &
1947 : primitives, &
1948 847 : buffer1, buffer2)
1949 : #endif
1950 : CASE (3)
1951 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
1952 : CALL contract_sfff(work, &
1953 : nl_a, nl_b, nl_c, nl_d, &
1954 : sphi_a, sphi_b, sphi_c, sphi_d, &
1955 : primitives, &
1956 : buffer1, buffer2)
1957 : #else
1958 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1959 : work, nl_a, nl_b, nl_c, nl_d, &
1960 : sphi_a, &
1961 : sphi_b, &
1962 : sphi_c, &
1963 : sphi_d, &
1964 : primitives, &
1965 484 : buffer1, buffer2)
1966 : #endif
1967 : CASE (4)
1968 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1969 : CALL contract_sffg(work, &
1970 : nl_a, nl_b, nl_c, nl_d, &
1971 : sphi_a, sphi_b, sphi_c, sphi_d, &
1972 : primitives, &
1973 : buffer1, buffer2)
1974 : #else
1975 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1976 : work, nl_a, nl_b, nl_c, nl_d, &
1977 : sphi_a, &
1978 : sphi_b, &
1979 : sphi_c, &
1980 : sphi_d, &
1981 : primitives, &
1982 0 : buffer1, buffer2)
1983 : #endif
1984 : CASE DEFAULT
1985 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1986 : work, nl_a, nl_b, nl_c, nl_d, &
1987 : sphi_a, &
1988 : sphi_b, &
1989 : sphi_c, &
1990 : sphi_d, &
1991 : primitives, &
1992 3829 : buffer1, buffer2)
1993 : END SELECT
1994 : CASE (4)
1995 0 : SELECT CASE (n_d)
1996 : CASE (0)
1997 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
1998 : CALL contract_sfgs(work, &
1999 : nl_a, nl_b, nl_c, nl_d, &
2000 : sphi_a, sphi_b, sphi_c, sphi_d, &
2001 : primitives, &
2002 : buffer1, buffer2)
2003 : #else
2004 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2005 : work, nl_a, nl_b, nl_c, nl_d, &
2006 : sphi_a, &
2007 : sphi_b, &
2008 : sphi_c, &
2009 : sphi_d, &
2010 : primitives, &
2011 0 : buffer1, buffer2)
2012 : #endif
2013 : CASE (1)
2014 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2015 : CALL contract_sfgp(work, &
2016 : nl_a, nl_b, nl_c, nl_d, &
2017 : sphi_a, sphi_b, sphi_c, sphi_d, &
2018 : primitives, &
2019 : buffer1, buffer2)
2020 : #else
2021 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2022 : work, nl_a, nl_b, nl_c, nl_d, &
2023 : sphi_a, &
2024 : sphi_b, &
2025 : sphi_c, &
2026 : sphi_d, &
2027 : primitives, &
2028 0 : buffer1, buffer2)
2029 : #endif
2030 : CASE (2)
2031 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2032 : CALL contract_sfgd(work, &
2033 : nl_a, nl_b, nl_c, nl_d, &
2034 : sphi_a, sphi_b, sphi_c, sphi_d, &
2035 : primitives, &
2036 : buffer1, buffer2)
2037 : #else
2038 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2039 : work, nl_a, nl_b, nl_c, nl_d, &
2040 : sphi_a, &
2041 : sphi_b, &
2042 : sphi_c, &
2043 : sphi_d, &
2044 : primitives, &
2045 0 : buffer1, buffer2)
2046 : #endif
2047 : CASE (3)
2048 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2049 : CALL contract_sfgf(work, &
2050 : nl_a, nl_b, nl_c, nl_d, &
2051 : sphi_a, sphi_b, sphi_c, sphi_d, &
2052 : primitives, &
2053 : buffer1, buffer2)
2054 : #else
2055 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2056 : work, nl_a, nl_b, nl_c, nl_d, &
2057 : sphi_a, &
2058 : sphi_b, &
2059 : sphi_c, &
2060 : sphi_d, &
2061 : primitives, &
2062 0 : buffer1, buffer2)
2063 : #endif
2064 : CASE (4)
2065 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2066 : CALL contract_sfgg(work, &
2067 : nl_a, nl_b, nl_c, nl_d, &
2068 : sphi_a, sphi_b, sphi_c, sphi_d, &
2069 : primitives, &
2070 : buffer1, buffer2)
2071 : #else
2072 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2073 : work, nl_a, nl_b, nl_c, nl_d, &
2074 : sphi_a, &
2075 : sphi_b, &
2076 : sphi_c, &
2077 : sphi_d, &
2078 : primitives, &
2079 0 : buffer1, buffer2)
2080 : #endif
2081 : CASE DEFAULT
2082 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2083 : work, nl_a, nl_b, nl_c, nl_d, &
2084 : sphi_a, &
2085 : sphi_b, &
2086 : sphi_c, &
2087 : sphi_d, &
2088 : primitives, &
2089 0 : buffer1, buffer2)
2090 : END SELECT
2091 : CASE DEFAULT
2092 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2093 : work, nl_a, nl_b, nl_c, nl_d, &
2094 : sphi_a, &
2095 : sphi_b, &
2096 : sphi_c, &
2097 : sphi_d, &
2098 : primitives, &
2099 64277 : buffer1, buffer2)
2100 : END SELECT
2101 : CASE (4)
2102 0 : SELECT CASE (n_c)
2103 : CASE (0)
2104 0 : SELECT CASE (n_d)
2105 : CASE (0)
2106 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2107 : CALL contract_sgss(work, &
2108 : nl_a, nl_b, nl_c, nl_d, &
2109 : sphi_a, sphi_b, sphi_c, sphi_d, &
2110 : primitives, &
2111 : buffer1, buffer2)
2112 : #else
2113 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2114 : work, nl_a, nl_b, nl_c, nl_d, &
2115 : sphi_a, &
2116 : sphi_b, &
2117 : sphi_c, &
2118 : sphi_d, &
2119 : primitives, &
2120 0 : buffer1, buffer2)
2121 : #endif
2122 : CASE (1)
2123 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2124 : CALL contract_sgsp(work, &
2125 : nl_a, nl_b, nl_c, nl_d, &
2126 : sphi_a, sphi_b, sphi_c, sphi_d, &
2127 : primitives, &
2128 : buffer1, buffer2)
2129 : #else
2130 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2131 : work, nl_a, nl_b, nl_c, nl_d, &
2132 : sphi_a, &
2133 : sphi_b, &
2134 : sphi_c, &
2135 : sphi_d, &
2136 : primitives, &
2137 0 : buffer1, buffer2)
2138 : #endif
2139 : CASE (2)
2140 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2141 : CALL contract_sgsd(work, &
2142 : nl_a, nl_b, nl_c, nl_d, &
2143 : sphi_a, sphi_b, sphi_c, sphi_d, &
2144 : primitives, &
2145 : buffer1, buffer2)
2146 : #else
2147 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2148 : work, nl_a, nl_b, nl_c, nl_d, &
2149 : sphi_a, &
2150 : sphi_b, &
2151 : sphi_c, &
2152 : sphi_d, &
2153 : primitives, &
2154 0 : buffer1, buffer2)
2155 : #endif
2156 : CASE (3)
2157 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2158 : CALL contract_sgsf(work, &
2159 : nl_a, nl_b, nl_c, nl_d, &
2160 : sphi_a, sphi_b, sphi_c, sphi_d, &
2161 : primitives, &
2162 : buffer1, buffer2)
2163 : #else
2164 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2165 : work, nl_a, nl_b, nl_c, nl_d, &
2166 : sphi_a, &
2167 : sphi_b, &
2168 : sphi_c, &
2169 : sphi_d, &
2170 : primitives, &
2171 0 : buffer1, buffer2)
2172 : #endif
2173 : CASE (4)
2174 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2175 : CALL contract_sgsg(work, &
2176 : nl_a, nl_b, nl_c, nl_d, &
2177 : sphi_a, sphi_b, sphi_c, sphi_d, &
2178 : primitives, &
2179 : buffer1, buffer2)
2180 : #else
2181 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2182 : work, nl_a, nl_b, nl_c, nl_d, &
2183 : sphi_a, &
2184 : sphi_b, &
2185 : sphi_c, &
2186 : sphi_d, &
2187 : primitives, &
2188 0 : buffer1, buffer2)
2189 : #endif
2190 : CASE DEFAULT
2191 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2192 : work, nl_a, nl_b, nl_c, nl_d, &
2193 : sphi_a, &
2194 : sphi_b, &
2195 : sphi_c, &
2196 : sphi_d, &
2197 : primitives, &
2198 0 : buffer1, buffer2)
2199 : END SELECT
2200 : CASE (1)
2201 0 : SELECT CASE (n_d)
2202 : CASE (0)
2203 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2204 : CALL contract_sgps(work, &
2205 : nl_a, nl_b, nl_c, nl_d, &
2206 : sphi_a, sphi_b, sphi_c, sphi_d, &
2207 : primitives, &
2208 : buffer1, buffer2)
2209 : #else
2210 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2211 : work, nl_a, nl_b, nl_c, nl_d, &
2212 : sphi_a, &
2213 : sphi_b, &
2214 : sphi_c, &
2215 : sphi_d, &
2216 : primitives, &
2217 0 : buffer1, buffer2)
2218 : #endif
2219 : CASE (1)
2220 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2221 : CALL contract_sgpp(work, &
2222 : nl_a, nl_b, nl_c, nl_d, &
2223 : sphi_a, sphi_b, sphi_c, sphi_d, &
2224 : primitives, &
2225 : buffer1, buffer2)
2226 : #else
2227 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2228 : work, nl_a, nl_b, nl_c, nl_d, &
2229 : sphi_a, &
2230 : sphi_b, &
2231 : sphi_c, &
2232 : sphi_d, &
2233 : primitives, &
2234 0 : buffer1, buffer2)
2235 : #endif
2236 : CASE (2)
2237 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2238 : CALL contract_sgpd(work, &
2239 : nl_a, nl_b, nl_c, nl_d, &
2240 : sphi_a, sphi_b, sphi_c, sphi_d, &
2241 : primitives, &
2242 : buffer1, buffer2)
2243 : #else
2244 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2245 : work, nl_a, nl_b, nl_c, nl_d, &
2246 : sphi_a, &
2247 : sphi_b, &
2248 : sphi_c, &
2249 : sphi_d, &
2250 : primitives, &
2251 0 : buffer1, buffer2)
2252 : #endif
2253 : CASE (3)
2254 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2255 : CALL contract_sgpf(work, &
2256 : nl_a, nl_b, nl_c, nl_d, &
2257 : sphi_a, sphi_b, sphi_c, sphi_d, &
2258 : primitives, &
2259 : buffer1, buffer2)
2260 : #else
2261 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2262 : work, nl_a, nl_b, nl_c, nl_d, &
2263 : sphi_a, &
2264 : sphi_b, &
2265 : sphi_c, &
2266 : sphi_d, &
2267 : primitives, &
2268 0 : buffer1, buffer2)
2269 : #endif
2270 : CASE (4)
2271 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2272 : CALL contract_sgpg(work, &
2273 : nl_a, nl_b, nl_c, nl_d, &
2274 : sphi_a, sphi_b, sphi_c, sphi_d, &
2275 : primitives, &
2276 : buffer1, buffer2)
2277 : #else
2278 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2279 : work, nl_a, nl_b, nl_c, nl_d, &
2280 : sphi_a, &
2281 : sphi_b, &
2282 : sphi_c, &
2283 : sphi_d, &
2284 : primitives, &
2285 0 : buffer1, buffer2)
2286 : #endif
2287 : CASE DEFAULT
2288 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2289 : work, nl_a, nl_b, nl_c, nl_d, &
2290 : sphi_a, &
2291 : sphi_b, &
2292 : sphi_c, &
2293 : sphi_d, &
2294 : primitives, &
2295 0 : buffer1, buffer2)
2296 : END SELECT
2297 : CASE (2)
2298 0 : SELECT CASE (n_d)
2299 : CASE (0)
2300 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2301 : CALL contract_sgds(work, &
2302 : nl_a, nl_b, nl_c, nl_d, &
2303 : sphi_a, sphi_b, sphi_c, sphi_d, &
2304 : primitives, &
2305 : buffer1, buffer2)
2306 : #else
2307 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2308 : work, nl_a, nl_b, nl_c, nl_d, &
2309 : sphi_a, &
2310 : sphi_b, &
2311 : sphi_c, &
2312 : sphi_d, &
2313 : primitives, &
2314 0 : buffer1, buffer2)
2315 : #endif
2316 : CASE (1)
2317 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2318 : CALL contract_sgdp(work, &
2319 : nl_a, nl_b, nl_c, nl_d, &
2320 : sphi_a, sphi_b, sphi_c, sphi_d, &
2321 : primitives, &
2322 : buffer1, buffer2)
2323 : #else
2324 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2325 : work, nl_a, nl_b, nl_c, nl_d, &
2326 : sphi_a, &
2327 : sphi_b, &
2328 : sphi_c, &
2329 : sphi_d, &
2330 : primitives, &
2331 0 : buffer1, buffer2)
2332 : #endif
2333 : CASE (2)
2334 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2335 : CALL contract_sgdd(work, &
2336 : nl_a, nl_b, nl_c, nl_d, &
2337 : sphi_a, sphi_b, sphi_c, sphi_d, &
2338 : primitives, &
2339 : buffer1, buffer2)
2340 : #else
2341 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2342 : work, nl_a, nl_b, nl_c, nl_d, &
2343 : sphi_a, &
2344 : sphi_b, &
2345 : sphi_c, &
2346 : sphi_d, &
2347 : primitives, &
2348 0 : buffer1, buffer2)
2349 : #endif
2350 : CASE (3)
2351 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2352 : CALL contract_sgdf(work, &
2353 : nl_a, nl_b, nl_c, nl_d, &
2354 : sphi_a, sphi_b, sphi_c, sphi_d, &
2355 : primitives, &
2356 : buffer1, buffer2)
2357 : #else
2358 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2359 : work, nl_a, nl_b, nl_c, nl_d, &
2360 : sphi_a, &
2361 : sphi_b, &
2362 : sphi_c, &
2363 : sphi_d, &
2364 : primitives, &
2365 0 : buffer1, buffer2)
2366 : #endif
2367 : CASE (4)
2368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2369 : CALL contract_sgdg(work, &
2370 : nl_a, nl_b, nl_c, nl_d, &
2371 : sphi_a, sphi_b, sphi_c, sphi_d, &
2372 : primitives, &
2373 : buffer1, buffer2)
2374 : #else
2375 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2376 : work, nl_a, nl_b, nl_c, nl_d, &
2377 : sphi_a, &
2378 : sphi_b, &
2379 : sphi_c, &
2380 : sphi_d, &
2381 : primitives, &
2382 0 : buffer1, buffer2)
2383 : #endif
2384 : CASE DEFAULT
2385 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2386 : work, nl_a, nl_b, nl_c, nl_d, &
2387 : sphi_a, &
2388 : sphi_b, &
2389 : sphi_c, &
2390 : sphi_d, &
2391 : primitives, &
2392 0 : buffer1, buffer2)
2393 : END SELECT
2394 : CASE (3)
2395 0 : SELECT CASE (n_d)
2396 : CASE (0)
2397 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2398 : CALL contract_sgfs(work, &
2399 : nl_a, nl_b, nl_c, nl_d, &
2400 : sphi_a, sphi_b, sphi_c, sphi_d, &
2401 : primitives, &
2402 : buffer1, buffer2)
2403 : #else
2404 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2405 : work, nl_a, nl_b, nl_c, nl_d, &
2406 : sphi_a, &
2407 : sphi_b, &
2408 : sphi_c, &
2409 : sphi_d, &
2410 : primitives, &
2411 0 : buffer1, buffer2)
2412 : #endif
2413 : CASE (1)
2414 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2415 : CALL contract_sgfp(work, &
2416 : nl_a, nl_b, nl_c, nl_d, &
2417 : sphi_a, sphi_b, sphi_c, sphi_d, &
2418 : primitives, &
2419 : buffer1, buffer2)
2420 : #else
2421 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2422 : work, nl_a, nl_b, nl_c, nl_d, &
2423 : sphi_a, &
2424 : sphi_b, &
2425 : sphi_c, &
2426 : sphi_d, &
2427 : primitives, &
2428 0 : buffer1, buffer2)
2429 : #endif
2430 : CASE (2)
2431 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2432 : CALL contract_sgfd(work, &
2433 : nl_a, nl_b, nl_c, nl_d, &
2434 : sphi_a, sphi_b, sphi_c, sphi_d, &
2435 : primitives, &
2436 : buffer1, buffer2)
2437 : #else
2438 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2439 : work, nl_a, nl_b, nl_c, nl_d, &
2440 : sphi_a, &
2441 : sphi_b, &
2442 : sphi_c, &
2443 : sphi_d, &
2444 : primitives, &
2445 0 : buffer1, buffer2)
2446 : #endif
2447 : CASE (3)
2448 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2449 : CALL contract_sgff(work, &
2450 : nl_a, nl_b, nl_c, nl_d, &
2451 : sphi_a, sphi_b, sphi_c, sphi_d, &
2452 : primitives, &
2453 : buffer1, buffer2)
2454 : #else
2455 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2456 : work, nl_a, nl_b, nl_c, nl_d, &
2457 : sphi_a, &
2458 : sphi_b, &
2459 : sphi_c, &
2460 : sphi_d, &
2461 : primitives, &
2462 0 : buffer1, buffer2)
2463 : #endif
2464 : CASE (4)
2465 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2466 : CALL contract_sgfg(work, &
2467 : nl_a, nl_b, nl_c, nl_d, &
2468 : sphi_a, sphi_b, sphi_c, sphi_d, &
2469 : primitives, &
2470 : buffer1, buffer2)
2471 : #else
2472 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2473 : work, nl_a, nl_b, nl_c, nl_d, &
2474 : sphi_a, &
2475 : sphi_b, &
2476 : sphi_c, &
2477 : sphi_d, &
2478 : primitives, &
2479 0 : buffer1, buffer2)
2480 : #endif
2481 : CASE DEFAULT
2482 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2483 : work, nl_a, nl_b, nl_c, nl_d, &
2484 : sphi_a, &
2485 : sphi_b, &
2486 : sphi_c, &
2487 : sphi_d, &
2488 : primitives, &
2489 0 : buffer1, buffer2)
2490 : END SELECT
2491 : CASE (4)
2492 0 : SELECT CASE (n_d)
2493 : CASE (0)
2494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2495 : CALL contract_sggs(work, &
2496 : nl_a, nl_b, nl_c, nl_d, &
2497 : sphi_a, sphi_b, sphi_c, sphi_d, &
2498 : primitives, &
2499 : buffer1, buffer2)
2500 : #else
2501 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2502 : work, nl_a, nl_b, nl_c, nl_d, &
2503 : sphi_a, &
2504 : sphi_b, &
2505 : sphi_c, &
2506 : sphi_d, &
2507 : primitives, &
2508 0 : buffer1, buffer2)
2509 : #endif
2510 : CASE (1)
2511 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2512 : CALL contract_sggp(work, &
2513 : nl_a, nl_b, nl_c, nl_d, &
2514 : sphi_a, sphi_b, sphi_c, sphi_d, &
2515 : primitives, &
2516 : buffer1, buffer2)
2517 : #else
2518 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2519 : work, nl_a, nl_b, nl_c, nl_d, &
2520 : sphi_a, &
2521 : sphi_b, &
2522 : sphi_c, &
2523 : sphi_d, &
2524 : primitives, &
2525 0 : buffer1, buffer2)
2526 : #endif
2527 : CASE (2)
2528 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2529 : CALL contract_sggd(work, &
2530 : nl_a, nl_b, nl_c, nl_d, &
2531 : sphi_a, sphi_b, sphi_c, sphi_d, &
2532 : primitives, &
2533 : buffer1, buffer2)
2534 : #else
2535 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2536 : work, nl_a, nl_b, nl_c, nl_d, &
2537 : sphi_a, &
2538 : sphi_b, &
2539 : sphi_c, &
2540 : sphi_d, &
2541 : primitives, &
2542 0 : buffer1, buffer2)
2543 : #endif
2544 : CASE (3)
2545 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2546 : CALL contract_sggf(work, &
2547 : nl_a, nl_b, nl_c, nl_d, &
2548 : sphi_a, sphi_b, sphi_c, sphi_d, &
2549 : primitives, &
2550 : buffer1, buffer2)
2551 : #else
2552 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2553 : work, nl_a, nl_b, nl_c, nl_d, &
2554 : sphi_a, &
2555 : sphi_b, &
2556 : sphi_c, &
2557 : sphi_d, &
2558 : primitives, &
2559 0 : buffer1, buffer2)
2560 : #endif
2561 : CASE (4)
2562 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2563 : CALL contract_sggg(work, &
2564 : nl_a, nl_b, nl_c, nl_d, &
2565 : sphi_a, sphi_b, sphi_c, sphi_d, &
2566 : primitives, &
2567 : buffer1, buffer2)
2568 : #else
2569 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2570 : work, nl_a, nl_b, nl_c, nl_d, &
2571 : sphi_a, &
2572 : sphi_b, &
2573 : sphi_c, &
2574 : sphi_d, &
2575 : primitives, &
2576 0 : buffer1, buffer2)
2577 : #endif
2578 : CASE DEFAULT
2579 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2580 : work, nl_a, nl_b, nl_c, nl_d, &
2581 : sphi_a, &
2582 : sphi_b, &
2583 : sphi_c, &
2584 : sphi_d, &
2585 : primitives, &
2586 0 : buffer1, buffer2)
2587 : END SELECT
2588 : CASE DEFAULT
2589 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2590 : work, nl_a, nl_b, nl_c, nl_d, &
2591 : sphi_a, &
2592 : sphi_b, &
2593 : sphi_c, &
2594 : sphi_d, &
2595 : primitives, &
2596 0 : buffer1, buffer2)
2597 : END SELECT
2598 : CASE DEFAULT
2599 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2600 : work, nl_a, nl_b, nl_c, nl_d, &
2601 : sphi_a, &
2602 : sphi_b, &
2603 : sphi_c, &
2604 : sphi_d, &
2605 : primitives, &
2606 318974670 : buffer1, buffer2)
2607 : END SELECT
2608 : CASE (1)
2609 258314323 : SELECT CASE (n_b)
2610 : CASE (0)
2611 186502199 : SELECT CASE (n_c)
2612 : CASE (0)
2613 136597849 : SELECT CASE (n_d)
2614 : CASE (0)
2615 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
2616 : CALL contract_psss(work, &
2617 : nl_a, nl_b, nl_c, nl_d, &
2618 : sphi_a, sphi_b, sphi_c, sphi_d, &
2619 : primitives, &
2620 40021090 : buffer1, buffer2)
2621 : #else
2622 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2623 : work, nl_a, nl_b, nl_c, nl_d, &
2624 : sphi_a, &
2625 : sphi_b, &
2626 : sphi_c, &
2627 : sphi_d, &
2628 : primitives, &
2629 : buffer1, buffer2)
2630 : #endif
2631 : CASE (1)
2632 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
2633 : CALL contract_pssp(work, &
2634 : nl_a, nl_b, nl_c, nl_d, &
2635 : sphi_a, sphi_b, sphi_c, sphi_d, &
2636 : primitives, &
2637 13576505 : buffer1, buffer2)
2638 : #else
2639 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2640 : work, nl_a, nl_b, nl_c, nl_d, &
2641 : sphi_a, &
2642 : sphi_b, &
2643 : sphi_c, &
2644 : sphi_d, &
2645 : primitives, &
2646 : buffer1, buffer2)
2647 : #endif
2648 : CASE (2)
2649 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
2650 : CALL contract_pssd(work, &
2651 : nl_a, nl_b, nl_c, nl_d, &
2652 : sphi_a, sphi_b, sphi_c, sphi_d, &
2653 : primitives, &
2654 2066157 : buffer1, buffer2)
2655 : #else
2656 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2657 : work, nl_a, nl_b, nl_c, nl_d, &
2658 : sphi_a, &
2659 : sphi_b, &
2660 : sphi_c, &
2661 : sphi_d, &
2662 : primitives, &
2663 : buffer1, buffer2)
2664 : #endif
2665 : CASE (3)
2666 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2667 : CALL contract_pssf(work, &
2668 : nl_a, nl_b, nl_c, nl_d, &
2669 : sphi_a, sphi_b, sphi_c, sphi_d, &
2670 : primitives, &
2671 : buffer1, buffer2)
2672 : #else
2673 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2674 : work, nl_a, nl_b, nl_c, nl_d, &
2675 : sphi_a, &
2676 : sphi_b, &
2677 : sphi_c, &
2678 : sphi_d, &
2679 : primitives, &
2680 14474 : buffer1, buffer2)
2681 : #endif
2682 : CASE (4)
2683 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2684 : CALL contract_pssg(work, &
2685 : nl_a, nl_b, nl_c, nl_d, &
2686 : sphi_a, sphi_b, sphi_c, sphi_d, &
2687 : primitives, &
2688 : buffer1, buffer2)
2689 : #else
2690 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2691 : work, nl_a, nl_b, nl_c, nl_d, &
2692 : sphi_a, &
2693 : sphi_b, &
2694 : sphi_c, &
2695 : sphi_d, &
2696 : primitives, &
2697 0 : buffer1, buffer2)
2698 : #endif
2699 : CASE DEFAULT
2700 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2701 : work, nl_a, nl_b, nl_c, nl_d, &
2702 : sphi_a, &
2703 : sphi_b, &
2704 : sphi_c, &
2705 : sphi_d, &
2706 : primitives, &
2707 55678226 : buffer1, buffer2)
2708 : END SELECT
2709 : CASE (1)
2710 71237658 : SELECT CASE (n_d)
2711 : CASE (0)
2712 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
2713 : CALL contract_psps(work, &
2714 : nl_a, nl_b, nl_c, nl_d, &
2715 : sphi_a, sphi_b, sphi_c, sphi_d, &
2716 : primitives, &
2717 25315966 : buffer1, buffer2)
2718 : #else
2719 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2720 : work, nl_a, nl_b, nl_c, nl_d, &
2721 : sphi_a, &
2722 : sphi_b, &
2723 : sphi_c, &
2724 : sphi_d, &
2725 : primitives, &
2726 : buffer1, buffer2)
2727 : #endif
2728 : CASE (1)
2729 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
2730 : CALL contract_pspp(work, &
2731 : nl_a, nl_b, nl_c, nl_d, &
2732 : sphi_a, sphi_b, sphi_c, sphi_d, &
2733 : primitives, &
2734 14153946 : buffer1, buffer2)
2735 : #else
2736 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2737 : work, nl_a, nl_b, nl_c, nl_d, &
2738 : sphi_a, &
2739 : sphi_b, &
2740 : sphi_c, &
2741 : sphi_d, &
2742 : primitives, &
2743 : buffer1, buffer2)
2744 : #endif
2745 : CASE (2)
2746 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
2747 : CALL contract_pspd(work, &
2748 : nl_a, nl_b, nl_c, nl_d, &
2749 : sphi_a, sphi_b, sphi_c, sphi_d, &
2750 : primitives, &
2751 1421880 : buffer1, buffer2)
2752 : #else
2753 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2754 : work, nl_a, nl_b, nl_c, nl_d, &
2755 : sphi_a, &
2756 : sphi_b, &
2757 : sphi_c, &
2758 : sphi_d, &
2759 : primitives, &
2760 : buffer1, buffer2)
2761 : #endif
2762 : CASE (3)
2763 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2764 : CALL contract_pspf(work, &
2765 : nl_a, nl_b, nl_c, nl_d, &
2766 : sphi_a, sphi_b, sphi_c, sphi_d, &
2767 : primitives, &
2768 : buffer1, buffer2)
2769 : #else
2770 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2771 : work, nl_a, nl_b, nl_c, nl_d, &
2772 : sphi_a, &
2773 : sphi_b, &
2774 : sphi_c, &
2775 : sphi_d, &
2776 : primitives, &
2777 6741 : buffer1, buffer2)
2778 : #endif
2779 : CASE (4)
2780 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2781 : CALL contract_pspg(work, &
2782 : nl_a, nl_b, nl_c, nl_d, &
2783 : sphi_a, sphi_b, sphi_c, sphi_d, &
2784 : primitives, &
2785 : buffer1, buffer2)
2786 : #else
2787 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2788 : work, nl_a, nl_b, nl_c, nl_d, &
2789 : sphi_a, &
2790 : sphi_b, &
2791 : sphi_c, &
2792 : sphi_d, &
2793 : primitives, &
2794 0 : buffer1, buffer2)
2795 : #endif
2796 : CASE DEFAULT
2797 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2798 : work, nl_a, nl_b, nl_c, nl_d, &
2799 : sphi_a, &
2800 : sphi_b, &
2801 : sphi_c, &
2802 : sphi_d, &
2803 : primitives, &
2804 40898533 : buffer1, buffer2)
2805 : END SELECT
2806 : CASE (2)
2807 8077936 : SELECT CASE (n_d)
2808 : CASE (0)
2809 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
2810 : CALL contract_psds(work, &
2811 : nl_a, nl_b, nl_c, nl_d, &
2812 : sphi_a, sphi_b, sphi_c, sphi_d, &
2813 : primitives, &
2814 3009598 : buffer1, buffer2)
2815 : #else
2816 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2817 : work, nl_a, nl_b, nl_c, nl_d, &
2818 : sphi_a, &
2819 : sphi_b, &
2820 : sphi_c, &
2821 : sphi_d, &
2822 : primitives, &
2823 : buffer1, buffer2)
2824 : #endif
2825 : CASE (1)
2826 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
2827 : CALL contract_psdp(work, &
2828 : nl_a, nl_b, nl_c, nl_d, &
2829 : sphi_a, sphi_b, sphi_c, sphi_d, &
2830 : primitives, &
2831 1488651 : buffer1, buffer2)
2832 : #else
2833 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2834 : work, nl_a, nl_b, nl_c, nl_d, &
2835 : sphi_a, &
2836 : sphi_b, &
2837 : sphi_c, &
2838 : sphi_d, &
2839 : primitives, &
2840 : buffer1, buffer2)
2841 : #endif
2842 : CASE (2)
2843 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
2844 : CALL contract_psdd(work, &
2845 : nl_a, nl_b, nl_c, nl_d, &
2846 : sphi_a, sphi_b, sphi_c, sphi_d, &
2847 : primitives, &
2848 519793 : buffer1, buffer2)
2849 : #else
2850 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2851 : work, nl_a, nl_b, nl_c, nl_d, &
2852 : sphi_a, &
2853 : sphi_b, &
2854 : sphi_c, &
2855 : sphi_d, &
2856 : primitives, &
2857 : buffer1, buffer2)
2858 : #endif
2859 : CASE (3)
2860 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2861 : CALL contract_psdf(work, &
2862 : nl_a, nl_b, nl_c, nl_d, &
2863 : sphi_a, sphi_b, sphi_c, sphi_d, &
2864 : primitives, &
2865 : buffer1, buffer2)
2866 : #else
2867 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2868 : work, nl_a, nl_b, nl_c, nl_d, &
2869 : sphi_a, &
2870 : sphi_b, &
2871 : sphi_c, &
2872 : sphi_d, &
2873 : primitives, &
2874 5117 : buffer1, buffer2)
2875 : #endif
2876 : CASE (4)
2877 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2878 : CALL contract_psdg(work, &
2879 : nl_a, nl_b, nl_c, nl_d, &
2880 : sphi_a, sphi_b, sphi_c, sphi_d, &
2881 : primitives, &
2882 : buffer1, buffer2)
2883 : #else
2884 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2885 : work, nl_a, nl_b, nl_c, nl_d, &
2886 : sphi_a, &
2887 : sphi_b, &
2888 : sphi_c, &
2889 : sphi_d, &
2890 : primitives, &
2891 0 : buffer1, buffer2)
2892 : #endif
2893 : CASE DEFAULT
2894 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2895 : work, nl_a, nl_b, nl_c, nl_d, &
2896 : sphi_a, &
2897 : sphi_b, &
2898 : sphi_c, &
2899 : sphi_d, &
2900 : primitives, &
2901 5023159 : buffer1, buffer2)
2902 : END SELECT
2903 : CASE (3)
2904 77299 : SELECT CASE (n_d)
2905 : CASE (0)
2906 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2907 : CALL contract_psfs(work, &
2908 : nl_a, nl_b, nl_c, nl_d, &
2909 : sphi_a, sphi_b, sphi_c, sphi_d, &
2910 : primitives, &
2911 : buffer1, buffer2)
2912 : #else
2913 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2914 : work, nl_a, nl_b, nl_c, nl_d, &
2915 : sphi_a, &
2916 : sphi_b, &
2917 : sphi_c, &
2918 : sphi_d, &
2919 : primitives, &
2920 32120 : buffer1, buffer2)
2921 : #endif
2922 : CASE (1)
2923 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2924 : CALL contract_psfp(work, &
2925 : nl_a, nl_b, nl_c, nl_d, &
2926 : sphi_a, sphi_b, sphi_c, sphi_d, &
2927 : primitives, &
2928 : buffer1, buffer2)
2929 : #else
2930 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2931 : work, nl_a, nl_b, nl_c, nl_d, &
2932 : sphi_a, &
2933 : sphi_b, &
2934 : sphi_c, &
2935 : sphi_d, &
2936 : primitives, &
2937 7173 : buffer1, buffer2)
2938 : #endif
2939 : CASE (2)
2940 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2941 : CALL contract_psfd(work, &
2942 : nl_a, nl_b, nl_c, nl_d, &
2943 : sphi_a, sphi_b, sphi_c, sphi_d, &
2944 : primitives, &
2945 : buffer1, buffer2)
2946 : #else
2947 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2948 : work, nl_a, nl_b, nl_c, nl_d, &
2949 : sphi_a, &
2950 : sphi_b, &
2951 : sphi_c, &
2952 : sphi_d, &
2953 : primitives, &
2954 4442 : buffer1, buffer2)
2955 : #endif
2956 : CASE (3)
2957 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
2958 : CALL contract_psff(work, &
2959 : nl_a, nl_b, nl_c, nl_d, &
2960 : sphi_a, sphi_b, sphi_c, sphi_d, &
2961 : primitives, &
2962 : buffer1, buffer2)
2963 : #else
2964 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2965 : work, nl_a, nl_b, nl_c, nl_d, &
2966 : sphi_a, &
2967 : sphi_b, &
2968 : sphi_c, &
2969 : sphi_d, &
2970 : primitives, &
2971 1444 : buffer1, buffer2)
2972 : #endif
2973 : CASE (4)
2974 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
2975 : CALL contract_psfg(work, &
2976 : nl_a, nl_b, nl_c, nl_d, &
2977 : sphi_a, sphi_b, sphi_c, sphi_d, &
2978 : primitives, &
2979 : buffer1, buffer2)
2980 : #else
2981 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2982 : work, nl_a, nl_b, nl_c, nl_d, &
2983 : sphi_a, &
2984 : sphi_b, &
2985 : sphi_c, &
2986 : sphi_d, &
2987 : primitives, &
2988 0 : buffer1, buffer2)
2989 : #endif
2990 : CASE DEFAULT
2991 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
2992 : work, nl_a, nl_b, nl_c, nl_d, &
2993 : sphi_a, &
2994 : sphi_b, &
2995 : sphi_c, &
2996 : sphi_d, &
2997 : primitives, &
2998 45179 : buffer1, buffer2)
2999 : END SELECT
3000 : CASE (4)
3001 0 : SELECT CASE (n_d)
3002 : CASE (0)
3003 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3004 : CALL contract_psgs(work, &
3005 : nl_a, nl_b, nl_c, nl_d, &
3006 : sphi_a, sphi_b, sphi_c, sphi_d, &
3007 : primitives, &
3008 : buffer1, buffer2)
3009 : #else
3010 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3011 : work, nl_a, nl_b, nl_c, nl_d, &
3012 : sphi_a, &
3013 : sphi_b, &
3014 : sphi_c, &
3015 : sphi_d, &
3016 : primitives, &
3017 0 : buffer1, buffer2)
3018 : #endif
3019 : CASE (1)
3020 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3021 : CALL contract_psgp(work, &
3022 : nl_a, nl_b, nl_c, nl_d, &
3023 : sphi_a, sphi_b, sphi_c, sphi_d, &
3024 : primitives, &
3025 : buffer1, buffer2)
3026 : #else
3027 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3028 : work, nl_a, nl_b, nl_c, nl_d, &
3029 : sphi_a, &
3030 : sphi_b, &
3031 : sphi_c, &
3032 : sphi_d, &
3033 : primitives, &
3034 0 : buffer1, buffer2)
3035 : #endif
3036 : CASE (2)
3037 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3038 : CALL contract_psgd(work, &
3039 : nl_a, nl_b, nl_c, nl_d, &
3040 : sphi_a, sphi_b, sphi_c, sphi_d, &
3041 : primitives, &
3042 : buffer1, buffer2)
3043 : #else
3044 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3045 : work, nl_a, nl_b, nl_c, nl_d, &
3046 : sphi_a, &
3047 : sphi_b, &
3048 : sphi_c, &
3049 : sphi_d, &
3050 : primitives, &
3051 0 : buffer1, buffer2)
3052 : #endif
3053 : CASE (3)
3054 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3055 : CALL contract_psgf(work, &
3056 : nl_a, nl_b, nl_c, nl_d, &
3057 : sphi_a, sphi_b, sphi_c, sphi_d, &
3058 : primitives, &
3059 : buffer1, buffer2)
3060 : #else
3061 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3062 : work, nl_a, nl_b, nl_c, nl_d, &
3063 : sphi_a, &
3064 : sphi_b, &
3065 : sphi_c, &
3066 : sphi_d, &
3067 : primitives, &
3068 0 : buffer1, buffer2)
3069 : #endif
3070 : CASE (4)
3071 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3072 : CALL contract_psgg(work, &
3073 : nl_a, nl_b, nl_c, nl_d, &
3074 : sphi_a, sphi_b, sphi_c, sphi_d, &
3075 : primitives, &
3076 : buffer1, buffer2)
3077 : #else
3078 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3079 : work, nl_a, nl_b, nl_c, nl_d, &
3080 : sphi_a, &
3081 : sphi_b, &
3082 : sphi_c, &
3083 : sphi_d, &
3084 : primitives, &
3085 0 : buffer1, buffer2)
3086 : #endif
3087 : CASE DEFAULT
3088 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3089 : work, nl_a, nl_b, nl_c, nl_d, &
3090 : sphi_a, &
3091 : sphi_b, &
3092 : sphi_c, &
3093 : sphi_d, &
3094 : primitives, &
3095 0 : buffer1, buffer2)
3096 : END SELECT
3097 : CASE DEFAULT
3098 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3099 : work, nl_a, nl_b, nl_c, nl_d, &
3100 : sphi_a, &
3101 : sphi_b, &
3102 : sphi_c, &
3103 : sphi_d, &
3104 : primitives, &
3105 101645097 : buffer1, buffer2)
3106 : END SELECT
3107 : CASE (1)
3108 49340362 : SELECT CASE (n_c)
3109 : CASE (0)
3110 34191063 : SELECT CASE (n_d)
3111 : CASE (0)
3112 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
3113 : CALL contract_ppss(work, &
3114 : nl_a, nl_b, nl_c, nl_d, &
3115 : sphi_a, sphi_b, sphi_c, sphi_d, &
3116 : primitives, &
3117 7055122 : buffer1, buffer2)
3118 : #else
3119 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3120 : work, nl_a, nl_b, nl_c, nl_d, &
3121 : sphi_a, &
3122 : sphi_b, &
3123 : sphi_c, &
3124 : sphi_d, &
3125 : primitives, &
3126 : buffer1, buffer2)
3127 : #endif
3128 : CASE (1)
3129 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
3130 : CALL contract_ppsp(work, &
3131 : nl_a, nl_b, nl_c, nl_d, &
3132 : sphi_a, sphi_b, sphi_c, sphi_d, &
3133 : primitives, &
3134 7209755 : buffer1, buffer2)
3135 : #else
3136 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3137 : work, nl_a, nl_b, nl_c, nl_d, &
3138 : sphi_a, &
3139 : sphi_b, &
3140 : sphi_c, &
3141 : sphi_d, &
3142 : primitives, &
3143 : buffer1, buffer2)
3144 : #endif
3145 : CASE (2)
3146 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3147 : CALL contract_ppsd(work, &
3148 : nl_a, nl_b, nl_c, nl_d, &
3149 : sphi_a, sphi_b, sphi_c, sphi_d, &
3150 : primitives, &
3151 829790 : buffer1, buffer2)
3152 : #else
3153 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3154 : work, nl_a, nl_b, nl_c, nl_d, &
3155 : sphi_a, &
3156 : sphi_b, &
3157 : sphi_c, &
3158 : sphi_d, &
3159 : primitives, &
3160 : buffer1, buffer2)
3161 : #endif
3162 : CASE (3)
3163 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3164 : CALL contract_ppsf(work, &
3165 : nl_a, nl_b, nl_c, nl_d, &
3166 : sphi_a, sphi_b, sphi_c, sphi_d, &
3167 : primitives, &
3168 : buffer1, buffer2)
3169 : #else
3170 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3171 : work, nl_a, nl_b, nl_c, nl_d, &
3172 : sphi_a, &
3173 : sphi_b, &
3174 : sphi_c, &
3175 : sphi_d, &
3176 : primitives, &
3177 5036 : buffer1, buffer2)
3178 : #endif
3179 : CASE (4)
3180 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3181 : CALL contract_ppsg(work, &
3182 : nl_a, nl_b, nl_c, nl_d, &
3183 : sphi_a, sphi_b, sphi_c, sphi_d, &
3184 : primitives, &
3185 : buffer1, buffer2)
3186 : #else
3187 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3188 : work, nl_a, nl_b, nl_c, nl_d, &
3189 : sphi_a, &
3190 : sphi_b, &
3191 : sphi_c, &
3192 : sphi_d, &
3193 : primitives, &
3194 0 : buffer1, buffer2)
3195 : #endif
3196 : CASE DEFAULT
3197 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3198 : work, nl_a, nl_b, nl_c, nl_d, &
3199 : sphi_a, &
3200 : sphi_b, &
3201 : sphi_c, &
3202 : sphi_d, &
3203 : primitives, &
3204 15099703 : buffer1, buffer2)
3205 : END SELECT
3206 : CASE (1)
3207 21477956 : SELECT CASE (n_d)
3208 : CASE (0)
3209 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
3210 : CALL contract_ppps(work, &
3211 : nl_a, nl_b, nl_c, nl_d, &
3212 : sphi_a, sphi_b, sphi_c, sphi_d, &
3213 : primitives, &
3214 7413574 : buffer1, buffer2)
3215 : #else
3216 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3217 : work, nl_a, nl_b, nl_c, nl_d, &
3218 : sphi_a, &
3219 : sphi_b, &
3220 : sphi_c, &
3221 : sphi_d, &
3222 : primitives, &
3223 : buffer1, buffer2)
3224 : #endif
3225 : CASE (1)
3226 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
3227 : CALL contract_pppp(work, &
3228 : nl_a, nl_b, nl_c, nl_d, &
3229 : sphi_a, sphi_b, sphi_c, sphi_d, &
3230 : primitives, &
3231 3702206 : buffer1, buffer2)
3232 : #else
3233 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3234 : work, nl_a, nl_b, nl_c, nl_d, &
3235 : sphi_a, &
3236 : sphi_b, &
3237 : sphi_c, &
3238 : sphi_d, &
3239 : primitives, &
3240 : buffer1, buffer2)
3241 : #endif
3242 : CASE (2)
3243 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3244 : CALL contract_pppd(work, &
3245 : nl_a, nl_b, nl_c, nl_d, &
3246 : sphi_a, sphi_b, sphi_c, sphi_d, &
3247 : primitives, &
3248 911648 : buffer1, buffer2)
3249 : #else
3250 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3251 : work, nl_a, nl_b, nl_c, nl_d, &
3252 : sphi_a, &
3253 : sphi_b, &
3254 : sphi_c, &
3255 : sphi_d, &
3256 : primitives, &
3257 : buffer1, buffer2)
3258 : #endif
3259 : CASE (3)
3260 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3261 : CALL contract_pppf(work, &
3262 : nl_a, nl_b, nl_c, nl_d, &
3263 : sphi_a, sphi_b, sphi_c, sphi_d, &
3264 : primitives, &
3265 : buffer1, buffer2)
3266 : #else
3267 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3268 : work, nl_a, nl_b, nl_c, nl_d, &
3269 : sphi_a, &
3270 : sphi_b, &
3271 : sphi_c, &
3272 : sphi_d, &
3273 : primitives, &
3274 8810 : buffer1, buffer2)
3275 : #endif
3276 : CASE (4)
3277 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3278 : CALL contract_pppg(work, &
3279 : nl_a, nl_b, nl_c, nl_d, &
3280 : sphi_a, sphi_b, sphi_c, sphi_d, &
3281 : primitives, &
3282 : buffer1, buffer2)
3283 : #else
3284 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3285 : work, nl_a, nl_b, nl_c, nl_d, &
3286 : sphi_a, &
3287 : sphi_b, &
3288 : sphi_c, &
3289 : sphi_d, &
3290 : primitives, &
3291 0 : buffer1, buffer2)
3292 : #endif
3293 : CASE DEFAULT
3294 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3295 : work, nl_a, nl_b, nl_c, nl_d, &
3296 : sphi_a, &
3297 : sphi_b, &
3298 : sphi_c, &
3299 : sphi_d, &
3300 : primitives, &
3301 12036238 : buffer1, buffer2)
3302 : END SELECT
3303 : CASE (2)
3304 2934558 : SELECT CASE (n_d)
3305 : CASE (0)
3306 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3307 : CALL contract_ppds(work, &
3308 : nl_a, nl_b, nl_c, nl_d, &
3309 : sphi_a, sphi_b, sphi_c, sphi_d, &
3310 : primitives, &
3311 891623 : buffer1, buffer2)
3312 : #else
3313 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3314 : work, nl_a, nl_b, nl_c, nl_d, &
3315 : sphi_a, &
3316 : sphi_b, &
3317 : sphi_c, &
3318 : sphi_d, &
3319 : primitives, &
3320 : buffer1, buffer2)
3321 : #endif
3322 : CASE (1)
3323 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3324 : CALL contract_ppdp(work, &
3325 : nl_a, nl_b, nl_c, nl_d, &
3326 : sphi_a, sphi_b, sphi_c, sphi_d, &
3327 : primitives, &
3328 901749 : buffer1, buffer2)
3329 : #else
3330 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3331 : work, nl_a, nl_b, nl_c, nl_d, &
3332 : sphi_a, &
3333 : sphi_b, &
3334 : sphi_c, &
3335 : sphi_d, &
3336 : primitives, &
3337 : buffer1, buffer2)
3338 : #endif
3339 : CASE (2)
3340 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3341 : CALL contract_ppdd(work, &
3342 : nl_a, nl_b, nl_c, nl_d, &
3343 : sphi_a, sphi_b, sphi_c, sphi_d, &
3344 : primitives, &
3345 232612 : buffer1, buffer2)
3346 : #else
3347 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3348 : work, nl_a, nl_b, nl_c, nl_d, &
3349 : sphi_a, &
3350 : sphi_b, &
3351 : sphi_c, &
3352 : sphi_d, &
3353 : primitives, &
3354 : buffer1, buffer2)
3355 : #endif
3356 : CASE (3)
3357 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3358 : CALL contract_ppdf(work, &
3359 : nl_a, nl_b, nl_c, nl_d, &
3360 : sphi_a, sphi_b, sphi_c, sphi_d, &
3361 : primitives, &
3362 : buffer1, buffer2)
3363 : #else
3364 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3365 : work, nl_a, nl_b, nl_c, nl_d, &
3366 : sphi_a, &
3367 : sphi_b, &
3368 : sphi_c, &
3369 : sphi_d, &
3370 : primitives, &
3371 2160 : buffer1, buffer2)
3372 : #endif
3373 : CASE (4)
3374 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3375 : CALL contract_ppdg(work, &
3376 : nl_a, nl_b, nl_c, nl_d, &
3377 : sphi_a, sphi_b, sphi_c, sphi_d, &
3378 : primitives, &
3379 : buffer1, buffer2)
3380 : #else
3381 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3382 : work, nl_a, nl_b, nl_c, nl_d, &
3383 : sphi_a, &
3384 : sphi_b, &
3385 : sphi_c, &
3386 : sphi_d, &
3387 : primitives, &
3388 0 : buffer1, buffer2)
3389 : #endif
3390 : CASE DEFAULT
3391 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3392 : work, nl_a, nl_b, nl_c, nl_d, &
3393 : sphi_a, &
3394 : sphi_b, &
3395 : sphi_c, &
3396 : sphi_d, &
3397 : primitives, &
3398 2028144 : buffer1, buffer2)
3399 : END SELECT
3400 : CASE (3)
3401 19611 : SELECT CASE (n_d)
3402 : CASE (0)
3403 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3404 : CALL contract_ppfs(work, &
3405 : nl_a, nl_b, nl_c, nl_d, &
3406 : sphi_a, sphi_b, sphi_c, sphi_d, &
3407 : primitives, &
3408 : buffer1, buffer2)
3409 : #else
3410 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3411 : work, nl_a, nl_b, nl_c, nl_d, &
3412 : sphi_a, &
3413 : sphi_b, &
3414 : sphi_c, &
3415 : sphi_d, &
3416 : primitives, &
3417 4820 : buffer1, buffer2)
3418 : #endif
3419 : CASE (1)
3420 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3421 : CALL contract_ppfp(work, &
3422 : nl_a, nl_b, nl_c, nl_d, &
3423 : sphi_a, sphi_b, sphi_c, sphi_d, &
3424 : primitives, &
3425 : buffer1, buffer2)
3426 : #else
3427 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3428 : work, nl_a, nl_b, nl_c, nl_d, &
3429 : sphi_a, &
3430 : sphi_b, &
3431 : sphi_c, &
3432 : sphi_d, &
3433 : primitives, &
3434 6242 : buffer1, buffer2)
3435 : #endif
3436 : CASE (2)
3437 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3438 : CALL contract_ppfd(work, &
3439 : nl_a, nl_b, nl_c, nl_d, &
3440 : sphi_a, sphi_b, sphi_c, sphi_d, &
3441 : primitives, &
3442 : buffer1, buffer2)
3443 : #else
3444 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3445 : work, nl_a, nl_b, nl_c, nl_d, &
3446 : sphi_a, &
3447 : sphi_b, &
3448 : sphi_c, &
3449 : sphi_d, &
3450 : primitives, &
3451 1555 : buffer1, buffer2)
3452 : #endif
3453 : CASE (3)
3454 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3455 : CALL contract_ppff(work, &
3456 : nl_a, nl_b, nl_c, nl_d, &
3457 : sphi_a, sphi_b, sphi_c, sphi_d, &
3458 : primitives, &
3459 : buffer1, buffer2)
3460 : #else
3461 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3462 : work, nl_a, nl_b, nl_c, nl_d, &
3463 : sphi_a, &
3464 : sphi_b, &
3465 : sphi_c, &
3466 : sphi_d, &
3467 : primitives, &
3468 2174 : buffer1, buffer2)
3469 : #endif
3470 : CASE (4)
3471 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3472 : CALL contract_ppfg(work, &
3473 : nl_a, nl_b, nl_c, nl_d, &
3474 : sphi_a, sphi_b, sphi_c, sphi_d, &
3475 : primitives, &
3476 : buffer1, buffer2)
3477 : #else
3478 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3479 : work, nl_a, nl_b, nl_c, nl_d, &
3480 : sphi_a, &
3481 : sphi_b, &
3482 : sphi_c, &
3483 : sphi_d, &
3484 : primitives, &
3485 0 : buffer1, buffer2)
3486 : #endif
3487 : CASE DEFAULT
3488 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3489 : work, nl_a, nl_b, nl_c, nl_d, &
3490 : sphi_a, &
3491 : sphi_b, &
3492 : sphi_c, &
3493 : sphi_d, &
3494 : primitives, &
3495 14791 : buffer1, buffer2)
3496 : END SELECT
3497 : CASE (4)
3498 0 : SELECT CASE (n_d)
3499 : CASE (0)
3500 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3501 : CALL contract_ppgs(work, &
3502 : nl_a, nl_b, nl_c, nl_d, &
3503 : sphi_a, sphi_b, sphi_c, sphi_d, &
3504 : primitives, &
3505 : buffer1, buffer2)
3506 : #else
3507 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3508 : work, nl_a, nl_b, nl_c, nl_d, &
3509 : sphi_a, &
3510 : sphi_b, &
3511 : sphi_c, &
3512 : sphi_d, &
3513 : primitives, &
3514 0 : buffer1, buffer2)
3515 : #endif
3516 : CASE (1)
3517 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3518 : CALL contract_ppgp(work, &
3519 : nl_a, nl_b, nl_c, nl_d, &
3520 : sphi_a, sphi_b, sphi_c, sphi_d, &
3521 : primitives, &
3522 : buffer1, buffer2)
3523 : #else
3524 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3525 : work, nl_a, nl_b, nl_c, nl_d, &
3526 : sphi_a, &
3527 : sphi_b, &
3528 : sphi_c, &
3529 : sphi_d, &
3530 : primitives, &
3531 0 : buffer1, buffer2)
3532 : #endif
3533 : CASE (2)
3534 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3535 : CALL contract_ppgd(work, &
3536 : nl_a, nl_b, nl_c, nl_d, &
3537 : sphi_a, sphi_b, sphi_c, sphi_d, &
3538 : primitives, &
3539 : buffer1, buffer2)
3540 : #else
3541 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3542 : work, nl_a, nl_b, nl_c, nl_d, &
3543 : sphi_a, &
3544 : sphi_b, &
3545 : sphi_c, &
3546 : sphi_d, &
3547 : primitives, &
3548 0 : buffer1, buffer2)
3549 : #endif
3550 : CASE (3)
3551 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3552 : CALL contract_ppgf(work, &
3553 : nl_a, nl_b, nl_c, nl_d, &
3554 : sphi_a, sphi_b, sphi_c, sphi_d, &
3555 : primitives, &
3556 : buffer1, buffer2)
3557 : #else
3558 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3559 : work, nl_a, nl_b, nl_c, nl_d, &
3560 : sphi_a, &
3561 : sphi_b, &
3562 : sphi_c, &
3563 : sphi_d, &
3564 : primitives, &
3565 0 : buffer1, buffer2)
3566 : #endif
3567 : CASE (4)
3568 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3569 : CALL contract_ppgg(work, &
3570 : nl_a, nl_b, nl_c, nl_d, &
3571 : sphi_a, sphi_b, sphi_c, sphi_d, &
3572 : primitives, &
3573 : buffer1, buffer2)
3574 : #else
3575 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3576 : work, nl_a, nl_b, nl_c, nl_d, &
3577 : sphi_a, &
3578 : sphi_b, &
3579 : sphi_c, &
3580 : sphi_d, &
3581 : primitives, &
3582 0 : buffer1, buffer2)
3583 : #endif
3584 : CASE DEFAULT
3585 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3586 : work, nl_a, nl_b, nl_c, nl_d, &
3587 : sphi_a, &
3588 : sphi_b, &
3589 : sphi_c, &
3590 : sphi_d, &
3591 : primitives, &
3592 0 : buffer1, buffer2)
3593 : END SELECT
3594 : CASE DEFAULT
3595 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3596 : work, nl_a, nl_b, nl_c, nl_d, &
3597 : sphi_a, &
3598 : sphi_b, &
3599 : sphi_c, &
3600 : sphi_d, &
3601 : primitives, &
3602 29178876 : buffer1, buffer2)
3603 : END SELECT
3604 : CASE (2)
3605 7769355 : SELECT CASE (n_c)
3606 : CASE (0)
3607 5873051 : SELECT CASE (n_d)
3608 : CASE (0)
3609 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3610 : CALL contract_pdss(work, &
3611 : nl_a, nl_b, nl_c, nl_d, &
3612 : sphi_a, sphi_b, sphi_c, sphi_d, &
3613 : primitives, &
3614 1421780 : buffer1, buffer2)
3615 : #else
3616 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3617 : work, nl_a, nl_b, nl_c, nl_d, &
3618 : sphi_a, &
3619 : sphi_b, &
3620 : sphi_c, &
3621 : sphi_d, &
3622 : primitives, &
3623 : buffer1, buffer2)
3624 : #endif
3625 : CASE (1)
3626 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3627 : CALL contract_pdsp(work, &
3628 : nl_a, nl_b, nl_c, nl_d, &
3629 : sphi_a, sphi_b, sphi_c, sphi_d, &
3630 : primitives, &
3631 802487 : buffer1, buffer2)
3632 : #else
3633 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3634 : work, nl_a, nl_b, nl_c, nl_d, &
3635 : sphi_a, &
3636 : sphi_b, &
3637 : sphi_c, &
3638 : sphi_d, &
3639 : primitives, &
3640 : buffer1, buffer2)
3641 : #endif
3642 : CASE (2)
3643 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3644 : CALL contract_pdsd(work, &
3645 : nl_a, nl_b, nl_c, nl_d, &
3646 : sphi_a, sphi_b, sphi_c, sphi_d, &
3647 : primitives, &
3648 417900 : buffer1, buffer2)
3649 : #else
3650 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3651 : work, nl_a, nl_b, nl_c, nl_d, &
3652 : sphi_a, &
3653 : sphi_b, &
3654 : sphi_c, &
3655 : sphi_d, &
3656 : primitives, &
3657 : buffer1, buffer2)
3658 : #endif
3659 : CASE (3)
3660 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3661 : CALL contract_pdsf(work, &
3662 : nl_a, nl_b, nl_c, nl_d, &
3663 : sphi_a, sphi_b, sphi_c, sphi_d, &
3664 : primitives, &
3665 : buffer1, buffer2)
3666 : #else
3667 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3668 : work, nl_a, nl_b, nl_c, nl_d, &
3669 : sphi_a, &
3670 : sphi_b, &
3671 : sphi_c, &
3672 : sphi_d, &
3673 : primitives, &
3674 5515 : buffer1, buffer2)
3675 : #endif
3676 : CASE (4)
3677 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3678 : CALL contract_pdsg(work, &
3679 : nl_a, nl_b, nl_c, nl_d, &
3680 : sphi_a, sphi_b, sphi_c, sphi_d, &
3681 : primitives, &
3682 : buffer1, buffer2)
3683 : #else
3684 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3685 : work, nl_a, nl_b, nl_c, nl_d, &
3686 : sphi_a, &
3687 : sphi_b, &
3688 : sphi_c, &
3689 : sphi_d, &
3690 : primitives, &
3691 0 : buffer1, buffer2)
3692 : #endif
3693 : CASE DEFAULT
3694 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3695 : work, nl_a, nl_b, nl_c, nl_d, &
3696 : sphi_a, &
3697 : sphi_b, &
3698 : sphi_c, &
3699 : sphi_d, &
3700 : primitives, &
3701 2647682 : buffer1, buffer2)
3702 : END SELECT
3703 : CASE (1)
3704 3090892 : SELECT CASE (n_d)
3705 : CASE (0)
3706 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3707 : CALL contract_pdps(work, &
3708 : nl_a, nl_b, nl_c, nl_d, &
3709 : sphi_a, sphi_b, sphi_c, sphi_d, &
3710 : primitives, &
3711 682948 : buffer1, buffer2)
3712 : #else
3713 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3714 : work, nl_a, nl_b, nl_c, nl_d, &
3715 : sphi_a, &
3716 : sphi_b, &
3717 : sphi_c, &
3718 : sphi_d, &
3719 : primitives, &
3720 : buffer1, buffer2)
3721 : #endif
3722 : CASE (1)
3723 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3724 : CALL contract_pdpp(work, &
3725 : nl_a, nl_b, nl_c, nl_d, &
3726 : sphi_a, sphi_b, sphi_c, sphi_d, &
3727 : primitives, &
3728 850731 : buffer1, buffer2)
3729 : #else
3730 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3731 : work, nl_a, nl_b, nl_c, nl_d, &
3732 : sphi_a, &
3733 : sphi_b, &
3734 : sphi_c, &
3735 : sphi_d, &
3736 : primitives, &
3737 : buffer1, buffer2)
3738 : #endif
3739 : CASE (2)
3740 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3741 : CALL contract_pdpd(work, &
3742 : nl_a, nl_b, nl_c, nl_d, &
3743 : sphi_a, sphi_b, sphi_c, sphi_d, &
3744 : primitives, &
3745 267819 : buffer1, buffer2)
3746 : #else
3747 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3748 : work, nl_a, nl_b, nl_c, nl_d, &
3749 : sphi_a, &
3750 : sphi_b, &
3751 : sphi_c, &
3752 : sphi_d, &
3753 : primitives, &
3754 : buffer1, buffer2)
3755 : #endif
3756 : CASE (3)
3757 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3758 : CALL contract_pdpf(work, &
3759 : nl_a, nl_b, nl_c, nl_d, &
3760 : sphi_a, sphi_b, sphi_c, sphi_d, &
3761 : primitives, &
3762 : buffer1, buffer2)
3763 : #else
3764 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3765 : work, nl_a, nl_b, nl_c, nl_d, &
3766 : sphi_a, &
3767 : sphi_b, &
3768 : sphi_c, &
3769 : sphi_d, &
3770 : primitives, &
3771 2091 : buffer1, buffer2)
3772 : #endif
3773 : CASE (4)
3774 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3775 : CALL contract_pdpg(work, &
3776 : nl_a, nl_b, nl_c, nl_d, &
3777 : sphi_a, sphi_b, sphi_c, sphi_d, &
3778 : primitives, &
3779 : buffer1, buffer2)
3780 : #else
3781 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3782 : work, nl_a, nl_b, nl_c, nl_d, &
3783 : sphi_a, &
3784 : sphi_b, &
3785 : sphi_c, &
3786 : sphi_d, &
3787 : primitives, &
3788 0 : buffer1, buffer2)
3789 : #endif
3790 : CASE DEFAULT
3791 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3792 : work, nl_a, nl_b, nl_c, nl_d, &
3793 : sphi_a, &
3794 : sphi_b, &
3795 : sphi_c, &
3796 : sphi_d, &
3797 : primitives, &
3798 1803589 : buffer1, buffer2)
3799 : END SELECT
3800 : CASE (2)
3801 899043 : SELECT CASE (n_d)
3802 : CASE (0)
3803 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3804 : CALL contract_pdds(work, &
3805 : nl_a, nl_b, nl_c, nl_d, &
3806 : sphi_a, sphi_b, sphi_c, sphi_d, &
3807 : primitives, &
3808 288531 : buffer1, buffer2)
3809 : #else
3810 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3811 : work, nl_a, nl_b, nl_c, nl_d, &
3812 : sphi_a, &
3813 : sphi_b, &
3814 : sphi_c, &
3815 : sphi_d, &
3816 : primitives, &
3817 : buffer1, buffer2)
3818 : #endif
3819 : CASE (1)
3820 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3821 : CALL contract_pddp(work, &
3822 : nl_a, nl_b, nl_c, nl_d, &
3823 : sphi_a, sphi_b, sphi_c, sphi_d, &
3824 : primitives, &
3825 186884 : buffer1, buffer2)
3826 : #else
3827 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3828 : work, nl_a, nl_b, nl_c, nl_d, &
3829 : sphi_a, &
3830 : sphi_b, &
3831 : sphi_c, &
3832 : sphi_d, &
3833 : primitives, &
3834 : buffer1, buffer2)
3835 : #endif
3836 : CASE (2)
3837 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
3838 : CALL contract_pddd(work, &
3839 : nl_a, nl_b, nl_c, nl_d, &
3840 : sphi_a, sphi_b, sphi_c, sphi_d, &
3841 : primitives, &
3842 126838 : buffer1, buffer2)
3843 : #else
3844 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3845 : work, nl_a, nl_b, nl_c, nl_d, &
3846 : sphi_a, &
3847 : sphi_b, &
3848 : sphi_c, &
3849 : sphi_d, &
3850 : primitives, &
3851 : buffer1, buffer2)
3852 : #endif
3853 : CASE (3)
3854 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3855 : CALL contract_pddf(work, &
3856 : nl_a, nl_b, nl_c, nl_d, &
3857 : sphi_a, sphi_b, sphi_c, sphi_d, &
3858 : primitives, &
3859 : buffer1, buffer2)
3860 : #else
3861 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3862 : work, nl_a, nl_b, nl_c, nl_d, &
3863 : sphi_a, &
3864 : sphi_b, &
3865 : sphi_c, &
3866 : sphi_d, &
3867 : primitives, &
3868 2102 : buffer1, buffer2)
3869 : #endif
3870 : CASE (4)
3871 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3872 : CALL contract_pddg(work, &
3873 : nl_a, nl_b, nl_c, nl_d, &
3874 : sphi_a, sphi_b, sphi_c, sphi_d, &
3875 : primitives, &
3876 : buffer1, buffer2)
3877 : #else
3878 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3879 : work, nl_a, nl_b, nl_c, nl_d, &
3880 : sphi_a, &
3881 : sphi_b, &
3882 : sphi_c, &
3883 : sphi_d, &
3884 : primitives, &
3885 0 : buffer1, buffer2)
3886 : #endif
3887 : CASE DEFAULT
3888 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3889 : work, nl_a, nl_b, nl_c, nl_d, &
3890 : sphi_a, &
3891 : sphi_b, &
3892 : sphi_c, &
3893 : sphi_d, &
3894 : primitives, &
3895 604355 : buffer1, buffer2)
3896 : END SELECT
3897 : CASE (3)
3898 9178 : SELECT CASE (n_d)
3899 : CASE (0)
3900 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3901 : CALL contract_pdfs(work, &
3902 : nl_a, nl_b, nl_c, nl_d, &
3903 : sphi_a, sphi_b, sphi_c, sphi_d, &
3904 : primitives, &
3905 : buffer1, buffer2)
3906 : #else
3907 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3908 : work, nl_a, nl_b, nl_c, nl_d, &
3909 : sphi_a, &
3910 : sphi_b, &
3911 : sphi_c, &
3912 : sphi_d, &
3913 : primitives, &
3914 3021 : buffer1, buffer2)
3915 : #endif
3916 : CASE (1)
3917 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3918 : CALL contract_pdfp(work, &
3919 : nl_a, nl_b, nl_c, nl_d, &
3920 : sphi_a, sphi_b, sphi_c, sphi_d, &
3921 : primitives, &
3922 : buffer1, buffer2)
3923 : #else
3924 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3925 : work, nl_a, nl_b, nl_c, nl_d, &
3926 : sphi_a, &
3927 : sphi_b, &
3928 : sphi_c, &
3929 : sphi_d, &
3930 : primitives, &
3931 1221 : buffer1, buffer2)
3932 : #endif
3933 : CASE (2)
3934 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3935 : CALL contract_pdfd(work, &
3936 : nl_a, nl_b, nl_c, nl_d, &
3937 : sphi_a, sphi_b, sphi_c, sphi_d, &
3938 : primitives, &
3939 : buffer1, buffer2)
3940 : #else
3941 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3942 : work, nl_a, nl_b, nl_c, nl_d, &
3943 : sphi_a, &
3944 : sphi_b, &
3945 : sphi_c, &
3946 : sphi_d, &
3947 : primitives, &
3948 1242 : buffer1, buffer2)
3949 : #endif
3950 : CASE (3)
3951 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
3952 : CALL contract_pdff(work, &
3953 : nl_a, nl_b, nl_c, nl_d, &
3954 : sphi_a, sphi_b, sphi_c, sphi_d, &
3955 : primitives, &
3956 : buffer1, buffer2)
3957 : #else
3958 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3959 : work, nl_a, nl_b, nl_c, nl_d, &
3960 : sphi_a, &
3961 : sphi_b, &
3962 : sphi_c, &
3963 : sphi_d, &
3964 : primitives, &
3965 673 : buffer1, buffer2)
3966 : #endif
3967 : CASE (4)
3968 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3969 : CALL contract_pdfg(work, &
3970 : nl_a, nl_b, nl_c, nl_d, &
3971 : sphi_a, sphi_b, sphi_c, sphi_d, &
3972 : primitives, &
3973 : buffer1, buffer2)
3974 : #else
3975 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3976 : work, nl_a, nl_b, nl_c, nl_d, &
3977 : sphi_a, &
3978 : sphi_b, &
3979 : sphi_c, &
3980 : sphi_d, &
3981 : primitives, &
3982 0 : buffer1, buffer2)
3983 : #endif
3984 : CASE DEFAULT
3985 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
3986 : work, nl_a, nl_b, nl_c, nl_d, &
3987 : sphi_a, &
3988 : sphi_b, &
3989 : sphi_c, &
3990 : sphi_d, &
3991 : primitives, &
3992 6157 : buffer1, buffer2)
3993 : END SELECT
3994 : CASE (4)
3995 0 : SELECT CASE (n_d)
3996 : CASE (0)
3997 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
3998 : CALL contract_pdgs(work, &
3999 : nl_a, nl_b, nl_c, nl_d, &
4000 : sphi_a, sphi_b, sphi_c, sphi_d, &
4001 : primitives, &
4002 : buffer1, buffer2)
4003 : #else
4004 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4005 : work, nl_a, nl_b, nl_c, nl_d, &
4006 : sphi_a, &
4007 : sphi_b, &
4008 : sphi_c, &
4009 : sphi_d, &
4010 : primitives, &
4011 0 : buffer1, buffer2)
4012 : #endif
4013 : CASE (1)
4014 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4015 : CALL contract_pdgp(work, &
4016 : nl_a, nl_b, nl_c, nl_d, &
4017 : sphi_a, sphi_b, sphi_c, sphi_d, &
4018 : primitives, &
4019 : buffer1, buffer2)
4020 : #else
4021 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4022 : work, nl_a, nl_b, nl_c, nl_d, &
4023 : sphi_a, &
4024 : sphi_b, &
4025 : sphi_c, &
4026 : sphi_d, &
4027 : primitives, &
4028 0 : buffer1, buffer2)
4029 : #endif
4030 : CASE (2)
4031 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4032 : CALL contract_pdgd(work, &
4033 : nl_a, nl_b, nl_c, nl_d, &
4034 : sphi_a, sphi_b, sphi_c, sphi_d, &
4035 : primitives, &
4036 : buffer1, buffer2)
4037 : #else
4038 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4039 : work, nl_a, nl_b, nl_c, nl_d, &
4040 : sphi_a, &
4041 : sphi_b, &
4042 : sphi_c, &
4043 : sphi_d, &
4044 : primitives, &
4045 0 : buffer1, buffer2)
4046 : #endif
4047 : CASE (3)
4048 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4049 : CALL contract_pdgf(work, &
4050 : nl_a, nl_b, nl_c, nl_d, &
4051 : sphi_a, sphi_b, sphi_c, sphi_d, &
4052 : primitives, &
4053 : buffer1, buffer2)
4054 : #else
4055 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4056 : work, nl_a, nl_b, nl_c, nl_d, &
4057 : sphi_a, &
4058 : sphi_b, &
4059 : sphi_c, &
4060 : sphi_d, &
4061 : primitives, &
4062 0 : buffer1, buffer2)
4063 : #endif
4064 : CASE (4)
4065 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4066 : CALL contract_pdgg(work, &
4067 : nl_a, nl_b, nl_c, nl_d, &
4068 : sphi_a, sphi_b, sphi_c, sphi_d, &
4069 : primitives, &
4070 : buffer1, buffer2)
4071 : #else
4072 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4073 : work, nl_a, nl_b, nl_c, nl_d, &
4074 : sphi_a, &
4075 : sphi_b, &
4076 : sphi_c, &
4077 : sphi_d, &
4078 : primitives, &
4079 0 : buffer1, buffer2)
4080 : #endif
4081 : CASE DEFAULT
4082 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4083 : work, nl_a, nl_b, nl_c, nl_d, &
4084 : sphi_a, &
4085 : sphi_b, &
4086 : sphi_c, &
4087 : sphi_d, &
4088 : primitives, &
4089 0 : buffer1, buffer2)
4090 : END SELECT
4091 : CASE DEFAULT
4092 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4093 : work, nl_a, nl_b, nl_c, nl_d, &
4094 : sphi_a, &
4095 : sphi_b, &
4096 : sphi_c, &
4097 : sphi_d, &
4098 : primitives, &
4099 5061783 : buffer1, buffer2)
4100 : END SELECT
4101 : CASE (3)
4102 95327 : SELECT CASE (n_c)
4103 : CASE (0)
4104 72918 : SELECT CASE (n_d)
4105 : CASE (0)
4106 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4107 : CALL contract_pfss(work, &
4108 : nl_a, nl_b, nl_c, nl_d, &
4109 : sphi_a, sphi_b, sphi_c, sphi_d, &
4110 : primitives, &
4111 : buffer1, buffer2)
4112 : #else
4113 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4114 : work, nl_a, nl_b, nl_c, nl_d, &
4115 : sphi_a, &
4116 : sphi_b, &
4117 : sphi_c, &
4118 : sphi_d, &
4119 : primitives, &
4120 22801 : buffer1, buffer2)
4121 : #endif
4122 : CASE (1)
4123 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4124 : CALL contract_pfsp(work, &
4125 : nl_a, nl_b, nl_c, nl_d, &
4126 : sphi_a, sphi_b, sphi_c, sphi_d, &
4127 : primitives, &
4128 : buffer1, buffer2)
4129 : #else
4130 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4131 : work, nl_a, nl_b, nl_c, nl_d, &
4132 : sphi_a, &
4133 : sphi_b, &
4134 : sphi_c, &
4135 : sphi_d, &
4136 : primitives, &
4137 4977 : buffer1, buffer2)
4138 : #endif
4139 : CASE (2)
4140 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4141 : CALL contract_pfsd(work, &
4142 : nl_a, nl_b, nl_c, nl_d, &
4143 : sphi_a, sphi_b, sphi_c, sphi_d, &
4144 : primitives, &
4145 : buffer1, buffer2)
4146 : #else
4147 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4148 : work, nl_a, nl_b, nl_c, nl_d, &
4149 : sphi_a, &
4150 : sphi_b, &
4151 : sphi_c, &
4152 : sphi_d, &
4153 : primitives, &
4154 6235 : buffer1, buffer2)
4155 : #endif
4156 : CASE (3)
4157 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4158 : CALL contract_pfsf(work, &
4159 : nl_a, nl_b, nl_c, nl_d, &
4160 : sphi_a, sphi_b, sphi_c, sphi_d, &
4161 : primitives, &
4162 : buffer1, buffer2)
4163 : #else
4164 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4165 : work, nl_a, nl_b, nl_c, nl_d, &
4166 : sphi_a, &
4167 : sphi_b, &
4168 : sphi_c, &
4169 : sphi_d, &
4170 : primitives, &
4171 1424 : buffer1, buffer2)
4172 : #endif
4173 : CASE (4)
4174 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4175 : CALL contract_pfsg(work, &
4176 : nl_a, nl_b, nl_c, nl_d, &
4177 : sphi_a, sphi_b, sphi_c, sphi_d, &
4178 : primitives, &
4179 : buffer1, buffer2)
4180 : #else
4181 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4182 : work, nl_a, nl_b, nl_c, nl_d, &
4183 : sphi_a, &
4184 : sphi_b, &
4185 : sphi_c, &
4186 : sphi_d, &
4187 : primitives, &
4188 0 : buffer1, buffer2)
4189 : #endif
4190 : CASE DEFAULT
4191 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4192 : work, nl_a, nl_b, nl_c, nl_d, &
4193 : sphi_a, &
4194 : sphi_b, &
4195 : sphi_c, &
4196 : sphi_d, &
4197 : primitives, &
4198 35437 : buffer1, buffer2)
4199 : END SELECT
4200 : CASE (1)
4201 24221 : SELECT CASE (n_d)
4202 : CASE (0)
4203 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4204 : CALL contract_pfps(work, &
4205 : nl_a, nl_b, nl_c, nl_d, &
4206 : sphi_a, sphi_b, sphi_c, sphi_d, &
4207 : primitives, &
4208 : buffer1, buffer2)
4209 : #else
4210 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4211 : work, nl_a, nl_b, nl_c, nl_d, &
4212 : sphi_a, &
4213 : sphi_b, &
4214 : sphi_c, &
4215 : sphi_d, &
4216 : primitives, &
4217 2714 : buffer1, buffer2)
4218 : #endif
4219 : CASE (1)
4220 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4221 : CALL contract_pfpp(work, &
4222 : nl_a, nl_b, nl_c, nl_d, &
4223 : sphi_a, sphi_b, sphi_c, sphi_d, &
4224 : primitives, &
4225 : buffer1, buffer2)
4226 : #else
4227 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4228 : work, nl_a, nl_b, nl_c, nl_d, &
4229 : sphi_a, &
4230 : sphi_b, &
4231 : sphi_c, &
4232 : sphi_d, &
4233 : primitives, &
4234 7696 : buffer1, buffer2)
4235 : #endif
4236 : CASE (2)
4237 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4238 : CALL contract_pfpd(work, &
4239 : nl_a, nl_b, nl_c, nl_d, &
4240 : sphi_a, sphi_b, sphi_c, sphi_d, &
4241 : primitives, &
4242 : buffer1, buffer2)
4243 : #else
4244 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4245 : work, nl_a, nl_b, nl_c, nl_d, &
4246 : sphi_a, &
4247 : sphi_b, &
4248 : sphi_c, &
4249 : sphi_d, &
4250 : primitives, &
4251 1925 : buffer1, buffer2)
4252 : #endif
4253 : CASE (3)
4254 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4255 : CALL contract_pfpf(work, &
4256 : nl_a, nl_b, nl_c, nl_d, &
4257 : sphi_a, sphi_b, sphi_c, sphi_d, &
4258 : primitives, &
4259 : buffer1, buffer2)
4260 : #else
4261 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4262 : work, nl_a, nl_b, nl_c, nl_d, &
4263 : sphi_a, &
4264 : sphi_b, &
4265 : sphi_c, &
4266 : sphi_d, &
4267 : primitives, &
4268 2345 : buffer1, buffer2)
4269 : #endif
4270 : CASE (4)
4271 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4272 : CALL contract_pfpg(work, &
4273 : nl_a, nl_b, nl_c, nl_d, &
4274 : sphi_a, sphi_b, sphi_c, sphi_d, &
4275 : primitives, &
4276 : buffer1, buffer2)
4277 : #else
4278 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4279 : work, nl_a, nl_b, nl_c, nl_d, &
4280 : sphi_a, &
4281 : sphi_b, &
4282 : sphi_c, &
4283 : sphi_d, &
4284 : primitives, &
4285 0 : buffer1, buffer2)
4286 : #endif
4287 : CASE DEFAULT
4288 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4289 : work, nl_a, nl_b, nl_c, nl_d, &
4290 : sphi_a, &
4291 : sphi_b, &
4292 : sphi_c, &
4293 : sphi_d, &
4294 : primitives, &
4295 14680 : buffer1, buffer2)
4296 : END SELECT
4297 : CASE (2)
4298 13027 : SELECT CASE (n_d)
4299 : CASE (0)
4300 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4301 : CALL contract_pfds(work, &
4302 : nl_a, nl_b, nl_c, nl_d, &
4303 : sphi_a, sphi_b, sphi_c, sphi_d, &
4304 : primitives, &
4305 : buffer1, buffer2)
4306 : #else
4307 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4308 : work, nl_a, nl_b, nl_c, nl_d, &
4309 : sphi_a, &
4310 : sphi_b, &
4311 : sphi_c, &
4312 : sphi_d, &
4313 : primitives, &
4314 3254 : buffer1, buffer2)
4315 : #endif
4316 : CASE (1)
4317 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4318 : CALL contract_pfdp(work, &
4319 : nl_a, nl_b, nl_c, nl_d, &
4320 : sphi_a, sphi_b, sphi_c, sphi_d, &
4321 : primitives, &
4322 : buffer1, buffer2)
4323 : #else
4324 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4325 : work, nl_a, nl_b, nl_c, nl_d, &
4326 : sphi_a, &
4327 : sphi_b, &
4328 : sphi_c, &
4329 : sphi_d, &
4330 : primitives, &
4331 1111 : buffer1, buffer2)
4332 : #endif
4333 : CASE (2)
4334 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4335 : CALL contract_pfdd(work, &
4336 : nl_a, nl_b, nl_c, nl_d, &
4337 : sphi_a, sphi_b, sphi_c, sphi_d, &
4338 : primitives, &
4339 : buffer1, buffer2)
4340 : #else
4341 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4342 : work, nl_a, nl_b, nl_c, nl_d, &
4343 : sphi_a, &
4344 : sphi_b, &
4345 : sphi_c, &
4346 : sphi_d, &
4347 : primitives, &
4348 1819 : buffer1, buffer2)
4349 : #endif
4350 : CASE (3)
4351 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4352 : CALL contract_pfdf(work, &
4353 : nl_a, nl_b, nl_c, nl_d, &
4354 : sphi_a, sphi_b, sphi_c, sphi_d, &
4355 : primitives, &
4356 : buffer1, buffer2)
4357 : #else
4358 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4359 : work, nl_a, nl_b, nl_c, nl_d, &
4360 : sphi_a, &
4361 : sphi_b, &
4362 : sphi_c, &
4363 : sphi_d, &
4364 : primitives, &
4365 643 : buffer1, buffer2)
4366 : #endif
4367 : CASE (4)
4368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4369 : CALL contract_pfdg(work, &
4370 : nl_a, nl_b, nl_c, nl_d, &
4371 : sphi_a, sphi_b, sphi_c, sphi_d, &
4372 : primitives, &
4373 : buffer1, buffer2)
4374 : #else
4375 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4376 : work, nl_a, nl_b, nl_c, nl_d, &
4377 : sphi_a, &
4378 : sphi_b, &
4379 : sphi_c, &
4380 : sphi_d, &
4381 : primitives, &
4382 0 : buffer1, buffer2)
4383 : #endif
4384 : CASE DEFAULT
4385 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4386 : work, nl_a, nl_b, nl_c, nl_d, &
4387 : sphi_a, &
4388 : sphi_b, &
4389 : sphi_c, &
4390 : sphi_d, &
4391 : primitives, &
4392 6827 : buffer1, buffer2)
4393 : END SELECT
4394 : CASE (3)
4395 3593 : SELECT CASE (n_d)
4396 : CASE (0)
4397 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4398 : CALL contract_pffs(work, &
4399 : nl_a, nl_b, nl_c, nl_d, &
4400 : sphi_a, sphi_b, sphi_c, sphi_d, &
4401 : primitives, &
4402 : buffer1, buffer2)
4403 : #else
4404 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4405 : work, nl_a, nl_b, nl_c, nl_d, &
4406 : sphi_a, &
4407 : sphi_b, &
4408 : sphi_c, &
4409 : sphi_d, &
4410 : primitives, &
4411 647 : buffer1, buffer2)
4412 : #endif
4413 : CASE (1)
4414 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4415 : CALL contract_pffp(work, &
4416 : nl_a, nl_b, nl_c, nl_d, &
4417 : sphi_a, sphi_b, sphi_c, sphi_d, &
4418 : primitives, &
4419 : buffer1, buffer2)
4420 : #else
4421 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4422 : work, nl_a, nl_b, nl_c, nl_d, &
4423 : sphi_a, &
4424 : sphi_b, &
4425 : sphi_c, &
4426 : sphi_d, &
4427 : primitives, &
4428 1200 : buffer1, buffer2)
4429 : #endif
4430 : CASE (2)
4431 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4432 : CALL contract_pffd(work, &
4433 : nl_a, nl_b, nl_c, nl_d, &
4434 : sphi_a, sphi_b, sphi_c, sphi_d, &
4435 : primitives, &
4436 : buffer1, buffer2)
4437 : #else
4438 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4439 : work, nl_a, nl_b, nl_c, nl_d, &
4440 : sphi_a, &
4441 : sphi_b, &
4442 : sphi_c, &
4443 : sphi_d, &
4444 : primitives, &
4445 388 : buffer1, buffer2)
4446 : #endif
4447 : CASE (3)
4448 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
4449 : CALL contract_pfff(work, &
4450 : nl_a, nl_b, nl_c, nl_d, &
4451 : sphi_a, sphi_b, sphi_c, sphi_d, &
4452 : primitives, &
4453 : buffer1, buffer2)
4454 : #else
4455 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4456 : work, nl_a, nl_b, nl_c, nl_d, &
4457 : sphi_a, &
4458 : sphi_b, &
4459 : sphi_c, &
4460 : sphi_d, &
4461 : primitives, &
4462 711 : buffer1, buffer2)
4463 : #endif
4464 : CASE (4)
4465 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4466 : CALL contract_pffg(work, &
4467 : nl_a, nl_b, nl_c, nl_d, &
4468 : sphi_a, sphi_b, sphi_c, sphi_d, &
4469 : primitives, &
4470 : buffer1, buffer2)
4471 : #else
4472 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4473 : work, nl_a, nl_b, nl_c, nl_d, &
4474 : sphi_a, &
4475 : sphi_b, &
4476 : sphi_c, &
4477 : sphi_d, &
4478 : primitives, &
4479 0 : buffer1, buffer2)
4480 : #endif
4481 : CASE DEFAULT
4482 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4483 : work, nl_a, nl_b, nl_c, nl_d, &
4484 : sphi_a, &
4485 : sphi_b, &
4486 : sphi_c, &
4487 : sphi_d, &
4488 : primitives, &
4489 2946 : buffer1, buffer2)
4490 : END SELECT
4491 : CASE (4)
4492 0 : SELECT CASE (n_d)
4493 : CASE (0)
4494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4495 : CALL contract_pfgs(work, &
4496 : nl_a, nl_b, nl_c, nl_d, &
4497 : sphi_a, sphi_b, sphi_c, sphi_d, &
4498 : primitives, &
4499 : buffer1, buffer2)
4500 : #else
4501 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4502 : work, nl_a, nl_b, nl_c, nl_d, &
4503 : sphi_a, &
4504 : sphi_b, &
4505 : sphi_c, &
4506 : sphi_d, &
4507 : primitives, &
4508 0 : buffer1, buffer2)
4509 : #endif
4510 : CASE (1)
4511 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4512 : CALL contract_pfgp(work, &
4513 : nl_a, nl_b, nl_c, nl_d, &
4514 : sphi_a, sphi_b, sphi_c, sphi_d, &
4515 : primitives, &
4516 : buffer1, buffer2)
4517 : #else
4518 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4519 : work, nl_a, nl_b, nl_c, nl_d, &
4520 : sphi_a, &
4521 : sphi_b, &
4522 : sphi_c, &
4523 : sphi_d, &
4524 : primitives, &
4525 0 : buffer1, buffer2)
4526 : #endif
4527 : CASE (2)
4528 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4529 : CALL contract_pfgd(work, &
4530 : nl_a, nl_b, nl_c, nl_d, &
4531 : sphi_a, sphi_b, sphi_c, sphi_d, &
4532 : primitives, &
4533 : buffer1, buffer2)
4534 : #else
4535 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4536 : work, nl_a, nl_b, nl_c, nl_d, &
4537 : sphi_a, &
4538 : sphi_b, &
4539 : sphi_c, &
4540 : sphi_d, &
4541 : primitives, &
4542 0 : buffer1, buffer2)
4543 : #endif
4544 : CASE (3)
4545 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4546 : CALL contract_pfgf(work, &
4547 : nl_a, nl_b, nl_c, nl_d, &
4548 : sphi_a, sphi_b, sphi_c, sphi_d, &
4549 : primitives, &
4550 : buffer1, buffer2)
4551 : #else
4552 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4553 : work, nl_a, nl_b, nl_c, nl_d, &
4554 : sphi_a, &
4555 : sphi_b, &
4556 : sphi_c, &
4557 : sphi_d, &
4558 : primitives, &
4559 0 : buffer1, buffer2)
4560 : #endif
4561 : CASE (4)
4562 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4563 : CALL contract_pfgg(work, &
4564 : nl_a, nl_b, nl_c, nl_d, &
4565 : sphi_a, sphi_b, sphi_c, sphi_d, &
4566 : primitives, &
4567 : buffer1, buffer2)
4568 : #else
4569 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4570 : work, nl_a, nl_b, nl_c, nl_d, &
4571 : sphi_a, &
4572 : sphi_b, &
4573 : sphi_c, &
4574 : sphi_d, &
4575 : primitives, &
4576 0 : buffer1, buffer2)
4577 : #endif
4578 : CASE DEFAULT
4579 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4580 : work, nl_a, nl_b, nl_c, nl_d, &
4581 : sphi_a, &
4582 : sphi_b, &
4583 : sphi_c, &
4584 : sphi_d, &
4585 : primitives, &
4586 0 : buffer1, buffer2)
4587 : END SELECT
4588 : CASE DEFAULT
4589 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4590 : work, nl_a, nl_b, nl_c, nl_d, &
4591 : sphi_a, &
4592 : sphi_b, &
4593 : sphi_c, &
4594 : sphi_d, &
4595 : primitives, &
4596 59890 : buffer1, buffer2)
4597 : END SELECT
4598 : CASE (4)
4599 0 : SELECT CASE (n_c)
4600 : CASE (0)
4601 0 : SELECT CASE (n_d)
4602 : CASE (0)
4603 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4604 : CALL contract_pgss(work, &
4605 : nl_a, nl_b, nl_c, nl_d, &
4606 : sphi_a, sphi_b, sphi_c, sphi_d, &
4607 : primitives, &
4608 : buffer1, buffer2)
4609 : #else
4610 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4611 : work, nl_a, nl_b, nl_c, nl_d, &
4612 : sphi_a, &
4613 : sphi_b, &
4614 : sphi_c, &
4615 : sphi_d, &
4616 : primitives, &
4617 0 : buffer1, buffer2)
4618 : #endif
4619 : CASE (1)
4620 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4621 : CALL contract_pgsp(work, &
4622 : nl_a, nl_b, nl_c, nl_d, &
4623 : sphi_a, sphi_b, sphi_c, sphi_d, &
4624 : primitives, &
4625 : buffer1, buffer2)
4626 : #else
4627 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4628 : work, nl_a, nl_b, nl_c, nl_d, &
4629 : sphi_a, &
4630 : sphi_b, &
4631 : sphi_c, &
4632 : sphi_d, &
4633 : primitives, &
4634 0 : buffer1, buffer2)
4635 : #endif
4636 : CASE (2)
4637 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4638 : CALL contract_pgsd(work, &
4639 : nl_a, nl_b, nl_c, nl_d, &
4640 : sphi_a, sphi_b, sphi_c, sphi_d, &
4641 : primitives, &
4642 : buffer1, buffer2)
4643 : #else
4644 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4645 : work, nl_a, nl_b, nl_c, nl_d, &
4646 : sphi_a, &
4647 : sphi_b, &
4648 : sphi_c, &
4649 : sphi_d, &
4650 : primitives, &
4651 0 : buffer1, buffer2)
4652 : #endif
4653 : CASE (3)
4654 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4655 : CALL contract_pgsf(work, &
4656 : nl_a, nl_b, nl_c, nl_d, &
4657 : sphi_a, sphi_b, sphi_c, sphi_d, &
4658 : primitives, &
4659 : buffer1, buffer2)
4660 : #else
4661 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4662 : work, nl_a, nl_b, nl_c, nl_d, &
4663 : sphi_a, &
4664 : sphi_b, &
4665 : sphi_c, &
4666 : sphi_d, &
4667 : primitives, &
4668 0 : buffer1, buffer2)
4669 : #endif
4670 : CASE (4)
4671 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4672 : CALL contract_pgsg(work, &
4673 : nl_a, nl_b, nl_c, nl_d, &
4674 : sphi_a, sphi_b, sphi_c, sphi_d, &
4675 : primitives, &
4676 : buffer1, buffer2)
4677 : #else
4678 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4679 : work, nl_a, nl_b, nl_c, nl_d, &
4680 : sphi_a, &
4681 : sphi_b, &
4682 : sphi_c, &
4683 : sphi_d, &
4684 : primitives, &
4685 0 : buffer1, buffer2)
4686 : #endif
4687 : CASE DEFAULT
4688 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4689 : work, nl_a, nl_b, nl_c, nl_d, &
4690 : sphi_a, &
4691 : sphi_b, &
4692 : sphi_c, &
4693 : sphi_d, &
4694 : primitives, &
4695 0 : buffer1, buffer2)
4696 : END SELECT
4697 : CASE (1)
4698 0 : SELECT CASE (n_d)
4699 : CASE (0)
4700 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4701 : CALL contract_pgps(work, &
4702 : nl_a, nl_b, nl_c, nl_d, &
4703 : sphi_a, sphi_b, sphi_c, sphi_d, &
4704 : primitives, &
4705 : buffer1, buffer2)
4706 : #else
4707 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4708 : work, nl_a, nl_b, nl_c, nl_d, &
4709 : sphi_a, &
4710 : sphi_b, &
4711 : sphi_c, &
4712 : sphi_d, &
4713 : primitives, &
4714 0 : buffer1, buffer2)
4715 : #endif
4716 : CASE (1)
4717 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4718 : CALL contract_pgpp(work, &
4719 : nl_a, nl_b, nl_c, nl_d, &
4720 : sphi_a, sphi_b, sphi_c, sphi_d, &
4721 : primitives, &
4722 : buffer1, buffer2)
4723 : #else
4724 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4725 : work, nl_a, nl_b, nl_c, nl_d, &
4726 : sphi_a, &
4727 : sphi_b, &
4728 : sphi_c, &
4729 : sphi_d, &
4730 : primitives, &
4731 0 : buffer1, buffer2)
4732 : #endif
4733 : CASE (2)
4734 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4735 : CALL contract_pgpd(work, &
4736 : nl_a, nl_b, nl_c, nl_d, &
4737 : sphi_a, sphi_b, sphi_c, sphi_d, &
4738 : primitives, &
4739 : buffer1, buffer2)
4740 : #else
4741 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4742 : work, nl_a, nl_b, nl_c, nl_d, &
4743 : sphi_a, &
4744 : sphi_b, &
4745 : sphi_c, &
4746 : sphi_d, &
4747 : primitives, &
4748 0 : buffer1, buffer2)
4749 : #endif
4750 : CASE (3)
4751 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4752 : CALL contract_pgpf(work, &
4753 : nl_a, nl_b, nl_c, nl_d, &
4754 : sphi_a, sphi_b, sphi_c, sphi_d, &
4755 : primitives, &
4756 : buffer1, buffer2)
4757 : #else
4758 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4759 : work, nl_a, nl_b, nl_c, nl_d, &
4760 : sphi_a, &
4761 : sphi_b, &
4762 : sphi_c, &
4763 : sphi_d, &
4764 : primitives, &
4765 0 : buffer1, buffer2)
4766 : #endif
4767 : CASE (4)
4768 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4769 : CALL contract_pgpg(work, &
4770 : nl_a, nl_b, nl_c, nl_d, &
4771 : sphi_a, sphi_b, sphi_c, sphi_d, &
4772 : primitives, &
4773 : buffer1, buffer2)
4774 : #else
4775 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4776 : work, nl_a, nl_b, nl_c, nl_d, &
4777 : sphi_a, &
4778 : sphi_b, &
4779 : sphi_c, &
4780 : sphi_d, &
4781 : primitives, &
4782 0 : buffer1, buffer2)
4783 : #endif
4784 : CASE DEFAULT
4785 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4786 : work, nl_a, nl_b, nl_c, nl_d, &
4787 : sphi_a, &
4788 : sphi_b, &
4789 : sphi_c, &
4790 : sphi_d, &
4791 : primitives, &
4792 0 : buffer1, buffer2)
4793 : END SELECT
4794 : CASE (2)
4795 0 : SELECT CASE (n_d)
4796 : CASE (0)
4797 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4798 : CALL contract_pgds(work, &
4799 : nl_a, nl_b, nl_c, nl_d, &
4800 : sphi_a, sphi_b, sphi_c, sphi_d, &
4801 : primitives, &
4802 : buffer1, buffer2)
4803 : #else
4804 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4805 : work, nl_a, nl_b, nl_c, nl_d, &
4806 : sphi_a, &
4807 : sphi_b, &
4808 : sphi_c, &
4809 : sphi_d, &
4810 : primitives, &
4811 0 : buffer1, buffer2)
4812 : #endif
4813 : CASE (1)
4814 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4815 : CALL contract_pgdp(work, &
4816 : nl_a, nl_b, nl_c, nl_d, &
4817 : sphi_a, sphi_b, sphi_c, sphi_d, &
4818 : primitives, &
4819 : buffer1, buffer2)
4820 : #else
4821 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4822 : work, nl_a, nl_b, nl_c, nl_d, &
4823 : sphi_a, &
4824 : sphi_b, &
4825 : sphi_c, &
4826 : sphi_d, &
4827 : primitives, &
4828 0 : buffer1, buffer2)
4829 : #endif
4830 : CASE (2)
4831 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4832 : CALL contract_pgdd(work, &
4833 : nl_a, nl_b, nl_c, nl_d, &
4834 : sphi_a, sphi_b, sphi_c, sphi_d, &
4835 : primitives, &
4836 : buffer1, buffer2)
4837 : #else
4838 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4839 : work, nl_a, nl_b, nl_c, nl_d, &
4840 : sphi_a, &
4841 : sphi_b, &
4842 : sphi_c, &
4843 : sphi_d, &
4844 : primitives, &
4845 0 : buffer1, buffer2)
4846 : #endif
4847 : CASE (3)
4848 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4849 : CALL contract_pgdf(work, &
4850 : nl_a, nl_b, nl_c, nl_d, &
4851 : sphi_a, sphi_b, sphi_c, sphi_d, &
4852 : primitives, &
4853 : buffer1, buffer2)
4854 : #else
4855 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4856 : work, nl_a, nl_b, nl_c, nl_d, &
4857 : sphi_a, &
4858 : sphi_b, &
4859 : sphi_c, &
4860 : sphi_d, &
4861 : primitives, &
4862 0 : buffer1, buffer2)
4863 : #endif
4864 : CASE (4)
4865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4866 : CALL contract_pgdg(work, &
4867 : nl_a, nl_b, nl_c, nl_d, &
4868 : sphi_a, sphi_b, sphi_c, sphi_d, &
4869 : primitives, &
4870 : buffer1, buffer2)
4871 : #else
4872 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4873 : work, nl_a, nl_b, nl_c, nl_d, &
4874 : sphi_a, &
4875 : sphi_b, &
4876 : sphi_c, &
4877 : sphi_d, &
4878 : primitives, &
4879 0 : buffer1, buffer2)
4880 : #endif
4881 : CASE DEFAULT
4882 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4883 : work, nl_a, nl_b, nl_c, nl_d, &
4884 : sphi_a, &
4885 : sphi_b, &
4886 : sphi_c, &
4887 : sphi_d, &
4888 : primitives, &
4889 0 : buffer1, buffer2)
4890 : END SELECT
4891 : CASE (3)
4892 0 : SELECT CASE (n_d)
4893 : CASE (0)
4894 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4895 : CALL contract_pgfs(work, &
4896 : nl_a, nl_b, nl_c, nl_d, &
4897 : sphi_a, sphi_b, sphi_c, sphi_d, &
4898 : primitives, &
4899 : buffer1, buffer2)
4900 : #else
4901 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4902 : work, nl_a, nl_b, nl_c, nl_d, &
4903 : sphi_a, &
4904 : sphi_b, &
4905 : sphi_c, &
4906 : sphi_d, &
4907 : primitives, &
4908 0 : buffer1, buffer2)
4909 : #endif
4910 : CASE (1)
4911 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4912 : CALL contract_pgfp(work, &
4913 : nl_a, nl_b, nl_c, nl_d, &
4914 : sphi_a, sphi_b, sphi_c, sphi_d, &
4915 : primitives, &
4916 : buffer1, buffer2)
4917 : #else
4918 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4919 : work, nl_a, nl_b, nl_c, nl_d, &
4920 : sphi_a, &
4921 : sphi_b, &
4922 : sphi_c, &
4923 : sphi_d, &
4924 : primitives, &
4925 0 : buffer1, buffer2)
4926 : #endif
4927 : CASE (2)
4928 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4929 : CALL contract_pgfd(work, &
4930 : nl_a, nl_b, nl_c, nl_d, &
4931 : sphi_a, sphi_b, sphi_c, sphi_d, &
4932 : primitives, &
4933 : buffer1, buffer2)
4934 : #else
4935 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4936 : work, nl_a, nl_b, nl_c, nl_d, &
4937 : sphi_a, &
4938 : sphi_b, &
4939 : sphi_c, &
4940 : sphi_d, &
4941 : primitives, &
4942 0 : buffer1, buffer2)
4943 : #endif
4944 : CASE (3)
4945 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4946 : CALL contract_pgff(work, &
4947 : nl_a, nl_b, nl_c, nl_d, &
4948 : sphi_a, sphi_b, sphi_c, sphi_d, &
4949 : primitives, &
4950 : buffer1, buffer2)
4951 : #else
4952 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4953 : work, nl_a, nl_b, nl_c, nl_d, &
4954 : sphi_a, &
4955 : sphi_b, &
4956 : sphi_c, &
4957 : sphi_d, &
4958 : primitives, &
4959 0 : buffer1, buffer2)
4960 : #endif
4961 : CASE (4)
4962 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4963 : CALL contract_pgfg(work, &
4964 : nl_a, nl_b, nl_c, nl_d, &
4965 : sphi_a, sphi_b, sphi_c, sphi_d, &
4966 : primitives, &
4967 : buffer1, buffer2)
4968 : #else
4969 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4970 : work, nl_a, nl_b, nl_c, nl_d, &
4971 : sphi_a, &
4972 : sphi_b, &
4973 : sphi_c, &
4974 : sphi_d, &
4975 : primitives, &
4976 0 : buffer1, buffer2)
4977 : #endif
4978 : CASE DEFAULT
4979 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4980 : work, nl_a, nl_b, nl_c, nl_d, &
4981 : sphi_a, &
4982 : sphi_b, &
4983 : sphi_c, &
4984 : sphi_d, &
4985 : primitives, &
4986 0 : buffer1, buffer2)
4987 : END SELECT
4988 : CASE (4)
4989 0 : SELECT CASE (n_d)
4990 : CASE (0)
4991 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
4992 : CALL contract_pggs(work, &
4993 : nl_a, nl_b, nl_c, nl_d, &
4994 : sphi_a, sphi_b, sphi_c, sphi_d, &
4995 : primitives, &
4996 : buffer1, buffer2)
4997 : #else
4998 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
4999 : work, nl_a, nl_b, nl_c, nl_d, &
5000 : sphi_a, &
5001 : sphi_b, &
5002 : sphi_c, &
5003 : sphi_d, &
5004 : primitives, &
5005 0 : buffer1, buffer2)
5006 : #endif
5007 : CASE (1)
5008 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5009 : CALL contract_pggp(work, &
5010 : nl_a, nl_b, nl_c, nl_d, &
5011 : sphi_a, sphi_b, sphi_c, sphi_d, &
5012 : primitives, &
5013 : buffer1, buffer2)
5014 : #else
5015 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5016 : work, nl_a, nl_b, nl_c, nl_d, &
5017 : sphi_a, &
5018 : sphi_b, &
5019 : sphi_c, &
5020 : sphi_d, &
5021 : primitives, &
5022 0 : buffer1, buffer2)
5023 : #endif
5024 : CASE (2)
5025 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5026 : CALL contract_pggd(work, &
5027 : nl_a, nl_b, nl_c, nl_d, &
5028 : sphi_a, sphi_b, sphi_c, sphi_d, &
5029 : primitives, &
5030 : buffer1, buffer2)
5031 : #else
5032 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5033 : work, nl_a, nl_b, nl_c, nl_d, &
5034 : sphi_a, &
5035 : sphi_b, &
5036 : sphi_c, &
5037 : sphi_d, &
5038 : primitives, &
5039 0 : buffer1, buffer2)
5040 : #endif
5041 : CASE (3)
5042 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5043 : CALL contract_pggf(work, &
5044 : nl_a, nl_b, nl_c, nl_d, &
5045 : sphi_a, sphi_b, sphi_c, sphi_d, &
5046 : primitives, &
5047 : buffer1, buffer2)
5048 : #else
5049 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5050 : work, nl_a, nl_b, nl_c, nl_d, &
5051 : sphi_a, &
5052 : sphi_b, &
5053 : sphi_c, &
5054 : sphi_d, &
5055 : primitives, &
5056 0 : buffer1, buffer2)
5057 : #endif
5058 : CASE (4)
5059 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5060 : CALL contract_pggg(work, &
5061 : nl_a, nl_b, nl_c, nl_d, &
5062 : sphi_a, sphi_b, sphi_c, sphi_d, &
5063 : primitives, &
5064 : buffer1, buffer2)
5065 : #else
5066 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5067 : work, nl_a, nl_b, nl_c, nl_d, &
5068 : sphi_a, &
5069 : sphi_b, &
5070 : sphi_c, &
5071 : sphi_d, &
5072 : primitives, &
5073 0 : buffer1, buffer2)
5074 : #endif
5075 : CASE DEFAULT
5076 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5077 : work, nl_a, nl_b, nl_c, nl_d, &
5078 : sphi_a, &
5079 : sphi_b, &
5080 : sphi_c, &
5081 : sphi_d, &
5082 : primitives, &
5083 0 : buffer1, buffer2)
5084 : END SELECT
5085 : CASE DEFAULT
5086 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5087 : work, nl_a, nl_b, nl_c, nl_d, &
5088 : sphi_a, &
5089 : sphi_b, &
5090 : sphi_c, &
5091 : sphi_d, &
5092 : primitives, &
5093 0 : buffer1, buffer2)
5094 : END SELECT
5095 : CASE DEFAULT
5096 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5097 : work, nl_a, nl_b, nl_c, nl_d, &
5098 : sphi_a, &
5099 : sphi_b, &
5100 : sphi_c, &
5101 : sphi_d, &
5102 : primitives, &
5103 135945646 : buffer1, buffer2)
5104 : END SELECT
5105 : CASE (2)
5106 33947667 : SELECT CASE (n_b)
5107 : CASE (0)
5108 25121960 : SELECT CASE (n_c)
5109 : CASE (0)
5110 15280399 : SELECT CASE (n_d)
5111 : CASE (0)
5112 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5113 : CALL contract_dsss(work, &
5114 : nl_a, nl_b, nl_c, nl_d, &
5115 : sphi_a, sphi_b, sphi_c, sphi_d, &
5116 : primitives, &
5117 3803618 : buffer1, buffer2)
5118 : #else
5119 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5120 : work, nl_a, nl_b, nl_c, nl_d, &
5121 : sphi_a, &
5122 : sphi_b, &
5123 : sphi_c, &
5124 : sphi_d, &
5125 : primitives, &
5126 : buffer1, buffer2)
5127 : #endif
5128 : CASE (1)
5129 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5130 : CALL contract_dssp(work, &
5131 : nl_a, nl_b, nl_c, nl_d, &
5132 : sphi_a, sphi_b, sphi_c, sphi_d, &
5133 : primitives, &
5134 2204602 : buffer1, buffer2)
5135 : #else
5136 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5137 : work, nl_a, nl_b, nl_c, nl_d, &
5138 : sphi_a, &
5139 : sphi_b, &
5140 : sphi_c, &
5141 : sphi_d, &
5142 : primitives, &
5143 : buffer1, buffer2)
5144 : #endif
5145 : CASE (2)
5146 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5147 : CALL contract_dssd(work, &
5148 : nl_a, nl_b, nl_c, nl_d, &
5149 : sphi_a, sphi_b, sphi_c, sphi_d, &
5150 : primitives, &
5151 598925 : buffer1, buffer2)
5152 : #else
5153 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5154 : work, nl_a, nl_b, nl_c, nl_d, &
5155 : sphi_a, &
5156 : sphi_b, &
5157 : sphi_c, &
5158 : sphi_d, &
5159 : primitives, &
5160 : buffer1, buffer2)
5161 : #endif
5162 : CASE (3)
5163 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5164 : CALL contract_dssf(work, &
5165 : nl_a, nl_b, nl_c, nl_d, &
5166 : sphi_a, sphi_b, sphi_c, sphi_d, &
5167 : primitives, &
5168 : buffer1, buffer2)
5169 : #else
5170 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5171 : work, nl_a, nl_b, nl_c, nl_d, &
5172 : sphi_a, &
5173 : sphi_b, &
5174 : sphi_c, &
5175 : sphi_d, &
5176 : primitives, &
5177 3062 : buffer1, buffer2)
5178 : #endif
5179 : CASE (4)
5180 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5181 : CALL contract_dssg(work, &
5182 : nl_a, nl_b, nl_c, nl_d, &
5183 : sphi_a, sphi_b, sphi_c, sphi_d, &
5184 : primitives, &
5185 : buffer1, buffer2)
5186 : #else
5187 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5188 : work, nl_a, nl_b, nl_c, nl_d, &
5189 : sphi_a, &
5190 : sphi_b, &
5191 : sphi_c, &
5192 : sphi_d, &
5193 : primitives, &
5194 0 : buffer1, buffer2)
5195 : #endif
5196 : CASE DEFAULT
5197 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5198 : work, nl_a, nl_b, nl_c, nl_d, &
5199 : sphi_a, &
5200 : sphi_b, &
5201 : sphi_c, &
5202 : sphi_d, &
5203 : primitives, &
5204 6610207 : buffer1, buffer2)
5205 : END SELECT
5206 : CASE (1)
5207 9127881 : SELECT CASE (n_d)
5208 : CASE (0)
5209 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5210 : CALL contract_dsps(work, &
5211 : nl_a, nl_b, nl_c, nl_d, &
5212 : sphi_a, sphi_b, sphi_c, sphi_d, &
5213 : primitives, &
5214 2796090 : buffer1, buffer2)
5215 : #else
5216 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5217 : work, nl_a, nl_b, nl_c, nl_d, &
5218 : sphi_a, &
5219 : sphi_b, &
5220 : sphi_c, &
5221 : sphi_d, &
5222 : primitives, &
5223 : buffer1, buffer2)
5224 : #endif
5225 : CASE (1)
5226 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5227 : CALL contract_dspp(work, &
5228 : nl_a, nl_b, nl_c, nl_d, &
5229 : sphi_a, sphi_b, sphi_c, sphi_d, &
5230 : primitives, &
5231 1541341 : buffer1, buffer2)
5232 : #else
5233 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5234 : work, nl_a, nl_b, nl_c, nl_d, &
5235 : sphi_a, &
5236 : sphi_b, &
5237 : sphi_c, &
5238 : sphi_d, &
5239 : primitives, &
5240 : buffer1, buffer2)
5241 : #endif
5242 : CASE (2)
5243 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5244 : CALL contract_dspd(work, &
5245 : nl_a, nl_b, nl_c, nl_d, &
5246 : sphi_a, sphi_b, sphi_c, sphi_d, &
5247 : primitives, &
5248 524506 : buffer1, buffer2)
5249 : #else
5250 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5251 : work, nl_a, nl_b, nl_c, nl_d, &
5252 : sphi_a, &
5253 : sphi_b, &
5254 : sphi_c, &
5255 : sphi_d, &
5256 : primitives, &
5257 : buffer1, buffer2)
5258 : #endif
5259 : CASE (3)
5260 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5261 : CALL contract_dspf(work, &
5262 : nl_a, nl_b, nl_c, nl_d, &
5263 : sphi_a, sphi_b, sphi_c, sphi_d, &
5264 : primitives, &
5265 : buffer1, buffer2)
5266 : #else
5267 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5268 : work, nl_a, nl_b, nl_c, nl_d, &
5269 : sphi_a, &
5270 : sphi_b, &
5271 : sphi_c, &
5272 : sphi_d, &
5273 : primitives, &
5274 4637 : buffer1, buffer2)
5275 : #endif
5276 : CASE (4)
5277 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5278 : CALL contract_dspg(work, &
5279 : nl_a, nl_b, nl_c, nl_d, &
5280 : sphi_a, sphi_b, sphi_c, sphi_d, &
5281 : primitives, &
5282 : buffer1, buffer2)
5283 : #else
5284 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5285 : work, nl_a, nl_b, nl_c, nl_d, &
5286 : sphi_a, &
5287 : sphi_b, &
5288 : sphi_c, &
5289 : sphi_d, &
5290 : primitives, &
5291 0 : buffer1, buffer2)
5292 : #endif
5293 : CASE DEFAULT
5294 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5295 : work, nl_a, nl_b, nl_c, nl_d, &
5296 : sphi_a, &
5297 : sphi_b, &
5298 : sphi_c, &
5299 : sphi_d, &
5300 : primitives, &
5301 4866574 : buffer1, buffer2)
5302 : END SELECT
5303 : CASE (2)
5304 2218865 : SELECT CASE (n_d)
5305 : CASE (0)
5306 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5307 : CALL contract_dsds(work, &
5308 : nl_a, nl_b, nl_c, nl_d, &
5309 : sphi_a, sphi_b, sphi_c, sphi_d, &
5310 : primitives, &
5311 742538 : buffer1, buffer2)
5312 : #else
5313 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5314 : work, nl_a, nl_b, nl_c, nl_d, &
5315 : sphi_a, &
5316 : sphi_b, &
5317 : sphi_c, &
5318 : sphi_d, &
5319 : primitives, &
5320 : buffer1, buffer2)
5321 : #endif
5322 : CASE (1)
5323 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5324 : CALL contract_dsdp(work, &
5325 : nl_a, nl_b, nl_c, nl_d, &
5326 : sphi_a, sphi_b, sphi_c, sphi_d, &
5327 : primitives, &
5328 517324 : buffer1, buffer2)
5329 : #else
5330 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5331 : work, nl_a, nl_b, nl_c, nl_d, &
5332 : sphi_a, &
5333 : sphi_b, &
5334 : sphi_c, &
5335 : sphi_d, &
5336 : primitives, &
5337 : buffer1, buffer2)
5338 : #endif
5339 : CASE (2)
5340 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5341 : CALL contract_dsdd(work, &
5342 : nl_a, nl_b, nl_c, nl_d, &
5343 : sphi_a, sphi_b, sphi_c, sphi_d, &
5344 : primitives, &
5345 204130 : buffer1, buffer2)
5346 : #else
5347 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5348 : work, nl_a, nl_b, nl_c, nl_d, &
5349 : sphi_a, &
5350 : sphi_b, &
5351 : sphi_c, &
5352 : sphi_d, &
5353 : primitives, &
5354 : buffer1, buffer2)
5355 : #endif
5356 : CASE (3)
5357 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5358 : CALL contract_dsdf(work, &
5359 : nl_a, nl_b, nl_c, nl_d, &
5360 : sphi_a, sphi_b, sphi_c, sphi_d, &
5361 : primitives, &
5362 : buffer1, buffer2)
5363 : #else
5364 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5365 : work, nl_a, nl_b, nl_c, nl_d, &
5366 : sphi_a, &
5367 : sphi_b, &
5368 : sphi_c, &
5369 : sphi_d, &
5370 : primitives, &
5371 1225 : buffer1, buffer2)
5372 : #endif
5373 : CASE (4)
5374 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5375 : CALL contract_dsdg(work, &
5376 : nl_a, nl_b, nl_c, nl_d, &
5377 : sphi_a, sphi_b, sphi_c, sphi_d, &
5378 : primitives, &
5379 : buffer1, buffer2)
5380 : #else
5381 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5382 : work, nl_a, nl_b, nl_c, nl_d, &
5383 : sphi_a, &
5384 : sphi_b, &
5385 : sphi_c, &
5386 : sphi_d, &
5387 : primitives, &
5388 0 : buffer1, buffer2)
5389 : #endif
5390 : CASE DEFAULT
5391 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5392 : work, nl_a, nl_b, nl_c, nl_d, &
5393 : sphi_a, &
5394 : sphi_b, &
5395 : sphi_c, &
5396 : sphi_d, &
5397 : primitives, &
5398 1465217 : buffer1, buffer2)
5399 : END SELECT
5400 : CASE (3)
5401 15591 : SELECT CASE (n_d)
5402 : CASE (0)
5403 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5404 : CALL contract_dsfs(work, &
5405 : nl_a, nl_b, nl_c, nl_d, &
5406 : sphi_a, sphi_b, sphi_c, sphi_d, &
5407 : primitives, &
5408 : buffer1, buffer2)
5409 : #else
5410 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5411 : work, nl_a, nl_b, nl_c, nl_d, &
5412 : sphi_a, &
5413 : sphi_b, &
5414 : sphi_c, &
5415 : sphi_d, &
5416 : primitives, &
5417 4481 : buffer1, buffer2)
5418 : #endif
5419 : CASE (1)
5420 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5421 : CALL contract_dsfp(work, &
5422 : nl_a, nl_b, nl_c, nl_d, &
5423 : sphi_a, sphi_b, sphi_c, sphi_d, &
5424 : primitives, &
5425 : buffer1, buffer2)
5426 : #else
5427 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5428 : work, nl_a, nl_b, nl_c, nl_d, &
5429 : sphi_a, &
5430 : sphi_b, &
5431 : sphi_c, &
5432 : sphi_d, &
5433 : primitives, &
5434 4454 : buffer1, buffer2)
5435 : #endif
5436 : CASE (2)
5437 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5438 : CALL contract_dsfd(work, &
5439 : nl_a, nl_b, nl_c, nl_d, &
5440 : sphi_a, sphi_b, sphi_c, sphi_d, &
5441 : primitives, &
5442 : buffer1, buffer2)
5443 : #else
5444 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5445 : work, nl_a, nl_b, nl_c, nl_d, &
5446 : sphi_a, &
5447 : sphi_b, &
5448 : sphi_c, &
5449 : sphi_d, &
5450 : primitives, &
5451 1092 : buffer1, buffer2)
5452 : #endif
5453 : CASE (3)
5454 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5455 : CALL contract_dsff(work, &
5456 : nl_a, nl_b, nl_c, nl_d, &
5457 : sphi_a, sphi_b, sphi_c, sphi_d, &
5458 : primitives, &
5459 : buffer1, buffer2)
5460 : #else
5461 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5462 : work, nl_a, nl_b, nl_c, nl_d, &
5463 : sphi_a, &
5464 : sphi_b, &
5465 : sphi_c, &
5466 : sphi_d, &
5467 : primitives, &
5468 1083 : buffer1, buffer2)
5469 : #endif
5470 : CASE (4)
5471 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5472 : CALL contract_dsfg(work, &
5473 : nl_a, nl_b, nl_c, nl_d, &
5474 : sphi_a, sphi_b, sphi_c, sphi_d, &
5475 : primitives, &
5476 : buffer1, buffer2)
5477 : #else
5478 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5479 : work, nl_a, nl_b, nl_c, nl_d, &
5480 : sphi_a, &
5481 : sphi_b, &
5482 : sphi_c, &
5483 : sphi_d, &
5484 : primitives, &
5485 0 : buffer1, buffer2)
5486 : #endif
5487 : CASE DEFAULT
5488 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5489 : work, nl_a, nl_b, nl_c, nl_d, &
5490 : sphi_a, &
5491 : sphi_b, &
5492 : sphi_c, &
5493 : sphi_d, &
5494 : primitives, &
5495 11110 : buffer1, buffer2)
5496 : END SELECT
5497 : CASE (4)
5498 0 : SELECT CASE (n_d)
5499 : CASE (0)
5500 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5501 : CALL contract_dsgs(work, &
5502 : nl_a, nl_b, nl_c, nl_d, &
5503 : sphi_a, sphi_b, sphi_c, sphi_d, &
5504 : primitives, &
5505 : buffer1, buffer2)
5506 : #else
5507 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5508 : work, nl_a, nl_b, nl_c, nl_d, &
5509 : sphi_a, &
5510 : sphi_b, &
5511 : sphi_c, &
5512 : sphi_d, &
5513 : primitives, &
5514 0 : buffer1, buffer2)
5515 : #endif
5516 : CASE (1)
5517 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5518 : CALL contract_dsgp(work, &
5519 : nl_a, nl_b, nl_c, nl_d, &
5520 : sphi_a, sphi_b, sphi_c, sphi_d, &
5521 : primitives, &
5522 : buffer1, buffer2)
5523 : #else
5524 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5525 : work, nl_a, nl_b, nl_c, nl_d, &
5526 : sphi_a, &
5527 : sphi_b, &
5528 : sphi_c, &
5529 : sphi_d, &
5530 : primitives, &
5531 0 : buffer1, buffer2)
5532 : #endif
5533 : CASE (2)
5534 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5535 : CALL contract_dsgd(work, &
5536 : nl_a, nl_b, nl_c, nl_d, &
5537 : sphi_a, sphi_b, sphi_c, sphi_d, &
5538 : primitives, &
5539 : buffer1, buffer2)
5540 : #else
5541 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5542 : work, nl_a, nl_b, nl_c, nl_d, &
5543 : sphi_a, &
5544 : sphi_b, &
5545 : sphi_c, &
5546 : sphi_d, &
5547 : primitives, &
5548 0 : buffer1, buffer2)
5549 : #endif
5550 : CASE (3)
5551 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5552 : CALL contract_dsgf(work, &
5553 : nl_a, nl_b, nl_c, nl_d, &
5554 : sphi_a, sphi_b, sphi_c, sphi_d, &
5555 : primitives, &
5556 : buffer1, buffer2)
5557 : #else
5558 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5559 : work, nl_a, nl_b, nl_c, nl_d, &
5560 : sphi_a, &
5561 : sphi_b, &
5562 : sphi_c, &
5563 : sphi_d, &
5564 : primitives, &
5565 0 : buffer1, buffer2)
5566 : #endif
5567 : CASE (4)
5568 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5569 : CALL contract_dsgg(work, &
5570 : nl_a, nl_b, nl_c, nl_d, &
5571 : sphi_a, sphi_b, sphi_c, sphi_d, &
5572 : primitives, &
5573 : buffer1, buffer2)
5574 : #else
5575 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5576 : work, nl_a, nl_b, nl_c, nl_d, &
5577 : sphi_a, &
5578 : sphi_b, &
5579 : sphi_c, &
5580 : sphi_d, &
5581 : primitives, &
5582 0 : buffer1, buffer2)
5583 : #endif
5584 : CASE DEFAULT
5585 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5586 : work, nl_a, nl_b, nl_c, nl_d, &
5587 : sphi_a, &
5588 : sphi_b, &
5589 : sphi_c, &
5590 : sphi_d, &
5591 : primitives, &
5592 0 : buffer1, buffer2)
5593 : END SELECT
5594 : CASE DEFAULT
5595 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5596 : work, nl_a, nl_b, nl_c, nl_d, &
5597 : sphi_a, &
5598 : sphi_b, &
5599 : sphi_c, &
5600 : sphi_d, &
5601 : primitives, &
5602 12953108 : buffer1, buffer2)
5603 : END SELECT
5604 : CASE (1)
5605 10589838 : SELECT CASE (n_c)
5606 : CASE (0)
5607 6489483 : SELECT CASE (n_d)
5608 : CASE (0)
5609 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5610 : CALL contract_dpss(work, &
5611 : nl_a, nl_b, nl_c, nl_d, &
5612 : sphi_a, sphi_b, sphi_c, sphi_d, &
5613 : primitives, &
5614 1640240 : buffer1, buffer2)
5615 : #else
5616 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5617 : work, nl_a, nl_b, nl_c, nl_d, &
5618 : sphi_a, &
5619 : sphi_b, &
5620 : sphi_c, &
5621 : sphi_d, &
5622 : primitives, &
5623 : buffer1, buffer2)
5624 : #endif
5625 : CASE (1)
5626 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5627 : CALL contract_dpsp(work, &
5628 : nl_a, nl_b, nl_c, nl_d, &
5629 : sphi_a, sphi_b, sphi_c, sphi_d, &
5630 : primitives, &
5631 826957 : buffer1, buffer2)
5632 : #else
5633 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5634 : work, nl_a, nl_b, nl_c, nl_d, &
5635 : sphi_a, &
5636 : sphi_b, &
5637 : sphi_c, &
5638 : sphi_d, &
5639 : primitives, &
5640 : buffer1, buffer2)
5641 : #endif
5642 : CASE (2)
5643 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5644 : CALL contract_dpsd(work, &
5645 : nl_a, nl_b, nl_c, nl_d, &
5646 : sphi_a, sphi_b, sphi_c, sphi_d, &
5647 : primitives, &
5648 375556 : buffer1, buffer2)
5649 : #else
5650 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5651 : work, nl_a, nl_b, nl_c, nl_d, &
5652 : sphi_a, &
5653 : sphi_b, &
5654 : sphi_c, &
5655 : sphi_d, &
5656 : primitives, &
5657 : buffer1, buffer2)
5658 : #endif
5659 : CASE (3)
5660 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5661 : CALL contract_dpsf(work, &
5662 : nl_a, nl_b, nl_c, nl_d, &
5663 : sphi_a, sphi_b, sphi_c, sphi_d, &
5664 : primitives, &
5665 : buffer1, buffer2)
5666 : #else
5667 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5668 : work, nl_a, nl_b, nl_c, nl_d, &
5669 : sphi_a, &
5670 : sphi_b, &
5671 : sphi_c, &
5672 : sphi_d, &
5673 : primitives, &
5674 3398 : buffer1, buffer2)
5675 : #endif
5676 : CASE (4)
5677 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5678 : CALL contract_dpsg(work, &
5679 : nl_a, nl_b, nl_c, nl_d, &
5680 : sphi_a, sphi_b, sphi_c, sphi_d, &
5681 : primitives, &
5682 : buffer1, buffer2)
5683 : #else
5684 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5685 : work, nl_a, nl_b, nl_c, nl_d, &
5686 : sphi_a, &
5687 : sphi_b, &
5688 : sphi_c, &
5689 : sphi_d, &
5690 : primitives, &
5691 0 : buffer1, buffer2)
5692 : #endif
5693 : CASE DEFAULT
5694 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5695 : work, nl_a, nl_b, nl_c, nl_d, &
5696 : sphi_a, &
5697 : sphi_b, &
5698 : sphi_c, &
5699 : sphi_d, &
5700 : primitives, &
5701 2846151 : buffer1, buffer2)
5702 : END SELECT
5703 : CASE (1)
5704 3552577 : SELECT CASE (n_d)
5705 : CASE (0)
5706 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5707 : CALL contract_dpps(work, &
5708 : nl_a, nl_b, nl_c, nl_d, &
5709 : sphi_a, sphi_b, sphi_c, sphi_d, &
5710 : primitives, &
5711 845768 : buffer1, buffer2)
5712 : #else
5713 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5714 : work, nl_a, nl_b, nl_c, nl_d, &
5715 : sphi_a, &
5716 : sphi_b, &
5717 : sphi_c, &
5718 : sphi_d, &
5719 : primitives, &
5720 : buffer1, buffer2)
5721 : #endif
5722 : CASE (1)
5723 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5724 : CALL contract_dppp(work, &
5725 : nl_a, nl_b, nl_c, nl_d, &
5726 : sphi_a, sphi_b, sphi_c, sphi_d, &
5727 : primitives, &
5728 906289 : buffer1, buffer2)
5729 : #else
5730 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5731 : work, nl_a, nl_b, nl_c, nl_d, &
5732 : sphi_a, &
5733 : sphi_b, &
5734 : sphi_c, &
5735 : sphi_d, &
5736 : primitives, &
5737 : buffer1, buffer2)
5738 : #endif
5739 : CASE (2)
5740 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5741 : CALL contract_dppd(work, &
5742 : nl_a, nl_b, nl_c, nl_d, &
5743 : sphi_a, sphi_b, sphi_c, sphi_d, &
5744 : primitives, &
5745 249570 : buffer1, buffer2)
5746 : #else
5747 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5748 : work, nl_a, nl_b, nl_c, nl_d, &
5749 : sphi_a, &
5750 : sphi_b, &
5751 : sphi_c, &
5752 : sphi_d, &
5753 : primitives, &
5754 : buffer1, buffer2)
5755 : #endif
5756 : CASE (3)
5757 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5758 : CALL contract_dppf(work, &
5759 : nl_a, nl_b, nl_c, nl_d, &
5760 : sphi_a, sphi_b, sphi_c, sphi_d, &
5761 : primitives, &
5762 : buffer1, buffer2)
5763 : #else
5764 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5765 : work, nl_a, nl_b, nl_c, nl_d, &
5766 : sphi_a, &
5767 : sphi_b, &
5768 : sphi_c, &
5769 : sphi_d, &
5770 : primitives, &
5771 1465 : buffer1, buffer2)
5772 : #endif
5773 : CASE (4)
5774 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5775 : CALL contract_dppg(work, &
5776 : nl_a, nl_b, nl_c, nl_d, &
5777 : sphi_a, sphi_b, sphi_c, sphi_d, &
5778 : primitives, &
5779 : buffer1, buffer2)
5780 : #else
5781 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5782 : work, nl_a, nl_b, nl_c, nl_d, &
5783 : sphi_a, &
5784 : sphi_b, &
5785 : sphi_c, &
5786 : sphi_d, &
5787 : primitives, &
5788 0 : buffer1, buffer2)
5789 : #endif
5790 : CASE DEFAULT
5791 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5792 : work, nl_a, nl_b, nl_c, nl_d, &
5793 : sphi_a, &
5794 : sphi_b, &
5795 : sphi_c, &
5796 : sphi_d, &
5797 : primitives, &
5798 2003092 : buffer1, buffer2)
5799 : END SELECT
5800 : CASE (2)
5801 1059039 : SELECT CASE (n_d)
5802 : CASE (0)
5803 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5804 : CALL contract_dpds(work, &
5805 : nl_a, nl_b, nl_c, nl_d, &
5806 : sphi_a, sphi_b, sphi_c, sphi_d, &
5807 : primitives, &
5808 349637 : buffer1, buffer2)
5809 : #else
5810 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5811 : work, nl_a, nl_b, nl_c, nl_d, &
5812 : sphi_a, &
5813 : sphi_b, &
5814 : sphi_c, &
5815 : sphi_d, &
5816 : primitives, &
5817 : buffer1, buffer2)
5818 : #endif
5819 : CASE (1)
5820 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5821 : CALL contract_dpdp(work, &
5822 : nl_a, nl_b, nl_c, nl_d, &
5823 : sphi_a, sphi_b, sphi_c, sphi_d, &
5824 : primitives, &
5825 222037 : buffer1, buffer2)
5826 : #else
5827 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5828 : work, nl_a, nl_b, nl_c, nl_d, &
5829 : sphi_a, &
5830 : sphi_b, &
5831 : sphi_c, &
5832 : sphi_d, &
5833 : primitives, &
5834 : buffer1, buffer2)
5835 : #endif
5836 : CASE (2)
5837 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
5838 : CALL contract_dpdd(work, &
5839 : nl_a, nl_b, nl_c, nl_d, &
5840 : sphi_a, sphi_b, sphi_c, sphi_d, &
5841 : primitives, &
5842 130780 : buffer1, buffer2)
5843 : #else
5844 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5845 : work, nl_a, nl_b, nl_c, nl_d, &
5846 : sphi_a, &
5847 : sphi_b, &
5848 : sphi_c, &
5849 : sphi_d, &
5850 : primitives, &
5851 : buffer1, buffer2)
5852 : #endif
5853 : CASE (3)
5854 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5855 : CALL contract_dpdf(work, &
5856 : nl_a, nl_b, nl_c, nl_d, &
5857 : sphi_a, sphi_b, sphi_c, sphi_d, &
5858 : primitives, &
5859 : buffer1, buffer2)
5860 : #else
5861 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5862 : work, nl_a, nl_b, nl_c, nl_d, &
5863 : sphi_a, &
5864 : sphi_b, &
5865 : sphi_c, &
5866 : sphi_d, &
5867 : primitives, &
5868 1263 : buffer1, buffer2)
5869 : #endif
5870 : CASE (4)
5871 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5872 : CALL contract_dpdg(work, &
5873 : nl_a, nl_b, nl_c, nl_d, &
5874 : sphi_a, sphi_b, sphi_c, sphi_d, &
5875 : primitives, &
5876 : buffer1, buffer2)
5877 : #else
5878 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5879 : work, nl_a, nl_b, nl_c, nl_d, &
5880 : sphi_a, &
5881 : sphi_b, &
5882 : sphi_c, &
5883 : sphi_d, &
5884 : primitives, &
5885 0 : buffer1, buffer2)
5886 : #endif
5887 : CASE DEFAULT
5888 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5889 : work, nl_a, nl_b, nl_c, nl_d, &
5890 : sphi_a, &
5891 : sphi_b, &
5892 : sphi_c, &
5893 : sphi_d, &
5894 : primitives, &
5895 703717 : buffer1, buffer2)
5896 : END SELECT
5897 : CASE (3)
5898 8799 : SELECT CASE (n_d)
5899 : CASE (0)
5900 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5901 : CALL contract_dpfs(work, &
5902 : nl_a, nl_b, nl_c, nl_d, &
5903 : sphi_a, sphi_b, sphi_c, sphi_d, &
5904 : primitives, &
5905 : buffer1, buffer2)
5906 : #else
5907 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5908 : work, nl_a, nl_b, nl_c, nl_d, &
5909 : sphi_a, &
5910 : sphi_b, &
5911 : sphi_c, &
5912 : sphi_d, &
5913 : primitives, &
5914 3114 : buffer1, buffer2)
5915 : #endif
5916 : CASE (1)
5917 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5918 : CALL contract_dpfp(work, &
5919 : nl_a, nl_b, nl_c, nl_d, &
5920 : sphi_a, sphi_b, sphi_c, sphi_d, &
5921 : primitives, &
5922 : buffer1, buffer2)
5923 : #else
5924 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5925 : work, nl_a, nl_b, nl_c, nl_d, &
5926 : sphi_a, &
5927 : sphi_b, &
5928 : sphi_c, &
5929 : sphi_d, &
5930 : primitives, &
5931 1139 : buffer1, buffer2)
5932 : #endif
5933 : CASE (2)
5934 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5935 : CALL contract_dpfd(work, &
5936 : nl_a, nl_b, nl_c, nl_d, &
5937 : sphi_a, sphi_b, sphi_c, sphi_d, &
5938 : primitives, &
5939 : buffer1, buffer2)
5940 : #else
5941 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5942 : work, nl_a, nl_b, nl_c, nl_d, &
5943 : sphi_a, &
5944 : sphi_b, &
5945 : sphi_c, &
5946 : sphi_d, &
5947 : primitives, &
5948 1023 : buffer1, buffer2)
5949 : #endif
5950 : CASE (3)
5951 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
5952 : CALL contract_dpff(work, &
5953 : nl_a, nl_b, nl_c, nl_d, &
5954 : sphi_a, sphi_b, sphi_c, sphi_d, &
5955 : primitives, &
5956 : buffer1, buffer2)
5957 : #else
5958 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5959 : work, nl_a, nl_b, nl_c, nl_d, &
5960 : sphi_a, &
5961 : sphi_b, &
5962 : sphi_c, &
5963 : sphi_d, &
5964 : primitives, &
5965 409 : buffer1, buffer2)
5966 : #endif
5967 : CASE (4)
5968 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5969 : CALL contract_dpfg(work, &
5970 : nl_a, nl_b, nl_c, nl_d, &
5971 : sphi_a, sphi_b, sphi_c, sphi_d, &
5972 : primitives, &
5973 : buffer1, buffer2)
5974 : #else
5975 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5976 : work, nl_a, nl_b, nl_c, nl_d, &
5977 : sphi_a, &
5978 : sphi_b, &
5979 : sphi_c, &
5980 : sphi_d, &
5981 : primitives, &
5982 0 : buffer1, buffer2)
5983 : #endif
5984 : CASE DEFAULT
5985 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
5986 : work, nl_a, nl_b, nl_c, nl_d, &
5987 : sphi_a, &
5988 : sphi_b, &
5989 : sphi_c, &
5990 : sphi_d, &
5991 : primitives, &
5992 5685 : buffer1, buffer2)
5993 : END SELECT
5994 : CASE (4)
5995 0 : SELECT CASE (n_d)
5996 : CASE (0)
5997 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
5998 : CALL contract_dpgs(work, &
5999 : nl_a, nl_b, nl_c, nl_d, &
6000 : sphi_a, sphi_b, sphi_c, sphi_d, &
6001 : primitives, &
6002 : buffer1, buffer2)
6003 : #else
6004 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6005 : work, nl_a, nl_b, nl_c, nl_d, &
6006 : sphi_a, &
6007 : sphi_b, &
6008 : sphi_c, &
6009 : sphi_d, &
6010 : primitives, &
6011 0 : buffer1, buffer2)
6012 : #endif
6013 : CASE (1)
6014 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6015 : CALL contract_dpgp(work, &
6016 : nl_a, nl_b, nl_c, nl_d, &
6017 : sphi_a, sphi_b, sphi_c, sphi_d, &
6018 : primitives, &
6019 : buffer1, buffer2)
6020 : #else
6021 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6022 : work, nl_a, nl_b, nl_c, nl_d, &
6023 : sphi_a, &
6024 : sphi_b, &
6025 : sphi_c, &
6026 : sphi_d, &
6027 : primitives, &
6028 0 : buffer1, buffer2)
6029 : #endif
6030 : CASE (2)
6031 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6032 : CALL contract_dpgd(work, &
6033 : nl_a, nl_b, nl_c, nl_d, &
6034 : sphi_a, sphi_b, sphi_c, sphi_d, &
6035 : primitives, &
6036 : buffer1, buffer2)
6037 : #else
6038 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6039 : work, nl_a, nl_b, nl_c, nl_d, &
6040 : sphi_a, &
6041 : sphi_b, &
6042 : sphi_c, &
6043 : sphi_d, &
6044 : primitives, &
6045 0 : buffer1, buffer2)
6046 : #endif
6047 : CASE (3)
6048 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6049 : CALL contract_dpgf(work, &
6050 : nl_a, nl_b, nl_c, nl_d, &
6051 : sphi_a, sphi_b, sphi_c, sphi_d, &
6052 : primitives, &
6053 : buffer1, buffer2)
6054 : #else
6055 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6056 : work, nl_a, nl_b, nl_c, nl_d, &
6057 : sphi_a, &
6058 : sphi_b, &
6059 : sphi_c, &
6060 : sphi_d, &
6061 : primitives, &
6062 0 : buffer1, buffer2)
6063 : #endif
6064 : CASE (4)
6065 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6066 : CALL contract_dpgg(work, &
6067 : nl_a, nl_b, nl_c, nl_d, &
6068 : sphi_a, sphi_b, sphi_c, sphi_d, &
6069 : primitives, &
6070 : buffer1, buffer2)
6071 : #else
6072 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6073 : work, nl_a, nl_b, nl_c, nl_d, &
6074 : sphi_a, &
6075 : sphi_b, &
6076 : sphi_c, &
6077 : sphi_d, &
6078 : primitives, &
6079 0 : buffer1, buffer2)
6080 : #endif
6081 : CASE DEFAULT
6082 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6083 : work, nl_a, nl_b, nl_c, nl_d, &
6084 : sphi_a, &
6085 : sphi_b, &
6086 : sphi_c, &
6087 : sphi_d, &
6088 : primitives, &
6089 0 : buffer1, buffer2)
6090 : END SELECT
6091 : CASE DEFAULT
6092 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6093 : work, nl_a, nl_b, nl_c, nl_d, &
6094 : sphi_a, &
6095 : sphi_b, &
6096 : sphi_c, &
6097 : sphi_d, &
6098 : primitives, &
6099 5558645 : buffer1, buffer2)
6100 : END SELECT
6101 : CASE (2)
6102 3272878 : SELECT CASE (n_c)
6103 : CASE (0)
6104 2312372 : SELECT CASE (n_d)
6105 : CASE (0)
6106 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6107 : CALL contract_ddss(work, &
6108 : nl_a, nl_b, nl_c, nl_d, &
6109 : sphi_a, sphi_b, sphi_c, sphi_d, &
6110 : primitives, &
6111 457225 : buffer1, buffer2)
6112 : #else
6113 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6114 : work, nl_a, nl_b, nl_c, nl_d, &
6115 : sphi_a, &
6116 : sphi_b, &
6117 : sphi_c, &
6118 : sphi_d, &
6119 : primitives, &
6120 : buffer1, buffer2)
6121 : #endif
6122 : CASE (1)
6123 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6124 : CALL contract_ddsp(work, &
6125 : nl_a, nl_b, nl_c, nl_d, &
6126 : sphi_a, sphi_b, sphi_c, sphi_d, &
6127 : primitives, &
6128 407464 : buffer1, buffer2)
6129 : #else
6130 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6131 : work, nl_a, nl_b, nl_c, nl_d, &
6132 : sphi_a, &
6133 : sphi_b, &
6134 : sphi_c, &
6135 : sphi_d, &
6136 : primitives, &
6137 : buffer1, buffer2)
6138 : #endif
6139 : CASE (2)
6140 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6141 : CALL contract_ddsd(work, &
6142 : nl_a, nl_b, nl_c, nl_d, &
6143 : sphi_a, sphi_b, sphi_c, sphi_d, &
6144 : primitives, &
6145 195178 : buffer1, buffer2)
6146 : #else
6147 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6148 : work, nl_a, nl_b, nl_c, nl_d, &
6149 : sphi_a, &
6150 : sphi_b, &
6151 : sphi_c, &
6152 : sphi_d, &
6153 : primitives, &
6154 : buffer1, buffer2)
6155 : #endif
6156 : CASE (3)
6157 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6158 : CALL contract_ddsf(work, &
6159 : nl_a, nl_b, nl_c, nl_d, &
6160 : sphi_a, sphi_b, sphi_c, sphi_d, &
6161 : primitives, &
6162 : buffer1, buffer2)
6163 : #else
6164 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6165 : work, nl_a, nl_b, nl_c, nl_d, &
6166 : sphi_a, &
6167 : sphi_b, &
6168 : sphi_c, &
6169 : sphi_d, &
6170 : primitives, &
6171 1184 : buffer1, buffer2)
6172 : #endif
6173 : CASE (4)
6174 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6175 : CALL contract_ddsg(work, &
6176 : nl_a, nl_b, nl_c, nl_d, &
6177 : sphi_a, sphi_b, sphi_c, sphi_d, &
6178 : primitives, &
6179 : buffer1, buffer2)
6180 : #else
6181 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6182 : work, nl_a, nl_b, nl_c, nl_d, &
6183 : sphi_a, &
6184 : sphi_b, &
6185 : sphi_c, &
6186 : sphi_d, &
6187 : primitives, &
6188 0 : buffer1, buffer2)
6189 : #endif
6190 : CASE DEFAULT
6191 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6192 : work, nl_a, nl_b, nl_c, nl_d, &
6193 : sphi_a, &
6194 : sphi_b, &
6195 : sphi_c, &
6196 : sphi_d, &
6197 : primitives, &
6198 1061051 : buffer1, buffer2)
6199 : END SELECT
6200 : CASE (1)
6201 1489963 : SELECT CASE (n_d)
6202 : CASE (0)
6203 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6204 : CALL contract_ddps(work, &
6205 : nl_a, nl_b, nl_c, nl_d, &
6206 : sphi_a, sphi_b, sphi_c, sphi_d, &
6207 : primitives, &
6208 368674 : buffer1, buffer2)
6209 : #else
6210 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6211 : work, nl_a, nl_b, nl_c, nl_d, &
6212 : sphi_a, &
6213 : sphi_b, &
6214 : sphi_c, &
6215 : sphi_d, &
6216 : primitives, &
6217 : buffer1, buffer2)
6218 : #endif
6219 : CASE (1)
6220 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6221 : CALL contract_ddpp(work, &
6222 : nl_a, nl_b, nl_c, nl_d, &
6223 : sphi_a, sphi_b, sphi_c, sphi_d, &
6224 : primitives, &
6225 257805 : buffer1, buffer2)
6226 : #else
6227 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6228 : work, nl_a, nl_b, nl_c, nl_d, &
6229 : sphi_a, &
6230 : sphi_b, &
6231 : sphi_c, &
6232 : sphi_d, &
6233 : primitives, &
6234 : buffer1, buffer2)
6235 : #endif
6236 : CASE (2)
6237 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6238 : CALL contract_ddpd(work, &
6239 : nl_a, nl_b, nl_c, nl_d, &
6240 : sphi_a, sphi_b, sphi_c, sphi_d, &
6241 : primitives, &
6242 165728 : buffer1, buffer2)
6243 : #else
6244 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6245 : work, nl_a, nl_b, nl_c, nl_d, &
6246 : sphi_a, &
6247 : sphi_b, &
6248 : sphi_c, &
6249 : sphi_d, &
6250 : primitives, &
6251 : buffer1, buffer2)
6252 : #endif
6253 : CASE (3)
6254 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6255 : CALL contract_ddpf(work, &
6256 : nl_a, nl_b, nl_c, nl_d, &
6257 : sphi_a, sphi_b, sphi_c, sphi_d, &
6258 : primitives, &
6259 : buffer1, buffer2)
6260 : #else
6261 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6262 : work, nl_a, nl_b, nl_c, nl_d, &
6263 : sphi_a, &
6264 : sphi_b, &
6265 : sphi_c, &
6266 : sphi_d, &
6267 : primitives, &
6268 1889 : buffer1, buffer2)
6269 : #endif
6270 : CASE (4)
6271 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6272 : CALL contract_ddpg(work, &
6273 : nl_a, nl_b, nl_c, nl_d, &
6274 : sphi_a, sphi_b, sphi_c, sphi_d, &
6275 : primitives, &
6276 : buffer1, buffer2)
6277 : #else
6278 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6279 : work, nl_a, nl_b, nl_c, nl_d, &
6280 : sphi_a, &
6281 : sphi_b, &
6282 : sphi_c, &
6283 : sphi_d, &
6284 : primitives, &
6285 0 : buffer1, buffer2)
6286 : #endif
6287 : CASE DEFAULT
6288 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6289 : work, nl_a, nl_b, nl_c, nl_d, &
6290 : sphi_a, &
6291 : sphi_b, &
6292 : sphi_c, &
6293 : sphi_d, &
6294 : primitives, &
6295 794096 : buffer1, buffer2)
6296 : END SELECT
6297 : CASE (2)
6298 455586 : SELECT CASE (n_d)
6299 : CASE (0)
6300 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6301 : CALL contract_ddds(work, &
6302 : nl_a, nl_b, nl_c, nl_d, &
6303 : sphi_a, sphi_b, sphi_c, sphi_d, &
6304 : primitives, &
6305 125691 : buffer1, buffer2)
6306 : #else
6307 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6308 : work, nl_a, nl_b, nl_c, nl_d, &
6309 : sphi_a, &
6310 : sphi_b, &
6311 : sphi_c, &
6312 : sphi_d, &
6313 : primitives, &
6314 : buffer1, buffer2)
6315 : #endif
6316 : CASE (1)
6317 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6318 : CALL contract_dddp(work, &
6319 : nl_a, nl_b, nl_c, nl_d, &
6320 : sphi_a, sphi_b, sphi_c, sphi_d, &
6321 : primitives, &
6322 119163 : buffer1, buffer2)
6323 : #else
6324 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6325 : work, nl_a, nl_b, nl_c, nl_d, &
6326 : sphi_a, &
6327 : sphi_b, &
6328 : sphi_c, &
6329 : sphi_d, &
6330 : primitives, &
6331 : buffer1, buffer2)
6332 : #endif
6333 : CASE (2)
6334 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
6335 : CALL contract_dddd(work, &
6336 : nl_a, nl_b, nl_c, nl_d, &
6337 : sphi_a, sphi_b, sphi_c, sphi_d, &
6338 : primitives, &
6339 81816 : buffer1, buffer2)
6340 : #else
6341 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6342 : work, nl_a, nl_b, nl_c, nl_d, &
6343 : sphi_a, &
6344 : sphi_b, &
6345 : sphi_c, &
6346 : sphi_d, &
6347 : primitives, &
6348 : buffer1, buffer2)
6349 : #endif
6350 : CASE (3)
6351 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6352 : CALL contract_dddf(work, &
6353 : nl_a, nl_b, nl_c, nl_d, &
6354 : sphi_a, sphi_b, sphi_c, sphi_d, &
6355 : primitives, &
6356 : buffer1, buffer2)
6357 : #else
6358 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6359 : work, nl_a, nl_b, nl_c, nl_d, &
6360 : sphi_a, &
6361 : sphi_b, &
6362 : sphi_c, &
6363 : sphi_d, &
6364 : primitives, &
6365 523 : buffer1, buffer2)
6366 : #endif
6367 : CASE (4)
6368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6369 : CALL contract_dddg(work, &
6370 : nl_a, nl_b, nl_c, nl_d, &
6371 : sphi_a, sphi_b, sphi_c, sphi_d, &
6372 : primitives, &
6373 : buffer1, buffer2)
6374 : #else
6375 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6376 : work, nl_a, nl_b, nl_c, nl_d, &
6377 : sphi_a, &
6378 : sphi_b, &
6379 : sphi_c, &
6380 : sphi_d, &
6381 : primitives, &
6382 0 : buffer1, buffer2)
6383 : #endif
6384 : CASE DEFAULT
6385 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6386 : work, nl_a, nl_b, nl_c, nl_d, &
6387 : sphi_a, &
6388 : sphi_b, &
6389 : sphi_c, &
6390 : sphi_d, &
6391 : primitives, &
6392 327193 : buffer1, buffer2)
6393 : END SELECT
6394 : CASE (3)
6395 3399 : SELECT CASE (n_d)
6396 : CASE (0)
6397 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6398 : CALL contract_ddfs(work, &
6399 : nl_a, nl_b, nl_c, nl_d, &
6400 : sphi_a, sphi_b, sphi_c, sphi_d, &
6401 : primitives, &
6402 : buffer1, buffer2)
6403 : #else
6404 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6405 : work, nl_a, nl_b, nl_c, nl_d, &
6406 : sphi_a, &
6407 : sphi_b, &
6408 : sphi_c, &
6409 : sphi_d, &
6410 : primitives, &
6411 697 : buffer1, buffer2)
6412 : #endif
6413 : CASE (1)
6414 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6415 : CALL contract_ddfp(work, &
6416 : nl_a, nl_b, nl_c, nl_d, &
6417 : sphi_a, sphi_b, sphi_c, sphi_d, &
6418 : primitives, &
6419 : buffer1, buffer2)
6420 : #else
6421 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6422 : work, nl_a, nl_b, nl_c, nl_d, &
6423 : sphi_a, &
6424 : sphi_b, &
6425 : sphi_c, &
6426 : sphi_d, &
6427 : primitives, &
6428 1109 : buffer1, buffer2)
6429 : #endif
6430 : CASE (2)
6431 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6432 : CALL contract_ddfd(work, &
6433 : nl_a, nl_b, nl_c, nl_d, &
6434 : sphi_a, sphi_b, sphi_c, sphi_d, &
6435 : primitives, &
6436 : buffer1, buffer2)
6437 : #else
6438 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6439 : work, nl_a, nl_b, nl_c, nl_d, &
6440 : sphi_a, &
6441 : sphi_b, &
6442 : sphi_c, &
6443 : sphi_d, &
6444 : primitives, &
6445 353 : buffer1, buffer2)
6446 : #endif
6447 : CASE (3)
6448 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6449 : CALL contract_ddff(work, &
6450 : nl_a, nl_b, nl_c, nl_d, &
6451 : sphi_a, sphi_b, sphi_c, sphi_d, &
6452 : primitives, &
6453 : buffer1, buffer2)
6454 : #else
6455 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6456 : work, nl_a, nl_b, nl_c, nl_d, &
6457 : sphi_a, &
6458 : sphi_b, &
6459 : sphi_c, &
6460 : sphi_d, &
6461 : primitives, &
6462 543 : buffer1, buffer2)
6463 : #endif
6464 : CASE (4)
6465 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6466 : CALL contract_ddfg(work, &
6467 : nl_a, nl_b, nl_c, nl_d, &
6468 : sphi_a, sphi_b, sphi_c, sphi_d, &
6469 : primitives, &
6470 : buffer1, buffer2)
6471 : #else
6472 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6473 : work, nl_a, nl_b, nl_c, nl_d, &
6474 : sphi_a, &
6475 : sphi_b, &
6476 : sphi_c, &
6477 : sphi_d, &
6478 : primitives, &
6479 0 : buffer1, buffer2)
6480 : #endif
6481 : CASE DEFAULT
6482 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6483 : work, nl_a, nl_b, nl_c, nl_d, &
6484 : sphi_a, &
6485 : sphi_b, &
6486 : sphi_c, &
6487 : sphi_d, &
6488 : primitives, &
6489 2702 : buffer1, buffer2)
6490 : END SELECT
6491 : CASE (4)
6492 0 : SELECT CASE (n_d)
6493 : CASE (0)
6494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6495 : CALL contract_ddgs(work, &
6496 : nl_a, nl_b, nl_c, nl_d, &
6497 : sphi_a, sphi_b, sphi_c, sphi_d, &
6498 : primitives, &
6499 : buffer1, buffer2)
6500 : #else
6501 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6502 : work, nl_a, nl_b, nl_c, nl_d, &
6503 : sphi_a, &
6504 : sphi_b, &
6505 : sphi_c, &
6506 : sphi_d, &
6507 : primitives, &
6508 0 : buffer1, buffer2)
6509 : #endif
6510 : CASE (1)
6511 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6512 : CALL contract_ddgp(work, &
6513 : nl_a, nl_b, nl_c, nl_d, &
6514 : sphi_a, sphi_b, sphi_c, sphi_d, &
6515 : primitives, &
6516 : buffer1, buffer2)
6517 : #else
6518 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6519 : work, nl_a, nl_b, nl_c, nl_d, &
6520 : sphi_a, &
6521 : sphi_b, &
6522 : sphi_c, &
6523 : sphi_d, &
6524 : primitives, &
6525 0 : buffer1, buffer2)
6526 : #endif
6527 : CASE (2)
6528 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6529 : CALL contract_ddgd(work, &
6530 : nl_a, nl_b, nl_c, nl_d, &
6531 : sphi_a, sphi_b, sphi_c, sphi_d, &
6532 : primitives, &
6533 : buffer1, buffer2)
6534 : #else
6535 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6536 : work, nl_a, nl_b, nl_c, nl_d, &
6537 : sphi_a, &
6538 : sphi_b, &
6539 : sphi_c, &
6540 : sphi_d, &
6541 : primitives, &
6542 0 : buffer1, buffer2)
6543 : #endif
6544 : CASE (3)
6545 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6546 : CALL contract_ddgf(work, &
6547 : nl_a, nl_b, nl_c, nl_d, &
6548 : sphi_a, sphi_b, sphi_c, sphi_d, &
6549 : primitives, &
6550 : buffer1, buffer2)
6551 : #else
6552 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6553 : work, nl_a, nl_b, nl_c, nl_d, &
6554 : sphi_a, &
6555 : sphi_b, &
6556 : sphi_c, &
6557 : sphi_d, &
6558 : primitives, &
6559 0 : buffer1, buffer2)
6560 : #endif
6561 : CASE (4)
6562 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6563 : CALL contract_ddgg(work, &
6564 : nl_a, nl_b, nl_c, nl_d, &
6565 : sphi_a, sphi_b, sphi_c, sphi_d, &
6566 : primitives, &
6567 : buffer1, buffer2)
6568 : #else
6569 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6570 : work, nl_a, nl_b, nl_c, nl_d, &
6571 : sphi_a, &
6572 : sphi_b, &
6573 : sphi_c, &
6574 : sphi_d, &
6575 : primitives, &
6576 0 : buffer1, buffer2)
6577 : #endif
6578 : CASE DEFAULT
6579 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6580 : work, nl_a, nl_b, nl_c, nl_d, &
6581 : sphi_a, &
6582 : sphi_b, &
6583 : sphi_c, &
6584 : sphi_d, &
6585 : primitives, &
6586 0 : buffer1, buffer2)
6587 : END SELECT
6588 : CASE DEFAULT
6589 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6590 : work, nl_a, nl_b, nl_c, nl_d, &
6591 : sphi_a, &
6592 : sphi_b, &
6593 : sphi_c, &
6594 : sphi_d, &
6595 : primitives, &
6596 2185042 : buffer1, buffer2)
6597 : END SELECT
6598 : CASE (3)
6599 40974 : SELECT CASE (n_c)
6600 : CASE (0)
6601 27046 : SELECT CASE (n_d)
6602 : CASE (0)
6603 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6604 : CALL contract_dfss(work, &
6605 : nl_a, nl_b, nl_c, nl_d, &
6606 : sphi_a, sphi_b, sphi_c, sphi_d, &
6607 : primitives, &
6608 : buffer1, buffer2)
6609 : #else
6610 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6611 : work, nl_a, nl_b, nl_c, nl_d, &
6612 : sphi_a, &
6613 : sphi_b, &
6614 : sphi_c, &
6615 : sphi_d, &
6616 : primitives, &
6617 4821 : buffer1, buffer2)
6618 : #endif
6619 : CASE (1)
6620 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6621 : CALL contract_dfsp(work, &
6622 : nl_a, nl_b, nl_c, nl_d, &
6623 : sphi_a, sphi_b, sphi_c, sphi_d, &
6624 : primitives, &
6625 : buffer1, buffer2)
6626 : #else
6627 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6628 : work, nl_a, nl_b, nl_c, nl_d, &
6629 : sphi_a, &
6630 : sphi_b, &
6631 : sphi_c, &
6632 : sphi_d, &
6633 : primitives, &
6634 6387 : buffer1, buffer2)
6635 : #endif
6636 : CASE (2)
6637 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6638 : CALL contract_dfsd(work, &
6639 : nl_a, nl_b, nl_c, nl_d, &
6640 : sphi_a, sphi_b, sphi_c, sphi_d, &
6641 : primitives, &
6642 : buffer1, buffer2)
6643 : #else
6644 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6645 : work, nl_a, nl_b, nl_c, nl_d, &
6646 : sphi_a, &
6647 : sphi_b, &
6648 : sphi_c, &
6649 : sphi_d, &
6650 : primitives, &
6651 1402 : buffer1, buffer2)
6652 : #endif
6653 : CASE (3)
6654 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6655 : CALL contract_dfsf(work, &
6656 : nl_a, nl_b, nl_c, nl_d, &
6657 : sphi_a, sphi_b, sphi_c, sphi_d, &
6658 : primitives, &
6659 : buffer1, buffer2)
6660 : #else
6661 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6662 : work, nl_a, nl_b, nl_c, nl_d, &
6663 : sphi_a, &
6664 : sphi_b, &
6665 : sphi_c, &
6666 : sphi_d, &
6667 : primitives, &
6668 1579 : buffer1, buffer2)
6669 : #endif
6670 : CASE (4)
6671 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6672 : CALL contract_dfsg(work, &
6673 : nl_a, nl_b, nl_c, nl_d, &
6674 : sphi_a, sphi_b, sphi_c, sphi_d, &
6675 : primitives, &
6676 : buffer1, buffer2)
6677 : #else
6678 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6679 : work, nl_a, nl_b, nl_c, nl_d, &
6680 : sphi_a, &
6681 : sphi_b, &
6682 : sphi_c, &
6683 : sphi_d, &
6684 : primitives, &
6685 0 : buffer1, buffer2)
6686 : #endif
6687 : CASE DEFAULT
6688 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6689 : work, nl_a, nl_b, nl_c, nl_d, &
6690 : sphi_a, &
6691 : sphi_b, &
6692 : sphi_c, &
6693 : sphi_d, &
6694 : primitives, &
6695 14189 : buffer1, buffer2)
6696 : END SELECT
6697 : CASE (1)
6698 14593 : SELECT CASE (n_d)
6699 : CASE (0)
6700 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6701 : CALL contract_dfps(work, &
6702 : nl_a, nl_b, nl_c, nl_d, &
6703 : sphi_a, sphi_b, sphi_c, sphi_d, &
6704 : primitives, &
6705 : buffer1, buffer2)
6706 : #else
6707 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6708 : work, nl_a, nl_b, nl_c, nl_d, &
6709 : sphi_a, &
6710 : sphi_b, &
6711 : sphi_c, &
6712 : sphi_d, &
6713 : primitives, &
6714 3612 : buffer1, buffer2)
6715 : #endif
6716 : CASE (1)
6717 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6718 : CALL contract_dfpp(work, &
6719 : nl_a, nl_b, nl_c, nl_d, &
6720 : sphi_a, sphi_b, sphi_c, sphi_d, &
6721 : primitives, &
6722 : buffer1, buffer2)
6723 : #else
6724 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6725 : work, nl_a, nl_b, nl_c, nl_d, &
6726 : sphi_a, &
6727 : sphi_b, &
6728 : sphi_c, &
6729 : sphi_d, &
6730 : primitives, &
6731 1751 : buffer1, buffer2)
6732 : #endif
6733 : CASE (2)
6734 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6735 : CALL contract_dfpd(work, &
6736 : nl_a, nl_b, nl_c, nl_d, &
6737 : sphi_a, sphi_b, sphi_c, sphi_d, &
6738 : primitives, &
6739 : buffer1, buffer2)
6740 : #else
6741 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6742 : work, nl_a, nl_b, nl_c, nl_d, &
6743 : sphi_a, &
6744 : sphi_b, &
6745 : sphi_c, &
6746 : sphi_d, &
6747 : primitives, &
6748 2030 : buffer1, buffer2)
6749 : #endif
6750 : CASE (3)
6751 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6752 : CALL contract_dfpf(work, &
6753 : nl_a, nl_b, nl_c, nl_d, &
6754 : sphi_a, sphi_b, sphi_c, sphi_d, &
6755 : primitives, &
6756 : buffer1, buffer2)
6757 : #else
6758 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6759 : work, nl_a, nl_b, nl_c, nl_d, &
6760 : sphi_a, &
6761 : sphi_b, &
6762 : sphi_c, &
6763 : sphi_d, &
6764 : primitives, &
6765 643 : buffer1, buffer2)
6766 : #endif
6767 : CASE (4)
6768 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6769 : CALL contract_dfpg(work, &
6770 : nl_a, nl_b, nl_c, nl_d, &
6771 : sphi_a, sphi_b, sphi_c, sphi_d, &
6772 : primitives, &
6773 : buffer1, buffer2)
6774 : #else
6775 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6776 : work, nl_a, nl_b, nl_c, nl_d, &
6777 : sphi_a, &
6778 : sphi_b, &
6779 : sphi_c, &
6780 : sphi_d, &
6781 : primitives, &
6782 0 : buffer1, buffer2)
6783 : #endif
6784 : CASE DEFAULT
6785 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6786 : work, nl_a, nl_b, nl_c, nl_d, &
6787 : sphi_a, &
6788 : sphi_b, &
6789 : sphi_c, &
6790 : sphi_d, &
6791 : primitives, &
6792 8036 : buffer1, buffer2)
6793 : END SELECT
6794 : CASE (2)
6795 5274 : SELECT CASE (n_d)
6796 : CASE (0)
6797 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6798 : CALL contract_dfds(work, &
6799 : nl_a, nl_b, nl_c, nl_d, &
6800 : sphi_a, sphi_b, sphi_c, sphi_d, &
6801 : primitives, &
6802 : buffer1, buffer2)
6803 : #else
6804 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6805 : work, nl_a, nl_b, nl_c, nl_d, &
6806 : sphi_a, &
6807 : sphi_b, &
6808 : sphi_c, &
6809 : sphi_d, &
6810 : primitives, &
6811 714 : buffer1, buffer2)
6812 : #endif
6813 : CASE (1)
6814 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6815 : CALL contract_dfdp(work, &
6816 : nl_a, nl_b, nl_c, nl_d, &
6817 : sphi_a, sphi_b, sphi_c, sphi_d, &
6818 : primitives, &
6819 : buffer1, buffer2)
6820 : #else
6821 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6822 : work, nl_a, nl_b, nl_c, nl_d, &
6823 : sphi_a, &
6824 : sphi_b, &
6825 : sphi_c, &
6826 : sphi_d, &
6827 : primitives, &
6828 1131 : buffer1, buffer2)
6829 : #endif
6830 : CASE (2)
6831 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6832 : CALL contract_dfdd(work, &
6833 : nl_a, nl_b, nl_c, nl_d, &
6834 : sphi_a, sphi_b, sphi_c, sphi_d, &
6835 : primitives, &
6836 : buffer1, buffer2)
6837 : #else
6838 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6839 : work, nl_a, nl_b, nl_c, nl_d, &
6840 : sphi_a, &
6841 : sphi_b, &
6842 : sphi_c, &
6843 : sphi_d, &
6844 : primitives, &
6845 495 : buffer1, buffer2)
6846 : #endif
6847 : CASE (3)
6848 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6849 : CALL contract_dfdf(work, &
6850 : nl_a, nl_b, nl_c, nl_d, &
6851 : sphi_a, sphi_b, sphi_c, sphi_d, &
6852 : primitives, &
6853 : buffer1, buffer2)
6854 : #else
6855 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6856 : work, nl_a, nl_b, nl_c, nl_d, &
6857 : sphi_a, &
6858 : sphi_b, &
6859 : sphi_c, &
6860 : sphi_d, &
6861 : primitives, &
6862 605 : buffer1, buffer2)
6863 : #endif
6864 : CASE (4)
6865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6866 : CALL contract_dfdg(work, &
6867 : nl_a, nl_b, nl_c, nl_d, &
6868 : sphi_a, sphi_b, sphi_c, sphi_d, &
6869 : primitives, &
6870 : buffer1, buffer2)
6871 : #else
6872 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6873 : work, nl_a, nl_b, nl_c, nl_d, &
6874 : sphi_a, &
6875 : sphi_b, &
6876 : sphi_c, &
6877 : sphi_d, &
6878 : primitives, &
6879 0 : buffer1, buffer2)
6880 : #endif
6881 : CASE DEFAULT
6882 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6883 : work, nl_a, nl_b, nl_c, nl_d, &
6884 : sphi_a, &
6885 : sphi_b, &
6886 : sphi_c, &
6887 : sphi_d, &
6888 : primitives, &
6889 2945 : buffer1, buffer2)
6890 : END SELECT
6891 : CASE (3)
6892 2327 : SELECT CASE (n_d)
6893 : CASE (0)
6894 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6895 : CALL contract_dffs(work, &
6896 : nl_a, nl_b, nl_c, nl_d, &
6897 : sphi_a, sphi_b, sphi_c, sphi_d, &
6898 : primitives, &
6899 : buffer1, buffer2)
6900 : #else
6901 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6902 : work, nl_a, nl_b, nl_c, nl_d, &
6903 : sphi_a, &
6904 : sphi_b, &
6905 : sphi_c, &
6906 : sphi_d, &
6907 : primitives, &
6908 712 : buffer1, buffer2)
6909 : #endif
6910 : CASE (1)
6911 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6912 : CALL contract_dffp(work, &
6913 : nl_a, nl_b, nl_c, nl_d, &
6914 : sphi_a, sphi_b, sphi_c, sphi_d, &
6915 : primitives, &
6916 : buffer1, buffer2)
6917 : #else
6918 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6919 : work, nl_a, nl_b, nl_c, nl_d, &
6920 : sphi_a, &
6921 : sphi_b, &
6922 : sphi_c, &
6923 : sphi_d, &
6924 : primitives, &
6925 318 : buffer1, buffer2)
6926 : #endif
6927 : CASE (2)
6928 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6929 : CALL contract_dffd(work, &
6930 : nl_a, nl_b, nl_c, nl_d, &
6931 : sphi_a, sphi_b, sphi_c, sphi_d, &
6932 : primitives, &
6933 : buffer1, buffer2)
6934 : #else
6935 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6936 : work, nl_a, nl_b, nl_c, nl_d, &
6937 : sphi_a, &
6938 : sphi_b, &
6939 : sphi_c, &
6940 : sphi_d, &
6941 : primitives, &
6942 337 : buffer1, buffer2)
6943 : #endif
6944 : CASE (3)
6945 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
6946 : CALL contract_dfff(work, &
6947 : nl_a, nl_b, nl_c, nl_d, &
6948 : sphi_a, sphi_b, sphi_c, sphi_d, &
6949 : primitives, &
6950 : buffer1, buffer2)
6951 : #else
6952 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6953 : work, nl_a, nl_b, nl_c, nl_d, &
6954 : sphi_a, &
6955 : sphi_b, &
6956 : sphi_c, &
6957 : sphi_d, &
6958 : primitives, &
6959 248 : buffer1, buffer2)
6960 : #endif
6961 : CASE (4)
6962 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6963 : CALL contract_dffg(work, &
6964 : nl_a, nl_b, nl_c, nl_d, &
6965 : sphi_a, sphi_b, sphi_c, sphi_d, &
6966 : primitives, &
6967 : buffer1, buffer2)
6968 : #else
6969 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6970 : work, nl_a, nl_b, nl_c, nl_d, &
6971 : sphi_a, &
6972 : sphi_b, &
6973 : sphi_c, &
6974 : sphi_d, &
6975 : primitives, &
6976 0 : buffer1, buffer2)
6977 : #endif
6978 : CASE DEFAULT
6979 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6980 : work, nl_a, nl_b, nl_c, nl_d, &
6981 : sphi_a, &
6982 : sphi_b, &
6983 : sphi_c, &
6984 : sphi_d, &
6985 : primitives, &
6986 1615 : buffer1, buffer2)
6987 : END SELECT
6988 : CASE (4)
6989 0 : SELECT CASE (n_d)
6990 : CASE (0)
6991 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
6992 : CALL contract_dfgs(work, &
6993 : nl_a, nl_b, nl_c, nl_d, &
6994 : sphi_a, sphi_b, sphi_c, sphi_d, &
6995 : primitives, &
6996 : buffer1, buffer2)
6997 : #else
6998 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
6999 : work, nl_a, nl_b, nl_c, nl_d, &
7000 : sphi_a, &
7001 : sphi_b, &
7002 : sphi_c, &
7003 : sphi_d, &
7004 : primitives, &
7005 0 : buffer1, buffer2)
7006 : #endif
7007 : CASE (1)
7008 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7009 : CALL contract_dfgp(work, &
7010 : nl_a, nl_b, nl_c, nl_d, &
7011 : sphi_a, sphi_b, sphi_c, sphi_d, &
7012 : primitives, &
7013 : buffer1, buffer2)
7014 : #else
7015 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7016 : work, nl_a, nl_b, nl_c, nl_d, &
7017 : sphi_a, &
7018 : sphi_b, &
7019 : sphi_c, &
7020 : sphi_d, &
7021 : primitives, &
7022 0 : buffer1, buffer2)
7023 : #endif
7024 : CASE (2)
7025 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7026 : CALL contract_dfgd(work, &
7027 : nl_a, nl_b, nl_c, nl_d, &
7028 : sphi_a, sphi_b, sphi_c, sphi_d, &
7029 : primitives, &
7030 : buffer1, buffer2)
7031 : #else
7032 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7033 : work, nl_a, nl_b, nl_c, nl_d, &
7034 : sphi_a, &
7035 : sphi_b, &
7036 : sphi_c, &
7037 : sphi_d, &
7038 : primitives, &
7039 0 : buffer1, buffer2)
7040 : #endif
7041 : CASE (3)
7042 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7043 : CALL contract_dfgf(work, &
7044 : nl_a, nl_b, nl_c, nl_d, &
7045 : sphi_a, sphi_b, sphi_c, sphi_d, &
7046 : primitives, &
7047 : buffer1, buffer2)
7048 : #else
7049 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7050 : work, nl_a, nl_b, nl_c, nl_d, &
7051 : sphi_a, &
7052 : sphi_b, &
7053 : sphi_c, &
7054 : sphi_d, &
7055 : primitives, &
7056 0 : buffer1, buffer2)
7057 : #endif
7058 : CASE (4)
7059 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7060 : CALL contract_dfgg(work, &
7061 : nl_a, nl_b, nl_c, nl_d, &
7062 : sphi_a, sphi_b, sphi_c, sphi_d, &
7063 : primitives, &
7064 : buffer1, buffer2)
7065 : #else
7066 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7067 : work, nl_a, nl_b, nl_c, nl_d, &
7068 : sphi_a, &
7069 : sphi_b, &
7070 : sphi_c, &
7071 : sphi_d, &
7072 : primitives, &
7073 0 : buffer1, buffer2)
7074 : #endif
7075 : CASE DEFAULT
7076 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7077 : work, nl_a, nl_b, nl_c, nl_d, &
7078 : sphi_a, &
7079 : sphi_b, &
7080 : sphi_c, &
7081 : sphi_d, &
7082 : primitives, &
7083 0 : buffer1, buffer2)
7084 : END SELECT
7085 : CASE DEFAULT
7086 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7087 : work, nl_a, nl_b, nl_c, nl_d, &
7088 : sphi_a, &
7089 : sphi_b, &
7090 : sphi_c, &
7091 : sphi_d, &
7092 : primitives, &
7093 26785 : buffer1, buffer2)
7094 : END SELECT
7095 : CASE (4)
7096 0 : SELECT CASE (n_c)
7097 : CASE (0)
7098 0 : SELECT CASE (n_d)
7099 : CASE (0)
7100 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7101 : CALL contract_dgss(work, &
7102 : nl_a, nl_b, nl_c, nl_d, &
7103 : sphi_a, sphi_b, sphi_c, sphi_d, &
7104 : primitives, &
7105 : buffer1, buffer2)
7106 : #else
7107 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7108 : work, nl_a, nl_b, nl_c, nl_d, &
7109 : sphi_a, &
7110 : sphi_b, &
7111 : sphi_c, &
7112 : sphi_d, &
7113 : primitives, &
7114 0 : buffer1, buffer2)
7115 : #endif
7116 : CASE (1)
7117 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7118 : CALL contract_dgsp(work, &
7119 : nl_a, nl_b, nl_c, nl_d, &
7120 : sphi_a, sphi_b, sphi_c, sphi_d, &
7121 : primitives, &
7122 : buffer1, buffer2)
7123 : #else
7124 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7125 : work, nl_a, nl_b, nl_c, nl_d, &
7126 : sphi_a, &
7127 : sphi_b, &
7128 : sphi_c, &
7129 : sphi_d, &
7130 : primitives, &
7131 0 : buffer1, buffer2)
7132 : #endif
7133 : CASE (2)
7134 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7135 : CALL contract_dgsd(work, &
7136 : nl_a, nl_b, nl_c, nl_d, &
7137 : sphi_a, sphi_b, sphi_c, sphi_d, &
7138 : primitives, &
7139 : buffer1, buffer2)
7140 : #else
7141 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7142 : work, nl_a, nl_b, nl_c, nl_d, &
7143 : sphi_a, &
7144 : sphi_b, &
7145 : sphi_c, &
7146 : sphi_d, &
7147 : primitives, &
7148 0 : buffer1, buffer2)
7149 : #endif
7150 : CASE (3)
7151 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7152 : CALL contract_dgsf(work, &
7153 : nl_a, nl_b, nl_c, nl_d, &
7154 : sphi_a, sphi_b, sphi_c, sphi_d, &
7155 : primitives, &
7156 : buffer1, buffer2)
7157 : #else
7158 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7159 : work, nl_a, nl_b, nl_c, nl_d, &
7160 : sphi_a, &
7161 : sphi_b, &
7162 : sphi_c, &
7163 : sphi_d, &
7164 : primitives, &
7165 0 : buffer1, buffer2)
7166 : #endif
7167 : CASE (4)
7168 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7169 : CALL contract_dgsg(work, &
7170 : nl_a, nl_b, nl_c, nl_d, &
7171 : sphi_a, sphi_b, sphi_c, sphi_d, &
7172 : primitives, &
7173 : buffer1, buffer2)
7174 : #else
7175 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7176 : work, nl_a, nl_b, nl_c, nl_d, &
7177 : sphi_a, &
7178 : sphi_b, &
7179 : sphi_c, &
7180 : sphi_d, &
7181 : primitives, &
7182 0 : buffer1, buffer2)
7183 : #endif
7184 : CASE DEFAULT
7185 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7186 : work, nl_a, nl_b, nl_c, nl_d, &
7187 : sphi_a, &
7188 : sphi_b, &
7189 : sphi_c, &
7190 : sphi_d, &
7191 : primitives, &
7192 0 : buffer1, buffer2)
7193 : END SELECT
7194 : CASE (1)
7195 0 : SELECT CASE (n_d)
7196 : CASE (0)
7197 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7198 : CALL contract_dgps(work, &
7199 : nl_a, nl_b, nl_c, nl_d, &
7200 : sphi_a, sphi_b, sphi_c, sphi_d, &
7201 : primitives, &
7202 : buffer1, buffer2)
7203 : #else
7204 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7205 : work, nl_a, nl_b, nl_c, nl_d, &
7206 : sphi_a, &
7207 : sphi_b, &
7208 : sphi_c, &
7209 : sphi_d, &
7210 : primitives, &
7211 0 : buffer1, buffer2)
7212 : #endif
7213 : CASE (1)
7214 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7215 : CALL contract_dgpp(work, &
7216 : nl_a, nl_b, nl_c, nl_d, &
7217 : sphi_a, sphi_b, sphi_c, sphi_d, &
7218 : primitives, &
7219 : buffer1, buffer2)
7220 : #else
7221 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7222 : work, nl_a, nl_b, nl_c, nl_d, &
7223 : sphi_a, &
7224 : sphi_b, &
7225 : sphi_c, &
7226 : sphi_d, &
7227 : primitives, &
7228 0 : buffer1, buffer2)
7229 : #endif
7230 : CASE (2)
7231 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7232 : CALL contract_dgpd(work, &
7233 : nl_a, nl_b, nl_c, nl_d, &
7234 : sphi_a, sphi_b, sphi_c, sphi_d, &
7235 : primitives, &
7236 : buffer1, buffer2)
7237 : #else
7238 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7239 : work, nl_a, nl_b, nl_c, nl_d, &
7240 : sphi_a, &
7241 : sphi_b, &
7242 : sphi_c, &
7243 : sphi_d, &
7244 : primitives, &
7245 0 : buffer1, buffer2)
7246 : #endif
7247 : CASE (3)
7248 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7249 : CALL contract_dgpf(work, &
7250 : nl_a, nl_b, nl_c, nl_d, &
7251 : sphi_a, sphi_b, sphi_c, sphi_d, &
7252 : primitives, &
7253 : buffer1, buffer2)
7254 : #else
7255 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7256 : work, nl_a, nl_b, nl_c, nl_d, &
7257 : sphi_a, &
7258 : sphi_b, &
7259 : sphi_c, &
7260 : sphi_d, &
7261 : primitives, &
7262 0 : buffer1, buffer2)
7263 : #endif
7264 : CASE (4)
7265 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7266 : CALL contract_dgpg(work, &
7267 : nl_a, nl_b, nl_c, nl_d, &
7268 : sphi_a, sphi_b, sphi_c, sphi_d, &
7269 : primitives, &
7270 : buffer1, buffer2)
7271 : #else
7272 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7273 : work, nl_a, nl_b, nl_c, nl_d, &
7274 : sphi_a, &
7275 : sphi_b, &
7276 : sphi_c, &
7277 : sphi_d, &
7278 : primitives, &
7279 0 : buffer1, buffer2)
7280 : #endif
7281 : CASE DEFAULT
7282 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7283 : work, nl_a, nl_b, nl_c, nl_d, &
7284 : sphi_a, &
7285 : sphi_b, &
7286 : sphi_c, &
7287 : sphi_d, &
7288 : primitives, &
7289 0 : buffer1, buffer2)
7290 : END SELECT
7291 : CASE (2)
7292 0 : SELECT CASE (n_d)
7293 : CASE (0)
7294 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7295 : CALL contract_dgds(work, &
7296 : nl_a, nl_b, nl_c, nl_d, &
7297 : sphi_a, sphi_b, sphi_c, sphi_d, &
7298 : primitives, &
7299 : buffer1, buffer2)
7300 : #else
7301 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7302 : work, nl_a, nl_b, nl_c, nl_d, &
7303 : sphi_a, &
7304 : sphi_b, &
7305 : sphi_c, &
7306 : sphi_d, &
7307 : primitives, &
7308 0 : buffer1, buffer2)
7309 : #endif
7310 : CASE (1)
7311 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7312 : CALL contract_dgdp(work, &
7313 : nl_a, nl_b, nl_c, nl_d, &
7314 : sphi_a, sphi_b, sphi_c, sphi_d, &
7315 : primitives, &
7316 : buffer1, buffer2)
7317 : #else
7318 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7319 : work, nl_a, nl_b, nl_c, nl_d, &
7320 : sphi_a, &
7321 : sphi_b, &
7322 : sphi_c, &
7323 : sphi_d, &
7324 : primitives, &
7325 0 : buffer1, buffer2)
7326 : #endif
7327 : CASE (2)
7328 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7329 : CALL contract_dgdd(work, &
7330 : nl_a, nl_b, nl_c, nl_d, &
7331 : sphi_a, sphi_b, sphi_c, sphi_d, &
7332 : primitives, &
7333 : buffer1, buffer2)
7334 : #else
7335 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7336 : work, nl_a, nl_b, nl_c, nl_d, &
7337 : sphi_a, &
7338 : sphi_b, &
7339 : sphi_c, &
7340 : sphi_d, &
7341 : primitives, &
7342 0 : buffer1, buffer2)
7343 : #endif
7344 : CASE (3)
7345 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7346 : CALL contract_dgdf(work, &
7347 : nl_a, nl_b, nl_c, nl_d, &
7348 : sphi_a, sphi_b, sphi_c, sphi_d, &
7349 : primitives, &
7350 : buffer1, buffer2)
7351 : #else
7352 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7353 : work, nl_a, nl_b, nl_c, nl_d, &
7354 : sphi_a, &
7355 : sphi_b, &
7356 : sphi_c, &
7357 : sphi_d, &
7358 : primitives, &
7359 0 : buffer1, buffer2)
7360 : #endif
7361 : CASE (4)
7362 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7363 : CALL contract_dgdg(work, &
7364 : nl_a, nl_b, nl_c, nl_d, &
7365 : sphi_a, sphi_b, sphi_c, sphi_d, &
7366 : primitives, &
7367 : buffer1, buffer2)
7368 : #else
7369 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7370 : work, nl_a, nl_b, nl_c, nl_d, &
7371 : sphi_a, &
7372 : sphi_b, &
7373 : sphi_c, &
7374 : sphi_d, &
7375 : primitives, &
7376 0 : buffer1, buffer2)
7377 : #endif
7378 : CASE DEFAULT
7379 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7380 : work, nl_a, nl_b, nl_c, nl_d, &
7381 : sphi_a, &
7382 : sphi_b, &
7383 : sphi_c, &
7384 : sphi_d, &
7385 : primitives, &
7386 0 : buffer1, buffer2)
7387 : END SELECT
7388 : CASE (3)
7389 0 : SELECT CASE (n_d)
7390 : CASE (0)
7391 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7392 : CALL contract_dgfs(work, &
7393 : nl_a, nl_b, nl_c, nl_d, &
7394 : sphi_a, sphi_b, sphi_c, sphi_d, &
7395 : primitives, &
7396 : buffer1, buffer2)
7397 : #else
7398 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7399 : work, nl_a, nl_b, nl_c, nl_d, &
7400 : sphi_a, &
7401 : sphi_b, &
7402 : sphi_c, &
7403 : sphi_d, &
7404 : primitives, &
7405 0 : buffer1, buffer2)
7406 : #endif
7407 : CASE (1)
7408 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7409 : CALL contract_dgfp(work, &
7410 : nl_a, nl_b, nl_c, nl_d, &
7411 : sphi_a, sphi_b, sphi_c, sphi_d, &
7412 : primitives, &
7413 : buffer1, buffer2)
7414 : #else
7415 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7416 : work, nl_a, nl_b, nl_c, nl_d, &
7417 : sphi_a, &
7418 : sphi_b, &
7419 : sphi_c, &
7420 : sphi_d, &
7421 : primitives, &
7422 0 : buffer1, buffer2)
7423 : #endif
7424 : CASE (2)
7425 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7426 : CALL contract_dgfd(work, &
7427 : nl_a, nl_b, nl_c, nl_d, &
7428 : sphi_a, sphi_b, sphi_c, sphi_d, &
7429 : primitives, &
7430 : buffer1, buffer2)
7431 : #else
7432 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7433 : work, nl_a, nl_b, nl_c, nl_d, &
7434 : sphi_a, &
7435 : sphi_b, &
7436 : sphi_c, &
7437 : sphi_d, &
7438 : primitives, &
7439 0 : buffer1, buffer2)
7440 : #endif
7441 : CASE (3)
7442 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7443 : CALL contract_dgff(work, &
7444 : nl_a, nl_b, nl_c, nl_d, &
7445 : sphi_a, sphi_b, sphi_c, sphi_d, &
7446 : primitives, &
7447 : buffer1, buffer2)
7448 : #else
7449 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7450 : work, nl_a, nl_b, nl_c, nl_d, &
7451 : sphi_a, &
7452 : sphi_b, &
7453 : sphi_c, &
7454 : sphi_d, &
7455 : primitives, &
7456 0 : buffer1, buffer2)
7457 : #endif
7458 : CASE (4)
7459 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7460 : CALL contract_dgfg(work, &
7461 : nl_a, nl_b, nl_c, nl_d, &
7462 : sphi_a, sphi_b, sphi_c, sphi_d, &
7463 : primitives, &
7464 : buffer1, buffer2)
7465 : #else
7466 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7467 : work, nl_a, nl_b, nl_c, nl_d, &
7468 : sphi_a, &
7469 : sphi_b, &
7470 : sphi_c, &
7471 : sphi_d, &
7472 : primitives, &
7473 0 : buffer1, buffer2)
7474 : #endif
7475 : CASE DEFAULT
7476 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7477 : work, nl_a, nl_b, nl_c, nl_d, &
7478 : sphi_a, &
7479 : sphi_b, &
7480 : sphi_c, &
7481 : sphi_d, &
7482 : primitives, &
7483 0 : buffer1, buffer2)
7484 : END SELECT
7485 : CASE (4)
7486 0 : SELECT CASE (n_d)
7487 : CASE (0)
7488 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7489 : CALL contract_dggs(work, &
7490 : nl_a, nl_b, nl_c, nl_d, &
7491 : sphi_a, sphi_b, sphi_c, sphi_d, &
7492 : primitives, &
7493 : buffer1, buffer2)
7494 : #else
7495 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7496 : work, nl_a, nl_b, nl_c, nl_d, &
7497 : sphi_a, &
7498 : sphi_b, &
7499 : sphi_c, &
7500 : sphi_d, &
7501 : primitives, &
7502 0 : buffer1, buffer2)
7503 : #endif
7504 : CASE (1)
7505 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7506 : CALL contract_dggp(work, &
7507 : nl_a, nl_b, nl_c, nl_d, &
7508 : sphi_a, sphi_b, sphi_c, sphi_d, &
7509 : primitives, &
7510 : buffer1, buffer2)
7511 : #else
7512 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7513 : work, nl_a, nl_b, nl_c, nl_d, &
7514 : sphi_a, &
7515 : sphi_b, &
7516 : sphi_c, &
7517 : sphi_d, &
7518 : primitives, &
7519 0 : buffer1, buffer2)
7520 : #endif
7521 : CASE (2)
7522 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7523 : CALL contract_dggd(work, &
7524 : nl_a, nl_b, nl_c, nl_d, &
7525 : sphi_a, sphi_b, sphi_c, sphi_d, &
7526 : primitives, &
7527 : buffer1, buffer2)
7528 : #else
7529 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7530 : work, nl_a, nl_b, nl_c, nl_d, &
7531 : sphi_a, &
7532 : sphi_b, &
7533 : sphi_c, &
7534 : sphi_d, &
7535 : primitives, &
7536 0 : buffer1, buffer2)
7537 : #endif
7538 : CASE (3)
7539 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7540 : CALL contract_dggf(work, &
7541 : nl_a, nl_b, nl_c, nl_d, &
7542 : sphi_a, sphi_b, sphi_c, sphi_d, &
7543 : primitives, &
7544 : buffer1, buffer2)
7545 : #else
7546 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7547 : work, nl_a, nl_b, nl_c, nl_d, &
7548 : sphi_a, &
7549 : sphi_b, &
7550 : sphi_c, &
7551 : sphi_d, &
7552 : primitives, &
7553 0 : buffer1, buffer2)
7554 : #endif
7555 : CASE (4)
7556 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7557 : CALL contract_dggg(work, &
7558 : nl_a, nl_b, nl_c, nl_d, &
7559 : sphi_a, sphi_b, sphi_c, sphi_d, &
7560 : primitives, &
7561 : buffer1, buffer2)
7562 : #else
7563 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7564 : work, nl_a, nl_b, nl_c, nl_d, &
7565 : sphi_a, &
7566 : sphi_b, &
7567 : sphi_c, &
7568 : sphi_d, &
7569 : primitives, &
7570 0 : buffer1, buffer2)
7571 : #endif
7572 : CASE DEFAULT
7573 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7574 : work, nl_a, nl_b, nl_c, nl_d, &
7575 : sphi_a, &
7576 : sphi_b, &
7577 : sphi_c, &
7578 : sphi_d, &
7579 : primitives, &
7580 0 : buffer1, buffer2)
7581 : END SELECT
7582 : CASE DEFAULT
7583 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7584 : work, nl_a, nl_b, nl_c, nl_d, &
7585 : sphi_a, &
7586 : sphi_b, &
7587 : sphi_c, &
7588 : sphi_d, &
7589 : primitives, &
7590 0 : buffer1, buffer2)
7591 : END SELECT
7592 : CASE DEFAULT
7593 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7594 : work, nl_a, nl_b, nl_c, nl_d, &
7595 : sphi_a, &
7596 : sphi_b, &
7597 : sphi_c, &
7598 : sphi_d, &
7599 : primitives, &
7600 20723580 : buffer1, buffer2)
7601 : END SELECT
7602 : CASE (3)
7603 460478 : SELECT CASE (n_b)
7604 : CASE (0)
7605 320907 : SELECT CASE (n_c)
7606 : CASE (0)
7607 191344 : SELECT CASE (n_d)
7608 : CASE (0)
7609 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7610 : CALL contract_fsss(work, &
7611 : nl_a, nl_b, nl_c, nl_d, &
7612 : sphi_a, sphi_b, sphi_c, sphi_d, &
7613 : primitives, &
7614 : buffer1, buffer2)
7615 : #else
7616 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7617 : work, nl_a, nl_b, nl_c, nl_d, &
7618 : sphi_a, &
7619 : sphi_b, &
7620 : sphi_c, &
7621 : sphi_d, &
7622 : primitives, &
7623 20749 : buffer1, buffer2)
7624 : #endif
7625 : CASE (1)
7626 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7627 : CALL contract_fssp(work, &
7628 : nl_a, nl_b, nl_c, nl_d, &
7629 : sphi_a, sphi_b, sphi_c, sphi_d, &
7630 : primitives, &
7631 : buffer1, buffer2)
7632 : #else
7633 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7634 : work, nl_a, nl_b, nl_c, nl_d, &
7635 : sphi_a, &
7636 : sphi_b, &
7637 : sphi_c, &
7638 : sphi_d, &
7639 : primitives, &
7640 58782 : buffer1, buffer2)
7641 : #endif
7642 : CASE (2)
7643 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7644 : CALL contract_fssd(work, &
7645 : nl_a, nl_b, nl_c, nl_d, &
7646 : sphi_a, sphi_b, sphi_c, sphi_d, &
7647 : primitives, &
7648 : buffer1, buffer2)
7649 : #else
7650 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7651 : work, nl_a, nl_b, nl_c, nl_d, &
7652 : sphi_a, &
7653 : sphi_b, &
7654 : sphi_c, &
7655 : sphi_d, &
7656 : primitives, &
7657 3344 : buffer1, buffer2)
7658 : #endif
7659 : CASE (3)
7660 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7661 : CALL contract_fssf(work, &
7662 : nl_a, nl_b, nl_c, nl_d, &
7663 : sphi_a, sphi_b, sphi_c, sphi_d, &
7664 : primitives, &
7665 : buffer1, buffer2)
7666 : #else
7667 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7668 : work, nl_a, nl_b, nl_c, nl_d, &
7669 : sphi_a, &
7670 : sphi_b, &
7671 : sphi_c, &
7672 : sphi_d, &
7673 : primitives, &
7674 2343 : buffer1, buffer2)
7675 : #endif
7676 : CASE (4)
7677 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7678 : CALL contract_fssg(work, &
7679 : nl_a, nl_b, nl_c, nl_d, &
7680 : sphi_a, sphi_b, sphi_c, sphi_d, &
7681 : primitives, &
7682 : buffer1, buffer2)
7683 : #else
7684 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7685 : work, nl_a, nl_b, nl_c, nl_d, &
7686 : sphi_a, &
7687 : sphi_b, &
7688 : sphi_c, &
7689 : sphi_d, &
7690 : primitives, &
7691 0 : buffer1, buffer2)
7692 : #endif
7693 : CASE DEFAULT
7694 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7695 : work, nl_a, nl_b, nl_c, nl_d, &
7696 : sphi_a, &
7697 : sphi_b, &
7698 : sphi_c, &
7699 : sphi_d, &
7700 : primitives, &
7701 85218 : buffer1, buffer2)
7702 : END SELECT
7703 : CASE (1)
7704 155885 : SELECT CASE (n_d)
7705 : CASE (0)
7706 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7707 : CALL contract_fsps(work, &
7708 : nl_a, nl_b, nl_c, nl_d, &
7709 : sphi_a, sphi_b, sphi_c, sphi_d, &
7710 : primitives, &
7711 : buffer1, buffer2)
7712 : #else
7713 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7714 : work, nl_a, nl_b, nl_c, nl_d, &
7715 : sphi_a, &
7716 : sphi_b, &
7717 : sphi_c, &
7718 : sphi_d, &
7719 : primitives, &
7720 60183 : buffer1, buffer2)
7721 : #endif
7722 : CASE (1)
7723 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7724 : CALL contract_fspp(work, &
7725 : nl_a, nl_b, nl_c, nl_d, &
7726 : sphi_a, sphi_b, sphi_c, sphi_d, &
7727 : primitives, &
7728 : buffer1, buffer2)
7729 : #else
7730 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7731 : work, nl_a, nl_b, nl_c, nl_d, &
7732 : sphi_a, &
7733 : sphi_b, &
7734 : sphi_c, &
7735 : sphi_d, &
7736 : primitives, &
7737 6846 : buffer1, buffer2)
7738 : #endif
7739 : CASE (2)
7740 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7741 : CALL contract_fspd(work, &
7742 : nl_a, nl_b, nl_c, nl_d, &
7743 : sphi_a, sphi_b, sphi_c, sphi_d, &
7744 : primitives, &
7745 : buffer1, buffer2)
7746 : #else
7747 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7748 : work, nl_a, nl_b, nl_c, nl_d, &
7749 : sphi_a, &
7750 : sphi_b, &
7751 : sphi_c, &
7752 : sphi_d, &
7753 : primitives, &
7754 17232 : buffer1, buffer2)
7755 : #endif
7756 : CASE (3)
7757 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7758 : CALL contract_fspf(work, &
7759 : nl_a, nl_b, nl_c, nl_d, &
7760 : sphi_a, sphi_b, sphi_c, sphi_d, &
7761 : primitives, &
7762 : buffer1, buffer2)
7763 : #else
7764 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7765 : work, nl_a, nl_b, nl_c, nl_d, &
7766 : sphi_a, &
7767 : sphi_b, &
7768 : sphi_c, &
7769 : sphi_d, &
7770 : primitives, &
7771 1116 : buffer1, buffer2)
7772 : #endif
7773 : CASE (4)
7774 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7775 : CALL contract_fspg(work, &
7776 : nl_a, nl_b, nl_c, nl_d, &
7777 : sphi_a, sphi_b, sphi_c, sphi_d, &
7778 : primitives, &
7779 : buffer1, buffer2)
7780 : #else
7781 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7782 : work, nl_a, nl_b, nl_c, nl_d, &
7783 : sphi_a, &
7784 : sphi_b, &
7785 : sphi_c, &
7786 : sphi_d, &
7787 : primitives, &
7788 0 : buffer1, buffer2)
7789 : #endif
7790 : CASE DEFAULT
7791 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7792 : work, nl_a, nl_b, nl_c, nl_d, &
7793 : sphi_a, &
7794 : sphi_b, &
7795 : sphi_c, &
7796 : sphi_d, &
7797 : primitives, &
7798 85377 : buffer1, buffer2)
7799 : END SELECT
7800 : CASE (2)
7801 23414 : SELECT CASE (n_d)
7802 : CASE (0)
7803 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7804 : CALL contract_fsds(work, &
7805 : nl_a, nl_b, nl_c, nl_d, &
7806 : sphi_a, sphi_b, sphi_c, sphi_d, &
7807 : primitives, &
7808 : buffer1, buffer2)
7809 : #else
7810 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7811 : work, nl_a, nl_b, nl_c, nl_d, &
7812 : sphi_a, &
7813 : sphi_b, &
7814 : sphi_c, &
7815 : sphi_d, &
7816 : primitives, &
7817 4510 : buffer1, buffer2)
7818 : #endif
7819 : CASE (1)
7820 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7821 : CALL contract_fsdp(work, &
7822 : nl_a, nl_b, nl_c, nl_d, &
7823 : sphi_a, sphi_b, sphi_c, sphi_d, &
7824 : primitives, &
7825 : buffer1, buffer2)
7826 : #else
7827 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7828 : work, nl_a, nl_b, nl_c, nl_d, &
7829 : sphi_a, &
7830 : sphi_b, &
7831 : sphi_c, &
7832 : sphi_d, &
7833 : primitives, &
7834 3905 : buffer1, buffer2)
7835 : #endif
7836 : CASE (2)
7837 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7838 : CALL contract_fsdd(work, &
7839 : nl_a, nl_b, nl_c, nl_d, &
7840 : sphi_a, sphi_b, sphi_c, sphi_d, &
7841 : primitives, &
7842 : buffer1, buffer2)
7843 : #else
7844 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7845 : work, nl_a, nl_b, nl_c, nl_d, &
7846 : sphi_a, &
7847 : sphi_b, &
7848 : sphi_c, &
7849 : sphi_d, &
7850 : primitives, &
7851 1032 : buffer1, buffer2)
7852 : #endif
7853 : CASE (3)
7854 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7855 : CALL contract_fsdf(work, &
7856 : nl_a, nl_b, nl_c, nl_d, &
7857 : sphi_a, sphi_b, sphi_c, sphi_d, &
7858 : primitives, &
7859 : buffer1, buffer2)
7860 : #else
7861 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7862 : work, nl_a, nl_b, nl_c, nl_d, &
7863 : sphi_a, &
7864 : sphi_b, &
7865 : sphi_c, &
7866 : sphi_d, &
7867 : primitives, &
7868 878 : buffer1, buffer2)
7869 : #endif
7870 : CASE (4)
7871 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7872 : CALL contract_fsdg(work, &
7873 : nl_a, nl_b, nl_c, nl_d, &
7874 : sphi_a, sphi_b, sphi_c, sphi_d, &
7875 : primitives, &
7876 : buffer1, buffer2)
7877 : #else
7878 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7879 : work, nl_a, nl_b, nl_c, nl_d, &
7880 : sphi_a, &
7881 : sphi_b, &
7882 : sphi_c, &
7883 : sphi_d, &
7884 : primitives, &
7885 0 : buffer1, buffer2)
7886 : #endif
7887 : CASE DEFAULT
7888 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7889 : work, nl_a, nl_b, nl_c, nl_d, &
7890 : sphi_a, &
7891 : sphi_b, &
7892 : sphi_c, &
7893 : sphi_d, &
7894 : primitives, &
7895 10325 : buffer1, buffer2)
7896 : END SELECT
7897 : CASE (3)
7898 15056 : SELECT CASE (n_d)
7899 : CASE (0)
7900 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7901 : CALL contract_fsfs(work, &
7902 : nl_a, nl_b, nl_c, nl_d, &
7903 : sphi_a, sphi_b, sphi_c, sphi_d, &
7904 : primitives, &
7905 : buffer1, buffer2)
7906 : #else
7907 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7908 : work, nl_a, nl_b, nl_c, nl_d, &
7909 : sphi_a, &
7910 : sphi_b, &
7911 : sphi_c, &
7912 : sphi_d, &
7913 : primitives, &
7914 6477 : buffer1, buffer2)
7915 : #endif
7916 : CASE (1)
7917 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7918 : CALL contract_fsfp(work, &
7919 : nl_a, nl_b, nl_c, nl_d, &
7920 : sphi_a, sphi_b, sphi_c, sphi_d, &
7921 : primitives, &
7922 : buffer1, buffer2)
7923 : #else
7924 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7925 : work, nl_a, nl_b, nl_c, nl_d, &
7926 : sphi_a, &
7927 : sphi_b, &
7928 : sphi_c, &
7929 : sphi_d, &
7930 : primitives, &
7931 1042 : buffer1, buffer2)
7932 : #endif
7933 : CASE (2)
7934 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7935 : CALL contract_fsfd(work, &
7936 : nl_a, nl_b, nl_c, nl_d, &
7937 : sphi_a, sphi_b, sphi_c, sphi_d, &
7938 : primitives, &
7939 : buffer1, buffer2)
7940 : #else
7941 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7942 : work, nl_a, nl_b, nl_c, nl_d, &
7943 : sphi_a, &
7944 : sphi_b, &
7945 : sphi_c, &
7946 : sphi_d, &
7947 : primitives, &
7948 772 : buffer1, buffer2)
7949 : #endif
7950 : CASE (3)
7951 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
7952 : CALL contract_fsff(work, &
7953 : nl_a, nl_b, nl_c, nl_d, &
7954 : sphi_a, sphi_b, sphi_c, sphi_d, &
7955 : primitives, &
7956 : buffer1, buffer2)
7957 : #else
7958 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7959 : work, nl_a, nl_b, nl_c, nl_d, &
7960 : sphi_a, &
7961 : sphi_b, &
7962 : sphi_c, &
7963 : sphi_d, &
7964 : primitives, &
7965 288 : buffer1, buffer2)
7966 : #endif
7967 : CASE (4)
7968 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7969 : CALL contract_fsfg(work, &
7970 : nl_a, nl_b, nl_c, nl_d, &
7971 : sphi_a, sphi_b, sphi_c, sphi_d, &
7972 : primitives, &
7973 : buffer1, buffer2)
7974 : #else
7975 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7976 : work, nl_a, nl_b, nl_c, nl_d, &
7977 : sphi_a, &
7978 : sphi_b, &
7979 : sphi_c, &
7980 : sphi_d, &
7981 : primitives, &
7982 0 : buffer1, buffer2)
7983 : #endif
7984 : CASE DEFAULT
7985 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
7986 : work, nl_a, nl_b, nl_c, nl_d, &
7987 : sphi_a, &
7988 : sphi_b, &
7989 : sphi_c, &
7990 : sphi_d, &
7991 : primitives, &
7992 8579 : buffer1, buffer2)
7993 : END SELECT
7994 : CASE (4)
7995 0 : SELECT CASE (n_d)
7996 : CASE (0)
7997 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
7998 : CALL contract_fsgs(work, &
7999 : nl_a, nl_b, nl_c, nl_d, &
8000 : sphi_a, sphi_b, sphi_c, sphi_d, &
8001 : primitives, &
8002 : buffer1, buffer2)
8003 : #else
8004 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8005 : work, nl_a, nl_b, nl_c, nl_d, &
8006 : sphi_a, &
8007 : sphi_b, &
8008 : sphi_c, &
8009 : sphi_d, &
8010 : primitives, &
8011 0 : buffer1, buffer2)
8012 : #endif
8013 : CASE (1)
8014 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8015 : CALL contract_fsgp(work, &
8016 : nl_a, nl_b, nl_c, nl_d, &
8017 : sphi_a, sphi_b, sphi_c, sphi_d, &
8018 : primitives, &
8019 : buffer1, buffer2)
8020 : #else
8021 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8022 : work, nl_a, nl_b, nl_c, nl_d, &
8023 : sphi_a, &
8024 : sphi_b, &
8025 : sphi_c, &
8026 : sphi_d, &
8027 : primitives, &
8028 0 : buffer1, buffer2)
8029 : #endif
8030 : CASE (2)
8031 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8032 : CALL contract_fsgd(work, &
8033 : nl_a, nl_b, nl_c, nl_d, &
8034 : sphi_a, sphi_b, sphi_c, sphi_d, &
8035 : primitives, &
8036 : buffer1, buffer2)
8037 : #else
8038 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8039 : work, nl_a, nl_b, nl_c, nl_d, &
8040 : sphi_a, &
8041 : sphi_b, &
8042 : sphi_c, &
8043 : sphi_d, &
8044 : primitives, &
8045 0 : buffer1, buffer2)
8046 : #endif
8047 : CASE (3)
8048 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8049 : CALL contract_fsgf(work, &
8050 : nl_a, nl_b, nl_c, nl_d, &
8051 : sphi_a, sphi_b, sphi_c, sphi_d, &
8052 : primitives, &
8053 : buffer1, buffer2)
8054 : #else
8055 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8056 : work, nl_a, nl_b, nl_c, nl_d, &
8057 : sphi_a, &
8058 : sphi_b, &
8059 : sphi_c, &
8060 : sphi_d, &
8061 : primitives, &
8062 0 : buffer1, buffer2)
8063 : #endif
8064 : CASE (4)
8065 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8066 : CALL contract_fsgg(work, &
8067 : nl_a, nl_b, nl_c, nl_d, &
8068 : sphi_a, sphi_b, sphi_c, sphi_d, &
8069 : primitives, &
8070 : buffer1, buffer2)
8071 : #else
8072 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8073 : work, nl_a, nl_b, nl_c, nl_d, &
8074 : sphi_a, &
8075 : sphi_b, &
8076 : sphi_c, &
8077 : sphi_d, &
8078 : primitives, &
8079 0 : buffer1, buffer2)
8080 : #endif
8081 : CASE DEFAULT
8082 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8083 : work, nl_a, nl_b, nl_c, nl_d, &
8084 : sphi_a, &
8085 : sphi_b, &
8086 : sphi_c, &
8087 : sphi_d, &
8088 : primitives, &
8089 0 : buffer1, buffer2)
8090 : END SELECT
8091 : CASE DEFAULT
8092 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8093 : work, nl_a, nl_b, nl_c, nl_d, &
8094 : sphi_a, &
8095 : sphi_b, &
8096 : sphi_c, &
8097 : sphi_d, &
8098 : primitives, &
8099 189499 : buffer1, buffer2)
8100 : END SELECT
8101 : CASE (1)
8102 89625 : SELECT CASE (n_c)
8103 : CASE (0)
8104 54419 : SELECT CASE (n_d)
8105 : CASE (0)
8106 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8107 : CALL contract_fpss(work, &
8108 : nl_a, nl_b, nl_c, nl_d, &
8109 : sphi_a, sphi_b, sphi_c, sphi_d, &
8110 : primitives, &
8111 : buffer1, buffer2)
8112 : #else
8113 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8114 : work, nl_a, nl_b, nl_c, nl_d, &
8115 : sphi_a, &
8116 : sphi_b, &
8117 : sphi_c, &
8118 : sphi_d, &
8119 : primitives, &
8120 16594 : buffer1, buffer2)
8121 : #endif
8122 : CASE (1)
8123 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8124 : CALL contract_fpsp(work, &
8125 : nl_a, nl_b, nl_c, nl_d, &
8126 : sphi_a, sphi_b, sphi_c, sphi_d, &
8127 : primitives, &
8128 : buffer1, buffer2)
8129 : #else
8130 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8131 : work, nl_a, nl_b, nl_c, nl_d, &
8132 : sphi_a, &
8133 : sphi_b, &
8134 : sphi_c, &
8135 : sphi_d, &
8136 : primitives, &
8137 4203 : buffer1, buffer2)
8138 : #endif
8139 : CASE (2)
8140 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8141 : CALL contract_fpsd(work, &
8142 : nl_a, nl_b, nl_c, nl_d, &
8143 : sphi_a, sphi_b, sphi_c, sphi_d, &
8144 : primitives, &
8145 : buffer1, buffer2)
8146 : #else
8147 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8148 : work, nl_a, nl_b, nl_c, nl_d, &
8149 : sphi_a, &
8150 : sphi_b, &
8151 : sphi_c, &
8152 : sphi_d, &
8153 : primitives, &
8154 3763 : buffer1, buffer2)
8155 : #endif
8156 : CASE (3)
8157 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8158 : CALL contract_fpsf(work, &
8159 : nl_a, nl_b, nl_c, nl_d, &
8160 : sphi_a, sphi_b, sphi_c, sphi_d, &
8161 : primitives, &
8162 : buffer1, buffer2)
8163 : #else
8164 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8165 : work, nl_a, nl_b, nl_c, nl_d, &
8166 : sphi_a, &
8167 : sphi_b, &
8168 : sphi_c, &
8169 : sphi_d, &
8170 : primitives, &
8171 842 : buffer1, buffer2)
8172 : #endif
8173 : CASE (4)
8174 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8175 : CALL contract_fpsg(work, &
8176 : nl_a, nl_b, nl_c, nl_d, &
8177 : sphi_a, sphi_b, sphi_c, sphi_d, &
8178 : primitives, &
8179 : buffer1, buffer2)
8180 : #else
8181 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8182 : work, nl_a, nl_b, nl_c, nl_d, &
8183 : sphi_a, &
8184 : sphi_b, &
8185 : sphi_c, &
8186 : sphi_d, &
8187 : primitives, &
8188 0 : buffer1, buffer2)
8189 : #endif
8190 : CASE DEFAULT
8191 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8192 : work, nl_a, nl_b, nl_c, nl_d, &
8193 : sphi_a, &
8194 : sphi_b, &
8195 : sphi_c, &
8196 : sphi_d, &
8197 : primitives, &
8198 25402 : buffer1, buffer2)
8199 : END SELECT
8200 : CASE (1)
8201 22302 : SELECT CASE (n_d)
8202 : CASE (0)
8203 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8204 : CALL contract_fpps(work, &
8205 : nl_a, nl_b, nl_c, nl_d, &
8206 : sphi_a, sphi_b, sphi_c, sphi_d, &
8207 : primitives, &
8208 : buffer1, buffer2)
8209 : #else
8210 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8211 : work, nl_a, nl_b, nl_c, nl_d, &
8212 : sphi_a, &
8213 : sphi_b, &
8214 : sphi_c, &
8215 : sphi_d, &
8216 : primitives, &
8217 3934 : buffer1, buffer2)
8218 : #endif
8219 : CASE (1)
8220 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8221 : CALL contract_fppp(work, &
8222 : nl_a, nl_b, nl_c, nl_d, &
8223 : sphi_a, sphi_b, sphi_c, sphi_d, &
8224 : primitives, &
8225 : buffer1, buffer2)
8226 : #else
8227 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8228 : work, nl_a, nl_b, nl_c, nl_d, &
8229 : sphi_a, &
8230 : sphi_b, &
8231 : sphi_c, &
8232 : sphi_d, &
8233 : primitives, &
8234 5856 : buffer1, buffer2)
8235 : #endif
8236 : CASE (2)
8237 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8238 : CALL contract_fppd(work, &
8239 : nl_a, nl_b, nl_c, nl_d, &
8240 : sphi_a, sphi_b, sphi_c, sphi_d, &
8241 : primitives, &
8242 : buffer1, buffer2)
8243 : #else
8244 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8245 : work, nl_a, nl_b, nl_c, nl_d, &
8246 : sphi_a, &
8247 : sphi_b, &
8248 : sphi_c, &
8249 : sphi_d, &
8250 : primitives, &
8251 1323 : buffer1, buffer2)
8252 : #endif
8253 : CASE (3)
8254 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8255 : CALL contract_fppf(work, &
8256 : nl_a, nl_b, nl_c, nl_d, &
8257 : sphi_a, sphi_b, sphi_c, sphi_d, &
8258 : primitives, &
8259 : buffer1, buffer2)
8260 : #else
8261 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8262 : work, nl_a, nl_b, nl_c, nl_d, &
8263 : sphi_a, &
8264 : sphi_b, &
8265 : sphi_c, &
8266 : sphi_d, &
8267 : primitives, &
8268 1310 : buffer1, buffer2)
8269 : #endif
8270 : CASE (4)
8271 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8272 : CALL contract_fppg(work, &
8273 : nl_a, nl_b, nl_c, nl_d, &
8274 : sphi_a, sphi_b, sphi_c, sphi_d, &
8275 : primitives, &
8276 : buffer1, buffer2)
8277 : #else
8278 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8279 : work, nl_a, nl_b, nl_c, nl_d, &
8280 : sphi_a, &
8281 : sphi_b, &
8282 : sphi_c, &
8283 : sphi_d, &
8284 : primitives, &
8285 0 : buffer1, buffer2)
8286 : #endif
8287 : CASE DEFAULT
8288 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8289 : work, nl_a, nl_b, nl_c, nl_d, &
8290 : sphi_a, &
8291 : sphi_b, &
8292 : sphi_c, &
8293 : sphi_d, &
8294 : primitives, &
8295 12423 : buffer1, buffer2)
8296 : END SELECT
8297 : CASE (2)
8298 11772 : SELECT CASE (n_d)
8299 : CASE (0)
8300 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8301 : CALL contract_fpds(work, &
8302 : nl_a, nl_b, nl_c, nl_d, &
8303 : sphi_a, sphi_b, sphi_c, sphi_d, &
8304 : primitives, &
8305 : buffer1, buffer2)
8306 : #else
8307 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8308 : work, nl_a, nl_b, nl_c, nl_d, &
8309 : sphi_a, &
8310 : sphi_b, &
8311 : sphi_c, &
8312 : sphi_d, &
8313 : primitives, &
8314 3407 : buffer1, buffer2)
8315 : #endif
8316 : CASE (1)
8317 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8318 : CALL contract_fpdp(work, &
8319 : nl_a, nl_b, nl_c, nl_d, &
8320 : sphi_a, sphi_b, sphi_c, sphi_d, &
8321 : primitives, &
8322 : buffer1, buffer2)
8323 : #else
8324 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8325 : work, nl_a, nl_b, nl_c, nl_d, &
8326 : sphi_a, &
8327 : sphi_b, &
8328 : sphi_c, &
8329 : sphi_d, &
8330 : primitives, &
8331 1053 : buffer1, buffer2)
8332 : #endif
8333 : CASE (2)
8334 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8335 : CALL contract_fpdd(work, &
8336 : nl_a, nl_b, nl_c, nl_d, &
8337 : sphi_a, sphi_b, sphi_c, sphi_d, &
8338 : primitives, &
8339 : buffer1, buffer2)
8340 : #else
8341 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8342 : work, nl_a, nl_b, nl_c, nl_d, &
8343 : sphi_a, &
8344 : sphi_b, &
8345 : sphi_c, &
8346 : sphi_d, &
8347 : primitives, &
8348 1127 : buffer1, buffer2)
8349 : #endif
8350 : CASE (3)
8351 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8352 : CALL contract_fpdf(work, &
8353 : nl_a, nl_b, nl_c, nl_d, &
8354 : sphi_a, sphi_b, sphi_c, sphi_d, &
8355 : primitives, &
8356 : buffer1, buffer2)
8357 : #else
8358 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8359 : work, nl_a, nl_b, nl_c, nl_d, &
8360 : sphi_a, &
8361 : sphi_b, &
8362 : sphi_c, &
8363 : sphi_d, &
8364 : primitives, &
8365 358 : buffer1, buffer2)
8366 : #endif
8367 : CASE (4)
8368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8369 : CALL contract_fpdg(work, &
8370 : nl_a, nl_b, nl_c, nl_d, &
8371 : sphi_a, sphi_b, sphi_c, sphi_d, &
8372 : primitives, &
8373 : buffer1, buffer2)
8374 : #else
8375 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8376 : work, nl_a, nl_b, nl_c, nl_d, &
8377 : sphi_a, &
8378 : sphi_b, &
8379 : sphi_c, &
8380 : sphi_d, &
8381 : primitives, &
8382 0 : buffer1, buffer2)
8383 : #endif
8384 : CASE DEFAULT
8385 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8386 : work, nl_a, nl_b, nl_c, nl_d, &
8387 : sphi_a, &
8388 : sphi_b, &
8389 : sphi_c, &
8390 : sphi_d, &
8391 : primitives, &
8392 5945 : buffer1, buffer2)
8393 : END SELECT
8394 : CASE (3)
8395 3129 : SELECT CASE (n_d)
8396 : CASE (0)
8397 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8398 : CALL contract_fpfs(work, &
8399 : nl_a, nl_b, nl_c, nl_d, &
8400 : sphi_a, sphi_b, sphi_c, sphi_d, &
8401 : primitives, &
8402 : buffer1, buffer2)
8403 : #else
8404 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8405 : work, nl_a, nl_b, nl_c, nl_d, &
8406 : sphi_a, &
8407 : sphi_b, &
8408 : sphi_c, &
8409 : sphi_d, &
8410 : primitives, &
8411 709 : buffer1, buffer2)
8412 : #endif
8413 : CASE (1)
8414 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8415 : CALL contract_fpfp(work, &
8416 : nl_a, nl_b, nl_c, nl_d, &
8417 : sphi_a, sphi_b, sphi_c, sphi_d, &
8418 : primitives, &
8419 : buffer1, buffer2)
8420 : #else
8421 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8422 : work, nl_a, nl_b, nl_c, nl_d, &
8423 : sphi_a, &
8424 : sphi_b, &
8425 : sphi_c, &
8426 : sphi_d, &
8427 : primitives, &
8428 1065 : buffer1, buffer2)
8429 : #endif
8430 : CASE (2)
8431 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8432 : CALL contract_fpfd(work, &
8433 : nl_a, nl_b, nl_c, nl_d, &
8434 : sphi_a, sphi_b, sphi_c, sphi_d, &
8435 : primitives, &
8436 : buffer1, buffer2)
8437 : #else
8438 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8439 : work, nl_a, nl_b, nl_c, nl_d, &
8440 : sphi_a, &
8441 : sphi_b, &
8442 : sphi_c, &
8443 : sphi_d, &
8444 : primitives, &
8445 273 : buffer1, buffer2)
8446 : #endif
8447 : CASE (3)
8448 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8449 : CALL contract_fpff(work, &
8450 : nl_a, nl_b, nl_c, nl_d, &
8451 : sphi_a, sphi_b, sphi_c, sphi_d, &
8452 : primitives, &
8453 : buffer1, buffer2)
8454 : #else
8455 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8456 : work, nl_a, nl_b, nl_c, nl_d, &
8457 : sphi_a, &
8458 : sphi_b, &
8459 : sphi_c, &
8460 : sphi_d, &
8461 : primitives, &
8462 373 : buffer1, buffer2)
8463 : #endif
8464 : CASE (4)
8465 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8466 : CALL contract_fpfg(work, &
8467 : nl_a, nl_b, nl_c, nl_d, &
8468 : sphi_a, sphi_b, sphi_c, sphi_d, &
8469 : primitives, &
8470 : buffer1, buffer2)
8471 : #else
8472 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8473 : work, nl_a, nl_b, nl_c, nl_d, &
8474 : sphi_a, &
8475 : sphi_b, &
8476 : sphi_c, &
8477 : sphi_d, &
8478 : primitives, &
8479 0 : buffer1, buffer2)
8480 : #endif
8481 : CASE DEFAULT
8482 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8483 : work, nl_a, nl_b, nl_c, nl_d, &
8484 : sphi_a, &
8485 : sphi_b, &
8486 : sphi_c, &
8487 : sphi_d, &
8488 : primitives, &
8489 2420 : buffer1, buffer2)
8490 : END SELECT
8491 : CASE (4)
8492 0 : SELECT CASE (n_d)
8493 : CASE (0)
8494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8495 : CALL contract_fpgs(work, &
8496 : nl_a, nl_b, nl_c, nl_d, &
8497 : sphi_a, sphi_b, sphi_c, sphi_d, &
8498 : primitives, &
8499 : buffer1, buffer2)
8500 : #else
8501 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8502 : work, nl_a, nl_b, nl_c, nl_d, &
8503 : sphi_a, &
8504 : sphi_b, &
8505 : sphi_c, &
8506 : sphi_d, &
8507 : primitives, &
8508 0 : buffer1, buffer2)
8509 : #endif
8510 : CASE (1)
8511 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8512 : CALL contract_fpgp(work, &
8513 : nl_a, nl_b, nl_c, nl_d, &
8514 : sphi_a, sphi_b, sphi_c, sphi_d, &
8515 : primitives, &
8516 : buffer1, buffer2)
8517 : #else
8518 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8519 : work, nl_a, nl_b, nl_c, nl_d, &
8520 : sphi_a, &
8521 : sphi_b, &
8522 : sphi_c, &
8523 : sphi_d, &
8524 : primitives, &
8525 0 : buffer1, buffer2)
8526 : #endif
8527 : CASE (2)
8528 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8529 : CALL contract_fpgd(work, &
8530 : nl_a, nl_b, nl_c, nl_d, &
8531 : sphi_a, sphi_b, sphi_c, sphi_d, &
8532 : primitives, &
8533 : buffer1, buffer2)
8534 : #else
8535 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8536 : work, nl_a, nl_b, nl_c, nl_d, &
8537 : sphi_a, &
8538 : sphi_b, &
8539 : sphi_c, &
8540 : sphi_d, &
8541 : primitives, &
8542 0 : buffer1, buffer2)
8543 : #endif
8544 : CASE (3)
8545 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8546 : CALL contract_fpgf(work, &
8547 : nl_a, nl_b, nl_c, nl_d, &
8548 : sphi_a, sphi_b, sphi_c, sphi_d, &
8549 : primitives, &
8550 : buffer1, buffer2)
8551 : #else
8552 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8553 : work, nl_a, nl_b, nl_c, nl_d, &
8554 : sphi_a, &
8555 : sphi_b, &
8556 : sphi_c, &
8557 : sphi_d, &
8558 : primitives, &
8559 0 : buffer1, buffer2)
8560 : #endif
8561 : CASE (4)
8562 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8563 : CALL contract_fpgg(work, &
8564 : nl_a, nl_b, nl_c, nl_d, &
8565 : sphi_a, sphi_b, sphi_c, sphi_d, &
8566 : primitives, &
8567 : buffer1, buffer2)
8568 : #else
8569 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8570 : work, nl_a, nl_b, nl_c, nl_d, &
8571 : sphi_a, &
8572 : sphi_b, &
8573 : sphi_c, &
8574 : sphi_d, &
8575 : primitives, &
8576 0 : buffer1, buffer2)
8577 : #endif
8578 : CASE DEFAULT
8579 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8580 : work, nl_a, nl_b, nl_c, nl_d, &
8581 : sphi_a, &
8582 : sphi_b, &
8583 : sphi_c, &
8584 : sphi_d, &
8585 : primitives, &
8586 0 : buffer1, buffer2)
8587 : END SELECT
8588 : CASE DEFAULT
8589 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8590 : work, nl_a, nl_b, nl_c, nl_d, &
8591 : sphi_a, &
8592 : sphi_b, &
8593 : sphi_c, &
8594 : sphi_d, &
8595 : primitives, &
8596 46190 : buffer1, buffer2)
8597 : END SELECT
8598 : CASE (2)
8599 44009 : SELECT CASE (n_c)
8600 : CASE (0)
8601 17760 : SELECT CASE (n_d)
8602 : CASE (0)
8603 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8604 : CALL contract_fdss(work, &
8605 : nl_a, nl_b, nl_c, nl_d, &
8606 : sphi_a, sphi_b, sphi_c, sphi_d, &
8607 : primitives, &
8608 : buffer1, buffer2)
8609 : #else
8610 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8611 : work, nl_a, nl_b, nl_c, nl_d, &
8612 : sphi_a, &
8613 : sphi_b, &
8614 : sphi_c, &
8615 : sphi_d, &
8616 : primitives, &
8617 3232 : buffer1, buffer2)
8618 : #endif
8619 : CASE (1)
8620 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8621 : CALL contract_fdsp(work, &
8622 : nl_a, nl_b, nl_c, nl_d, &
8623 : sphi_a, sphi_b, sphi_c, sphi_d, &
8624 : primitives, &
8625 : buffer1, buffer2)
8626 : #else
8627 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8628 : work, nl_a, nl_b, nl_c, nl_d, &
8629 : sphi_a, &
8630 : sphi_b, &
8631 : sphi_c, &
8632 : sphi_d, &
8633 : primitives, &
8634 3701 : buffer1, buffer2)
8635 : #endif
8636 : CASE (2)
8637 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8638 : CALL contract_fdsd(work, &
8639 : nl_a, nl_b, nl_c, nl_d, &
8640 : sphi_a, sphi_b, sphi_c, sphi_d, &
8641 : primitives, &
8642 : buffer1, buffer2)
8643 : #else
8644 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8645 : work, nl_a, nl_b, nl_c, nl_d, &
8646 : sphi_a, &
8647 : sphi_b, &
8648 : sphi_c, &
8649 : sphi_d, &
8650 : primitives, &
8651 913 : buffer1, buffer2)
8652 : #endif
8653 : CASE (3)
8654 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8655 : CALL contract_fdsf(work, &
8656 : nl_a, nl_b, nl_c, nl_d, &
8657 : sphi_a, sphi_b, sphi_c, sphi_d, &
8658 : primitives, &
8659 : buffer1, buffer2)
8660 : #else
8661 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8662 : work, nl_a, nl_b, nl_c, nl_d, &
8663 : sphi_a, &
8664 : sphi_b, &
8665 : sphi_c, &
8666 : sphi_d, &
8667 : primitives, &
8668 873 : buffer1, buffer2)
8669 : #endif
8670 : CASE (4)
8671 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8672 : CALL contract_fdsg(work, &
8673 : nl_a, nl_b, nl_c, nl_d, &
8674 : sphi_a, sphi_b, sphi_c, sphi_d, &
8675 : primitives, &
8676 : buffer1, buffer2)
8677 : #else
8678 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8679 : work, nl_a, nl_b, nl_c, nl_d, &
8680 : sphi_a, &
8681 : sphi_b, &
8682 : sphi_c, &
8683 : sphi_d, &
8684 : primitives, &
8685 0 : buffer1, buffer2)
8686 : #endif
8687 : CASE DEFAULT
8688 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8689 : work, nl_a, nl_b, nl_c, nl_d, &
8690 : sphi_a, &
8691 : sphi_b, &
8692 : sphi_c, &
8693 : sphi_d, &
8694 : primitives, &
8695 8719 : buffer1, buffer2)
8696 : END SELECT
8697 : CASE (1)
8698 10986 : SELECT CASE (n_d)
8699 : CASE (0)
8700 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8701 : CALL contract_fdps(work, &
8702 : nl_a, nl_b, nl_c, nl_d, &
8703 : sphi_a, sphi_b, sphi_c, sphi_d, &
8704 : primitives, &
8705 : buffer1, buffer2)
8706 : #else
8707 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8708 : work, nl_a, nl_b, nl_c, nl_d, &
8709 : sphi_a, &
8710 : sphi_b, &
8711 : sphi_c, &
8712 : sphi_d, &
8713 : primitives, &
8714 2971 : buffer1, buffer2)
8715 : #endif
8716 : CASE (1)
8717 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8718 : CALL contract_fdpp(work, &
8719 : nl_a, nl_b, nl_c, nl_d, &
8720 : sphi_a, sphi_b, sphi_c, sphi_d, &
8721 : primitives, &
8722 : buffer1, buffer2)
8723 : #else
8724 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8725 : work, nl_a, nl_b, nl_c, nl_d, &
8726 : sphi_a, &
8727 : sphi_b, &
8728 : sphi_c, &
8729 : sphi_d, &
8730 : primitives, &
8731 1224 : buffer1, buffer2)
8732 : #endif
8733 : CASE (2)
8734 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8735 : CALL contract_fdpd(work, &
8736 : nl_a, nl_b, nl_c, nl_d, &
8737 : sphi_a, sphi_b, sphi_c, sphi_d, &
8738 : primitives, &
8739 : buffer1, buffer2)
8740 : #else
8741 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8742 : work, nl_a, nl_b, nl_c, nl_d, &
8743 : sphi_a, &
8744 : sphi_b, &
8745 : sphi_c, &
8746 : sphi_d, &
8747 : primitives, &
8748 1206 : buffer1, buffer2)
8749 : #endif
8750 : CASE (3)
8751 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8752 : CALL contract_fdpf(work, &
8753 : nl_a, nl_b, nl_c, nl_d, &
8754 : sphi_a, sphi_b, sphi_c, sphi_d, &
8755 : primitives, &
8756 : buffer1, buffer2)
8757 : #else
8758 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8759 : work, nl_a, nl_b, nl_c, nl_d, &
8760 : sphi_a, &
8761 : sphi_b, &
8762 : sphi_c, &
8763 : sphi_d, &
8764 : primitives, &
8765 408 : buffer1, buffer2)
8766 : #endif
8767 : CASE (4)
8768 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8769 : CALL contract_fdpg(work, &
8770 : nl_a, nl_b, nl_c, nl_d, &
8771 : sphi_a, sphi_b, sphi_c, sphi_d, &
8772 : primitives, &
8773 : buffer1, buffer2)
8774 : #else
8775 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8776 : work, nl_a, nl_b, nl_c, nl_d, &
8777 : sphi_a, &
8778 : sphi_b, &
8779 : sphi_c, &
8780 : sphi_d, &
8781 : primitives, &
8782 0 : buffer1, buffer2)
8783 : #endif
8784 : CASE DEFAULT
8785 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8786 : work, nl_a, nl_b, nl_c, nl_d, &
8787 : sphi_a, &
8788 : sphi_b, &
8789 : sphi_c, &
8790 : sphi_d, &
8791 : primitives, &
8792 5809 : buffer1, buffer2)
8793 : END SELECT
8794 : CASE (2)
8795 4100 : SELECT CASE (n_d)
8796 : CASE (0)
8797 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8798 : CALL contract_fdds(work, &
8799 : nl_a, nl_b, nl_c, nl_d, &
8800 : sphi_a, sphi_b, sphi_c, sphi_d, &
8801 : primitives, &
8802 : buffer1, buffer2)
8803 : #else
8804 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8805 : work, nl_a, nl_b, nl_c, nl_d, &
8806 : sphi_a, &
8807 : sphi_b, &
8808 : sphi_c, &
8809 : sphi_d, &
8810 : primitives, &
8811 595 : buffer1, buffer2)
8812 : #endif
8813 : CASE (1)
8814 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8815 : CALL contract_fddp(work, &
8816 : nl_a, nl_b, nl_c, nl_d, &
8817 : sphi_a, sphi_b, sphi_c, sphi_d, &
8818 : primitives, &
8819 : buffer1, buffer2)
8820 : #else
8821 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8822 : work, nl_a, nl_b, nl_c, nl_d, &
8823 : sphi_a, &
8824 : sphi_b, &
8825 : sphi_c, &
8826 : sphi_d, &
8827 : primitives, &
8828 927 : buffer1, buffer2)
8829 : #endif
8830 : CASE (2)
8831 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8832 : CALL contract_fddd(work, &
8833 : nl_a, nl_b, nl_c, nl_d, &
8834 : sphi_a, sphi_b, sphi_c, sphi_d, &
8835 : primitives, &
8836 : buffer1, buffer2)
8837 : #else
8838 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8839 : work, nl_a, nl_b, nl_c, nl_d, &
8840 : sphi_a, &
8841 : sphi_b, &
8842 : sphi_c, &
8843 : sphi_d, &
8844 : primitives, &
8845 333 : buffer1, buffer2)
8846 : #endif
8847 : CASE (3)
8848 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8849 : CALL contract_fddf(work, &
8850 : nl_a, nl_b, nl_c, nl_d, &
8851 : sphi_a, sphi_b, sphi_c, sphi_d, &
8852 : primitives, &
8853 : buffer1, buffer2)
8854 : #else
8855 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8856 : work, nl_a, nl_b, nl_c, nl_d, &
8857 : sphi_a, &
8858 : sphi_b, &
8859 : sphi_c, &
8860 : sphi_d, &
8861 : primitives, &
8862 351 : buffer1, buffer2)
8863 : #endif
8864 : CASE (4)
8865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8866 : CALL contract_fddg(work, &
8867 : nl_a, nl_b, nl_c, nl_d, &
8868 : sphi_a, sphi_b, sphi_c, sphi_d, &
8869 : primitives, &
8870 : buffer1, buffer2)
8871 : #else
8872 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8873 : work, nl_a, nl_b, nl_c, nl_d, &
8874 : sphi_a, &
8875 : sphi_b, &
8876 : sphi_c, &
8877 : sphi_d, &
8878 : primitives, &
8879 0 : buffer1, buffer2)
8880 : #endif
8881 : CASE DEFAULT
8882 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8883 : work, nl_a, nl_b, nl_c, nl_d, &
8884 : sphi_a, &
8885 : sphi_b, &
8886 : sphi_c, &
8887 : sphi_d, &
8888 : primitives, &
8889 2206 : buffer1, buffer2)
8890 : END SELECT
8891 : CASE (3)
8892 1931 : SELECT CASE (n_d)
8893 : CASE (0)
8894 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8895 : CALL contract_fdfs(work, &
8896 : nl_a, nl_b, nl_c, nl_d, &
8897 : sphi_a, sphi_b, sphi_c, sphi_d, &
8898 : primitives, &
8899 : buffer1, buffer2)
8900 : #else
8901 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8902 : work, nl_a, nl_b, nl_c, nl_d, &
8903 : sphi_a, &
8904 : sphi_b, &
8905 : sphi_c, &
8906 : sphi_d, &
8907 : primitives, &
8908 632 : buffer1, buffer2)
8909 : #endif
8910 : CASE (1)
8911 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8912 : CALL contract_fdfp(work, &
8913 : nl_a, nl_b, nl_c, nl_d, &
8914 : sphi_a, sphi_b, sphi_c, sphi_d, &
8915 : primitives, &
8916 : buffer1, buffer2)
8917 : #else
8918 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8919 : work, nl_a, nl_b, nl_c, nl_d, &
8920 : sphi_a, &
8921 : sphi_b, &
8922 : sphi_c, &
8923 : sphi_d, &
8924 : primitives, &
8925 253 : buffer1, buffer2)
8926 : #endif
8927 : CASE (2)
8928 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8929 : CALL contract_fdfd(work, &
8930 : nl_a, nl_b, nl_c, nl_d, &
8931 : sphi_a, sphi_b, sphi_c, sphi_d, &
8932 : primitives, &
8933 : buffer1, buffer2)
8934 : #else
8935 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8936 : work, nl_a, nl_b, nl_c, nl_d, &
8937 : sphi_a, &
8938 : sphi_b, &
8939 : sphi_c, &
8940 : sphi_d, &
8941 : primitives, &
8942 262 : buffer1, buffer2)
8943 : #endif
8944 : CASE (3)
8945 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
8946 : CALL contract_fdff(work, &
8947 : nl_a, nl_b, nl_c, nl_d, &
8948 : sphi_a, sphi_b, sphi_c, sphi_d, &
8949 : primitives, &
8950 : buffer1, buffer2)
8951 : #else
8952 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8953 : work, nl_a, nl_b, nl_c, nl_d, &
8954 : sphi_a, &
8955 : sphi_b, &
8956 : sphi_c, &
8957 : sphi_d, &
8958 : primitives, &
8959 152 : buffer1, buffer2)
8960 : #endif
8961 : CASE (4)
8962 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8963 : CALL contract_fdfg(work, &
8964 : nl_a, nl_b, nl_c, nl_d, &
8965 : sphi_a, sphi_b, sphi_c, sphi_d, &
8966 : primitives, &
8967 : buffer1, buffer2)
8968 : #else
8969 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8970 : work, nl_a, nl_b, nl_c, nl_d, &
8971 : sphi_a, &
8972 : sphi_b, &
8973 : sphi_c, &
8974 : sphi_d, &
8975 : primitives, &
8976 0 : buffer1, buffer2)
8977 : #endif
8978 : CASE DEFAULT
8979 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8980 : work, nl_a, nl_b, nl_c, nl_d, &
8981 : sphi_a, &
8982 : sphi_b, &
8983 : sphi_c, &
8984 : sphi_d, &
8985 : primitives, &
8986 1299 : buffer1, buffer2)
8987 : END SELECT
8988 : CASE (4)
8989 0 : SELECT CASE (n_d)
8990 : CASE (0)
8991 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
8992 : CALL contract_fdgs(work, &
8993 : nl_a, nl_b, nl_c, nl_d, &
8994 : sphi_a, sphi_b, sphi_c, sphi_d, &
8995 : primitives, &
8996 : buffer1, buffer2)
8997 : #else
8998 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
8999 : work, nl_a, nl_b, nl_c, nl_d, &
9000 : sphi_a, &
9001 : sphi_b, &
9002 : sphi_c, &
9003 : sphi_d, &
9004 : primitives, &
9005 0 : buffer1, buffer2)
9006 : #endif
9007 : CASE (1)
9008 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9009 : CALL contract_fdgp(work, &
9010 : nl_a, nl_b, nl_c, nl_d, &
9011 : sphi_a, sphi_b, sphi_c, sphi_d, &
9012 : primitives, &
9013 : buffer1, buffer2)
9014 : #else
9015 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9016 : work, nl_a, nl_b, nl_c, nl_d, &
9017 : sphi_a, &
9018 : sphi_b, &
9019 : sphi_c, &
9020 : sphi_d, &
9021 : primitives, &
9022 0 : buffer1, buffer2)
9023 : #endif
9024 : CASE (2)
9025 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9026 : CALL contract_fdgd(work, &
9027 : nl_a, nl_b, nl_c, nl_d, &
9028 : sphi_a, sphi_b, sphi_c, sphi_d, &
9029 : primitives, &
9030 : buffer1, buffer2)
9031 : #else
9032 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9033 : work, nl_a, nl_b, nl_c, nl_d, &
9034 : sphi_a, &
9035 : sphi_b, &
9036 : sphi_c, &
9037 : sphi_d, &
9038 : primitives, &
9039 0 : buffer1, buffer2)
9040 : #endif
9041 : CASE (3)
9042 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9043 : CALL contract_fdgf(work, &
9044 : nl_a, nl_b, nl_c, nl_d, &
9045 : sphi_a, sphi_b, sphi_c, sphi_d, &
9046 : primitives, &
9047 : buffer1, buffer2)
9048 : #else
9049 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9050 : work, nl_a, nl_b, nl_c, nl_d, &
9051 : sphi_a, &
9052 : sphi_b, &
9053 : sphi_c, &
9054 : sphi_d, &
9055 : primitives, &
9056 0 : buffer1, buffer2)
9057 : #endif
9058 : CASE (4)
9059 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9060 : CALL contract_fdgg(work, &
9061 : nl_a, nl_b, nl_c, nl_d, &
9062 : sphi_a, sphi_b, sphi_c, sphi_d, &
9063 : primitives, &
9064 : buffer1, buffer2)
9065 : #else
9066 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9067 : work, nl_a, nl_b, nl_c, nl_d, &
9068 : sphi_a, &
9069 : sphi_b, &
9070 : sphi_c, &
9071 : sphi_d, &
9072 : primitives, &
9073 0 : buffer1, buffer2)
9074 : #endif
9075 : CASE DEFAULT
9076 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9077 : work, nl_a, nl_b, nl_c, nl_d, &
9078 : sphi_a, &
9079 : sphi_b, &
9080 : sphi_c, &
9081 : sphi_d, &
9082 : primitives, &
9083 0 : buffer1, buffer2)
9084 : END SELECT
9085 : CASE DEFAULT
9086 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9087 : work, nl_a, nl_b, nl_c, nl_d, &
9088 : sphi_a, &
9089 : sphi_b, &
9090 : sphi_c, &
9091 : sphi_d, &
9092 : primitives, &
9093 18033 : buffer1, buffer2)
9094 : END SELECT
9095 : CASE (3)
9096 27257 : SELECT CASE (n_c)
9097 : CASE (0)
9098 20346 : SELECT CASE (n_d)
9099 : CASE (0)
9100 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9101 : CALL contract_ffss(work, &
9102 : nl_a, nl_b, nl_c, nl_d, &
9103 : sphi_a, sphi_b, sphi_c, sphi_d, &
9104 : primitives, &
9105 : buffer1, buffer2)
9106 : #else
9107 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9108 : work, nl_a, nl_b, nl_c, nl_d, &
9109 : sphi_a, &
9110 : sphi_b, &
9111 : sphi_c, &
9112 : sphi_d, &
9113 : primitives, &
9114 6082 : buffer1, buffer2)
9115 : #endif
9116 : CASE (1)
9117 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9118 : CALL contract_ffsp(work, &
9119 : nl_a, nl_b, nl_c, nl_d, &
9120 : sphi_a, sphi_b, sphi_c, sphi_d, &
9121 : primitives, &
9122 : buffer1, buffer2)
9123 : #else
9124 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9125 : work, nl_a, nl_b, nl_c, nl_d, &
9126 : sphi_a, &
9127 : sphi_b, &
9128 : sphi_c, &
9129 : sphi_d, &
9130 : primitives, &
9131 1660 : buffer1, buffer2)
9132 : #endif
9133 : CASE (2)
9134 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9135 : CALL contract_ffsd(work, &
9136 : nl_a, nl_b, nl_c, nl_d, &
9137 : sphi_a, sphi_b, sphi_c, sphi_d, &
9138 : primitives, &
9139 : buffer1, buffer2)
9140 : #else
9141 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9142 : work, nl_a, nl_b, nl_c, nl_d, &
9143 : sphi_a, &
9144 : sphi_b, &
9145 : sphi_c, &
9146 : sphi_d, &
9147 : primitives, &
9148 1774 : buffer1, buffer2)
9149 : #endif
9150 : CASE (3)
9151 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9152 : CALL contract_ffsf(work, &
9153 : nl_a, nl_b, nl_c, nl_d, &
9154 : sphi_a, sphi_b, sphi_c, sphi_d, &
9155 : primitives, &
9156 : buffer1, buffer2)
9157 : #else
9158 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9159 : work, nl_a, nl_b, nl_c, nl_d, &
9160 : sphi_a, &
9161 : sphi_b, &
9162 : sphi_c, &
9163 : sphi_d, &
9164 : primitives, &
9165 484 : buffer1, buffer2)
9166 : #endif
9167 : CASE (4)
9168 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9169 : CALL contract_ffsg(work, &
9170 : nl_a, nl_b, nl_c, nl_d, &
9171 : sphi_a, sphi_b, sphi_c, sphi_d, &
9172 : primitives, &
9173 : buffer1, buffer2)
9174 : #else
9175 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9176 : work, nl_a, nl_b, nl_c, nl_d, &
9177 : sphi_a, &
9178 : sphi_b, &
9179 : sphi_c, &
9180 : sphi_d, &
9181 : primitives, &
9182 0 : buffer1, buffer2)
9183 : #endif
9184 : CASE DEFAULT
9185 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9186 : work, nl_a, nl_b, nl_c, nl_d, &
9187 : sphi_a, &
9188 : sphi_b, &
9189 : sphi_c, &
9190 : sphi_d, &
9191 : primitives, &
9192 10000 : buffer1, buffer2)
9193 : END SELECT
9194 : CASE (1)
9195 7185 : SELECT CASE (n_d)
9196 : CASE (0)
9197 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9198 : CALL contract_ffps(work, &
9199 : nl_a, nl_b, nl_c, nl_d, &
9200 : sphi_a, sphi_b, sphi_c, sphi_d, &
9201 : primitives, &
9202 : buffer1, buffer2)
9203 : #else
9204 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9205 : work, nl_a, nl_b, nl_c, nl_d, &
9206 : sphi_a, &
9207 : sphi_b, &
9208 : sphi_c, &
9209 : sphi_d, &
9210 : primitives, &
9211 896 : buffer1, buffer2)
9212 : #endif
9213 : CASE (1)
9214 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9215 : CALL contract_ffpp(work, &
9216 : nl_a, nl_b, nl_c, nl_d, &
9217 : sphi_a, sphi_b, sphi_c, sphi_d, &
9218 : primitives, &
9219 : buffer1, buffer2)
9220 : #else
9221 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9222 : work, nl_a, nl_b, nl_c, nl_d, &
9223 : sphi_a, &
9224 : sphi_b, &
9225 : sphi_c, &
9226 : sphi_d, &
9227 : primitives, &
9228 2018 : buffer1, buffer2)
9229 : #endif
9230 : CASE (2)
9231 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9232 : CALL contract_ffpd(work, &
9233 : nl_a, nl_b, nl_c, nl_d, &
9234 : sphi_a, sphi_b, sphi_c, sphi_d, &
9235 : primitives, &
9236 : buffer1, buffer2)
9237 : #else
9238 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9239 : work, nl_a, nl_b, nl_c, nl_d, &
9240 : sphi_a, &
9241 : sphi_b, &
9242 : sphi_c, &
9243 : sphi_d, &
9244 : primitives, &
9245 641 : buffer1, buffer2)
9246 : #endif
9247 : CASE (3)
9248 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9249 : CALL contract_ffpf(work, &
9250 : nl_a, nl_b, nl_c, nl_d, &
9251 : sphi_a, sphi_b, sphi_c, sphi_d, &
9252 : primitives, &
9253 : buffer1, buffer2)
9254 : #else
9255 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9256 : work, nl_a, nl_b, nl_c, nl_d, &
9257 : sphi_a, &
9258 : sphi_b, &
9259 : sphi_c, &
9260 : sphi_d, &
9261 : primitives, &
9262 709 : buffer1, buffer2)
9263 : #endif
9264 : CASE (4)
9265 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9266 : CALL contract_ffpg(work, &
9267 : nl_a, nl_b, nl_c, nl_d, &
9268 : sphi_a, sphi_b, sphi_c, sphi_d, &
9269 : primitives, &
9270 : buffer1, buffer2)
9271 : #else
9272 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9273 : work, nl_a, nl_b, nl_c, nl_d, &
9274 : sphi_a, &
9275 : sphi_b, &
9276 : sphi_c, &
9277 : sphi_d, &
9278 : primitives, &
9279 0 : buffer1, buffer2)
9280 : #endif
9281 : CASE DEFAULT
9282 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9283 : work, nl_a, nl_b, nl_c, nl_d, &
9284 : sphi_a, &
9285 : sphi_b, &
9286 : sphi_c, &
9287 : sphi_d, &
9288 : primitives, &
9289 4264 : buffer1, buffer2)
9290 : END SELECT
9291 : CASE (2)
9292 3888 : SELECT CASE (n_d)
9293 : CASE (0)
9294 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9295 : CALL contract_ffds(work, &
9296 : nl_a, nl_b, nl_c, nl_d, &
9297 : sphi_a, sphi_b, sphi_c, sphi_d, &
9298 : primitives, &
9299 : buffer1, buffer2)
9300 : #else
9301 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9302 : work, nl_a, nl_b, nl_c, nl_d, &
9303 : sphi_a, &
9304 : sphi_b, &
9305 : sphi_c, &
9306 : sphi_d, &
9307 : primitives, &
9308 895 : buffer1, buffer2)
9309 : #endif
9310 : CASE (1)
9311 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9312 : CALL contract_ffdp(work, &
9313 : nl_a, nl_b, nl_c, nl_d, &
9314 : sphi_a, sphi_b, sphi_c, sphi_d, &
9315 : primitives, &
9316 : buffer1, buffer2)
9317 : #else
9318 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9319 : work, nl_a, nl_b, nl_c, nl_d, &
9320 : sphi_a, &
9321 : sphi_b, &
9322 : sphi_c, &
9323 : sphi_d, &
9324 : primitives, &
9325 357 : buffer1, buffer2)
9326 : #endif
9327 : CASE (2)
9328 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9329 : CALL contract_ffdd(work, &
9330 : nl_a, nl_b, nl_c, nl_d, &
9331 : sphi_a, sphi_b, sphi_c, sphi_d, &
9332 : primitives, &
9333 : buffer1, buffer2)
9334 : #else
9335 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9336 : work, nl_a, nl_b, nl_c, nl_d, &
9337 : sphi_a, &
9338 : sphi_b, &
9339 : sphi_c, &
9340 : sphi_d, &
9341 : primitives, &
9342 529 : buffer1, buffer2)
9343 : #endif
9344 : CASE (3)
9345 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9346 : CALL contract_ffdf(work, &
9347 : nl_a, nl_b, nl_c, nl_d, &
9348 : sphi_a, sphi_b, sphi_c, sphi_d, &
9349 : primitives, &
9350 : buffer1, buffer2)
9351 : #else
9352 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9353 : work, nl_a, nl_b, nl_c, nl_d, &
9354 : sphi_a, &
9355 : sphi_b, &
9356 : sphi_c, &
9357 : sphi_d, &
9358 : primitives, &
9359 244 : buffer1, buffer2)
9360 : #endif
9361 : CASE (4)
9362 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9363 : CALL contract_ffdg(work, &
9364 : nl_a, nl_b, nl_c, nl_d, &
9365 : sphi_a, sphi_b, sphi_c, sphi_d, &
9366 : primitives, &
9367 : buffer1, buffer2)
9368 : #else
9369 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9370 : work, nl_a, nl_b, nl_c, nl_d, &
9371 : sphi_a, &
9372 : sphi_b, &
9373 : sphi_c, &
9374 : sphi_d, &
9375 : primitives, &
9376 0 : buffer1, buffer2)
9377 : #endif
9378 : CASE DEFAULT
9379 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9380 : work, nl_a, nl_b, nl_c, nl_d, &
9381 : sphi_a, &
9382 : sphi_b, &
9383 : sphi_c, &
9384 : sphi_d, &
9385 : primitives, &
9386 2025 : buffer1, buffer2)
9387 : END SELECT
9388 : CASE (3)
9389 1196 : SELECT CASE (n_d)
9390 : CASE (0)
9391 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9392 : CALL contract_fffs(work, &
9393 : nl_a, nl_b, nl_c, nl_d, &
9394 : sphi_a, sphi_b, sphi_c, sphi_d, &
9395 : primitives, &
9396 : buffer1, buffer2)
9397 : #else
9398 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9399 : work, nl_a, nl_b, nl_c, nl_d, &
9400 : sphi_a, &
9401 : sphi_b, &
9402 : sphi_c, &
9403 : sphi_d, &
9404 : primitives, &
9405 228 : buffer1, buffer2)
9406 : #endif
9407 : CASE (1)
9408 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9409 : CALL contract_fffp(work, &
9410 : nl_a, nl_b, nl_c, nl_d, &
9411 : sphi_a, sphi_b, sphi_c, sphi_d, &
9412 : primitives, &
9413 : buffer1, buffer2)
9414 : #else
9415 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9416 : work, nl_a, nl_b, nl_c, nl_d, &
9417 : sphi_a, &
9418 : sphi_b, &
9419 : sphi_c, &
9420 : sphi_d, &
9421 : primitives, &
9422 359 : buffer1, buffer2)
9423 : #endif
9424 : CASE (2)
9425 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9426 : CALL contract_fffd(work, &
9427 : nl_a, nl_b, nl_c, nl_d, &
9428 : sphi_a, sphi_b, sphi_c, sphi_d, &
9429 : primitives, &
9430 : buffer1, buffer2)
9431 : #else
9432 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9433 : work, nl_a, nl_b, nl_c, nl_d, &
9434 : sphi_a, &
9435 : sphi_b, &
9436 : sphi_c, &
9437 : sphi_d, &
9438 : primitives, &
9439 152 : buffer1, buffer2)
9440 : #endif
9441 : CASE (3)
9442 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
9443 : CALL contract_ffff(work, &
9444 : nl_a, nl_b, nl_c, nl_d, &
9445 : sphi_a, sphi_b, sphi_c, sphi_d, &
9446 : primitives, &
9447 : buffer1, buffer2)
9448 : #else
9449 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9450 : work, nl_a, nl_b, nl_c, nl_d, &
9451 : sphi_a, &
9452 : sphi_b, &
9453 : sphi_c, &
9454 : sphi_d, &
9455 : primitives, &
9456 229 : buffer1, buffer2)
9457 : #endif
9458 : CASE (4)
9459 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9460 : CALL contract_fffg(work, &
9461 : nl_a, nl_b, nl_c, nl_d, &
9462 : sphi_a, sphi_b, sphi_c, sphi_d, &
9463 : primitives, &
9464 : buffer1, buffer2)
9465 : #else
9466 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9467 : work, nl_a, nl_b, nl_c, nl_d, &
9468 : sphi_a, &
9469 : sphi_b, &
9470 : sphi_c, &
9471 : sphi_d, &
9472 : primitives, &
9473 0 : buffer1, buffer2)
9474 : #endif
9475 : CASE DEFAULT
9476 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9477 : work, nl_a, nl_b, nl_c, nl_d, &
9478 : sphi_a, &
9479 : sphi_b, &
9480 : sphi_c, &
9481 : sphi_d, &
9482 : primitives, &
9483 968 : buffer1, buffer2)
9484 : END SELECT
9485 : CASE (4)
9486 0 : SELECT CASE (n_d)
9487 : CASE (0)
9488 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9489 : CALL contract_ffgs(work, &
9490 : nl_a, nl_b, nl_c, nl_d, &
9491 : sphi_a, sphi_b, sphi_c, sphi_d, &
9492 : primitives, &
9493 : buffer1, buffer2)
9494 : #else
9495 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9496 : work, nl_a, nl_b, nl_c, nl_d, &
9497 : sphi_a, &
9498 : sphi_b, &
9499 : sphi_c, &
9500 : sphi_d, &
9501 : primitives, &
9502 0 : buffer1, buffer2)
9503 : #endif
9504 : CASE (1)
9505 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9506 : CALL contract_ffgp(work, &
9507 : nl_a, nl_b, nl_c, nl_d, &
9508 : sphi_a, sphi_b, sphi_c, sphi_d, &
9509 : primitives, &
9510 : buffer1, buffer2)
9511 : #else
9512 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9513 : work, nl_a, nl_b, nl_c, nl_d, &
9514 : sphi_a, &
9515 : sphi_b, &
9516 : sphi_c, &
9517 : sphi_d, &
9518 : primitives, &
9519 0 : buffer1, buffer2)
9520 : #endif
9521 : CASE (2)
9522 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9523 : CALL contract_ffgd(work, &
9524 : nl_a, nl_b, nl_c, nl_d, &
9525 : sphi_a, sphi_b, sphi_c, sphi_d, &
9526 : primitives, &
9527 : buffer1, buffer2)
9528 : #else
9529 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9530 : work, nl_a, nl_b, nl_c, nl_d, &
9531 : sphi_a, &
9532 : sphi_b, &
9533 : sphi_c, &
9534 : sphi_d, &
9535 : primitives, &
9536 0 : buffer1, buffer2)
9537 : #endif
9538 : CASE (3)
9539 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9540 : CALL contract_ffgf(work, &
9541 : nl_a, nl_b, nl_c, nl_d, &
9542 : sphi_a, sphi_b, sphi_c, sphi_d, &
9543 : primitives, &
9544 : buffer1, buffer2)
9545 : #else
9546 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9547 : work, nl_a, nl_b, nl_c, nl_d, &
9548 : sphi_a, &
9549 : sphi_b, &
9550 : sphi_c, &
9551 : sphi_d, &
9552 : primitives, &
9553 0 : buffer1, buffer2)
9554 : #endif
9555 : CASE (4)
9556 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9557 : CALL contract_ffgg(work, &
9558 : nl_a, nl_b, nl_c, nl_d, &
9559 : sphi_a, sphi_b, sphi_c, sphi_d, &
9560 : primitives, &
9561 : buffer1, buffer2)
9562 : #else
9563 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9564 : work, nl_a, nl_b, nl_c, nl_d, &
9565 : sphi_a, &
9566 : sphi_b, &
9567 : sphi_c, &
9568 : sphi_d, &
9569 : primitives, &
9570 0 : buffer1, buffer2)
9571 : #endif
9572 : CASE DEFAULT
9573 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9574 : work, nl_a, nl_b, nl_c, nl_d, &
9575 : sphi_a, &
9576 : sphi_b, &
9577 : sphi_c, &
9578 : sphi_d, &
9579 : primitives, &
9580 0 : buffer1, buffer2)
9581 : END SELECT
9582 : CASE DEFAULT
9583 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9584 : work, nl_a, nl_b, nl_c, nl_d, &
9585 : sphi_a, &
9586 : sphi_b, &
9587 : sphi_c, &
9588 : sphi_d, &
9589 : primitives, &
9590 17257 : buffer1, buffer2)
9591 : END SELECT
9592 : CASE (4)
9593 0 : SELECT CASE (n_c)
9594 : CASE (0)
9595 0 : SELECT CASE (n_d)
9596 : CASE (0)
9597 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9598 : CALL contract_fgss(work, &
9599 : nl_a, nl_b, nl_c, nl_d, &
9600 : sphi_a, sphi_b, sphi_c, sphi_d, &
9601 : primitives, &
9602 : buffer1, buffer2)
9603 : #else
9604 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9605 : work, nl_a, nl_b, nl_c, nl_d, &
9606 : sphi_a, &
9607 : sphi_b, &
9608 : sphi_c, &
9609 : sphi_d, &
9610 : primitives, &
9611 0 : buffer1, buffer2)
9612 : #endif
9613 : CASE (1)
9614 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9615 : CALL contract_fgsp(work, &
9616 : nl_a, nl_b, nl_c, nl_d, &
9617 : sphi_a, sphi_b, sphi_c, sphi_d, &
9618 : primitives, &
9619 : buffer1, buffer2)
9620 : #else
9621 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9622 : work, nl_a, nl_b, nl_c, nl_d, &
9623 : sphi_a, &
9624 : sphi_b, &
9625 : sphi_c, &
9626 : sphi_d, &
9627 : primitives, &
9628 0 : buffer1, buffer2)
9629 : #endif
9630 : CASE (2)
9631 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9632 : CALL contract_fgsd(work, &
9633 : nl_a, nl_b, nl_c, nl_d, &
9634 : sphi_a, sphi_b, sphi_c, sphi_d, &
9635 : primitives, &
9636 : buffer1, buffer2)
9637 : #else
9638 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9639 : work, nl_a, nl_b, nl_c, nl_d, &
9640 : sphi_a, &
9641 : sphi_b, &
9642 : sphi_c, &
9643 : sphi_d, &
9644 : primitives, &
9645 0 : buffer1, buffer2)
9646 : #endif
9647 : CASE (3)
9648 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9649 : CALL contract_fgsf(work, &
9650 : nl_a, nl_b, nl_c, nl_d, &
9651 : sphi_a, sphi_b, sphi_c, sphi_d, &
9652 : primitives, &
9653 : buffer1, buffer2)
9654 : #else
9655 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9656 : work, nl_a, nl_b, nl_c, nl_d, &
9657 : sphi_a, &
9658 : sphi_b, &
9659 : sphi_c, &
9660 : sphi_d, &
9661 : primitives, &
9662 0 : buffer1, buffer2)
9663 : #endif
9664 : CASE (4)
9665 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9666 : CALL contract_fgsg(work, &
9667 : nl_a, nl_b, nl_c, nl_d, &
9668 : sphi_a, sphi_b, sphi_c, sphi_d, &
9669 : primitives, &
9670 : buffer1, buffer2)
9671 : #else
9672 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9673 : work, nl_a, nl_b, nl_c, nl_d, &
9674 : sphi_a, &
9675 : sphi_b, &
9676 : sphi_c, &
9677 : sphi_d, &
9678 : primitives, &
9679 0 : buffer1, buffer2)
9680 : #endif
9681 : CASE DEFAULT
9682 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9683 : work, nl_a, nl_b, nl_c, nl_d, &
9684 : sphi_a, &
9685 : sphi_b, &
9686 : sphi_c, &
9687 : sphi_d, &
9688 : primitives, &
9689 0 : buffer1, buffer2)
9690 : END SELECT
9691 : CASE (1)
9692 0 : SELECT CASE (n_d)
9693 : CASE (0)
9694 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9695 : CALL contract_fgps(work, &
9696 : nl_a, nl_b, nl_c, nl_d, &
9697 : sphi_a, sphi_b, sphi_c, sphi_d, &
9698 : primitives, &
9699 : buffer1, buffer2)
9700 : #else
9701 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9702 : work, nl_a, nl_b, nl_c, nl_d, &
9703 : sphi_a, &
9704 : sphi_b, &
9705 : sphi_c, &
9706 : sphi_d, &
9707 : primitives, &
9708 0 : buffer1, buffer2)
9709 : #endif
9710 : CASE (1)
9711 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9712 : CALL contract_fgpp(work, &
9713 : nl_a, nl_b, nl_c, nl_d, &
9714 : sphi_a, sphi_b, sphi_c, sphi_d, &
9715 : primitives, &
9716 : buffer1, buffer2)
9717 : #else
9718 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9719 : work, nl_a, nl_b, nl_c, nl_d, &
9720 : sphi_a, &
9721 : sphi_b, &
9722 : sphi_c, &
9723 : sphi_d, &
9724 : primitives, &
9725 0 : buffer1, buffer2)
9726 : #endif
9727 : CASE (2)
9728 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9729 : CALL contract_fgpd(work, &
9730 : nl_a, nl_b, nl_c, nl_d, &
9731 : sphi_a, sphi_b, sphi_c, sphi_d, &
9732 : primitives, &
9733 : buffer1, buffer2)
9734 : #else
9735 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9736 : work, nl_a, nl_b, nl_c, nl_d, &
9737 : sphi_a, &
9738 : sphi_b, &
9739 : sphi_c, &
9740 : sphi_d, &
9741 : primitives, &
9742 0 : buffer1, buffer2)
9743 : #endif
9744 : CASE (3)
9745 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9746 : CALL contract_fgpf(work, &
9747 : nl_a, nl_b, nl_c, nl_d, &
9748 : sphi_a, sphi_b, sphi_c, sphi_d, &
9749 : primitives, &
9750 : buffer1, buffer2)
9751 : #else
9752 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9753 : work, nl_a, nl_b, nl_c, nl_d, &
9754 : sphi_a, &
9755 : sphi_b, &
9756 : sphi_c, &
9757 : sphi_d, &
9758 : primitives, &
9759 0 : buffer1, buffer2)
9760 : #endif
9761 : CASE (4)
9762 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9763 : CALL contract_fgpg(work, &
9764 : nl_a, nl_b, nl_c, nl_d, &
9765 : sphi_a, sphi_b, sphi_c, sphi_d, &
9766 : primitives, &
9767 : buffer1, buffer2)
9768 : #else
9769 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9770 : work, nl_a, nl_b, nl_c, nl_d, &
9771 : sphi_a, &
9772 : sphi_b, &
9773 : sphi_c, &
9774 : sphi_d, &
9775 : primitives, &
9776 0 : buffer1, buffer2)
9777 : #endif
9778 : CASE DEFAULT
9779 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9780 : work, nl_a, nl_b, nl_c, nl_d, &
9781 : sphi_a, &
9782 : sphi_b, &
9783 : sphi_c, &
9784 : sphi_d, &
9785 : primitives, &
9786 0 : buffer1, buffer2)
9787 : END SELECT
9788 : CASE (2)
9789 0 : SELECT CASE (n_d)
9790 : CASE (0)
9791 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9792 : CALL contract_fgds(work, &
9793 : nl_a, nl_b, nl_c, nl_d, &
9794 : sphi_a, sphi_b, sphi_c, sphi_d, &
9795 : primitives, &
9796 : buffer1, buffer2)
9797 : #else
9798 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9799 : work, nl_a, nl_b, nl_c, nl_d, &
9800 : sphi_a, &
9801 : sphi_b, &
9802 : sphi_c, &
9803 : sphi_d, &
9804 : primitives, &
9805 0 : buffer1, buffer2)
9806 : #endif
9807 : CASE (1)
9808 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9809 : CALL contract_fgdp(work, &
9810 : nl_a, nl_b, nl_c, nl_d, &
9811 : sphi_a, sphi_b, sphi_c, sphi_d, &
9812 : primitives, &
9813 : buffer1, buffer2)
9814 : #else
9815 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9816 : work, nl_a, nl_b, nl_c, nl_d, &
9817 : sphi_a, &
9818 : sphi_b, &
9819 : sphi_c, &
9820 : sphi_d, &
9821 : primitives, &
9822 0 : buffer1, buffer2)
9823 : #endif
9824 : CASE (2)
9825 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9826 : CALL contract_fgdd(work, &
9827 : nl_a, nl_b, nl_c, nl_d, &
9828 : sphi_a, sphi_b, sphi_c, sphi_d, &
9829 : primitives, &
9830 : buffer1, buffer2)
9831 : #else
9832 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9833 : work, nl_a, nl_b, nl_c, nl_d, &
9834 : sphi_a, &
9835 : sphi_b, &
9836 : sphi_c, &
9837 : sphi_d, &
9838 : primitives, &
9839 0 : buffer1, buffer2)
9840 : #endif
9841 : CASE (3)
9842 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9843 : CALL contract_fgdf(work, &
9844 : nl_a, nl_b, nl_c, nl_d, &
9845 : sphi_a, sphi_b, sphi_c, sphi_d, &
9846 : primitives, &
9847 : buffer1, buffer2)
9848 : #else
9849 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9850 : work, nl_a, nl_b, nl_c, nl_d, &
9851 : sphi_a, &
9852 : sphi_b, &
9853 : sphi_c, &
9854 : sphi_d, &
9855 : primitives, &
9856 0 : buffer1, buffer2)
9857 : #endif
9858 : CASE (4)
9859 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9860 : CALL contract_fgdg(work, &
9861 : nl_a, nl_b, nl_c, nl_d, &
9862 : sphi_a, sphi_b, sphi_c, sphi_d, &
9863 : primitives, &
9864 : buffer1, buffer2)
9865 : #else
9866 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9867 : work, nl_a, nl_b, nl_c, nl_d, &
9868 : sphi_a, &
9869 : sphi_b, &
9870 : sphi_c, &
9871 : sphi_d, &
9872 : primitives, &
9873 0 : buffer1, buffer2)
9874 : #endif
9875 : CASE DEFAULT
9876 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9877 : work, nl_a, nl_b, nl_c, nl_d, &
9878 : sphi_a, &
9879 : sphi_b, &
9880 : sphi_c, &
9881 : sphi_d, &
9882 : primitives, &
9883 0 : buffer1, buffer2)
9884 : END SELECT
9885 : CASE (3)
9886 0 : SELECT CASE (n_d)
9887 : CASE (0)
9888 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9889 : CALL contract_fgfs(work, &
9890 : nl_a, nl_b, nl_c, nl_d, &
9891 : sphi_a, sphi_b, sphi_c, sphi_d, &
9892 : primitives, &
9893 : buffer1, buffer2)
9894 : #else
9895 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9896 : work, nl_a, nl_b, nl_c, nl_d, &
9897 : sphi_a, &
9898 : sphi_b, &
9899 : sphi_c, &
9900 : sphi_d, &
9901 : primitives, &
9902 0 : buffer1, buffer2)
9903 : #endif
9904 : CASE (1)
9905 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9906 : CALL contract_fgfp(work, &
9907 : nl_a, nl_b, nl_c, nl_d, &
9908 : sphi_a, sphi_b, sphi_c, sphi_d, &
9909 : primitives, &
9910 : buffer1, buffer2)
9911 : #else
9912 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9913 : work, nl_a, nl_b, nl_c, nl_d, &
9914 : sphi_a, &
9915 : sphi_b, &
9916 : sphi_c, &
9917 : sphi_d, &
9918 : primitives, &
9919 0 : buffer1, buffer2)
9920 : #endif
9921 : CASE (2)
9922 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9923 : CALL contract_fgfd(work, &
9924 : nl_a, nl_b, nl_c, nl_d, &
9925 : sphi_a, sphi_b, sphi_c, sphi_d, &
9926 : primitives, &
9927 : buffer1, buffer2)
9928 : #else
9929 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9930 : work, nl_a, nl_b, nl_c, nl_d, &
9931 : sphi_a, &
9932 : sphi_b, &
9933 : sphi_c, &
9934 : sphi_d, &
9935 : primitives, &
9936 0 : buffer1, buffer2)
9937 : #endif
9938 : CASE (3)
9939 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9940 : CALL contract_fgff(work, &
9941 : nl_a, nl_b, nl_c, nl_d, &
9942 : sphi_a, sphi_b, sphi_c, sphi_d, &
9943 : primitives, &
9944 : buffer1, buffer2)
9945 : #else
9946 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9947 : work, nl_a, nl_b, nl_c, nl_d, &
9948 : sphi_a, &
9949 : sphi_b, &
9950 : sphi_c, &
9951 : sphi_d, &
9952 : primitives, &
9953 0 : buffer1, buffer2)
9954 : #endif
9955 : CASE (4)
9956 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9957 : CALL contract_fgfg(work, &
9958 : nl_a, nl_b, nl_c, nl_d, &
9959 : sphi_a, sphi_b, sphi_c, sphi_d, &
9960 : primitives, &
9961 : buffer1, buffer2)
9962 : #else
9963 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9964 : work, nl_a, nl_b, nl_c, nl_d, &
9965 : sphi_a, &
9966 : sphi_b, &
9967 : sphi_c, &
9968 : sphi_d, &
9969 : primitives, &
9970 0 : buffer1, buffer2)
9971 : #endif
9972 : CASE DEFAULT
9973 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9974 : work, nl_a, nl_b, nl_c, nl_d, &
9975 : sphi_a, &
9976 : sphi_b, &
9977 : sphi_c, &
9978 : sphi_d, &
9979 : primitives, &
9980 0 : buffer1, buffer2)
9981 : END SELECT
9982 : CASE (4)
9983 0 : SELECT CASE (n_d)
9984 : CASE (0)
9985 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
9986 : CALL contract_fggs(work, &
9987 : nl_a, nl_b, nl_c, nl_d, &
9988 : sphi_a, sphi_b, sphi_c, sphi_d, &
9989 : primitives, &
9990 : buffer1, buffer2)
9991 : #else
9992 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
9993 : work, nl_a, nl_b, nl_c, nl_d, &
9994 : sphi_a, &
9995 : sphi_b, &
9996 : sphi_c, &
9997 : sphi_d, &
9998 : primitives, &
9999 0 : buffer1, buffer2)
10000 : #endif
10001 : CASE (1)
10002 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10003 : CALL contract_fggp(work, &
10004 : nl_a, nl_b, nl_c, nl_d, &
10005 : sphi_a, sphi_b, sphi_c, sphi_d, &
10006 : primitives, &
10007 : buffer1, buffer2)
10008 : #else
10009 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10010 : work, nl_a, nl_b, nl_c, nl_d, &
10011 : sphi_a, &
10012 : sphi_b, &
10013 : sphi_c, &
10014 : sphi_d, &
10015 : primitives, &
10016 0 : buffer1, buffer2)
10017 : #endif
10018 : CASE (2)
10019 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10020 : CALL contract_fggd(work, &
10021 : nl_a, nl_b, nl_c, nl_d, &
10022 : sphi_a, sphi_b, sphi_c, sphi_d, &
10023 : primitives, &
10024 : buffer1, buffer2)
10025 : #else
10026 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10027 : work, nl_a, nl_b, nl_c, nl_d, &
10028 : sphi_a, &
10029 : sphi_b, &
10030 : sphi_c, &
10031 : sphi_d, &
10032 : primitives, &
10033 0 : buffer1, buffer2)
10034 : #endif
10035 : CASE (3)
10036 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10037 : CALL contract_fggf(work, &
10038 : nl_a, nl_b, nl_c, nl_d, &
10039 : sphi_a, sphi_b, sphi_c, sphi_d, &
10040 : primitives, &
10041 : buffer1, buffer2)
10042 : #else
10043 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10044 : work, nl_a, nl_b, nl_c, nl_d, &
10045 : sphi_a, &
10046 : sphi_b, &
10047 : sphi_c, &
10048 : sphi_d, &
10049 : primitives, &
10050 0 : buffer1, buffer2)
10051 : #endif
10052 : CASE (4)
10053 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10054 : CALL contract_fggg(work, &
10055 : nl_a, nl_b, nl_c, nl_d, &
10056 : sphi_a, sphi_b, sphi_c, sphi_d, &
10057 : primitives, &
10058 : buffer1, buffer2)
10059 : #else
10060 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10061 : work, nl_a, nl_b, nl_c, nl_d, &
10062 : sphi_a, &
10063 : sphi_b, &
10064 : sphi_c, &
10065 : sphi_d, &
10066 : primitives, &
10067 0 : buffer1, buffer2)
10068 : #endif
10069 : CASE DEFAULT
10070 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10071 : work, nl_a, nl_b, nl_c, nl_d, &
10072 : sphi_a, &
10073 : sphi_b, &
10074 : sphi_c, &
10075 : sphi_d, &
10076 : primitives, &
10077 0 : buffer1, buffer2)
10078 : END SELECT
10079 : CASE DEFAULT
10080 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10081 : work, nl_a, nl_b, nl_c, nl_d, &
10082 : sphi_a, &
10083 : sphi_b, &
10084 : sphi_c, &
10085 : sphi_d, &
10086 : primitives, &
10087 0 : buffer1, buffer2)
10088 : END SELECT
10089 : CASE DEFAULT
10090 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10091 : work, nl_a, nl_b, nl_c, nl_d, &
10092 : sphi_a, &
10093 : sphi_b, &
10094 : sphi_c, &
10095 : sphi_d, &
10096 : primitives, &
10097 270979 : buffer1, buffer2)
10098 : END SELECT
10099 : CASE (4)
10100 0 : SELECT CASE (n_b)
10101 : CASE (0)
10102 0 : SELECT CASE (n_c)
10103 : CASE (0)
10104 0 : SELECT CASE (n_d)
10105 : CASE (0)
10106 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10107 : CALL contract_gsss(work, &
10108 : nl_a, nl_b, nl_c, nl_d, &
10109 : sphi_a, sphi_b, sphi_c, sphi_d, &
10110 : primitives, &
10111 : buffer1, buffer2)
10112 : #else
10113 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10114 : work, nl_a, nl_b, nl_c, nl_d, &
10115 : sphi_a, &
10116 : sphi_b, &
10117 : sphi_c, &
10118 : sphi_d, &
10119 : primitives, &
10120 0 : buffer1, buffer2)
10121 : #endif
10122 : CASE (1)
10123 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10124 : CALL contract_gssp(work, &
10125 : nl_a, nl_b, nl_c, nl_d, &
10126 : sphi_a, sphi_b, sphi_c, sphi_d, &
10127 : primitives, &
10128 : buffer1, buffer2)
10129 : #else
10130 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10131 : work, nl_a, nl_b, nl_c, nl_d, &
10132 : sphi_a, &
10133 : sphi_b, &
10134 : sphi_c, &
10135 : sphi_d, &
10136 : primitives, &
10137 0 : buffer1, buffer2)
10138 : #endif
10139 : CASE (2)
10140 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10141 : CALL contract_gssd(work, &
10142 : nl_a, nl_b, nl_c, nl_d, &
10143 : sphi_a, sphi_b, sphi_c, sphi_d, &
10144 : primitives, &
10145 : buffer1, buffer2)
10146 : #else
10147 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10148 : work, nl_a, nl_b, nl_c, nl_d, &
10149 : sphi_a, &
10150 : sphi_b, &
10151 : sphi_c, &
10152 : sphi_d, &
10153 : primitives, &
10154 0 : buffer1, buffer2)
10155 : #endif
10156 : CASE (3)
10157 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10158 : CALL contract_gssf(work, &
10159 : nl_a, nl_b, nl_c, nl_d, &
10160 : sphi_a, sphi_b, sphi_c, sphi_d, &
10161 : primitives, &
10162 : buffer1, buffer2)
10163 : #else
10164 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10165 : work, nl_a, nl_b, nl_c, nl_d, &
10166 : sphi_a, &
10167 : sphi_b, &
10168 : sphi_c, &
10169 : sphi_d, &
10170 : primitives, &
10171 0 : buffer1, buffer2)
10172 : #endif
10173 : CASE (4)
10174 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10175 : CALL contract_gssg(work, &
10176 : nl_a, nl_b, nl_c, nl_d, &
10177 : sphi_a, sphi_b, sphi_c, sphi_d, &
10178 : primitives, &
10179 : buffer1, buffer2)
10180 : #else
10181 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10182 : work, nl_a, nl_b, nl_c, nl_d, &
10183 : sphi_a, &
10184 : sphi_b, &
10185 : sphi_c, &
10186 : sphi_d, &
10187 : primitives, &
10188 0 : buffer1, buffer2)
10189 : #endif
10190 : CASE DEFAULT
10191 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10192 : work, nl_a, nl_b, nl_c, nl_d, &
10193 : sphi_a, &
10194 : sphi_b, &
10195 : sphi_c, &
10196 : sphi_d, &
10197 : primitives, &
10198 0 : buffer1, buffer2)
10199 : END SELECT
10200 : CASE (1)
10201 0 : SELECT CASE (n_d)
10202 : CASE (0)
10203 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10204 : CALL contract_gsps(work, &
10205 : nl_a, nl_b, nl_c, nl_d, &
10206 : sphi_a, sphi_b, sphi_c, sphi_d, &
10207 : primitives, &
10208 : buffer1, buffer2)
10209 : #else
10210 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10211 : work, nl_a, nl_b, nl_c, nl_d, &
10212 : sphi_a, &
10213 : sphi_b, &
10214 : sphi_c, &
10215 : sphi_d, &
10216 : primitives, &
10217 0 : buffer1, buffer2)
10218 : #endif
10219 : CASE (1)
10220 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10221 : CALL contract_gspp(work, &
10222 : nl_a, nl_b, nl_c, nl_d, &
10223 : sphi_a, sphi_b, sphi_c, sphi_d, &
10224 : primitives, &
10225 : buffer1, buffer2)
10226 : #else
10227 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10228 : work, nl_a, nl_b, nl_c, nl_d, &
10229 : sphi_a, &
10230 : sphi_b, &
10231 : sphi_c, &
10232 : sphi_d, &
10233 : primitives, &
10234 0 : buffer1, buffer2)
10235 : #endif
10236 : CASE (2)
10237 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10238 : CALL contract_gspd(work, &
10239 : nl_a, nl_b, nl_c, nl_d, &
10240 : sphi_a, sphi_b, sphi_c, sphi_d, &
10241 : primitives, &
10242 : buffer1, buffer2)
10243 : #else
10244 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10245 : work, nl_a, nl_b, nl_c, nl_d, &
10246 : sphi_a, &
10247 : sphi_b, &
10248 : sphi_c, &
10249 : sphi_d, &
10250 : primitives, &
10251 0 : buffer1, buffer2)
10252 : #endif
10253 : CASE (3)
10254 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10255 : CALL contract_gspf(work, &
10256 : nl_a, nl_b, nl_c, nl_d, &
10257 : sphi_a, sphi_b, sphi_c, sphi_d, &
10258 : primitives, &
10259 : buffer1, buffer2)
10260 : #else
10261 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10262 : work, nl_a, nl_b, nl_c, nl_d, &
10263 : sphi_a, &
10264 : sphi_b, &
10265 : sphi_c, &
10266 : sphi_d, &
10267 : primitives, &
10268 0 : buffer1, buffer2)
10269 : #endif
10270 : CASE (4)
10271 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10272 : CALL contract_gspg(work, &
10273 : nl_a, nl_b, nl_c, nl_d, &
10274 : sphi_a, sphi_b, sphi_c, sphi_d, &
10275 : primitives, &
10276 : buffer1, buffer2)
10277 : #else
10278 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10279 : work, nl_a, nl_b, nl_c, nl_d, &
10280 : sphi_a, &
10281 : sphi_b, &
10282 : sphi_c, &
10283 : sphi_d, &
10284 : primitives, &
10285 0 : buffer1, buffer2)
10286 : #endif
10287 : CASE DEFAULT
10288 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10289 : work, nl_a, nl_b, nl_c, nl_d, &
10290 : sphi_a, &
10291 : sphi_b, &
10292 : sphi_c, &
10293 : sphi_d, &
10294 : primitives, &
10295 0 : buffer1, buffer2)
10296 : END SELECT
10297 : CASE (2)
10298 0 : SELECT CASE (n_d)
10299 : CASE (0)
10300 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10301 : CALL contract_gsds(work, &
10302 : nl_a, nl_b, nl_c, nl_d, &
10303 : sphi_a, sphi_b, sphi_c, sphi_d, &
10304 : primitives, &
10305 : buffer1, buffer2)
10306 : #else
10307 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10308 : work, nl_a, nl_b, nl_c, nl_d, &
10309 : sphi_a, &
10310 : sphi_b, &
10311 : sphi_c, &
10312 : sphi_d, &
10313 : primitives, &
10314 0 : buffer1, buffer2)
10315 : #endif
10316 : CASE (1)
10317 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10318 : CALL contract_gsdp(work, &
10319 : nl_a, nl_b, nl_c, nl_d, &
10320 : sphi_a, sphi_b, sphi_c, sphi_d, &
10321 : primitives, &
10322 : buffer1, buffer2)
10323 : #else
10324 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10325 : work, nl_a, nl_b, nl_c, nl_d, &
10326 : sphi_a, &
10327 : sphi_b, &
10328 : sphi_c, &
10329 : sphi_d, &
10330 : primitives, &
10331 0 : buffer1, buffer2)
10332 : #endif
10333 : CASE (2)
10334 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10335 : CALL contract_gsdd(work, &
10336 : nl_a, nl_b, nl_c, nl_d, &
10337 : sphi_a, sphi_b, sphi_c, sphi_d, &
10338 : primitives, &
10339 : buffer1, buffer2)
10340 : #else
10341 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10342 : work, nl_a, nl_b, nl_c, nl_d, &
10343 : sphi_a, &
10344 : sphi_b, &
10345 : sphi_c, &
10346 : sphi_d, &
10347 : primitives, &
10348 0 : buffer1, buffer2)
10349 : #endif
10350 : CASE (3)
10351 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10352 : CALL contract_gsdf(work, &
10353 : nl_a, nl_b, nl_c, nl_d, &
10354 : sphi_a, sphi_b, sphi_c, sphi_d, &
10355 : primitives, &
10356 : buffer1, buffer2)
10357 : #else
10358 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10359 : work, nl_a, nl_b, nl_c, nl_d, &
10360 : sphi_a, &
10361 : sphi_b, &
10362 : sphi_c, &
10363 : sphi_d, &
10364 : primitives, &
10365 0 : buffer1, buffer2)
10366 : #endif
10367 : CASE (4)
10368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10369 : CALL contract_gsdg(work, &
10370 : nl_a, nl_b, nl_c, nl_d, &
10371 : sphi_a, sphi_b, sphi_c, sphi_d, &
10372 : primitives, &
10373 : buffer1, buffer2)
10374 : #else
10375 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10376 : work, nl_a, nl_b, nl_c, nl_d, &
10377 : sphi_a, &
10378 : sphi_b, &
10379 : sphi_c, &
10380 : sphi_d, &
10381 : primitives, &
10382 0 : buffer1, buffer2)
10383 : #endif
10384 : CASE DEFAULT
10385 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10386 : work, nl_a, nl_b, nl_c, nl_d, &
10387 : sphi_a, &
10388 : sphi_b, &
10389 : sphi_c, &
10390 : sphi_d, &
10391 : primitives, &
10392 0 : buffer1, buffer2)
10393 : END SELECT
10394 : CASE (3)
10395 0 : SELECT CASE (n_d)
10396 : CASE (0)
10397 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10398 : CALL contract_gsfs(work, &
10399 : nl_a, nl_b, nl_c, nl_d, &
10400 : sphi_a, sphi_b, sphi_c, sphi_d, &
10401 : primitives, &
10402 : buffer1, buffer2)
10403 : #else
10404 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10405 : work, nl_a, nl_b, nl_c, nl_d, &
10406 : sphi_a, &
10407 : sphi_b, &
10408 : sphi_c, &
10409 : sphi_d, &
10410 : primitives, &
10411 0 : buffer1, buffer2)
10412 : #endif
10413 : CASE (1)
10414 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10415 : CALL contract_gsfp(work, &
10416 : nl_a, nl_b, nl_c, nl_d, &
10417 : sphi_a, sphi_b, sphi_c, sphi_d, &
10418 : primitives, &
10419 : buffer1, buffer2)
10420 : #else
10421 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10422 : work, nl_a, nl_b, nl_c, nl_d, &
10423 : sphi_a, &
10424 : sphi_b, &
10425 : sphi_c, &
10426 : sphi_d, &
10427 : primitives, &
10428 0 : buffer1, buffer2)
10429 : #endif
10430 : CASE (2)
10431 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10432 : CALL contract_gsfd(work, &
10433 : nl_a, nl_b, nl_c, nl_d, &
10434 : sphi_a, sphi_b, sphi_c, sphi_d, &
10435 : primitives, &
10436 : buffer1, buffer2)
10437 : #else
10438 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10439 : work, nl_a, nl_b, nl_c, nl_d, &
10440 : sphi_a, &
10441 : sphi_b, &
10442 : sphi_c, &
10443 : sphi_d, &
10444 : primitives, &
10445 0 : buffer1, buffer2)
10446 : #endif
10447 : CASE (3)
10448 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10449 : CALL contract_gsff(work, &
10450 : nl_a, nl_b, nl_c, nl_d, &
10451 : sphi_a, sphi_b, sphi_c, sphi_d, &
10452 : primitives, &
10453 : buffer1, buffer2)
10454 : #else
10455 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10456 : work, nl_a, nl_b, nl_c, nl_d, &
10457 : sphi_a, &
10458 : sphi_b, &
10459 : sphi_c, &
10460 : sphi_d, &
10461 : primitives, &
10462 0 : buffer1, buffer2)
10463 : #endif
10464 : CASE (4)
10465 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10466 : CALL contract_gsfg(work, &
10467 : nl_a, nl_b, nl_c, nl_d, &
10468 : sphi_a, sphi_b, sphi_c, sphi_d, &
10469 : primitives, &
10470 : buffer1, buffer2)
10471 : #else
10472 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10473 : work, nl_a, nl_b, nl_c, nl_d, &
10474 : sphi_a, &
10475 : sphi_b, &
10476 : sphi_c, &
10477 : sphi_d, &
10478 : primitives, &
10479 0 : buffer1, buffer2)
10480 : #endif
10481 : CASE DEFAULT
10482 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10483 : work, nl_a, nl_b, nl_c, nl_d, &
10484 : sphi_a, &
10485 : sphi_b, &
10486 : sphi_c, &
10487 : sphi_d, &
10488 : primitives, &
10489 0 : buffer1, buffer2)
10490 : END SELECT
10491 : CASE (4)
10492 0 : SELECT CASE (n_d)
10493 : CASE (0)
10494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10495 : CALL contract_gsgs(work, &
10496 : nl_a, nl_b, nl_c, nl_d, &
10497 : sphi_a, sphi_b, sphi_c, sphi_d, &
10498 : primitives, &
10499 : buffer1, buffer2)
10500 : #else
10501 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10502 : work, nl_a, nl_b, nl_c, nl_d, &
10503 : sphi_a, &
10504 : sphi_b, &
10505 : sphi_c, &
10506 : sphi_d, &
10507 : primitives, &
10508 0 : buffer1, buffer2)
10509 : #endif
10510 : CASE (1)
10511 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10512 : CALL contract_gsgp(work, &
10513 : nl_a, nl_b, nl_c, nl_d, &
10514 : sphi_a, sphi_b, sphi_c, sphi_d, &
10515 : primitives, &
10516 : buffer1, buffer2)
10517 : #else
10518 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10519 : work, nl_a, nl_b, nl_c, nl_d, &
10520 : sphi_a, &
10521 : sphi_b, &
10522 : sphi_c, &
10523 : sphi_d, &
10524 : primitives, &
10525 0 : buffer1, buffer2)
10526 : #endif
10527 : CASE (2)
10528 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10529 : CALL contract_gsgd(work, &
10530 : nl_a, nl_b, nl_c, nl_d, &
10531 : sphi_a, sphi_b, sphi_c, sphi_d, &
10532 : primitives, &
10533 : buffer1, buffer2)
10534 : #else
10535 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10536 : work, nl_a, nl_b, nl_c, nl_d, &
10537 : sphi_a, &
10538 : sphi_b, &
10539 : sphi_c, &
10540 : sphi_d, &
10541 : primitives, &
10542 0 : buffer1, buffer2)
10543 : #endif
10544 : CASE (3)
10545 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10546 : CALL contract_gsgf(work, &
10547 : nl_a, nl_b, nl_c, nl_d, &
10548 : sphi_a, sphi_b, sphi_c, sphi_d, &
10549 : primitives, &
10550 : buffer1, buffer2)
10551 : #else
10552 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10553 : work, nl_a, nl_b, nl_c, nl_d, &
10554 : sphi_a, &
10555 : sphi_b, &
10556 : sphi_c, &
10557 : sphi_d, &
10558 : primitives, &
10559 0 : buffer1, buffer2)
10560 : #endif
10561 : CASE (4)
10562 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10563 : CALL contract_gsgg(work, &
10564 : nl_a, nl_b, nl_c, nl_d, &
10565 : sphi_a, sphi_b, sphi_c, sphi_d, &
10566 : primitives, &
10567 : buffer1, buffer2)
10568 : #else
10569 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10570 : work, nl_a, nl_b, nl_c, nl_d, &
10571 : sphi_a, &
10572 : sphi_b, &
10573 : sphi_c, &
10574 : sphi_d, &
10575 : primitives, &
10576 0 : buffer1, buffer2)
10577 : #endif
10578 : CASE DEFAULT
10579 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10580 : work, nl_a, nl_b, nl_c, nl_d, &
10581 : sphi_a, &
10582 : sphi_b, &
10583 : sphi_c, &
10584 : sphi_d, &
10585 : primitives, &
10586 0 : buffer1, buffer2)
10587 : END SELECT
10588 : CASE DEFAULT
10589 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10590 : work, nl_a, nl_b, nl_c, nl_d, &
10591 : sphi_a, &
10592 : sphi_b, &
10593 : sphi_c, &
10594 : sphi_d, &
10595 : primitives, &
10596 0 : buffer1, buffer2)
10597 : END SELECT
10598 : CASE (1)
10599 0 : SELECT CASE (n_c)
10600 : CASE (0)
10601 0 : SELECT CASE (n_d)
10602 : CASE (0)
10603 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10604 : CALL contract_gpss(work, &
10605 : nl_a, nl_b, nl_c, nl_d, &
10606 : sphi_a, sphi_b, sphi_c, sphi_d, &
10607 : primitives, &
10608 : buffer1, buffer2)
10609 : #else
10610 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10611 : work, nl_a, nl_b, nl_c, nl_d, &
10612 : sphi_a, &
10613 : sphi_b, &
10614 : sphi_c, &
10615 : sphi_d, &
10616 : primitives, &
10617 0 : buffer1, buffer2)
10618 : #endif
10619 : CASE (1)
10620 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10621 : CALL contract_gpsp(work, &
10622 : nl_a, nl_b, nl_c, nl_d, &
10623 : sphi_a, sphi_b, sphi_c, sphi_d, &
10624 : primitives, &
10625 : buffer1, buffer2)
10626 : #else
10627 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10628 : work, nl_a, nl_b, nl_c, nl_d, &
10629 : sphi_a, &
10630 : sphi_b, &
10631 : sphi_c, &
10632 : sphi_d, &
10633 : primitives, &
10634 0 : buffer1, buffer2)
10635 : #endif
10636 : CASE (2)
10637 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10638 : CALL contract_gpsd(work, &
10639 : nl_a, nl_b, nl_c, nl_d, &
10640 : sphi_a, sphi_b, sphi_c, sphi_d, &
10641 : primitives, &
10642 : buffer1, buffer2)
10643 : #else
10644 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10645 : work, nl_a, nl_b, nl_c, nl_d, &
10646 : sphi_a, &
10647 : sphi_b, &
10648 : sphi_c, &
10649 : sphi_d, &
10650 : primitives, &
10651 0 : buffer1, buffer2)
10652 : #endif
10653 : CASE (3)
10654 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10655 : CALL contract_gpsf(work, &
10656 : nl_a, nl_b, nl_c, nl_d, &
10657 : sphi_a, sphi_b, sphi_c, sphi_d, &
10658 : primitives, &
10659 : buffer1, buffer2)
10660 : #else
10661 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10662 : work, nl_a, nl_b, nl_c, nl_d, &
10663 : sphi_a, &
10664 : sphi_b, &
10665 : sphi_c, &
10666 : sphi_d, &
10667 : primitives, &
10668 0 : buffer1, buffer2)
10669 : #endif
10670 : CASE (4)
10671 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10672 : CALL contract_gpsg(work, &
10673 : nl_a, nl_b, nl_c, nl_d, &
10674 : sphi_a, sphi_b, sphi_c, sphi_d, &
10675 : primitives, &
10676 : buffer1, buffer2)
10677 : #else
10678 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10679 : work, nl_a, nl_b, nl_c, nl_d, &
10680 : sphi_a, &
10681 : sphi_b, &
10682 : sphi_c, &
10683 : sphi_d, &
10684 : primitives, &
10685 0 : buffer1, buffer2)
10686 : #endif
10687 : CASE DEFAULT
10688 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10689 : work, nl_a, nl_b, nl_c, nl_d, &
10690 : sphi_a, &
10691 : sphi_b, &
10692 : sphi_c, &
10693 : sphi_d, &
10694 : primitives, &
10695 0 : buffer1, buffer2)
10696 : END SELECT
10697 : CASE (1)
10698 0 : SELECT CASE (n_d)
10699 : CASE (0)
10700 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10701 : CALL contract_gpps(work, &
10702 : nl_a, nl_b, nl_c, nl_d, &
10703 : sphi_a, sphi_b, sphi_c, sphi_d, &
10704 : primitives, &
10705 : buffer1, buffer2)
10706 : #else
10707 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10708 : work, nl_a, nl_b, nl_c, nl_d, &
10709 : sphi_a, &
10710 : sphi_b, &
10711 : sphi_c, &
10712 : sphi_d, &
10713 : primitives, &
10714 0 : buffer1, buffer2)
10715 : #endif
10716 : CASE (1)
10717 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10718 : CALL contract_gppp(work, &
10719 : nl_a, nl_b, nl_c, nl_d, &
10720 : sphi_a, sphi_b, sphi_c, sphi_d, &
10721 : primitives, &
10722 : buffer1, buffer2)
10723 : #else
10724 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10725 : work, nl_a, nl_b, nl_c, nl_d, &
10726 : sphi_a, &
10727 : sphi_b, &
10728 : sphi_c, &
10729 : sphi_d, &
10730 : primitives, &
10731 0 : buffer1, buffer2)
10732 : #endif
10733 : CASE (2)
10734 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10735 : CALL contract_gppd(work, &
10736 : nl_a, nl_b, nl_c, nl_d, &
10737 : sphi_a, sphi_b, sphi_c, sphi_d, &
10738 : primitives, &
10739 : buffer1, buffer2)
10740 : #else
10741 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10742 : work, nl_a, nl_b, nl_c, nl_d, &
10743 : sphi_a, &
10744 : sphi_b, &
10745 : sphi_c, &
10746 : sphi_d, &
10747 : primitives, &
10748 0 : buffer1, buffer2)
10749 : #endif
10750 : CASE (3)
10751 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10752 : CALL contract_gppf(work, &
10753 : nl_a, nl_b, nl_c, nl_d, &
10754 : sphi_a, sphi_b, sphi_c, sphi_d, &
10755 : primitives, &
10756 : buffer1, buffer2)
10757 : #else
10758 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10759 : work, nl_a, nl_b, nl_c, nl_d, &
10760 : sphi_a, &
10761 : sphi_b, &
10762 : sphi_c, &
10763 : sphi_d, &
10764 : primitives, &
10765 0 : buffer1, buffer2)
10766 : #endif
10767 : CASE (4)
10768 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10769 : CALL contract_gppg(work, &
10770 : nl_a, nl_b, nl_c, nl_d, &
10771 : sphi_a, sphi_b, sphi_c, sphi_d, &
10772 : primitives, &
10773 : buffer1, buffer2)
10774 : #else
10775 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10776 : work, nl_a, nl_b, nl_c, nl_d, &
10777 : sphi_a, &
10778 : sphi_b, &
10779 : sphi_c, &
10780 : sphi_d, &
10781 : primitives, &
10782 0 : buffer1, buffer2)
10783 : #endif
10784 : CASE DEFAULT
10785 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10786 : work, nl_a, nl_b, nl_c, nl_d, &
10787 : sphi_a, &
10788 : sphi_b, &
10789 : sphi_c, &
10790 : sphi_d, &
10791 : primitives, &
10792 0 : buffer1, buffer2)
10793 : END SELECT
10794 : CASE (2)
10795 0 : SELECT CASE (n_d)
10796 : CASE (0)
10797 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10798 : CALL contract_gpds(work, &
10799 : nl_a, nl_b, nl_c, nl_d, &
10800 : sphi_a, sphi_b, sphi_c, sphi_d, &
10801 : primitives, &
10802 : buffer1, buffer2)
10803 : #else
10804 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10805 : work, nl_a, nl_b, nl_c, nl_d, &
10806 : sphi_a, &
10807 : sphi_b, &
10808 : sphi_c, &
10809 : sphi_d, &
10810 : primitives, &
10811 0 : buffer1, buffer2)
10812 : #endif
10813 : CASE (1)
10814 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10815 : CALL contract_gpdp(work, &
10816 : nl_a, nl_b, nl_c, nl_d, &
10817 : sphi_a, sphi_b, sphi_c, sphi_d, &
10818 : primitives, &
10819 : buffer1, buffer2)
10820 : #else
10821 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10822 : work, nl_a, nl_b, nl_c, nl_d, &
10823 : sphi_a, &
10824 : sphi_b, &
10825 : sphi_c, &
10826 : sphi_d, &
10827 : primitives, &
10828 0 : buffer1, buffer2)
10829 : #endif
10830 : CASE (2)
10831 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10832 : CALL contract_gpdd(work, &
10833 : nl_a, nl_b, nl_c, nl_d, &
10834 : sphi_a, sphi_b, sphi_c, sphi_d, &
10835 : primitives, &
10836 : buffer1, buffer2)
10837 : #else
10838 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10839 : work, nl_a, nl_b, nl_c, nl_d, &
10840 : sphi_a, &
10841 : sphi_b, &
10842 : sphi_c, &
10843 : sphi_d, &
10844 : primitives, &
10845 0 : buffer1, buffer2)
10846 : #endif
10847 : CASE (3)
10848 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10849 : CALL contract_gpdf(work, &
10850 : nl_a, nl_b, nl_c, nl_d, &
10851 : sphi_a, sphi_b, sphi_c, sphi_d, &
10852 : primitives, &
10853 : buffer1, buffer2)
10854 : #else
10855 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10856 : work, nl_a, nl_b, nl_c, nl_d, &
10857 : sphi_a, &
10858 : sphi_b, &
10859 : sphi_c, &
10860 : sphi_d, &
10861 : primitives, &
10862 0 : buffer1, buffer2)
10863 : #endif
10864 : CASE (4)
10865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10866 : CALL contract_gpdg(work, &
10867 : nl_a, nl_b, nl_c, nl_d, &
10868 : sphi_a, sphi_b, sphi_c, sphi_d, &
10869 : primitives, &
10870 : buffer1, buffer2)
10871 : #else
10872 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10873 : work, nl_a, nl_b, nl_c, nl_d, &
10874 : sphi_a, &
10875 : sphi_b, &
10876 : sphi_c, &
10877 : sphi_d, &
10878 : primitives, &
10879 0 : buffer1, buffer2)
10880 : #endif
10881 : CASE DEFAULT
10882 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10883 : work, nl_a, nl_b, nl_c, nl_d, &
10884 : sphi_a, &
10885 : sphi_b, &
10886 : sphi_c, &
10887 : sphi_d, &
10888 : primitives, &
10889 0 : buffer1, buffer2)
10890 : END SELECT
10891 : CASE (3)
10892 0 : SELECT CASE (n_d)
10893 : CASE (0)
10894 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10895 : CALL contract_gpfs(work, &
10896 : nl_a, nl_b, nl_c, nl_d, &
10897 : sphi_a, sphi_b, sphi_c, sphi_d, &
10898 : primitives, &
10899 : buffer1, buffer2)
10900 : #else
10901 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10902 : work, nl_a, nl_b, nl_c, nl_d, &
10903 : sphi_a, &
10904 : sphi_b, &
10905 : sphi_c, &
10906 : sphi_d, &
10907 : primitives, &
10908 0 : buffer1, buffer2)
10909 : #endif
10910 : CASE (1)
10911 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10912 : CALL contract_gpfp(work, &
10913 : nl_a, nl_b, nl_c, nl_d, &
10914 : sphi_a, sphi_b, sphi_c, sphi_d, &
10915 : primitives, &
10916 : buffer1, buffer2)
10917 : #else
10918 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10919 : work, nl_a, nl_b, nl_c, nl_d, &
10920 : sphi_a, &
10921 : sphi_b, &
10922 : sphi_c, &
10923 : sphi_d, &
10924 : primitives, &
10925 0 : buffer1, buffer2)
10926 : #endif
10927 : CASE (2)
10928 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10929 : CALL contract_gpfd(work, &
10930 : nl_a, nl_b, nl_c, nl_d, &
10931 : sphi_a, sphi_b, sphi_c, sphi_d, &
10932 : primitives, &
10933 : buffer1, buffer2)
10934 : #else
10935 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10936 : work, nl_a, nl_b, nl_c, nl_d, &
10937 : sphi_a, &
10938 : sphi_b, &
10939 : sphi_c, &
10940 : sphi_d, &
10941 : primitives, &
10942 0 : buffer1, buffer2)
10943 : #endif
10944 : CASE (3)
10945 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10946 : CALL contract_gpff(work, &
10947 : nl_a, nl_b, nl_c, nl_d, &
10948 : sphi_a, sphi_b, sphi_c, sphi_d, &
10949 : primitives, &
10950 : buffer1, buffer2)
10951 : #else
10952 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10953 : work, nl_a, nl_b, nl_c, nl_d, &
10954 : sphi_a, &
10955 : sphi_b, &
10956 : sphi_c, &
10957 : sphi_d, &
10958 : primitives, &
10959 0 : buffer1, buffer2)
10960 : #endif
10961 : CASE (4)
10962 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10963 : CALL contract_gpfg(work, &
10964 : nl_a, nl_b, nl_c, nl_d, &
10965 : sphi_a, sphi_b, sphi_c, sphi_d, &
10966 : primitives, &
10967 : buffer1, buffer2)
10968 : #else
10969 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10970 : work, nl_a, nl_b, nl_c, nl_d, &
10971 : sphi_a, &
10972 : sphi_b, &
10973 : sphi_c, &
10974 : sphi_d, &
10975 : primitives, &
10976 0 : buffer1, buffer2)
10977 : #endif
10978 : CASE DEFAULT
10979 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10980 : work, nl_a, nl_b, nl_c, nl_d, &
10981 : sphi_a, &
10982 : sphi_b, &
10983 : sphi_c, &
10984 : sphi_d, &
10985 : primitives, &
10986 0 : buffer1, buffer2)
10987 : END SELECT
10988 : CASE (4)
10989 0 : SELECT CASE (n_d)
10990 : CASE (0)
10991 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
10992 : CALL contract_gpgs(work, &
10993 : nl_a, nl_b, nl_c, nl_d, &
10994 : sphi_a, sphi_b, sphi_c, sphi_d, &
10995 : primitives, &
10996 : buffer1, buffer2)
10997 : #else
10998 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
10999 : work, nl_a, nl_b, nl_c, nl_d, &
11000 : sphi_a, &
11001 : sphi_b, &
11002 : sphi_c, &
11003 : sphi_d, &
11004 : primitives, &
11005 0 : buffer1, buffer2)
11006 : #endif
11007 : CASE (1)
11008 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11009 : CALL contract_gpgp(work, &
11010 : nl_a, nl_b, nl_c, nl_d, &
11011 : sphi_a, sphi_b, sphi_c, sphi_d, &
11012 : primitives, &
11013 : buffer1, buffer2)
11014 : #else
11015 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11016 : work, nl_a, nl_b, nl_c, nl_d, &
11017 : sphi_a, &
11018 : sphi_b, &
11019 : sphi_c, &
11020 : sphi_d, &
11021 : primitives, &
11022 0 : buffer1, buffer2)
11023 : #endif
11024 : CASE (2)
11025 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11026 : CALL contract_gpgd(work, &
11027 : nl_a, nl_b, nl_c, nl_d, &
11028 : sphi_a, sphi_b, sphi_c, sphi_d, &
11029 : primitives, &
11030 : buffer1, buffer2)
11031 : #else
11032 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11033 : work, nl_a, nl_b, nl_c, nl_d, &
11034 : sphi_a, &
11035 : sphi_b, &
11036 : sphi_c, &
11037 : sphi_d, &
11038 : primitives, &
11039 0 : buffer1, buffer2)
11040 : #endif
11041 : CASE (3)
11042 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11043 : CALL contract_gpgf(work, &
11044 : nl_a, nl_b, nl_c, nl_d, &
11045 : sphi_a, sphi_b, sphi_c, sphi_d, &
11046 : primitives, &
11047 : buffer1, buffer2)
11048 : #else
11049 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11050 : work, nl_a, nl_b, nl_c, nl_d, &
11051 : sphi_a, &
11052 : sphi_b, &
11053 : sphi_c, &
11054 : sphi_d, &
11055 : primitives, &
11056 0 : buffer1, buffer2)
11057 : #endif
11058 : CASE (4)
11059 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11060 : CALL contract_gpgg(work, &
11061 : nl_a, nl_b, nl_c, nl_d, &
11062 : sphi_a, sphi_b, sphi_c, sphi_d, &
11063 : primitives, &
11064 : buffer1, buffer2)
11065 : #else
11066 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11067 : work, nl_a, nl_b, nl_c, nl_d, &
11068 : sphi_a, &
11069 : sphi_b, &
11070 : sphi_c, &
11071 : sphi_d, &
11072 : primitives, &
11073 0 : buffer1, buffer2)
11074 : #endif
11075 : CASE DEFAULT
11076 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11077 : work, nl_a, nl_b, nl_c, nl_d, &
11078 : sphi_a, &
11079 : sphi_b, &
11080 : sphi_c, &
11081 : sphi_d, &
11082 : primitives, &
11083 0 : buffer1, buffer2)
11084 : END SELECT
11085 : CASE DEFAULT
11086 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11087 : work, nl_a, nl_b, nl_c, nl_d, &
11088 : sphi_a, &
11089 : sphi_b, &
11090 : sphi_c, &
11091 : sphi_d, &
11092 : primitives, &
11093 0 : buffer1, buffer2)
11094 : END SELECT
11095 : CASE (2)
11096 0 : SELECT CASE (n_c)
11097 : CASE (0)
11098 0 : SELECT CASE (n_d)
11099 : CASE (0)
11100 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11101 : CALL contract_gdss(work, &
11102 : nl_a, nl_b, nl_c, nl_d, &
11103 : sphi_a, sphi_b, sphi_c, sphi_d, &
11104 : primitives, &
11105 : buffer1, buffer2)
11106 : #else
11107 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11108 : work, nl_a, nl_b, nl_c, nl_d, &
11109 : sphi_a, &
11110 : sphi_b, &
11111 : sphi_c, &
11112 : sphi_d, &
11113 : primitives, &
11114 0 : buffer1, buffer2)
11115 : #endif
11116 : CASE (1)
11117 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11118 : CALL contract_gdsp(work, &
11119 : nl_a, nl_b, nl_c, nl_d, &
11120 : sphi_a, sphi_b, sphi_c, sphi_d, &
11121 : primitives, &
11122 : buffer1, buffer2)
11123 : #else
11124 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11125 : work, nl_a, nl_b, nl_c, nl_d, &
11126 : sphi_a, &
11127 : sphi_b, &
11128 : sphi_c, &
11129 : sphi_d, &
11130 : primitives, &
11131 0 : buffer1, buffer2)
11132 : #endif
11133 : CASE (2)
11134 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11135 : CALL contract_gdsd(work, &
11136 : nl_a, nl_b, nl_c, nl_d, &
11137 : sphi_a, sphi_b, sphi_c, sphi_d, &
11138 : primitives, &
11139 : buffer1, buffer2)
11140 : #else
11141 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11142 : work, nl_a, nl_b, nl_c, nl_d, &
11143 : sphi_a, &
11144 : sphi_b, &
11145 : sphi_c, &
11146 : sphi_d, &
11147 : primitives, &
11148 0 : buffer1, buffer2)
11149 : #endif
11150 : CASE (3)
11151 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11152 : CALL contract_gdsf(work, &
11153 : nl_a, nl_b, nl_c, nl_d, &
11154 : sphi_a, sphi_b, sphi_c, sphi_d, &
11155 : primitives, &
11156 : buffer1, buffer2)
11157 : #else
11158 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11159 : work, nl_a, nl_b, nl_c, nl_d, &
11160 : sphi_a, &
11161 : sphi_b, &
11162 : sphi_c, &
11163 : sphi_d, &
11164 : primitives, &
11165 0 : buffer1, buffer2)
11166 : #endif
11167 : CASE (4)
11168 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11169 : CALL contract_gdsg(work, &
11170 : nl_a, nl_b, nl_c, nl_d, &
11171 : sphi_a, sphi_b, sphi_c, sphi_d, &
11172 : primitives, &
11173 : buffer1, buffer2)
11174 : #else
11175 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11176 : work, nl_a, nl_b, nl_c, nl_d, &
11177 : sphi_a, &
11178 : sphi_b, &
11179 : sphi_c, &
11180 : sphi_d, &
11181 : primitives, &
11182 0 : buffer1, buffer2)
11183 : #endif
11184 : CASE DEFAULT
11185 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11186 : work, nl_a, nl_b, nl_c, nl_d, &
11187 : sphi_a, &
11188 : sphi_b, &
11189 : sphi_c, &
11190 : sphi_d, &
11191 : primitives, &
11192 0 : buffer1, buffer2)
11193 : END SELECT
11194 : CASE (1)
11195 0 : SELECT CASE (n_d)
11196 : CASE (0)
11197 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11198 : CALL contract_gdps(work, &
11199 : nl_a, nl_b, nl_c, nl_d, &
11200 : sphi_a, sphi_b, sphi_c, sphi_d, &
11201 : primitives, &
11202 : buffer1, buffer2)
11203 : #else
11204 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11205 : work, nl_a, nl_b, nl_c, nl_d, &
11206 : sphi_a, &
11207 : sphi_b, &
11208 : sphi_c, &
11209 : sphi_d, &
11210 : primitives, &
11211 0 : buffer1, buffer2)
11212 : #endif
11213 : CASE (1)
11214 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11215 : CALL contract_gdpp(work, &
11216 : nl_a, nl_b, nl_c, nl_d, &
11217 : sphi_a, sphi_b, sphi_c, sphi_d, &
11218 : primitives, &
11219 : buffer1, buffer2)
11220 : #else
11221 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11222 : work, nl_a, nl_b, nl_c, nl_d, &
11223 : sphi_a, &
11224 : sphi_b, &
11225 : sphi_c, &
11226 : sphi_d, &
11227 : primitives, &
11228 0 : buffer1, buffer2)
11229 : #endif
11230 : CASE (2)
11231 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11232 : CALL contract_gdpd(work, &
11233 : nl_a, nl_b, nl_c, nl_d, &
11234 : sphi_a, sphi_b, sphi_c, sphi_d, &
11235 : primitives, &
11236 : buffer1, buffer2)
11237 : #else
11238 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11239 : work, nl_a, nl_b, nl_c, nl_d, &
11240 : sphi_a, &
11241 : sphi_b, &
11242 : sphi_c, &
11243 : sphi_d, &
11244 : primitives, &
11245 0 : buffer1, buffer2)
11246 : #endif
11247 : CASE (3)
11248 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11249 : CALL contract_gdpf(work, &
11250 : nl_a, nl_b, nl_c, nl_d, &
11251 : sphi_a, sphi_b, sphi_c, sphi_d, &
11252 : primitives, &
11253 : buffer1, buffer2)
11254 : #else
11255 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11256 : work, nl_a, nl_b, nl_c, nl_d, &
11257 : sphi_a, &
11258 : sphi_b, &
11259 : sphi_c, &
11260 : sphi_d, &
11261 : primitives, &
11262 0 : buffer1, buffer2)
11263 : #endif
11264 : CASE (4)
11265 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11266 : CALL contract_gdpg(work, &
11267 : nl_a, nl_b, nl_c, nl_d, &
11268 : sphi_a, sphi_b, sphi_c, sphi_d, &
11269 : primitives, &
11270 : buffer1, buffer2)
11271 : #else
11272 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11273 : work, nl_a, nl_b, nl_c, nl_d, &
11274 : sphi_a, &
11275 : sphi_b, &
11276 : sphi_c, &
11277 : sphi_d, &
11278 : primitives, &
11279 0 : buffer1, buffer2)
11280 : #endif
11281 : CASE DEFAULT
11282 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11283 : work, nl_a, nl_b, nl_c, nl_d, &
11284 : sphi_a, &
11285 : sphi_b, &
11286 : sphi_c, &
11287 : sphi_d, &
11288 : primitives, &
11289 0 : buffer1, buffer2)
11290 : END SELECT
11291 : CASE (2)
11292 0 : SELECT CASE (n_d)
11293 : CASE (0)
11294 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11295 : CALL contract_gdds(work, &
11296 : nl_a, nl_b, nl_c, nl_d, &
11297 : sphi_a, sphi_b, sphi_c, sphi_d, &
11298 : primitives, &
11299 : buffer1, buffer2)
11300 : #else
11301 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11302 : work, nl_a, nl_b, nl_c, nl_d, &
11303 : sphi_a, &
11304 : sphi_b, &
11305 : sphi_c, &
11306 : sphi_d, &
11307 : primitives, &
11308 0 : buffer1, buffer2)
11309 : #endif
11310 : CASE (1)
11311 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11312 : CALL contract_gddp(work, &
11313 : nl_a, nl_b, nl_c, nl_d, &
11314 : sphi_a, sphi_b, sphi_c, sphi_d, &
11315 : primitives, &
11316 : buffer1, buffer2)
11317 : #else
11318 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11319 : work, nl_a, nl_b, nl_c, nl_d, &
11320 : sphi_a, &
11321 : sphi_b, &
11322 : sphi_c, &
11323 : sphi_d, &
11324 : primitives, &
11325 0 : buffer1, buffer2)
11326 : #endif
11327 : CASE (2)
11328 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11329 : CALL contract_gddd(work, &
11330 : nl_a, nl_b, nl_c, nl_d, &
11331 : sphi_a, sphi_b, sphi_c, sphi_d, &
11332 : primitives, &
11333 : buffer1, buffer2)
11334 : #else
11335 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11336 : work, nl_a, nl_b, nl_c, nl_d, &
11337 : sphi_a, &
11338 : sphi_b, &
11339 : sphi_c, &
11340 : sphi_d, &
11341 : primitives, &
11342 0 : buffer1, buffer2)
11343 : #endif
11344 : CASE (3)
11345 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11346 : CALL contract_gddf(work, &
11347 : nl_a, nl_b, nl_c, nl_d, &
11348 : sphi_a, sphi_b, sphi_c, sphi_d, &
11349 : primitives, &
11350 : buffer1, buffer2)
11351 : #else
11352 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11353 : work, nl_a, nl_b, nl_c, nl_d, &
11354 : sphi_a, &
11355 : sphi_b, &
11356 : sphi_c, &
11357 : sphi_d, &
11358 : primitives, &
11359 0 : buffer1, buffer2)
11360 : #endif
11361 : CASE (4)
11362 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11363 : CALL contract_gddg(work, &
11364 : nl_a, nl_b, nl_c, nl_d, &
11365 : sphi_a, sphi_b, sphi_c, sphi_d, &
11366 : primitives, &
11367 : buffer1, buffer2)
11368 : #else
11369 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11370 : work, nl_a, nl_b, nl_c, nl_d, &
11371 : sphi_a, &
11372 : sphi_b, &
11373 : sphi_c, &
11374 : sphi_d, &
11375 : primitives, &
11376 0 : buffer1, buffer2)
11377 : #endif
11378 : CASE DEFAULT
11379 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11380 : work, nl_a, nl_b, nl_c, nl_d, &
11381 : sphi_a, &
11382 : sphi_b, &
11383 : sphi_c, &
11384 : sphi_d, &
11385 : primitives, &
11386 0 : buffer1, buffer2)
11387 : END SELECT
11388 : CASE (3)
11389 0 : SELECT CASE (n_d)
11390 : CASE (0)
11391 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11392 : CALL contract_gdfs(work, &
11393 : nl_a, nl_b, nl_c, nl_d, &
11394 : sphi_a, sphi_b, sphi_c, sphi_d, &
11395 : primitives, &
11396 : buffer1, buffer2)
11397 : #else
11398 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11399 : work, nl_a, nl_b, nl_c, nl_d, &
11400 : sphi_a, &
11401 : sphi_b, &
11402 : sphi_c, &
11403 : sphi_d, &
11404 : primitives, &
11405 0 : buffer1, buffer2)
11406 : #endif
11407 : CASE (1)
11408 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11409 : CALL contract_gdfp(work, &
11410 : nl_a, nl_b, nl_c, nl_d, &
11411 : sphi_a, sphi_b, sphi_c, sphi_d, &
11412 : primitives, &
11413 : buffer1, buffer2)
11414 : #else
11415 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11416 : work, nl_a, nl_b, nl_c, nl_d, &
11417 : sphi_a, &
11418 : sphi_b, &
11419 : sphi_c, &
11420 : sphi_d, &
11421 : primitives, &
11422 0 : buffer1, buffer2)
11423 : #endif
11424 : CASE (2)
11425 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11426 : CALL contract_gdfd(work, &
11427 : nl_a, nl_b, nl_c, nl_d, &
11428 : sphi_a, sphi_b, sphi_c, sphi_d, &
11429 : primitives, &
11430 : buffer1, buffer2)
11431 : #else
11432 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11433 : work, nl_a, nl_b, nl_c, nl_d, &
11434 : sphi_a, &
11435 : sphi_b, &
11436 : sphi_c, &
11437 : sphi_d, &
11438 : primitives, &
11439 0 : buffer1, buffer2)
11440 : #endif
11441 : CASE (3)
11442 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11443 : CALL contract_gdff(work, &
11444 : nl_a, nl_b, nl_c, nl_d, &
11445 : sphi_a, sphi_b, sphi_c, sphi_d, &
11446 : primitives, &
11447 : buffer1, buffer2)
11448 : #else
11449 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11450 : work, nl_a, nl_b, nl_c, nl_d, &
11451 : sphi_a, &
11452 : sphi_b, &
11453 : sphi_c, &
11454 : sphi_d, &
11455 : primitives, &
11456 0 : buffer1, buffer2)
11457 : #endif
11458 : CASE (4)
11459 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11460 : CALL contract_gdfg(work, &
11461 : nl_a, nl_b, nl_c, nl_d, &
11462 : sphi_a, sphi_b, sphi_c, sphi_d, &
11463 : primitives, &
11464 : buffer1, buffer2)
11465 : #else
11466 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11467 : work, nl_a, nl_b, nl_c, nl_d, &
11468 : sphi_a, &
11469 : sphi_b, &
11470 : sphi_c, &
11471 : sphi_d, &
11472 : primitives, &
11473 0 : buffer1, buffer2)
11474 : #endif
11475 : CASE DEFAULT
11476 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11477 : work, nl_a, nl_b, nl_c, nl_d, &
11478 : sphi_a, &
11479 : sphi_b, &
11480 : sphi_c, &
11481 : sphi_d, &
11482 : primitives, &
11483 0 : buffer1, buffer2)
11484 : END SELECT
11485 : CASE (4)
11486 0 : SELECT CASE (n_d)
11487 : CASE (0)
11488 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11489 : CALL contract_gdgs(work, &
11490 : nl_a, nl_b, nl_c, nl_d, &
11491 : sphi_a, sphi_b, sphi_c, sphi_d, &
11492 : primitives, &
11493 : buffer1, buffer2)
11494 : #else
11495 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11496 : work, nl_a, nl_b, nl_c, nl_d, &
11497 : sphi_a, &
11498 : sphi_b, &
11499 : sphi_c, &
11500 : sphi_d, &
11501 : primitives, &
11502 0 : buffer1, buffer2)
11503 : #endif
11504 : CASE (1)
11505 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11506 : CALL contract_gdgp(work, &
11507 : nl_a, nl_b, nl_c, nl_d, &
11508 : sphi_a, sphi_b, sphi_c, sphi_d, &
11509 : primitives, &
11510 : buffer1, buffer2)
11511 : #else
11512 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11513 : work, nl_a, nl_b, nl_c, nl_d, &
11514 : sphi_a, &
11515 : sphi_b, &
11516 : sphi_c, &
11517 : sphi_d, &
11518 : primitives, &
11519 0 : buffer1, buffer2)
11520 : #endif
11521 : CASE (2)
11522 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11523 : CALL contract_gdgd(work, &
11524 : nl_a, nl_b, nl_c, nl_d, &
11525 : sphi_a, sphi_b, sphi_c, sphi_d, &
11526 : primitives, &
11527 : buffer1, buffer2)
11528 : #else
11529 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11530 : work, nl_a, nl_b, nl_c, nl_d, &
11531 : sphi_a, &
11532 : sphi_b, &
11533 : sphi_c, &
11534 : sphi_d, &
11535 : primitives, &
11536 0 : buffer1, buffer2)
11537 : #endif
11538 : CASE (3)
11539 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11540 : CALL contract_gdgf(work, &
11541 : nl_a, nl_b, nl_c, nl_d, &
11542 : sphi_a, sphi_b, sphi_c, sphi_d, &
11543 : primitives, &
11544 : buffer1, buffer2)
11545 : #else
11546 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11547 : work, nl_a, nl_b, nl_c, nl_d, &
11548 : sphi_a, &
11549 : sphi_b, &
11550 : sphi_c, &
11551 : sphi_d, &
11552 : primitives, &
11553 0 : buffer1, buffer2)
11554 : #endif
11555 : CASE (4)
11556 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11557 : CALL contract_gdgg(work, &
11558 : nl_a, nl_b, nl_c, nl_d, &
11559 : sphi_a, sphi_b, sphi_c, sphi_d, &
11560 : primitives, &
11561 : buffer1, buffer2)
11562 : #else
11563 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11564 : work, nl_a, nl_b, nl_c, nl_d, &
11565 : sphi_a, &
11566 : sphi_b, &
11567 : sphi_c, &
11568 : sphi_d, &
11569 : primitives, &
11570 0 : buffer1, buffer2)
11571 : #endif
11572 : CASE DEFAULT
11573 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11574 : work, nl_a, nl_b, nl_c, nl_d, &
11575 : sphi_a, &
11576 : sphi_b, &
11577 : sphi_c, &
11578 : sphi_d, &
11579 : primitives, &
11580 0 : buffer1, buffer2)
11581 : END SELECT
11582 : CASE DEFAULT
11583 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11584 : work, nl_a, nl_b, nl_c, nl_d, &
11585 : sphi_a, &
11586 : sphi_b, &
11587 : sphi_c, &
11588 : sphi_d, &
11589 : primitives, &
11590 0 : buffer1, buffer2)
11591 : END SELECT
11592 : CASE (3)
11593 0 : SELECT CASE (n_c)
11594 : CASE (0)
11595 0 : SELECT CASE (n_d)
11596 : CASE (0)
11597 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11598 : CALL contract_gfss(work, &
11599 : nl_a, nl_b, nl_c, nl_d, &
11600 : sphi_a, sphi_b, sphi_c, sphi_d, &
11601 : primitives, &
11602 : buffer1, buffer2)
11603 : #else
11604 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11605 : work, nl_a, nl_b, nl_c, nl_d, &
11606 : sphi_a, &
11607 : sphi_b, &
11608 : sphi_c, &
11609 : sphi_d, &
11610 : primitives, &
11611 0 : buffer1, buffer2)
11612 : #endif
11613 : CASE (1)
11614 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11615 : CALL contract_gfsp(work, &
11616 : nl_a, nl_b, nl_c, nl_d, &
11617 : sphi_a, sphi_b, sphi_c, sphi_d, &
11618 : primitives, &
11619 : buffer1, buffer2)
11620 : #else
11621 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11622 : work, nl_a, nl_b, nl_c, nl_d, &
11623 : sphi_a, &
11624 : sphi_b, &
11625 : sphi_c, &
11626 : sphi_d, &
11627 : primitives, &
11628 0 : buffer1, buffer2)
11629 : #endif
11630 : CASE (2)
11631 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11632 : CALL contract_gfsd(work, &
11633 : nl_a, nl_b, nl_c, nl_d, &
11634 : sphi_a, sphi_b, sphi_c, sphi_d, &
11635 : primitives, &
11636 : buffer1, buffer2)
11637 : #else
11638 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11639 : work, nl_a, nl_b, nl_c, nl_d, &
11640 : sphi_a, &
11641 : sphi_b, &
11642 : sphi_c, &
11643 : sphi_d, &
11644 : primitives, &
11645 0 : buffer1, buffer2)
11646 : #endif
11647 : CASE (3)
11648 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11649 : CALL contract_gfsf(work, &
11650 : nl_a, nl_b, nl_c, nl_d, &
11651 : sphi_a, sphi_b, sphi_c, sphi_d, &
11652 : primitives, &
11653 : buffer1, buffer2)
11654 : #else
11655 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11656 : work, nl_a, nl_b, nl_c, nl_d, &
11657 : sphi_a, &
11658 : sphi_b, &
11659 : sphi_c, &
11660 : sphi_d, &
11661 : primitives, &
11662 0 : buffer1, buffer2)
11663 : #endif
11664 : CASE (4)
11665 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11666 : CALL contract_gfsg(work, &
11667 : nl_a, nl_b, nl_c, nl_d, &
11668 : sphi_a, sphi_b, sphi_c, sphi_d, &
11669 : primitives, &
11670 : buffer1, buffer2)
11671 : #else
11672 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11673 : work, nl_a, nl_b, nl_c, nl_d, &
11674 : sphi_a, &
11675 : sphi_b, &
11676 : sphi_c, &
11677 : sphi_d, &
11678 : primitives, &
11679 0 : buffer1, buffer2)
11680 : #endif
11681 : CASE DEFAULT
11682 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11683 : work, nl_a, nl_b, nl_c, nl_d, &
11684 : sphi_a, &
11685 : sphi_b, &
11686 : sphi_c, &
11687 : sphi_d, &
11688 : primitives, &
11689 0 : buffer1, buffer2)
11690 : END SELECT
11691 : CASE (1)
11692 0 : SELECT CASE (n_d)
11693 : CASE (0)
11694 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11695 : CALL contract_gfps(work, &
11696 : nl_a, nl_b, nl_c, nl_d, &
11697 : sphi_a, sphi_b, sphi_c, sphi_d, &
11698 : primitives, &
11699 : buffer1, buffer2)
11700 : #else
11701 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11702 : work, nl_a, nl_b, nl_c, nl_d, &
11703 : sphi_a, &
11704 : sphi_b, &
11705 : sphi_c, &
11706 : sphi_d, &
11707 : primitives, &
11708 0 : buffer1, buffer2)
11709 : #endif
11710 : CASE (1)
11711 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11712 : CALL contract_gfpp(work, &
11713 : nl_a, nl_b, nl_c, nl_d, &
11714 : sphi_a, sphi_b, sphi_c, sphi_d, &
11715 : primitives, &
11716 : buffer1, buffer2)
11717 : #else
11718 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11719 : work, nl_a, nl_b, nl_c, nl_d, &
11720 : sphi_a, &
11721 : sphi_b, &
11722 : sphi_c, &
11723 : sphi_d, &
11724 : primitives, &
11725 0 : buffer1, buffer2)
11726 : #endif
11727 : CASE (2)
11728 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11729 : CALL contract_gfpd(work, &
11730 : nl_a, nl_b, nl_c, nl_d, &
11731 : sphi_a, sphi_b, sphi_c, sphi_d, &
11732 : primitives, &
11733 : buffer1, buffer2)
11734 : #else
11735 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11736 : work, nl_a, nl_b, nl_c, nl_d, &
11737 : sphi_a, &
11738 : sphi_b, &
11739 : sphi_c, &
11740 : sphi_d, &
11741 : primitives, &
11742 0 : buffer1, buffer2)
11743 : #endif
11744 : CASE (3)
11745 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11746 : CALL contract_gfpf(work, &
11747 : nl_a, nl_b, nl_c, nl_d, &
11748 : sphi_a, sphi_b, sphi_c, sphi_d, &
11749 : primitives, &
11750 : buffer1, buffer2)
11751 : #else
11752 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11753 : work, nl_a, nl_b, nl_c, nl_d, &
11754 : sphi_a, &
11755 : sphi_b, &
11756 : sphi_c, &
11757 : sphi_d, &
11758 : primitives, &
11759 0 : buffer1, buffer2)
11760 : #endif
11761 : CASE (4)
11762 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11763 : CALL contract_gfpg(work, &
11764 : nl_a, nl_b, nl_c, nl_d, &
11765 : sphi_a, sphi_b, sphi_c, sphi_d, &
11766 : primitives, &
11767 : buffer1, buffer2)
11768 : #else
11769 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11770 : work, nl_a, nl_b, nl_c, nl_d, &
11771 : sphi_a, &
11772 : sphi_b, &
11773 : sphi_c, &
11774 : sphi_d, &
11775 : primitives, &
11776 0 : buffer1, buffer2)
11777 : #endif
11778 : CASE DEFAULT
11779 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11780 : work, nl_a, nl_b, nl_c, nl_d, &
11781 : sphi_a, &
11782 : sphi_b, &
11783 : sphi_c, &
11784 : sphi_d, &
11785 : primitives, &
11786 0 : buffer1, buffer2)
11787 : END SELECT
11788 : CASE (2)
11789 0 : SELECT CASE (n_d)
11790 : CASE (0)
11791 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11792 : CALL contract_gfds(work, &
11793 : nl_a, nl_b, nl_c, nl_d, &
11794 : sphi_a, sphi_b, sphi_c, sphi_d, &
11795 : primitives, &
11796 : buffer1, buffer2)
11797 : #else
11798 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11799 : work, nl_a, nl_b, nl_c, nl_d, &
11800 : sphi_a, &
11801 : sphi_b, &
11802 : sphi_c, &
11803 : sphi_d, &
11804 : primitives, &
11805 0 : buffer1, buffer2)
11806 : #endif
11807 : CASE (1)
11808 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11809 : CALL contract_gfdp(work, &
11810 : nl_a, nl_b, nl_c, nl_d, &
11811 : sphi_a, sphi_b, sphi_c, sphi_d, &
11812 : primitives, &
11813 : buffer1, buffer2)
11814 : #else
11815 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11816 : work, nl_a, nl_b, nl_c, nl_d, &
11817 : sphi_a, &
11818 : sphi_b, &
11819 : sphi_c, &
11820 : sphi_d, &
11821 : primitives, &
11822 0 : buffer1, buffer2)
11823 : #endif
11824 : CASE (2)
11825 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11826 : CALL contract_gfdd(work, &
11827 : nl_a, nl_b, nl_c, nl_d, &
11828 : sphi_a, sphi_b, sphi_c, sphi_d, &
11829 : primitives, &
11830 : buffer1, buffer2)
11831 : #else
11832 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11833 : work, nl_a, nl_b, nl_c, nl_d, &
11834 : sphi_a, &
11835 : sphi_b, &
11836 : sphi_c, &
11837 : sphi_d, &
11838 : primitives, &
11839 0 : buffer1, buffer2)
11840 : #endif
11841 : CASE (3)
11842 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11843 : CALL contract_gfdf(work, &
11844 : nl_a, nl_b, nl_c, nl_d, &
11845 : sphi_a, sphi_b, sphi_c, sphi_d, &
11846 : primitives, &
11847 : buffer1, buffer2)
11848 : #else
11849 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11850 : work, nl_a, nl_b, nl_c, nl_d, &
11851 : sphi_a, &
11852 : sphi_b, &
11853 : sphi_c, &
11854 : sphi_d, &
11855 : primitives, &
11856 0 : buffer1, buffer2)
11857 : #endif
11858 : CASE (4)
11859 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11860 : CALL contract_gfdg(work, &
11861 : nl_a, nl_b, nl_c, nl_d, &
11862 : sphi_a, sphi_b, sphi_c, sphi_d, &
11863 : primitives, &
11864 : buffer1, buffer2)
11865 : #else
11866 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11867 : work, nl_a, nl_b, nl_c, nl_d, &
11868 : sphi_a, &
11869 : sphi_b, &
11870 : sphi_c, &
11871 : sphi_d, &
11872 : primitives, &
11873 0 : buffer1, buffer2)
11874 : #endif
11875 : CASE DEFAULT
11876 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11877 : work, nl_a, nl_b, nl_c, nl_d, &
11878 : sphi_a, &
11879 : sphi_b, &
11880 : sphi_c, &
11881 : sphi_d, &
11882 : primitives, &
11883 0 : buffer1, buffer2)
11884 : END SELECT
11885 : CASE (3)
11886 0 : SELECT CASE (n_d)
11887 : CASE (0)
11888 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11889 : CALL contract_gffs(work, &
11890 : nl_a, nl_b, nl_c, nl_d, &
11891 : sphi_a, sphi_b, sphi_c, sphi_d, &
11892 : primitives, &
11893 : buffer1, buffer2)
11894 : #else
11895 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11896 : work, nl_a, nl_b, nl_c, nl_d, &
11897 : sphi_a, &
11898 : sphi_b, &
11899 : sphi_c, &
11900 : sphi_d, &
11901 : primitives, &
11902 0 : buffer1, buffer2)
11903 : #endif
11904 : CASE (1)
11905 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11906 : CALL contract_gffp(work, &
11907 : nl_a, nl_b, nl_c, nl_d, &
11908 : sphi_a, sphi_b, sphi_c, sphi_d, &
11909 : primitives, &
11910 : buffer1, buffer2)
11911 : #else
11912 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11913 : work, nl_a, nl_b, nl_c, nl_d, &
11914 : sphi_a, &
11915 : sphi_b, &
11916 : sphi_c, &
11917 : sphi_d, &
11918 : primitives, &
11919 0 : buffer1, buffer2)
11920 : #endif
11921 : CASE (2)
11922 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11923 : CALL contract_gffd(work, &
11924 : nl_a, nl_b, nl_c, nl_d, &
11925 : sphi_a, sphi_b, sphi_c, sphi_d, &
11926 : primitives, &
11927 : buffer1, buffer2)
11928 : #else
11929 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11930 : work, nl_a, nl_b, nl_c, nl_d, &
11931 : sphi_a, &
11932 : sphi_b, &
11933 : sphi_c, &
11934 : sphi_d, &
11935 : primitives, &
11936 0 : buffer1, buffer2)
11937 : #endif
11938 : CASE (3)
11939 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11940 : CALL contract_gfff(work, &
11941 : nl_a, nl_b, nl_c, nl_d, &
11942 : sphi_a, sphi_b, sphi_c, sphi_d, &
11943 : primitives, &
11944 : buffer1, buffer2)
11945 : #else
11946 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11947 : work, nl_a, nl_b, nl_c, nl_d, &
11948 : sphi_a, &
11949 : sphi_b, &
11950 : sphi_c, &
11951 : sphi_d, &
11952 : primitives, &
11953 0 : buffer1, buffer2)
11954 : #endif
11955 : CASE (4)
11956 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11957 : CALL contract_gffg(work, &
11958 : nl_a, nl_b, nl_c, nl_d, &
11959 : sphi_a, sphi_b, sphi_c, sphi_d, &
11960 : primitives, &
11961 : buffer1, buffer2)
11962 : #else
11963 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11964 : work, nl_a, nl_b, nl_c, nl_d, &
11965 : sphi_a, &
11966 : sphi_b, &
11967 : sphi_c, &
11968 : sphi_d, &
11969 : primitives, &
11970 0 : buffer1, buffer2)
11971 : #endif
11972 : CASE DEFAULT
11973 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11974 : work, nl_a, nl_b, nl_c, nl_d, &
11975 : sphi_a, &
11976 : sphi_b, &
11977 : sphi_c, &
11978 : sphi_d, &
11979 : primitives, &
11980 0 : buffer1, buffer2)
11981 : END SELECT
11982 : CASE (4)
11983 0 : SELECT CASE (n_d)
11984 : CASE (0)
11985 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
11986 : CALL contract_gfgs(work, &
11987 : nl_a, nl_b, nl_c, nl_d, &
11988 : sphi_a, sphi_b, sphi_c, sphi_d, &
11989 : primitives, &
11990 : buffer1, buffer2)
11991 : #else
11992 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
11993 : work, nl_a, nl_b, nl_c, nl_d, &
11994 : sphi_a, &
11995 : sphi_b, &
11996 : sphi_c, &
11997 : sphi_d, &
11998 : primitives, &
11999 0 : buffer1, buffer2)
12000 : #endif
12001 : CASE (1)
12002 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12003 : CALL contract_gfgp(work, &
12004 : nl_a, nl_b, nl_c, nl_d, &
12005 : sphi_a, sphi_b, sphi_c, sphi_d, &
12006 : primitives, &
12007 : buffer1, buffer2)
12008 : #else
12009 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12010 : work, nl_a, nl_b, nl_c, nl_d, &
12011 : sphi_a, &
12012 : sphi_b, &
12013 : sphi_c, &
12014 : sphi_d, &
12015 : primitives, &
12016 0 : buffer1, buffer2)
12017 : #endif
12018 : CASE (2)
12019 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12020 : CALL contract_gfgd(work, &
12021 : nl_a, nl_b, nl_c, nl_d, &
12022 : sphi_a, sphi_b, sphi_c, sphi_d, &
12023 : primitives, &
12024 : buffer1, buffer2)
12025 : #else
12026 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12027 : work, nl_a, nl_b, nl_c, nl_d, &
12028 : sphi_a, &
12029 : sphi_b, &
12030 : sphi_c, &
12031 : sphi_d, &
12032 : primitives, &
12033 0 : buffer1, buffer2)
12034 : #endif
12035 : CASE (3)
12036 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12037 : CALL contract_gfgf(work, &
12038 : nl_a, nl_b, nl_c, nl_d, &
12039 : sphi_a, sphi_b, sphi_c, sphi_d, &
12040 : primitives, &
12041 : buffer1, buffer2)
12042 : #else
12043 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12044 : work, nl_a, nl_b, nl_c, nl_d, &
12045 : sphi_a, &
12046 : sphi_b, &
12047 : sphi_c, &
12048 : sphi_d, &
12049 : primitives, &
12050 0 : buffer1, buffer2)
12051 : #endif
12052 : CASE (4)
12053 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12054 : CALL contract_gfgg(work, &
12055 : nl_a, nl_b, nl_c, nl_d, &
12056 : sphi_a, sphi_b, sphi_c, sphi_d, &
12057 : primitives, &
12058 : buffer1, buffer2)
12059 : #else
12060 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12061 : work, nl_a, nl_b, nl_c, nl_d, &
12062 : sphi_a, &
12063 : sphi_b, &
12064 : sphi_c, &
12065 : sphi_d, &
12066 : primitives, &
12067 0 : buffer1, buffer2)
12068 : #endif
12069 : CASE DEFAULT
12070 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12071 : work, nl_a, nl_b, nl_c, nl_d, &
12072 : sphi_a, &
12073 : sphi_b, &
12074 : sphi_c, &
12075 : sphi_d, &
12076 : primitives, &
12077 0 : buffer1, buffer2)
12078 : END SELECT
12079 : CASE DEFAULT
12080 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12081 : work, nl_a, nl_b, nl_c, nl_d, &
12082 : sphi_a, &
12083 : sphi_b, &
12084 : sphi_c, &
12085 : sphi_d, &
12086 : primitives, &
12087 0 : buffer1, buffer2)
12088 : END SELECT
12089 : CASE (4)
12090 0 : SELECT CASE (n_c)
12091 : CASE (0)
12092 0 : SELECT CASE (n_d)
12093 : CASE (0)
12094 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12095 : CALL contract_ggss(work, &
12096 : nl_a, nl_b, nl_c, nl_d, &
12097 : sphi_a, sphi_b, sphi_c, sphi_d, &
12098 : primitives, &
12099 : buffer1, buffer2)
12100 : #else
12101 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12102 : work, nl_a, nl_b, nl_c, nl_d, &
12103 : sphi_a, &
12104 : sphi_b, &
12105 : sphi_c, &
12106 : sphi_d, &
12107 : primitives, &
12108 0 : buffer1, buffer2)
12109 : #endif
12110 : CASE (1)
12111 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12112 : CALL contract_ggsp(work, &
12113 : nl_a, nl_b, nl_c, nl_d, &
12114 : sphi_a, sphi_b, sphi_c, sphi_d, &
12115 : primitives, &
12116 : buffer1, buffer2)
12117 : #else
12118 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12119 : work, nl_a, nl_b, nl_c, nl_d, &
12120 : sphi_a, &
12121 : sphi_b, &
12122 : sphi_c, &
12123 : sphi_d, &
12124 : primitives, &
12125 0 : buffer1, buffer2)
12126 : #endif
12127 : CASE (2)
12128 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12129 : CALL contract_ggsd(work, &
12130 : nl_a, nl_b, nl_c, nl_d, &
12131 : sphi_a, sphi_b, sphi_c, sphi_d, &
12132 : primitives, &
12133 : buffer1, buffer2)
12134 : #else
12135 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12136 : work, nl_a, nl_b, nl_c, nl_d, &
12137 : sphi_a, &
12138 : sphi_b, &
12139 : sphi_c, &
12140 : sphi_d, &
12141 : primitives, &
12142 0 : buffer1, buffer2)
12143 : #endif
12144 : CASE (3)
12145 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12146 : CALL contract_ggsf(work, &
12147 : nl_a, nl_b, nl_c, nl_d, &
12148 : sphi_a, sphi_b, sphi_c, sphi_d, &
12149 : primitives, &
12150 : buffer1, buffer2)
12151 : #else
12152 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12153 : work, nl_a, nl_b, nl_c, nl_d, &
12154 : sphi_a, &
12155 : sphi_b, &
12156 : sphi_c, &
12157 : sphi_d, &
12158 : primitives, &
12159 0 : buffer1, buffer2)
12160 : #endif
12161 : CASE (4)
12162 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12163 : CALL contract_ggsg(work, &
12164 : nl_a, nl_b, nl_c, nl_d, &
12165 : sphi_a, sphi_b, sphi_c, sphi_d, &
12166 : primitives, &
12167 : buffer1, buffer2)
12168 : #else
12169 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12170 : work, nl_a, nl_b, nl_c, nl_d, &
12171 : sphi_a, &
12172 : sphi_b, &
12173 : sphi_c, &
12174 : sphi_d, &
12175 : primitives, &
12176 0 : buffer1, buffer2)
12177 : #endif
12178 : CASE DEFAULT
12179 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12180 : work, nl_a, nl_b, nl_c, nl_d, &
12181 : sphi_a, &
12182 : sphi_b, &
12183 : sphi_c, &
12184 : sphi_d, &
12185 : primitives, &
12186 0 : buffer1, buffer2)
12187 : END SELECT
12188 : CASE (1)
12189 0 : SELECT CASE (n_d)
12190 : CASE (0)
12191 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12192 : CALL contract_ggps(work, &
12193 : nl_a, nl_b, nl_c, nl_d, &
12194 : sphi_a, sphi_b, sphi_c, sphi_d, &
12195 : primitives, &
12196 : buffer1, buffer2)
12197 : #else
12198 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12199 : work, nl_a, nl_b, nl_c, nl_d, &
12200 : sphi_a, &
12201 : sphi_b, &
12202 : sphi_c, &
12203 : sphi_d, &
12204 : primitives, &
12205 0 : buffer1, buffer2)
12206 : #endif
12207 : CASE (1)
12208 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12209 : CALL contract_ggpp(work, &
12210 : nl_a, nl_b, nl_c, nl_d, &
12211 : sphi_a, sphi_b, sphi_c, sphi_d, &
12212 : primitives, &
12213 : buffer1, buffer2)
12214 : #else
12215 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12216 : work, nl_a, nl_b, nl_c, nl_d, &
12217 : sphi_a, &
12218 : sphi_b, &
12219 : sphi_c, &
12220 : sphi_d, &
12221 : primitives, &
12222 0 : buffer1, buffer2)
12223 : #endif
12224 : CASE (2)
12225 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12226 : CALL contract_ggpd(work, &
12227 : nl_a, nl_b, nl_c, nl_d, &
12228 : sphi_a, sphi_b, sphi_c, sphi_d, &
12229 : primitives, &
12230 : buffer1, buffer2)
12231 : #else
12232 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12233 : work, nl_a, nl_b, nl_c, nl_d, &
12234 : sphi_a, &
12235 : sphi_b, &
12236 : sphi_c, &
12237 : sphi_d, &
12238 : primitives, &
12239 0 : buffer1, buffer2)
12240 : #endif
12241 : CASE (3)
12242 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12243 : CALL contract_ggpf(work, &
12244 : nl_a, nl_b, nl_c, nl_d, &
12245 : sphi_a, sphi_b, sphi_c, sphi_d, &
12246 : primitives, &
12247 : buffer1, buffer2)
12248 : #else
12249 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12250 : work, nl_a, nl_b, nl_c, nl_d, &
12251 : sphi_a, &
12252 : sphi_b, &
12253 : sphi_c, &
12254 : sphi_d, &
12255 : primitives, &
12256 0 : buffer1, buffer2)
12257 : #endif
12258 : CASE (4)
12259 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12260 : CALL contract_ggpg(work, &
12261 : nl_a, nl_b, nl_c, nl_d, &
12262 : sphi_a, sphi_b, sphi_c, sphi_d, &
12263 : primitives, &
12264 : buffer1, buffer2)
12265 : #else
12266 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12267 : work, nl_a, nl_b, nl_c, nl_d, &
12268 : sphi_a, &
12269 : sphi_b, &
12270 : sphi_c, &
12271 : sphi_d, &
12272 : primitives, &
12273 0 : buffer1, buffer2)
12274 : #endif
12275 : CASE DEFAULT
12276 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12277 : work, nl_a, nl_b, nl_c, nl_d, &
12278 : sphi_a, &
12279 : sphi_b, &
12280 : sphi_c, &
12281 : sphi_d, &
12282 : primitives, &
12283 0 : buffer1, buffer2)
12284 : END SELECT
12285 : CASE (2)
12286 0 : SELECT CASE (n_d)
12287 : CASE (0)
12288 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12289 : CALL contract_ggds(work, &
12290 : nl_a, nl_b, nl_c, nl_d, &
12291 : sphi_a, sphi_b, sphi_c, sphi_d, &
12292 : primitives, &
12293 : buffer1, buffer2)
12294 : #else
12295 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12296 : work, nl_a, nl_b, nl_c, nl_d, &
12297 : sphi_a, &
12298 : sphi_b, &
12299 : sphi_c, &
12300 : sphi_d, &
12301 : primitives, &
12302 0 : buffer1, buffer2)
12303 : #endif
12304 : CASE (1)
12305 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12306 : CALL contract_ggdp(work, &
12307 : nl_a, nl_b, nl_c, nl_d, &
12308 : sphi_a, sphi_b, sphi_c, sphi_d, &
12309 : primitives, &
12310 : buffer1, buffer2)
12311 : #else
12312 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12313 : work, nl_a, nl_b, nl_c, nl_d, &
12314 : sphi_a, &
12315 : sphi_b, &
12316 : sphi_c, &
12317 : sphi_d, &
12318 : primitives, &
12319 0 : buffer1, buffer2)
12320 : #endif
12321 : CASE (2)
12322 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12323 : CALL contract_ggdd(work, &
12324 : nl_a, nl_b, nl_c, nl_d, &
12325 : sphi_a, sphi_b, sphi_c, sphi_d, &
12326 : primitives, &
12327 : buffer1, buffer2)
12328 : #else
12329 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12330 : work, nl_a, nl_b, nl_c, nl_d, &
12331 : sphi_a, &
12332 : sphi_b, &
12333 : sphi_c, &
12334 : sphi_d, &
12335 : primitives, &
12336 0 : buffer1, buffer2)
12337 : #endif
12338 : CASE (3)
12339 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12340 : CALL contract_ggdf(work, &
12341 : nl_a, nl_b, nl_c, nl_d, &
12342 : sphi_a, sphi_b, sphi_c, sphi_d, &
12343 : primitives, &
12344 : buffer1, buffer2)
12345 : #else
12346 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12347 : work, nl_a, nl_b, nl_c, nl_d, &
12348 : sphi_a, &
12349 : sphi_b, &
12350 : sphi_c, &
12351 : sphi_d, &
12352 : primitives, &
12353 0 : buffer1, buffer2)
12354 : #endif
12355 : CASE (4)
12356 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12357 : CALL contract_ggdg(work, &
12358 : nl_a, nl_b, nl_c, nl_d, &
12359 : sphi_a, sphi_b, sphi_c, sphi_d, &
12360 : primitives, &
12361 : buffer1, buffer2)
12362 : #else
12363 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12364 : work, nl_a, nl_b, nl_c, nl_d, &
12365 : sphi_a, &
12366 : sphi_b, &
12367 : sphi_c, &
12368 : sphi_d, &
12369 : primitives, &
12370 0 : buffer1, buffer2)
12371 : #endif
12372 : CASE DEFAULT
12373 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12374 : work, nl_a, nl_b, nl_c, nl_d, &
12375 : sphi_a, &
12376 : sphi_b, &
12377 : sphi_c, &
12378 : sphi_d, &
12379 : primitives, &
12380 0 : buffer1, buffer2)
12381 : END SELECT
12382 : CASE (3)
12383 0 : SELECT CASE (n_d)
12384 : CASE (0)
12385 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12386 : CALL contract_ggfs(work, &
12387 : nl_a, nl_b, nl_c, nl_d, &
12388 : sphi_a, sphi_b, sphi_c, sphi_d, &
12389 : primitives, &
12390 : buffer1, buffer2)
12391 : #else
12392 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12393 : work, nl_a, nl_b, nl_c, nl_d, &
12394 : sphi_a, &
12395 : sphi_b, &
12396 : sphi_c, &
12397 : sphi_d, &
12398 : primitives, &
12399 0 : buffer1, buffer2)
12400 : #endif
12401 : CASE (1)
12402 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12403 : CALL contract_ggfp(work, &
12404 : nl_a, nl_b, nl_c, nl_d, &
12405 : sphi_a, sphi_b, sphi_c, sphi_d, &
12406 : primitives, &
12407 : buffer1, buffer2)
12408 : #else
12409 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12410 : work, nl_a, nl_b, nl_c, nl_d, &
12411 : sphi_a, &
12412 : sphi_b, &
12413 : sphi_c, &
12414 : sphi_d, &
12415 : primitives, &
12416 0 : buffer1, buffer2)
12417 : #endif
12418 : CASE (2)
12419 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12420 : CALL contract_ggfd(work, &
12421 : nl_a, nl_b, nl_c, nl_d, &
12422 : sphi_a, sphi_b, sphi_c, sphi_d, &
12423 : primitives, &
12424 : buffer1, buffer2)
12425 : #else
12426 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12427 : work, nl_a, nl_b, nl_c, nl_d, &
12428 : sphi_a, &
12429 : sphi_b, &
12430 : sphi_c, &
12431 : sphi_d, &
12432 : primitives, &
12433 0 : buffer1, buffer2)
12434 : #endif
12435 : CASE (3)
12436 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12437 : CALL contract_ggff(work, &
12438 : nl_a, nl_b, nl_c, nl_d, &
12439 : sphi_a, sphi_b, sphi_c, sphi_d, &
12440 : primitives, &
12441 : buffer1, buffer2)
12442 : #else
12443 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12444 : work, nl_a, nl_b, nl_c, nl_d, &
12445 : sphi_a, &
12446 : sphi_b, &
12447 : sphi_c, &
12448 : sphi_d, &
12449 : primitives, &
12450 0 : buffer1, buffer2)
12451 : #endif
12452 : CASE (4)
12453 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12454 : CALL contract_ggfg(work, &
12455 : nl_a, nl_b, nl_c, nl_d, &
12456 : sphi_a, sphi_b, sphi_c, sphi_d, &
12457 : primitives, &
12458 : buffer1, buffer2)
12459 : #else
12460 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12461 : work, nl_a, nl_b, nl_c, nl_d, &
12462 : sphi_a, &
12463 : sphi_b, &
12464 : sphi_c, &
12465 : sphi_d, &
12466 : primitives, &
12467 0 : buffer1, buffer2)
12468 : #endif
12469 : CASE DEFAULT
12470 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12471 : work, nl_a, nl_b, nl_c, nl_d, &
12472 : sphi_a, &
12473 : sphi_b, &
12474 : sphi_c, &
12475 : sphi_d, &
12476 : primitives, &
12477 0 : buffer1, buffer2)
12478 : END SELECT
12479 : CASE (4)
12480 0 : SELECT CASE (n_d)
12481 : CASE (0)
12482 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12483 : CALL contract_gggs(work, &
12484 : nl_a, nl_b, nl_c, nl_d, &
12485 : sphi_a, sphi_b, sphi_c, sphi_d, &
12486 : primitives, &
12487 : buffer1, buffer2)
12488 : #else
12489 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12490 : work, nl_a, nl_b, nl_c, nl_d, &
12491 : sphi_a, &
12492 : sphi_b, &
12493 : sphi_c, &
12494 : sphi_d, &
12495 : primitives, &
12496 0 : buffer1, buffer2)
12497 : #endif
12498 : CASE (1)
12499 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12500 : CALL contract_gggp(work, &
12501 : nl_a, nl_b, nl_c, nl_d, &
12502 : sphi_a, sphi_b, sphi_c, sphi_d, &
12503 : primitives, &
12504 : buffer1, buffer2)
12505 : #else
12506 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12507 : work, nl_a, nl_b, nl_c, nl_d, &
12508 : sphi_a, &
12509 : sphi_b, &
12510 : sphi_c, &
12511 : sphi_d, &
12512 : primitives, &
12513 0 : buffer1, buffer2)
12514 : #endif
12515 : CASE (2)
12516 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12517 : CALL contract_gggd(work, &
12518 : nl_a, nl_b, nl_c, nl_d, &
12519 : sphi_a, sphi_b, sphi_c, sphi_d, &
12520 : primitives, &
12521 : buffer1, buffer2)
12522 : #else
12523 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12524 : work, nl_a, nl_b, nl_c, nl_d, &
12525 : sphi_a, &
12526 : sphi_b, &
12527 : sphi_c, &
12528 : sphi_d, &
12529 : primitives, &
12530 0 : buffer1, buffer2)
12531 : #endif
12532 : CASE (3)
12533 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12534 : CALL contract_gggf(work, &
12535 : nl_a, nl_b, nl_c, nl_d, &
12536 : sphi_a, sphi_b, sphi_c, sphi_d, &
12537 : primitives, &
12538 : buffer1, buffer2)
12539 : #else
12540 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12541 : work, nl_a, nl_b, nl_c, nl_d, &
12542 : sphi_a, &
12543 : sphi_b, &
12544 : sphi_c, &
12545 : sphi_d, &
12546 : primitives, &
12547 0 : buffer1, buffer2)
12548 : #endif
12549 : CASE (4)
12550 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
12551 : CALL contract_gggg(work, &
12552 : nl_a, nl_b, nl_c, nl_d, &
12553 : sphi_a, sphi_b, sphi_c, sphi_d, &
12554 : primitives, &
12555 : buffer1, buffer2)
12556 : #else
12557 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12558 : work, nl_a, nl_b, nl_c, nl_d, &
12559 : sphi_a, &
12560 : sphi_b, &
12561 : sphi_c, &
12562 : sphi_d, &
12563 : primitives, &
12564 0 : buffer1, buffer2)
12565 : #endif
12566 : CASE DEFAULT
12567 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12568 : work, nl_a, nl_b, nl_c, nl_d, &
12569 : sphi_a, &
12570 : sphi_b, &
12571 : sphi_c, &
12572 : sphi_d, &
12573 : primitives, &
12574 0 : buffer1, buffer2)
12575 : END SELECT
12576 : CASE DEFAULT
12577 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12578 : work, nl_a, nl_b, nl_c, nl_d, &
12579 : sphi_a, &
12580 : sphi_b, &
12581 : sphi_c, &
12582 : sphi_d, &
12583 : primitives, &
12584 0 : buffer1, buffer2)
12585 : END SELECT
12586 : CASE DEFAULT
12587 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12588 : work, nl_a, nl_b, nl_c, nl_d, &
12589 : sphi_a, &
12590 : sphi_b, &
12591 : sphi_c, &
12592 : sphi_d, &
12593 : primitives, &
12594 0 : buffer1, buffer2)
12595 : END SELECT
12596 : CASE DEFAULT
12597 : CALL contract_generic(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
12598 : work, nl_a, nl_b, nl_c, nl_d, &
12599 : sphi_a, &
12600 : sphi_b, &
12601 : sphi_c, &
12602 : sphi_d, &
12603 : primitives, &
12604 475914875 : buffer1, buffer2)
12605 : END SELECT
12606 : #endif
12607 475914875 : END SUBROUTINE contract
12608 : #if defined (__LIBINT)
12609 :
12610 : #if __MAX_CONTR > 0 || __MAX_CONTR == 0
12611 : ! **************************************************************************************************
12612 : !> \brief ...
12613 : !> \param work ...
12614 : !> \param nl_a ...
12615 : !> \param nl_b ...
12616 : !> \param nl_c ...
12617 : !> \param nl_d ...
12618 : !> \param sphi_a ...
12619 : !> \param sphi_b ...
12620 : !> \param sphi_c ...
12621 : !> \param sphi_d ...
12622 : !> \param primitives ...
12623 : !> \param buffer1 ...
12624 : !> \param buffer2 ...
12625 : ! **************************************************************************************************
12626 122233851 : SUBROUTINE contract_ssss(work, &
12627 : nl_a, nl_b, nl_c, nl_d, &
12628 122233851 : sphi_a, sphi_b, sphi_c, sphi_d, &
12629 122233851 : primitives, &
12630 : buffer1, buffer2)
12631 :
12632 : REAL(dp), DIMENSION(1*1*1*1), INTENT(IN) :: work
12633 : INTEGER :: nl_a, nl_b, nl_c, nl_d
12634 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
12635 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
12636 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
12637 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
12638 : REAL(dp), &
12639 : DIMENSION(1*nl_a, 1*nl_b, 1*nl_c, 1*nl_d) :: primitives
12640 : REAL(dp), DIMENSION(1*1*1*1) :: buffer1, buffer2
12641 :
12642 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
12643 : kmax, s_offset_a1, s_offset_b1, &
12644 : s_offset_c1, s_offset_d1
12645 :
12646 122233851 : s_offset_a1 = 0
12647 257194427 : DO ia = 1, nl_a
12648 : s_offset_b1 = 0
12649 294414613 : DO ib = 1, nl_b
12650 : s_offset_c1 = 0
12651 367335640 : DO ic = 1, nl_c
12652 : s_offset_d1 = 0
12653 510911183 : DO id = 1, nl_d
12654 :
12655 303029580 : buffer1 = 0.0_dp
12656 303029580 : imax = 1*1*1
12657 303029580 : kmax = 1
12658 606059160 : DO i = 1, imax
12659 606059160 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
12660 : END DO
12661 :
12662 303029580 : buffer2 = 0.0_dp
12663 303029580 : imax = 1*1*1
12664 303029580 : kmax = 1
12665 606059160 : DO i = 1, imax
12666 606059160 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
12667 : END DO
12668 :
12669 303029580 : buffer1 = 0.0_dp
12670 303029580 : imax = 1*1*1
12671 303029580 : kmax = 1
12672 606059160 : DO i = 1, imax
12673 606059160 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
12674 : END DO
12675 :
12676 606059160 : imax = 1*1*1
12677 606059160 : kmax = 1
12678 : i = 0
12679 606059160 : DO i1 = 1, 1
12680 909088740 : DO i2 = 1, 1
12681 909088740 : DO i3 = 1, 1
12682 303029580 : i = i + 1
12683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
12684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
12685 606059160 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
12686 : END DO
12687 : END DO
12688 : END DO
12689 510911183 : s_offset_d1 = s_offset_d1 + 1
12690 : END DO
12691 367335640 : s_offset_c1 = s_offset_c1 + 1
12692 : END DO
12693 294414613 : s_offset_b1 = s_offset_b1 + 1
12694 : END DO
12695 257194427 : s_offset_a1 = s_offset_a1 + 1
12696 : END DO
12697 122233851 : END SUBROUTINE contract_ssss
12698 : #endif
12699 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
12700 : ! **************************************************************************************************
12701 : !> \brief ...
12702 : !> \param work ...
12703 : !> \param nl_a ...
12704 : !> \param nl_b ...
12705 : !> \param nl_c ...
12706 : !> \param nl_d ...
12707 : !> \param sphi_a ...
12708 : !> \param sphi_b ...
12709 : !> \param sphi_c ...
12710 : !> \param sphi_d ...
12711 : !> \param primitives ...
12712 : !> \param buffer1 ...
12713 : !> \param buffer2 ...
12714 : ! **************************************************************************************************
12715 34242143 : SUBROUTINE contract_sssp(work, &
12716 : nl_a, nl_b, nl_c, nl_d, &
12717 34242143 : sphi_a, sphi_b, sphi_c, sphi_d, &
12718 34242143 : primitives, &
12719 : buffer1, buffer2)
12720 : REAL(dp), DIMENSION(1*1*1*3), INTENT(IN) :: work
12721 : INTEGER :: nl_a, nl_b, nl_c, nl_d
12722 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
12723 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
12724 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
12725 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
12726 : REAL(dp), &
12727 : DIMENSION(1*nl_a, 1*nl_b, 1*nl_c, 3*nl_d) :: primitives
12728 : REAL(dp), DIMENSION(1*1*1*3) :: buffer1, buffer2
12729 :
12730 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
12731 : kmax, s_offset_a1, s_offset_b1, &
12732 : s_offset_c1, s_offset_d1
12733 :
12734 34242143 : s_offset_a1 = 0
12735 75082618 : DO ia = 1, nl_a
12736 : s_offset_b1 = 0
12737 94515236 : DO ib = 1, nl_b
12738 : s_offset_c1 = 0
12739 132402526 : DO ic = 1, nl_c
12740 : s_offset_d1 = 0
12741 197760294 : DO id = 1, nl_d
12742 :
12743 119032529 : buffer1 = 0.0_dp
12744 119032529 : imax = 1*1*3
12745 119032529 : kmax = 1
12746 476130116 : DO i = 1, imax
12747 476130116 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
12748 : END DO
12749 :
12750 119032529 : buffer2 = 0.0_dp
12751 119032529 : imax = 1*1*3
12752 119032529 : kmax = 1
12753 476130116 : DO i = 1, imax
12754 476130116 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
12755 : END DO
12756 :
12757 119032529 : buffer1 = 0.0_dp
12758 119032529 : imax = 1*1*3
12759 119032529 : kmax = 1
12760 476130116 : DO i = 1, imax
12761 476130116 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
12762 : END DO
12763 :
12764 238065058 : imax = 1*1*1
12765 238065058 : kmax = 3
12766 : i = 0
12767 238065058 : DO i1 = 1, 1
12768 357097587 : DO i2 = 1, 1
12769 357097587 : DO i3 = 1, 1
12770 119032529 : i = i + 1
12771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
12772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
12773 119032529 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
12774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
12775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
12776 119032529 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
12777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
12778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
12779 238065058 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
12780 : END DO
12781 : END DO
12782 : END DO
12783 197760294 : s_offset_d1 = s_offset_d1 + 3
12784 : END DO
12785 132402526 : s_offset_c1 = s_offset_c1 + 1
12786 : END DO
12787 94515236 : s_offset_b1 = s_offset_b1 + 1
12788 : END DO
12789 75082618 : s_offset_a1 = s_offset_a1 + 1
12790 : END DO
12791 34242143 : END SUBROUTINE contract_sssp
12792 : #endif
12793 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
12794 : ! **************************************************************************************************
12795 : !> \brief ...
12796 : !> \param work ...
12797 : !> \param nl_a ...
12798 : !> \param nl_b ...
12799 : !> \param nl_c ...
12800 : !> \param nl_d ...
12801 : !> \param sphi_a ...
12802 : !> \param sphi_b ...
12803 : !> \param sphi_c ...
12804 : !> \param sphi_d ...
12805 : !> \param primitives ...
12806 : !> \param buffer1 ...
12807 : !> \param buffer2 ...
12808 : ! **************************************************************************************************
12809 3272334 : SUBROUTINE contract_sssd(work, &
12810 : nl_a, nl_b, nl_c, nl_d, &
12811 3272334 : sphi_a, sphi_b, sphi_c, sphi_d, &
12812 3272334 : primitives, &
12813 : buffer1, buffer2)
12814 : REAL(dp), DIMENSION(1*1*1*6), INTENT(IN) :: work
12815 : INTEGER :: nl_a, nl_b, nl_c, nl_d
12816 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
12817 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
12818 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
12819 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
12820 : REAL(dp), &
12821 : DIMENSION(1*nl_a, 1*nl_b, 1*nl_c, 5*nl_d) :: primitives
12822 : REAL(dp), DIMENSION(1*1*1*6) :: buffer1, buffer2
12823 :
12824 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
12825 : kmax, s_offset_a1, s_offset_b1, &
12826 : s_offset_c1, s_offset_d1
12827 :
12828 3272334 : s_offset_a1 = 0
12829 8016170 : DO ia = 1, nl_a
12830 : s_offset_b1 = 0
12831 12351988 : DO ib = 1, nl_b
12832 : s_offset_c1 = 0
12833 20617460 : DO ic = 1, nl_c
12834 : s_offset_d1 = 0
12835 26716311 : DO id = 1, nl_d
12836 13707003 : buffer1 = 0.0_dp
12837 13707003 : imax = 1*1*6
12838 13707003 : kmax = 1
12839 95949021 : DO i = 1, imax
12840 95949021 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
12841 : END DO
12842 13707003 : buffer2 = 0.0_dp
12843 13707003 : imax = 1*1*6
12844 13707003 : kmax = 1
12845 95949021 : DO i = 1, imax
12846 95949021 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
12847 : END DO
12848 13707003 : buffer1 = 0.0_dp
12849 13707003 : imax = 1*1*6
12850 13707003 : kmax = 1
12851 95949021 : DO i = 1, imax
12852 95949021 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
12853 : END DO
12854 :
12855 27414006 : imax = 1*1*1
12856 27414006 : kmax = 6
12857 : i = 0
12858 27414006 : DO i1 = 1, 1
12859 41121009 : DO i2 = 1, 1
12860 41121009 : DO i3 = 1, 1
12861 13707003 : i = i + 1
12862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
12863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
12864 13707003 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
12865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
12866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
12867 13707003 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
12868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
12869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
12870 13707003 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
12871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
12872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
12873 13707003 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
12874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
12875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
12876 13707003 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
12877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
12878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
12879 13707003 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
12880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
12881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
12882 13707003 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
12883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
12884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
12885 27414006 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
12886 : END DO
12887 : END DO
12888 : END DO
12889 26716311 : s_offset_d1 = s_offset_d1 + 5
12890 : END DO
12891 20617460 : s_offset_c1 = s_offset_c1 + 1
12892 : END DO
12893 12351988 : s_offset_b1 = s_offset_b1 + 1
12894 : END DO
12895 8016170 : s_offset_a1 = s_offset_a1 + 1
12896 : END DO
12897 3272334 : END SUBROUTINE contract_sssd
12898 : #endif
12899 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
12900 : ! **************************************************************************************************
12901 : !> \brief ...
12902 : !> \param work ...
12903 : !> \param nl_a ...
12904 : !> \param nl_b ...
12905 : !> \param nl_c ...
12906 : !> \param nl_d ...
12907 : !> \param sphi_a ...
12908 : !> \param sphi_b ...
12909 : !> \param sphi_c ...
12910 : !> \param sphi_d ...
12911 : !> \param primitives ...
12912 : !> \param buffer1 ...
12913 : !> \param buffer2 ...
12914 : ! **************************************************************************************************
12915 : SUBROUTINE contract_sssf(work, &
12916 : nl_a, nl_b, nl_c, nl_d, &
12917 : sphi_a, sphi_b, sphi_c, sphi_d, &
12918 : primitives, &
12919 : buffer1, buffer2)
12920 : REAL(dp), DIMENSION(1*1*1*10), INTENT(IN) :: work
12921 : INTEGER :: nl_a, nl_b, nl_c, nl_d
12922 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
12923 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
12924 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
12925 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
12926 : REAL(dp), &
12927 : DIMENSION(1*nl_a, 1*nl_b, 1*nl_c, 7*nl_d) :: primitives
12928 : REAL(dp), DIMENSION(1*1*1*10) :: buffer1, buffer2
12929 :
12930 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
12931 : kmax, s_offset_a1, s_offset_b1, &
12932 : s_offset_c1, s_offset_d1
12933 :
12934 : s_offset_a1 = 0
12935 : DO ia = 1, nl_a
12936 : s_offset_b1 = 0
12937 : DO ib = 1, nl_b
12938 : s_offset_c1 = 0
12939 : DO ic = 1, nl_c
12940 : s_offset_d1 = 0
12941 : DO id = 1, nl_d
12942 : buffer1 = 0.0_dp
12943 : imax = 1*1*10
12944 : kmax = 1
12945 : DO i = 1, imax
12946 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
12947 : END DO
12948 : buffer2 = 0.0_dp
12949 : imax = 1*1*10
12950 : kmax = 1
12951 : DO i = 1, imax
12952 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
12953 : END DO
12954 : buffer1 = 0.0_dp
12955 : imax = 1*1*10
12956 : kmax = 1
12957 : DO i = 1, imax
12958 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
12959 : END DO
12960 : imax = 1*1*1
12961 : kmax = 10
12962 : i = 0
12963 : DO i1 = 1, 1
12964 : DO i2 = 1, 1
12965 : DO i3 = 1, 1
12966 : i = i + 1
12967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
12968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
12969 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
12970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
12971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
12972 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
12973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
12974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
12975 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
12976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
12977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
12978 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
12979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
12980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
12981 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
12982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
12983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
12984 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
12985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
12986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
12987 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
12988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
12989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
12990 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
12991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
12992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
12993 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
12994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
12995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
12996 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
12997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
12998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
12999 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
13000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13002 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
13003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13005 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
13006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13008 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
13009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13011 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
13012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13014 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
13015 : END DO
13016 : END DO
13017 : END DO
13018 : s_offset_d1 = s_offset_d1 + 7
13019 : END DO
13020 : s_offset_c1 = s_offset_c1 + 1
13021 : END DO
13022 : s_offset_b1 = s_offset_b1 + 1
13023 : END DO
13024 : s_offset_a1 = s_offset_a1 + 1
13025 : END DO
13026 : END SUBROUTINE contract_sssf
13027 : #endif
13028 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
13029 : ! **************************************************************************************************
13030 : !> \brief ...
13031 : !> \param work ...
13032 : !> \param nl_a ...
13033 : !> \param nl_b ...
13034 : !> \param nl_c ...
13035 : !> \param nl_d ...
13036 : !> \param sphi_a ...
13037 : !> \param sphi_b ...
13038 : !> \param sphi_c ...
13039 : !> \param sphi_d ...
13040 : !> \param primitives ...
13041 : !> \param buffer1 ...
13042 : !> \param buffer2 ...
13043 : ! **************************************************************************************************
13044 : SUBROUTINE contract_sssg(work, &
13045 : nl_a, nl_b, nl_c, nl_d, &
13046 : sphi_a, sphi_b, sphi_c, sphi_d, &
13047 : primitives, &
13048 : buffer1, buffer2)
13049 : REAL(dp), DIMENSION(1*1*1*15), INTENT(IN) :: work
13050 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13051 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13052 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13053 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
13054 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
13055 : REAL(dp), &
13056 : DIMENSION(1*nl_a, 1*nl_b, 1*nl_c, 9*nl_d) :: primitives
13057 : REAL(dp), DIMENSION(1*1*1*15) :: buffer1, buffer2
13058 :
13059 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13060 : kmax, s_offset_a1, s_offset_b1, &
13061 : s_offset_c1, s_offset_d1
13062 :
13063 : s_offset_a1 = 0
13064 : DO ia = 1, nl_a
13065 : s_offset_b1 = 0
13066 : DO ib = 1, nl_b
13067 : s_offset_c1 = 0
13068 : DO ic = 1, nl_c
13069 : s_offset_d1 = 0
13070 : DO id = 1, nl_d
13071 : buffer1 = 0.0_dp
13072 : imax = 1*1*15
13073 : kmax = 1
13074 : DO i = 1, imax
13075 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13076 : END DO
13077 : buffer2 = 0.0_dp
13078 : imax = 1*1*15
13079 : kmax = 1
13080 : DO i = 1, imax
13081 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13082 : END DO
13083 : buffer1 = 0.0_dp
13084 : imax = 1*1*15
13085 : kmax = 1
13086 : DO i = 1, imax
13087 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
13088 : END DO
13089 : imax = 1*1*1
13090 : kmax = 15
13091 : i = 0
13092 : DO i1 = 1, 1
13093 : DO i2 = 1, 1
13094 : DO i3 = 1, 1
13095 : i = i + 1
13096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13098 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
13099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13101 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
13102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13104 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
13105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13107 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13110 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
13111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13113 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
13114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
13115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
13116 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
13117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13119 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
13120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13122 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
13123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13125 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
13126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13128 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
13129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13131 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
13132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13134 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
13135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13137 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
13138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13140 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
13141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13143 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
13144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
13145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
13146 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
13147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13149 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
13150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13152 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
13153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13155 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
13156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13158 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
13159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13161 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
13162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13164 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
13165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13167 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
13168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13170 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
13171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13173 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
13174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13176 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
13177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13179 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
13180 : END DO
13181 : END DO
13182 : END DO
13183 : s_offset_d1 = s_offset_d1 + 9
13184 : END DO
13185 : s_offset_c1 = s_offset_c1 + 1
13186 : END DO
13187 : s_offset_b1 = s_offset_b1 + 1
13188 : END DO
13189 : s_offset_a1 = s_offset_a1 + 1
13190 : END DO
13191 : END SUBROUTINE contract_sssg
13192 : #endif
13193 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
13194 : ! **************************************************************************************************
13195 : !> \brief ...
13196 : !> \param work ...
13197 : !> \param nl_a ...
13198 : !> \param nl_b ...
13199 : !> \param nl_c ...
13200 : !> \param nl_d ...
13201 : !> \param sphi_a ...
13202 : !> \param sphi_b ...
13203 : !> \param sphi_c ...
13204 : !> \param sphi_d ...
13205 : !> \param primitives ...
13206 : !> \param buffer1 ...
13207 : !> \param buffer2 ...
13208 : ! **************************************************************************************************
13209 72620570 : SUBROUTINE contract_ssps(work, &
13210 : nl_a, nl_b, nl_c, nl_d, &
13211 72620570 : sphi_a, sphi_b, sphi_c, sphi_d, &
13212 72620570 : primitives, &
13213 : buffer1, buffer2)
13214 : REAL(dp), DIMENSION(1*1*3*1), INTENT(IN) :: work
13215 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13216 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13217 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13218 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
13219 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
13220 : REAL(dp), &
13221 : DIMENSION(1*nl_a, 1*nl_b, 3*nl_c, 1*nl_d) :: primitives
13222 : REAL(dp), DIMENSION(1*1*3*1) :: buffer1, buffer2
13223 :
13224 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13225 : kmax, s_offset_a1, s_offset_b1, &
13226 : s_offset_c1, s_offset_d1
13227 :
13228 72620570 : s_offset_a1 = 0
13229 155360666 : DO ia = 1, nl_a
13230 : s_offset_b1 = 0
13231 185398412 : DO ib = 1, nl_b
13232 : s_offset_c1 = 0
13233 241812844 : DO ic = 1, nl_c
13234 : s_offset_d1 = 0
13235 353947607 : DO id = 1, nl_d
13236 214793079 : buffer1 = 0.0_dp
13237 214793079 : imax = 1*3*1
13238 214793079 : kmax = 1
13239 859172316 : DO i = 1, imax
13240 859172316 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13241 : END DO
13242 214793079 : buffer2 = 0.0_dp
13243 214793079 : imax = 1*3*1
13244 214793079 : kmax = 1
13245 859172316 : DO i = 1, imax
13246 859172316 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13247 : END DO
13248 214793079 : buffer1 = 0.0_dp
13249 214793079 : imax = 1*1*1
13250 214793079 : kmax = 3
13251 429586158 : DO i = 1, imax
13252 214793079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13253 214793079 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13254 429586158 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
13255 : END DO
13256 859172316 : imax = 1*1*3
13257 859172316 : kmax = 1
13258 : i = 0
13259 859172316 : DO i1 = 1, 3
13260 1503551553 : DO i2 = 1, 1
13261 1933137711 : DO i3 = 1, 1
13262 644379237 : i = i + 1
13263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
13265 1288758474 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
13266 : END DO
13267 : END DO
13268 : END DO
13269 353947607 : s_offset_d1 = s_offset_d1 + 1
13270 : END DO
13271 241812844 : s_offset_c1 = s_offset_c1 + 3
13272 : END DO
13273 185398412 : s_offset_b1 = s_offset_b1 + 1
13274 : END DO
13275 155360666 : s_offset_a1 = s_offset_a1 + 1
13276 : END DO
13277 72620570 : END SUBROUTINE contract_ssps
13278 : #endif
13279 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
13280 : ! **************************************************************************************************
13281 : !> \brief ...
13282 : !> \param work ...
13283 : !> \param nl_a ...
13284 : !> \param nl_b ...
13285 : !> \param nl_c ...
13286 : !> \param nl_d ...
13287 : !> \param sphi_a ...
13288 : !> \param sphi_b ...
13289 : !> \param sphi_c ...
13290 : !> \param sphi_d ...
13291 : !> \param primitives ...
13292 : !> \param buffer1 ...
13293 : !> \param buffer2 ...
13294 : ! **************************************************************************************************
13295 25790420 : SUBROUTINE contract_sspp(work, &
13296 : nl_a, nl_b, nl_c, nl_d, &
13297 25790420 : sphi_a, sphi_b, sphi_c, sphi_d, &
13298 25790420 : primitives, &
13299 : buffer1, buffer2)
13300 : REAL(dp), DIMENSION(1*1*3*3), INTENT(IN) :: work
13301 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13302 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13303 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13304 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
13305 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
13306 : REAL(dp), &
13307 : DIMENSION(1*nl_a, 1*nl_b, 3*nl_c, 3*nl_d) :: primitives
13308 : REAL(dp), DIMENSION(1*1*3*3) :: buffer1, buffer2
13309 :
13310 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13311 : kmax, s_offset_a1, s_offset_b1, &
13312 : s_offset_c1, s_offset_d1
13313 :
13314 25790420 : s_offset_a1 = 0
13315 56694668 : DO ia = 1, nl_a
13316 : s_offset_b1 = 0
13317 71804064 : DO ib = 1, nl_b
13318 : s_offset_c1 = 0
13319 99510492 : DO ic = 1, nl_c
13320 : s_offset_d1 = 0
13321 150416429 : DO id = 1, nl_d
13322 91805753 : buffer1 = 0.0_dp
13323 91805753 : imax = 1*3*3
13324 91805753 : kmax = 1
13325 918057530 : DO i = 1, imax
13326 918057530 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13327 : END DO
13328 91805753 : buffer2 = 0.0_dp
13329 91805753 : imax = 1*3*3
13330 91805753 : kmax = 1
13331 918057530 : DO i = 1, imax
13332 918057530 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13333 : END DO
13334 91805753 : buffer1 = 0.0_dp
13335 91805753 : imax = 1*1*3
13336 91805753 : kmax = 3
13337 367223012 : DO i = 1, imax
13338 275417259 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13339 275417259 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13340 367223012 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
13341 : END DO
13342 367223012 : imax = 1*1*3
13343 367223012 : kmax = 3
13344 : i = 0
13345 367223012 : DO i1 = 1, 3
13346 642640271 : DO i2 = 1, 1
13347 826251777 : DO i3 = 1, 1
13348 275417259 : i = i + 1
13349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
13351 275417259 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
13352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
13354 275417259 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
13357 550834518 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
13358 : END DO
13359 : END DO
13360 : END DO
13361 150416429 : s_offset_d1 = s_offset_d1 + 3
13362 : END DO
13363 99510492 : s_offset_c1 = s_offset_c1 + 3
13364 : END DO
13365 71804064 : s_offset_b1 = s_offset_b1 + 1
13366 : END DO
13367 56694668 : s_offset_a1 = s_offset_a1 + 1
13368 : END DO
13369 25790420 : END SUBROUTINE contract_sspp
13370 : #endif
13371 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
13372 : ! **************************************************************************************************
13373 : !> \brief ...
13374 : !> \param work ...
13375 : !> \param nl_a ...
13376 : !> \param nl_b ...
13377 : !> \param nl_c ...
13378 : !> \param nl_d ...
13379 : !> \param sphi_a ...
13380 : !> \param sphi_b ...
13381 : !> \param sphi_c ...
13382 : !> \param sphi_d ...
13383 : !> \param primitives ...
13384 : !> \param buffer1 ...
13385 : !> \param buffer2 ...
13386 : ! **************************************************************************************************
13387 2745195 : SUBROUTINE contract_sspd(work, &
13388 : nl_a, nl_b, nl_c, nl_d, &
13389 2745195 : sphi_a, sphi_b, sphi_c, sphi_d, &
13390 2745195 : primitives, &
13391 : buffer1, buffer2)
13392 : REAL(dp), DIMENSION(1*1*3*6), INTENT(IN) :: work
13393 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13394 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13395 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13396 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
13397 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
13398 : REAL(dp), &
13399 : DIMENSION(1*nl_a, 1*nl_b, 3*nl_c, 5*nl_d) :: primitives
13400 : REAL(dp), DIMENSION(1*1*3*6) :: buffer1, buffer2
13401 :
13402 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13403 : kmax, s_offset_a1, s_offset_b1, &
13404 : s_offset_c1, s_offset_d1
13405 :
13406 2745195 : s_offset_a1 = 0
13407 6945875 : DO ia = 1, nl_a
13408 : s_offset_b1 = 0
13409 11271183 : DO ib = 1, nl_b
13410 : s_offset_c1 = 0
13411 19010392 : DO ic = 1, nl_c
13412 : s_offset_d1 = 0
13413 24197686 : DO id = 1, nl_d
13414 12257797 : buffer1 = 0.0_dp
13415 12257797 : imax = 1*3*6
13416 12257797 : kmax = 1
13417 232898143 : DO i = 1, imax
13418 232898143 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13419 : END DO
13420 12257797 : buffer2 = 0.0_dp
13421 12257797 : imax = 1*3*6
13422 12257797 : kmax = 1
13423 232898143 : DO i = 1, imax
13424 232898143 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13425 : END DO
13426 12257797 : buffer1 = 0.0_dp
13427 12257797 : imax = 1*1*6
13428 12257797 : kmax = 3
13429 85804579 : DO i = 1, imax
13430 73546782 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13431 73546782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13432 85804579 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
13433 : END DO
13434 49031188 : imax = 1*1*3
13435 49031188 : kmax = 6
13436 : i = 0
13437 49031188 : DO i1 = 1, 3
13438 85804579 : DO i2 = 1, 1
13439 110320173 : DO i3 = 1, 1
13440 36773391 : i = i + 1
13441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13443 36773391 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
13444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13446 36773391 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
13447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13449 36773391 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13452 36773391 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
13453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13455 36773391 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
13456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13458 36773391 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
13459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13461 36773391 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
13462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13464 73546782 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
13465 : END DO
13466 : END DO
13467 : END DO
13468 24197686 : s_offset_d1 = s_offset_d1 + 5
13469 : END DO
13470 19010392 : s_offset_c1 = s_offset_c1 + 3
13471 : END DO
13472 11271183 : s_offset_b1 = s_offset_b1 + 1
13473 : END DO
13474 6945875 : s_offset_a1 = s_offset_a1 + 1
13475 : END DO
13476 2745195 : END SUBROUTINE contract_sspd
13477 : #endif
13478 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
13479 : ! **************************************************************************************************
13480 : !> \brief ...
13481 : !> \param work ...
13482 : !> \param nl_a ...
13483 : !> \param nl_b ...
13484 : !> \param nl_c ...
13485 : !> \param nl_d ...
13486 : !> \param sphi_a ...
13487 : !> \param sphi_b ...
13488 : !> \param sphi_c ...
13489 : !> \param sphi_d ...
13490 : !> \param primitives ...
13491 : !> \param buffer1 ...
13492 : !> \param buffer2 ...
13493 : ! **************************************************************************************************
13494 : SUBROUTINE contract_sspf(work, &
13495 : nl_a, nl_b, nl_c, nl_d, &
13496 : sphi_a, sphi_b, sphi_c, sphi_d, &
13497 : primitives, &
13498 : buffer1, buffer2)
13499 : REAL(dp), DIMENSION(1*1*3*10), INTENT(IN) :: work
13500 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13501 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13502 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13503 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
13504 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
13505 : REAL(dp), &
13506 : DIMENSION(1*nl_a, 1*nl_b, 3*nl_c, 7*nl_d) :: primitives
13507 : REAL(dp), DIMENSION(1*1*3*10) :: buffer1, buffer2
13508 :
13509 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13510 : kmax, s_offset_a1, s_offset_b1, &
13511 : s_offset_c1, s_offset_d1
13512 :
13513 : s_offset_a1 = 0
13514 : DO ia = 1, nl_a
13515 : s_offset_b1 = 0
13516 : DO ib = 1, nl_b
13517 : s_offset_c1 = 0
13518 : DO ic = 1, nl_c
13519 : s_offset_d1 = 0
13520 : DO id = 1, nl_d
13521 : buffer1 = 0.0_dp
13522 : imax = 1*3*10
13523 : kmax = 1
13524 : DO i = 1, imax
13525 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13526 : END DO
13527 : buffer2 = 0.0_dp
13528 : imax = 1*3*10
13529 : kmax = 1
13530 : DO i = 1, imax
13531 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13532 : END DO
13533 : buffer1 = 0.0_dp
13534 : imax = 1*1*10
13535 : kmax = 3
13536 : DO i = 1, imax
13537 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13538 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13539 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
13540 : END DO
13541 : imax = 1*1*3
13542 : kmax = 10
13543 : i = 0
13544 : DO i1 = 1, 3
13545 : DO i2 = 1, 1
13546 : DO i3 = 1, 1
13547 : i = i + 1
13548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13550 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
13551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13553 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
13554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13556 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13559 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
13560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13562 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
13563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13565 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
13566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13568 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
13569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13571 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
13572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13574 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
13575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13577 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
13578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13580 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
13581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13583 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
13584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13586 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
13587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13589 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
13590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13592 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
13593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13595 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
13596 : END DO
13597 : END DO
13598 : END DO
13599 : s_offset_d1 = s_offset_d1 + 7
13600 : END DO
13601 : s_offset_c1 = s_offset_c1 + 3
13602 : END DO
13603 : s_offset_b1 = s_offset_b1 + 1
13604 : END DO
13605 : s_offset_a1 = s_offset_a1 + 1
13606 : END DO
13607 : END SUBROUTINE contract_sspf
13608 : #endif
13609 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
13610 : ! **************************************************************************************************
13611 : !> \brief ...
13612 : !> \param work ...
13613 : !> \param nl_a ...
13614 : !> \param nl_b ...
13615 : !> \param nl_c ...
13616 : !> \param nl_d ...
13617 : !> \param sphi_a ...
13618 : !> \param sphi_b ...
13619 : !> \param sphi_c ...
13620 : !> \param sphi_d ...
13621 : !> \param primitives ...
13622 : !> \param buffer1 ...
13623 : !> \param buffer2 ...
13624 : ! **************************************************************************************************
13625 : SUBROUTINE contract_sspg(work, &
13626 : nl_a, nl_b, nl_c, nl_d, &
13627 : sphi_a, sphi_b, sphi_c, sphi_d, &
13628 : primitives, &
13629 : buffer1, buffer2)
13630 : REAL(dp), DIMENSION(1*1*3*15), INTENT(IN) :: work
13631 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13632 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13633 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13634 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
13635 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
13636 : REAL(dp), &
13637 : DIMENSION(1*nl_a, 1*nl_b, 3*nl_c, 9*nl_d) :: primitives
13638 : REAL(dp), DIMENSION(1*1*3*15) :: buffer1, buffer2
13639 :
13640 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13641 : kmax, s_offset_a1, s_offset_b1, &
13642 : s_offset_c1, s_offset_d1
13643 :
13644 : s_offset_a1 = 0
13645 : DO ia = 1, nl_a
13646 : s_offset_b1 = 0
13647 : DO ib = 1, nl_b
13648 : s_offset_c1 = 0
13649 : DO ic = 1, nl_c
13650 : s_offset_d1 = 0
13651 : DO id = 1, nl_d
13652 : buffer1 = 0.0_dp
13653 : imax = 1*3*15
13654 : kmax = 1
13655 : DO i = 1, imax
13656 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13657 : END DO
13658 : buffer2 = 0.0_dp
13659 : imax = 1*3*15
13660 : kmax = 1
13661 : DO i = 1, imax
13662 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13663 : END DO
13664 : buffer1 = 0.0_dp
13665 : imax = 1*1*15
13666 : kmax = 3
13667 : DO i = 1, imax
13668 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13669 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13670 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
13671 : END DO
13672 : imax = 1*1*3
13673 : kmax = 15
13674 : i = 0
13675 : DO i1 = 1, 3
13676 : DO i2 = 1, 1
13677 : DO i3 = 1, 1
13678 : i = i + 1
13679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13681 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
13682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13684 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
13685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13687 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
13688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13690 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13693 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
13694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13696 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
13697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
13698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
13699 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
13700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13702 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
13703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13705 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
13706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13708 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
13709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13711 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
13712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13714 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
13715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13717 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
13718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
13720 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
13721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13723 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
13724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13726 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
13727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
13728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
13729 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
13730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
13732 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
13733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
13734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
13735 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
13736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13738 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
13739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13741 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
13742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
13743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
13744 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
13745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
13747 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
13748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13750 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
13751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13753 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
13754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
13755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
13756 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
13757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
13758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
13759 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
13760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
13761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
13762 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
13763 : END DO
13764 : END DO
13765 : END DO
13766 : s_offset_d1 = s_offset_d1 + 9
13767 : END DO
13768 : s_offset_c1 = s_offset_c1 + 3
13769 : END DO
13770 : s_offset_b1 = s_offset_b1 + 1
13771 : END DO
13772 : s_offset_a1 = s_offset_a1 + 1
13773 : END DO
13774 : END SUBROUTINE contract_sspg
13775 : #endif
13776 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
13777 : ! **************************************************************************************************
13778 : !> \brief ...
13779 : !> \param work ...
13780 : !> \param nl_a ...
13781 : !> \param nl_b ...
13782 : !> \param nl_c ...
13783 : !> \param nl_d ...
13784 : !> \param sphi_a ...
13785 : !> \param sphi_b ...
13786 : !> \param sphi_c ...
13787 : !> \param sphi_d ...
13788 : !> \param primitives ...
13789 : !> \param buffer1 ...
13790 : !> \param buffer2 ...
13791 : ! **************************************************************************************************
13792 5373319 : SUBROUTINE contract_ssds(work, &
13793 : nl_a, nl_b, nl_c, nl_d, &
13794 5373319 : sphi_a, sphi_b, sphi_c, sphi_d, &
13795 5373319 : primitives, &
13796 : buffer1, buffer2)
13797 : REAL(dp), DIMENSION(1*1*6*1), INTENT(IN) :: work
13798 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13799 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13800 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13801 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
13802 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
13803 : REAL(dp), &
13804 : DIMENSION(1*nl_a, 1*nl_b, 5*nl_c, 1*nl_d) :: primitives
13805 : REAL(dp), DIMENSION(1*1*6*1) :: buffer1, buffer2
13806 :
13807 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13808 : kmax, s_offset_a1, s_offset_b1, &
13809 : s_offset_c1, s_offset_d1
13810 :
13811 5373319 : s_offset_a1 = 0
13812 13125242 : DO ia = 1, nl_a
13813 : s_offset_b1 = 0
13814 20102490 : DO ib = 1, nl_b
13815 : s_offset_c1 = 0
13816 24971771 : DO ic = 1, nl_c
13817 : s_offset_d1 = 0
13818 34488164 : DO id = 1, nl_d
13819 21866960 : buffer1 = 0.0_dp
13820 21866960 : imax = 1*6*1
13821 21866960 : kmax = 1
13822 153068720 : DO i = 1, imax
13823 153068720 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13824 : END DO
13825 21866960 : buffer2 = 0.0_dp
13826 21866960 : imax = 1*6*1
13827 21866960 : kmax = 1
13828 153068720 : DO i = 1, imax
13829 153068720 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13830 : END DO
13831 21866960 : buffer1 = 0.0_dp
13832 21866960 : imax = 1*1*1
13833 21866960 : kmax = 6
13834 43733920 : DO i = 1, imax
13835 21866960 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13836 21866960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
13837 21866960 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13838 21866960 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
13839 21866960 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
13840 21866960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
13841 21866960 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
13842 43733920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
13843 : END DO
13844 131201760 : imax = 1*1*5
13845 131201760 : kmax = 1
13846 : i = 0
13847 131201760 : DO i1 = 1, 5
13848 240536560 : DO i2 = 1, 1
13849 328004400 : DO i3 = 1, 1
13850 109334800 : i = i + 1
13851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
13853 218669600 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
13854 : END DO
13855 : END DO
13856 : END DO
13857 34488164 : s_offset_d1 = s_offset_d1 + 1
13858 : END DO
13859 24971771 : s_offset_c1 = s_offset_c1 + 5
13860 : END DO
13861 20102490 : s_offset_b1 = s_offset_b1 + 1
13862 : END DO
13863 13125242 : s_offset_a1 = s_offset_a1 + 1
13864 : END DO
13865 5373319 : END SUBROUTINE contract_ssds
13866 : #endif
13867 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
13868 : ! **************************************************************************************************
13869 : !> \brief ...
13870 : !> \param work ...
13871 : !> \param nl_a ...
13872 : !> \param nl_b ...
13873 : !> \param nl_c ...
13874 : !> \param nl_d ...
13875 : !> \param sphi_a ...
13876 : !> \param sphi_b ...
13877 : !> \param sphi_c ...
13878 : !> \param sphi_d ...
13879 : !> \param primitives ...
13880 : !> \param buffer1 ...
13881 : !> \param buffer2 ...
13882 : ! **************************************************************************************************
13883 3055006 : SUBROUTINE contract_ssdp(work, &
13884 : nl_a, nl_b, nl_c, nl_d, &
13885 3055006 : sphi_a, sphi_b, sphi_c, sphi_d, &
13886 3055006 : primitives, &
13887 : buffer1, buffer2)
13888 : REAL(dp), DIMENSION(1*1*6*3), INTENT(IN) :: work
13889 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13890 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13891 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13892 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
13893 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
13894 : REAL(dp), &
13895 : DIMENSION(1*nl_a, 1*nl_b, 5*nl_c, 3*nl_d) :: primitives
13896 : REAL(dp), DIMENSION(1*1*6*3) :: buffer1, buffer2
13897 :
13898 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13899 : kmax, s_offset_a1, s_offset_b1, &
13900 : s_offset_c1, s_offset_d1
13901 :
13902 3055006 : s_offset_a1 = 0
13903 7592895 : DO ia = 1, nl_a
13904 : s_offset_b1 = 0
13905 11969168 : DO ib = 1, nl_b
13906 : s_offset_c1 = 0
13907 15078012 : DO ic = 1, nl_c
13908 : s_offset_d1 = 0
13909 20076359 : DO id = 1, nl_d
13910 12429626 : buffer1 = 0.0_dp
13911 12429626 : imax = 1*6*3
13912 12429626 : kmax = 1
13913 236162894 : DO i = 1, imax
13914 236162894 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
13915 : END DO
13916 12429626 : buffer2 = 0.0_dp
13917 12429626 : imax = 1*6*3
13918 12429626 : kmax = 1
13919 236162894 : DO i = 1, imax
13920 236162894 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
13921 : END DO
13922 12429626 : buffer1 = 0.0_dp
13923 12429626 : imax = 1*1*3
13924 12429626 : kmax = 6
13925 49718504 : DO i = 1, imax
13926 37288878 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
13927 37288878 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
13928 37288878 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
13929 37288878 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
13930 37288878 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
13931 37288878 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
13932 37288878 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
13933 49718504 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
13934 : END DO
13935 74577756 : imax = 1*1*5
13936 74577756 : kmax = 3
13937 : i = 0
13938 74577756 : DO i1 = 1, 5
13939 136725886 : DO i2 = 1, 1
13940 186444390 : DO i3 = 1, 1
13941 62148130 : i = i + 1
13942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
13943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
13944 62148130 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
13945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
13946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
13947 62148130 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
13948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
13949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
13950 124296260 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
13951 : END DO
13952 : END DO
13953 : END DO
13954 20076359 : s_offset_d1 = s_offset_d1 + 3
13955 : END DO
13956 15078012 : s_offset_c1 = s_offset_c1 + 5
13957 : END DO
13958 11969168 : s_offset_b1 = s_offset_b1 + 1
13959 : END DO
13960 7592895 : s_offset_a1 = s_offset_a1 + 1
13961 : END DO
13962 3055006 : END SUBROUTINE contract_ssdp
13963 : #endif
13964 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
13965 : ! **************************************************************************************************
13966 : !> \brief ...
13967 : !> \param work ...
13968 : !> \param nl_a ...
13969 : !> \param nl_b ...
13970 : !> \param nl_c ...
13971 : !> \param nl_d ...
13972 : !> \param sphi_a ...
13973 : !> \param sphi_b ...
13974 : !> \param sphi_c ...
13975 : !> \param sphi_d ...
13976 : !> \param primitives ...
13977 : !> \param buffer1 ...
13978 : !> \param buffer2 ...
13979 : ! **************************************************************************************************
13980 759711 : SUBROUTINE contract_ssdd(work, &
13981 : nl_a, nl_b, nl_c, nl_d, &
13982 759711 : sphi_a, sphi_b, sphi_c, sphi_d, &
13983 759711 : primitives, &
13984 : buffer1, buffer2)
13985 : REAL(dp), DIMENSION(1*1*6*6), INTENT(IN) :: work
13986 : INTEGER :: nl_a, nl_b, nl_c, nl_d
13987 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
13988 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
13989 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
13990 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
13991 : REAL(dp), &
13992 : DIMENSION(1*nl_a, 1*nl_b, 5*nl_c, 5*nl_d) :: primitives
13993 : REAL(dp), DIMENSION(1*1*6*6) :: buffer1, buffer2
13994 :
13995 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
13996 : kmax, s_offset_a1, s_offset_b1, &
13997 : s_offset_c1, s_offset_d1
13998 :
13999 759711 : s_offset_a1 = 0
14000 1939205 : DO ia = 1, nl_a
14001 : s_offset_b1 = 0
14002 3163966 : DO ib = 1, nl_b
14003 : s_offset_c1 = 0
14004 4111048 : DO ic = 1, nl_c
14005 : s_offset_d1 = 0
14006 4451237 : DO id = 1, nl_d
14007 2324661 : buffer1 = 0.0_dp
14008 2324661 : imax = 1*6*6
14009 2324661 : kmax = 1
14010 86012457 : DO i = 1, imax
14011 86012457 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14012 : END DO
14013 2324661 : buffer2 = 0.0_dp
14014 2324661 : imax = 1*6*6
14015 2324661 : kmax = 1
14016 86012457 : DO i = 1, imax
14017 86012457 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14018 : END DO
14019 2324661 : buffer1 = 0.0_dp
14020 2324661 : imax = 1*1*6
14021 2324661 : kmax = 6
14022 16272627 : DO i = 1, imax
14023 13947966 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
14024 13947966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14025 13947966 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14026 13947966 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14027 13947966 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
14028 13947966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14029 13947966 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14030 16272627 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
14031 : END DO
14032 13947966 : imax = 1*1*5
14033 13947966 : kmax = 6
14034 : i = 0
14035 13947966 : DO i1 = 1, 5
14036 25571271 : DO i2 = 1, 1
14037 34869915 : DO i3 = 1, 1
14038 11623305 : i = i + 1
14039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14041 11623305 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
14042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14044 11623305 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14047 11623305 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14050 11623305 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
14051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14053 11623305 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
14054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14056 11623305 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14059 11623305 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14062 23246610 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
14063 : END DO
14064 : END DO
14065 : END DO
14066 4451237 : s_offset_d1 = s_offset_d1 + 5
14067 : END DO
14068 4111048 : s_offset_c1 = s_offset_c1 + 5
14069 : END DO
14070 3163966 : s_offset_b1 = s_offset_b1 + 1
14071 : END DO
14072 1939205 : s_offset_a1 = s_offset_a1 + 1
14073 : END DO
14074 759711 : END SUBROUTINE contract_ssdd
14075 : #endif
14076 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
14077 : ! **************************************************************************************************
14078 : !> \brief ...
14079 : !> \param work ...
14080 : !> \param nl_a ...
14081 : !> \param nl_b ...
14082 : !> \param nl_c ...
14083 : !> \param nl_d ...
14084 : !> \param sphi_a ...
14085 : !> \param sphi_b ...
14086 : !> \param sphi_c ...
14087 : !> \param sphi_d ...
14088 : !> \param primitives ...
14089 : !> \param buffer1 ...
14090 : !> \param buffer2 ...
14091 : ! **************************************************************************************************
14092 : SUBROUTINE contract_ssdf(work, &
14093 : nl_a, nl_b, nl_c, nl_d, &
14094 : sphi_a, sphi_b, sphi_c, sphi_d, &
14095 : primitives, &
14096 : buffer1, buffer2)
14097 : REAL(dp), DIMENSION(1*1*6*10), INTENT(IN) :: work
14098 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14099 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14100 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14101 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
14102 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
14103 : REAL(dp), &
14104 : DIMENSION(1*nl_a, 1*nl_b, 5*nl_c, 7*nl_d) :: primitives
14105 : REAL(dp), DIMENSION(1*1*6*10) :: buffer1, buffer2
14106 :
14107 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14108 : kmax, s_offset_a1, s_offset_b1, &
14109 : s_offset_c1, s_offset_d1
14110 :
14111 : s_offset_a1 = 0
14112 : DO ia = 1, nl_a
14113 : s_offset_b1 = 0
14114 : DO ib = 1, nl_b
14115 : s_offset_c1 = 0
14116 : DO ic = 1, nl_c
14117 : s_offset_d1 = 0
14118 : DO id = 1, nl_d
14119 : buffer1 = 0.0_dp
14120 : imax = 1*6*10
14121 : kmax = 1
14122 : DO i = 1, imax
14123 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14124 : END DO
14125 : buffer2 = 0.0_dp
14126 : imax = 1*6*10
14127 : kmax = 1
14128 : DO i = 1, imax
14129 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14130 : END DO
14131 : buffer1 = 0.0_dp
14132 : imax = 1*1*10
14133 : kmax = 6
14134 : DO i = 1, imax
14135 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
14136 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14137 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14138 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14139 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
14140 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14141 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14142 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
14143 : END DO
14144 : imax = 1*1*5
14145 : kmax = 10
14146 : i = 0
14147 : DO i1 = 1, 5
14148 : DO i2 = 1, 1
14149 : DO i3 = 1, 1
14150 : i = i + 1
14151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14153 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14156 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
14157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14159 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14162 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
14163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14165 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
14166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14168 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
14169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14171 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14174 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
14175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14177 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14180 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
14181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14183 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
14184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14186 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
14187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14189 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
14190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14192 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
14193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14195 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
14196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14198 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
14199 : END DO
14200 : END DO
14201 : END DO
14202 : s_offset_d1 = s_offset_d1 + 7
14203 : END DO
14204 : s_offset_c1 = s_offset_c1 + 5
14205 : END DO
14206 : s_offset_b1 = s_offset_b1 + 1
14207 : END DO
14208 : s_offset_a1 = s_offset_a1 + 1
14209 : END DO
14210 : END SUBROUTINE contract_ssdf
14211 : #endif
14212 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
14213 : ! **************************************************************************************************
14214 : !> \brief ...
14215 : !> \param work ...
14216 : !> \param nl_a ...
14217 : !> \param nl_b ...
14218 : !> \param nl_c ...
14219 : !> \param nl_d ...
14220 : !> \param sphi_a ...
14221 : !> \param sphi_b ...
14222 : !> \param sphi_c ...
14223 : !> \param sphi_d ...
14224 : !> \param primitives ...
14225 : !> \param buffer1 ...
14226 : !> \param buffer2 ...
14227 : ! **************************************************************************************************
14228 : SUBROUTINE contract_ssdg(work, &
14229 : nl_a, nl_b, nl_c, nl_d, &
14230 : sphi_a, sphi_b, sphi_c, sphi_d, &
14231 : primitives, &
14232 : buffer1, buffer2)
14233 : REAL(dp), DIMENSION(1*1*6*15), INTENT(IN) :: work
14234 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14235 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14236 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14237 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
14238 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
14239 : REAL(dp), &
14240 : DIMENSION(1*nl_a, 1*nl_b, 5*nl_c, 9*nl_d) :: primitives
14241 : REAL(dp), DIMENSION(1*1*6*15) :: buffer1, buffer2
14242 :
14243 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14244 : kmax, s_offset_a1, s_offset_b1, &
14245 : s_offset_c1, s_offset_d1
14246 :
14247 : s_offset_a1 = 0
14248 : DO ia = 1, nl_a
14249 : s_offset_b1 = 0
14250 : DO ib = 1, nl_b
14251 : s_offset_c1 = 0
14252 : DO ic = 1, nl_c
14253 : s_offset_d1 = 0
14254 : DO id = 1, nl_d
14255 : buffer1 = 0.0_dp
14256 : imax = 1*6*15
14257 : kmax = 1
14258 : DO i = 1, imax
14259 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14260 : END DO
14261 : buffer2 = 0.0_dp
14262 : imax = 1*6*15
14263 : kmax = 1
14264 : DO i = 1, imax
14265 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14266 : END DO
14267 : buffer1 = 0.0_dp
14268 : imax = 1*1*15
14269 : kmax = 6
14270 : DO i = 1, imax
14271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
14272 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14273 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14274 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14275 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
14276 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14277 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14278 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
14279 : END DO
14280 : imax = 1*1*5
14281 : kmax = 15
14282 : i = 0
14283 : DO i1 = 1, 5
14284 : DO i2 = 1, 1
14285 : DO i3 = 1, 1
14286 : i = i + 1
14287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14289 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14292 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
14293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
14295 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
14296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14298 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14301 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
14302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14304 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
14305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
14306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
14307 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
14308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14310 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
14313 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
14314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14316 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14319 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
14320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14322 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
14323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14325 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
14326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14328 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
14329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14331 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
14332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14334 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
14335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
14336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
14337 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
14338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14340 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
14341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14343 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
14344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14346 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
14347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14349 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
14350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
14352 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
14353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14355 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
14356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14358 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
14359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14361 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
14362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14364 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
14365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14367 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
14368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14370 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
14371 : END DO
14372 : END DO
14373 : END DO
14374 : s_offset_d1 = s_offset_d1 + 9
14375 : END DO
14376 : s_offset_c1 = s_offset_c1 + 5
14377 : END DO
14378 : s_offset_b1 = s_offset_b1 + 1
14379 : END DO
14380 : s_offset_a1 = s_offset_a1 + 1
14381 : END DO
14382 : END SUBROUTINE contract_ssdg
14383 : #endif
14384 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
14385 : ! **************************************************************************************************
14386 : !> \brief ...
14387 : !> \param work ...
14388 : !> \param nl_a ...
14389 : !> \param nl_b ...
14390 : !> \param nl_c ...
14391 : !> \param nl_d ...
14392 : !> \param sphi_a ...
14393 : !> \param sphi_b ...
14394 : !> \param sphi_c ...
14395 : !> \param sphi_d ...
14396 : !> \param primitives ...
14397 : !> \param buffer1 ...
14398 : !> \param buffer2 ...
14399 : ! **************************************************************************************************
14400 : SUBROUTINE contract_ssfs(work, &
14401 : nl_a, nl_b, nl_c, nl_d, &
14402 : sphi_a, sphi_b, sphi_c, sphi_d, &
14403 : primitives, &
14404 : buffer1, buffer2)
14405 : REAL(dp), DIMENSION(1*1*10*1), INTENT(IN) :: work
14406 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14407 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14408 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14409 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
14410 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
14411 : REAL(dp), &
14412 : DIMENSION(1*nl_a, 1*nl_b, 7*nl_c, 1*nl_d) :: primitives
14413 : REAL(dp), DIMENSION(1*1*10*1) :: buffer1, buffer2
14414 :
14415 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14416 : kmax, s_offset_a1, s_offset_b1, &
14417 : s_offset_c1, s_offset_d1
14418 :
14419 : s_offset_a1 = 0
14420 : DO ia = 1, nl_a
14421 : s_offset_b1 = 0
14422 : DO ib = 1, nl_b
14423 : s_offset_c1 = 0
14424 : DO ic = 1, nl_c
14425 : s_offset_d1 = 0
14426 : DO id = 1, nl_d
14427 : buffer1 = 0.0_dp
14428 : imax = 1*10*1
14429 : kmax = 1
14430 : DO i = 1, imax
14431 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14432 : END DO
14433 : buffer2 = 0.0_dp
14434 : imax = 1*10*1
14435 : kmax = 1
14436 : DO i = 1, imax
14437 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14438 : END DO
14439 : buffer1 = 0.0_dp
14440 : imax = 1*1*1
14441 : kmax = 10
14442 : DO i = 1, imax
14443 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14444 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
14445 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14446 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
14447 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14448 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
14449 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14450 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
14451 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14452 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
14453 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
14454 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
14455 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
14456 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
14457 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
14458 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
14459 : END DO
14460 : imax = 1*1*7
14461 : kmax = 1
14462 : i = 0
14463 : DO i1 = 1, 7
14464 : DO i2 = 1, 1
14465 : DO i3 = 1, 1
14466 : i = i + 1
14467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
14469 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
14470 : END DO
14471 : END DO
14472 : END DO
14473 : s_offset_d1 = s_offset_d1 + 1
14474 : END DO
14475 : s_offset_c1 = s_offset_c1 + 7
14476 : END DO
14477 : s_offset_b1 = s_offset_b1 + 1
14478 : END DO
14479 : s_offset_a1 = s_offset_a1 + 1
14480 : END DO
14481 : END SUBROUTINE contract_ssfs
14482 : #endif
14483 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
14484 : ! **************************************************************************************************
14485 : !> \brief ...
14486 : !> \param work ...
14487 : !> \param nl_a ...
14488 : !> \param nl_b ...
14489 : !> \param nl_c ...
14490 : !> \param nl_d ...
14491 : !> \param sphi_a ...
14492 : !> \param sphi_b ...
14493 : !> \param sphi_c ...
14494 : !> \param sphi_d ...
14495 : !> \param primitives ...
14496 : !> \param buffer1 ...
14497 : !> \param buffer2 ...
14498 : ! **************************************************************************************************
14499 : SUBROUTINE contract_ssfp(work, &
14500 : nl_a, nl_b, nl_c, nl_d, &
14501 : sphi_a, sphi_b, sphi_c, sphi_d, &
14502 : primitives, &
14503 : buffer1, buffer2)
14504 : REAL(dp), DIMENSION(1*1*10*3), INTENT(IN) :: work
14505 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14506 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14507 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14508 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
14509 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
14510 : REAL(dp), &
14511 : DIMENSION(1*nl_a, 1*nl_b, 7*nl_c, 3*nl_d) :: primitives
14512 : REAL(dp), DIMENSION(1*1*10*3) :: buffer1, buffer2
14513 :
14514 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14515 : kmax, s_offset_a1, s_offset_b1, &
14516 : s_offset_c1, s_offset_d1
14517 :
14518 : s_offset_a1 = 0
14519 : DO ia = 1, nl_a
14520 : s_offset_b1 = 0
14521 : DO ib = 1, nl_b
14522 : s_offset_c1 = 0
14523 : DO ic = 1, nl_c
14524 : s_offset_d1 = 0
14525 : DO id = 1, nl_d
14526 : buffer1 = 0.0_dp
14527 : imax = 1*10*3
14528 : kmax = 1
14529 : DO i = 1, imax
14530 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14531 : END DO
14532 : buffer2 = 0.0_dp
14533 : imax = 1*10*3
14534 : kmax = 1
14535 : DO i = 1, imax
14536 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14537 : END DO
14538 : buffer1 = 0.0_dp
14539 : imax = 1*1*3
14540 : kmax = 10
14541 : DO i = 1, imax
14542 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14543 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
14544 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
14546 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14547 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
14548 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14549 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
14550 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14551 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
14552 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
14553 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
14554 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
14555 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
14556 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
14557 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
14558 : END DO
14559 : imax = 1*1*7
14560 : kmax = 3
14561 : i = 0
14562 : DO i1 = 1, 7
14563 : DO i2 = 1, 1
14564 : DO i3 = 1, 1
14565 : i = i + 1
14566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
14568 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
14569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
14571 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
14574 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
14575 : END DO
14576 : END DO
14577 : END DO
14578 : s_offset_d1 = s_offset_d1 + 3
14579 : END DO
14580 : s_offset_c1 = s_offset_c1 + 7
14581 : END DO
14582 : s_offset_b1 = s_offset_b1 + 1
14583 : END DO
14584 : s_offset_a1 = s_offset_a1 + 1
14585 : END DO
14586 : END SUBROUTINE contract_ssfp
14587 : #endif
14588 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
14589 : ! **************************************************************************************************
14590 : !> \brief ...
14591 : !> \param work ...
14592 : !> \param nl_a ...
14593 : !> \param nl_b ...
14594 : !> \param nl_c ...
14595 : !> \param nl_d ...
14596 : !> \param sphi_a ...
14597 : !> \param sphi_b ...
14598 : !> \param sphi_c ...
14599 : !> \param sphi_d ...
14600 : !> \param primitives ...
14601 : !> \param buffer1 ...
14602 : !> \param buffer2 ...
14603 : ! **************************************************************************************************
14604 : SUBROUTINE contract_ssfd(work, &
14605 : nl_a, nl_b, nl_c, nl_d, &
14606 : sphi_a, sphi_b, sphi_c, sphi_d, &
14607 : primitives, &
14608 : buffer1, buffer2)
14609 : REAL(dp), DIMENSION(1*1*10*6), INTENT(IN) :: work
14610 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14611 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14612 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14613 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
14614 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
14615 : REAL(dp), &
14616 : DIMENSION(1*nl_a, 1*nl_b, 7*nl_c, 5*nl_d) :: primitives
14617 : REAL(dp), DIMENSION(1*1*10*6) :: buffer1, buffer2
14618 :
14619 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14620 : kmax, s_offset_a1, s_offset_b1, &
14621 : s_offset_c1, s_offset_d1
14622 :
14623 : s_offset_a1 = 0
14624 : DO ia = 1, nl_a
14625 : s_offset_b1 = 0
14626 : DO ib = 1, nl_b
14627 : s_offset_c1 = 0
14628 : DO ic = 1, nl_c
14629 : s_offset_d1 = 0
14630 : DO id = 1, nl_d
14631 : buffer1 = 0.0_dp
14632 : imax = 1*10*6
14633 : kmax = 1
14634 : DO i = 1, imax
14635 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14636 : END DO
14637 : buffer2 = 0.0_dp
14638 : imax = 1*10*6
14639 : kmax = 1
14640 : DO i = 1, imax
14641 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14642 : END DO
14643 : buffer1 = 0.0_dp
14644 : imax = 1*1*6
14645 : kmax = 10
14646 : DO i = 1, imax
14647 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14648 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
14649 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14650 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
14651 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14652 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
14653 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14654 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
14655 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14656 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
14657 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
14658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
14659 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
14660 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
14661 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
14662 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
14663 : END DO
14664 : imax = 1*1*7
14665 : kmax = 6
14666 : i = 0
14667 : DO i1 = 1, 7
14668 : DO i2 = 1, 1
14669 : DO i3 = 1, 1
14670 : i = i + 1
14671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14673 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
14674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14676 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14679 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14682 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
14683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14685 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
14686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14688 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14691 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14694 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
14695 : END DO
14696 : END DO
14697 : END DO
14698 : s_offset_d1 = s_offset_d1 + 5
14699 : END DO
14700 : s_offset_c1 = s_offset_c1 + 7
14701 : END DO
14702 : s_offset_b1 = s_offset_b1 + 1
14703 : END DO
14704 : s_offset_a1 = s_offset_a1 + 1
14705 : END DO
14706 : END SUBROUTINE contract_ssfd
14707 : #endif
14708 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
14709 : ! **************************************************************************************************
14710 : !> \brief ...
14711 : !> \param work ...
14712 : !> \param nl_a ...
14713 : !> \param nl_b ...
14714 : !> \param nl_c ...
14715 : !> \param nl_d ...
14716 : !> \param sphi_a ...
14717 : !> \param sphi_b ...
14718 : !> \param sphi_c ...
14719 : !> \param sphi_d ...
14720 : !> \param primitives ...
14721 : !> \param buffer1 ...
14722 : !> \param buffer2 ...
14723 : ! **************************************************************************************************
14724 : SUBROUTINE contract_ssff(work, &
14725 : nl_a, nl_b, nl_c, nl_d, &
14726 : sphi_a, sphi_b, sphi_c, sphi_d, &
14727 : primitives, &
14728 : buffer1, buffer2)
14729 : REAL(dp), DIMENSION(1*1*10*10), INTENT(IN) :: work
14730 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14731 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14732 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14733 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
14734 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
14735 : REAL(dp), &
14736 : DIMENSION(1*nl_a, 1*nl_b, 7*nl_c, 7*nl_d) :: primitives
14737 : REAL(dp), DIMENSION(1*1*10*10) :: buffer1, buffer2
14738 :
14739 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14740 : kmax, s_offset_a1, s_offset_b1, &
14741 : s_offset_c1, s_offset_d1
14742 :
14743 : s_offset_a1 = 0
14744 : DO ia = 1, nl_a
14745 : s_offset_b1 = 0
14746 : DO ib = 1, nl_b
14747 : s_offset_c1 = 0
14748 : DO ic = 1, nl_c
14749 : s_offset_d1 = 0
14750 : DO id = 1, nl_d
14751 : buffer1 = 0.0_dp
14752 : imax = 1*10*10
14753 : kmax = 1
14754 : DO i = 1, imax
14755 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14756 : END DO
14757 : buffer2 = 0.0_dp
14758 : imax = 1*10*10
14759 : kmax = 1
14760 : DO i = 1, imax
14761 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14762 : END DO
14763 : buffer1 = 0.0_dp
14764 : imax = 1*1*10
14765 : kmax = 10
14766 : DO i = 1, imax
14767 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14768 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
14769 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14770 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
14771 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14772 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
14773 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14774 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
14775 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
14777 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
14778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
14779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
14780 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
14781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
14782 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
14783 : END DO
14784 : imax = 1*1*7
14785 : kmax = 10
14786 : i = 0
14787 : DO i1 = 1, 7
14788 : DO i2 = 1, 1
14789 : DO i3 = 1, 1
14790 : i = i + 1
14791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14793 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14796 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
14797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14799 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14802 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
14803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14805 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
14806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14808 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
14809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14811 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14814 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
14815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14817 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14820 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
14821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14823 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
14824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14826 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
14827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14829 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
14830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14832 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
14833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14835 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
14836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14838 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
14839 : END DO
14840 : END DO
14841 : END DO
14842 : s_offset_d1 = s_offset_d1 + 7
14843 : END DO
14844 : s_offset_c1 = s_offset_c1 + 7
14845 : END DO
14846 : s_offset_b1 = s_offset_b1 + 1
14847 : END DO
14848 : s_offset_a1 = s_offset_a1 + 1
14849 : END DO
14850 : END SUBROUTINE contract_ssff
14851 : #endif
14852 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
14853 : ! **************************************************************************************************
14854 : !> \brief ...
14855 : !> \param work ...
14856 : !> \param nl_a ...
14857 : !> \param nl_b ...
14858 : !> \param nl_c ...
14859 : !> \param nl_d ...
14860 : !> \param sphi_a ...
14861 : !> \param sphi_b ...
14862 : !> \param sphi_c ...
14863 : !> \param sphi_d ...
14864 : !> \param primitives ...
14865 : !> \param buffer1 ...
14866 : !> \param buffer2 ...
14867 : ! **************************************************************************************************
14868 : SUBROUTINE contract_ssfg(work, &
14869 : nl_a, nl_b, nl_c, nl_d, &
14870 : sphi_a, sphi_b, sphi_c, sphi_d, &
14871 : primitives, &
14872 : buffer1, buffer2)
14873 : REAL(dp), DIMENSION(1*1*10*15), INTENT(IN) :: work
14874 : INTEGER :: nl_a, nl_b, nl_c, nl_d
14875 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
14876 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
14877 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
14878 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
14879 : REAL(dp), &
14880 : DIMENSION(1*nl_a, 1*nl_b, 7*nl_c, 9*nl_d) :: primitives
14881 : REAL(dp), DIMENSION(1*1*10*15) :: buffer1, buffer2
14882 :
14883 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
14884 : kmax, s_offset_a1, s_offset_b1, &
14885 : s_offset_c1, s_offset_d1
14886 :
14887 : s_offset_a1 = 0
14888 : DO ia = 1, nl_a
14889 : s_offset_b1 = 0
14890 : DO ib = 1, nl_b
14891 : s_offset_c1 = 0
14892 : DO ic = 1, nl_c
14893 : s_offset_d1 = 0
14894 : DO id = 1, nl_d
14895 : buffer1 = 0.0_dp
14896 : imax = 1*10*15
14897 : kmax = 1
14898 : DO i = 1, imax
14899 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
14900 : END DO
14901 : buffer2 = 0.0_dp
14902 : imax = 1*10*15
14903 : kmax = 1
14904 : DO i = 1, imax
14905 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
14906 : END DO
14907 : buffer1 = 0.0_dp
14908 : imax = 1*1*15
14909 : kmax = 10
14910 : DO i = 1, imax
14911 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
14912 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
14913 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
14914 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
14915 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
14916 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
14917 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
14918 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
14919 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
14920 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
14921 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
14922 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
14923 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
14924 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
14925 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
14926 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
14927 : END DO
14928 : imax = 1*1*7
14929 : kmax = 15
14930 : i = 0
14931 : DO i1 = 1, 7
14932 : DO i2 = 1, 1
14933 : DO i3 = 1, 1
14934 : i = i + 1
14935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14937 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
14938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14940 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
14941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
14943 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
14944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14946 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
14947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14949 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
14950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14952 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
14953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
14954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
14955 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
14956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14958 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
14959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
14961 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
14962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
14963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
14964 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
14965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
14966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
14967 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
14968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14970 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
14971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14973 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
14974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
14975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
14976 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
14977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14979 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
14980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14982 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
14983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
14984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
14985 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
14986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
14987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
14988 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
14989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
14990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
14991 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
14992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
14993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
14994 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
14995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
14996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
14997 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
14998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
14999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
15000 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
15001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
15003 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
15004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15006 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
15007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15009 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
15010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15012 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
15013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15015 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
15016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15018 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
15019 : END DO
15020 : END DO
15021 : END DO
15022 : s_offset_d1 = s_offset_d1 + 9
15023 : END DO
15024 : s_offset_c1 = s_offset_c1 + 7
15025 : END DO
15026 : s_offset_b1 = s_offset_b1 + 1
15027 : END DO
15028 : s_offset_a1 = s_offset_a1 + 1
15029 : END DO
15030 : END SUBROUTINE contract_ssfg
15031 : #endif
15032 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
15033 : ! **************************************************************************************************
15034 : !> \brief ...
15035 : !> \param work ...
15036 : !> \param nl_a ...
15037 : !> \param nl_b ...
15038 : !> \param nl_c ...
15039 : !> \param nl_d ...
15040 : !> \param sphi_a ...
15041 : !> \param sphi_b ...
15042 : !> \param sphi_c ...
15043 : !> \param sphi_d ...
15044 : !> \param primitives ...
15045 : !> \param buffer1 ...
15046 : !> \param buffer2 ...
15047 : ! **************************************************************************************************
15048 : SUBROUTINE contract_ssgs(work, &
15049 : nl_a, nl_b, nl_c, nl_d, &
15050 : sphi_a, sphi_b, sphi_c, sphi_d, &
15051 : primitives, &
15052 : buffer1, buffer2)
15053 : REAL(dp), DIMENSION(1*1*15*1), INTENT(IN) :: work
15054 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15055 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15056 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
15057 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
15058 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
15059 : REAL(dp), &
15060 : DIMENSION(1*nl_a, 1*nl_b, 9*nl_c, 1*nl_d) :: primitives
15061 : REAL(dp), DIMENSION(1*1*15*1) :: buffer1, buffer2
15062 :
15063 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15064 : kmax, s_offset_a1, s_offset_b1, &
15065 : s_offset_c1, s_offset_d1
15066 :
15067 : s_offset_a1 = 0
15068 : DO ia = 1, nl_a
15069 : s_offset_b1 = 0
15070 : DO ib = 1, nl_b
15071 : s_offset_c1 = 0
15072 : DO ic = 1, nl_c
15073 : s_offset_d1 = 0
15074 : DO id = 1, nl_d
15075 : buffer1 = 0.0_dp
15076 : imax = 1*15*1
15077 : kmax = 1
15078 : DO i = 1, imax
15079 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15080 : END DO
15081 : buffer2 = 0.0_dp
15082 : imax = 1*15*1
15083 : kmax = 1
15084 : DO i = 1, imax
15085 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
15086 : END DO
15087 : buffer1 = 0.0_dp
15088 : imax = 1*1*1
15089 : kmax = 15
15090 : DO i = 1, imax
15091 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
15092 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
15093 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
15094 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
15095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
15096 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
15097 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
15098 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
15099 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
15100 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
15101 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
15102 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
15103 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
15104 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
15105 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
15106 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
15107 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
15108 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
15109 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
15110 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
15111 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
15112 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
15113 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
15114 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
15115 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
15116 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
15117 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
15118 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
15119 : END DO
15120 : imax = 1*1*9
15121 : kmax = 1
15122 : i = 0
15123 : DO i1 = 1, 9
15124 : DO i2 = 1, 1
15125 : DO i3 = 1, 1
15126 : i = i + 1
15127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
15129 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
15130 : END DO
15131 : END DO
15132 : END DO
15133 : s_offset_d1 = s_offset_d1 + 1
15134 : END DO
15135 : s_offset_c1 = s_offset_c1 + 9
15136 : END DO
15137 : s_offset_b1 = s_offset_b1 + 1
15138 : END DO
15139 : s_offset_a1 = s_offset_a1 + 1
15140 : END DO
15141 : END SUBROUTINE contract_ssgs
15142 : #endif
15143 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
15144 : ! **************************************************************************************************
15145 : !> \brief ...
15146 : !> \param work ...
15147 : !> \param nl_a ...
15148 : !> \param nl_b ...
15149 : !> \param nl_c ...
15150 : !> \param nl_d ...
15151 : !> \param sphi_a ...
15152 : !> \param sphi_b ...
15153 : !> \param sphi_c ...
15154 : !> \param sphi_d ...
15155 : !> \param primitives ...
15156 : !> \param buffer1 ...
15157 : !> \param buffer2 ...
15158 : ! **************************************************************************************************
15159 : SUBROUTINE contract_ssgp(work, &
15160 : nl_a, nl_b, nl_c, nl_d, &
15161 : sphi_a, sphi_b, sphi_c, sphi_d, &
15162 : primitives, &
15163 : buffer1, buffer2)
15164 : REAL(dp), DIMENSION(1*1*15*3), INTENT(IN) :: work
15165 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15166 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15167 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
15168 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
15169 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
15170 : REAL(dp), &
15171 : DIMENSION(1*nl_a, 1*nl_b, 9*nl_c, 3*nl_d) :: primitives
15172 : REAL(dp), DIMENSION(1*1*15*3) :: buffer1, buffer2
15173 :
15174 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15175 : kmax, s_offset_a1, s_offset_b1, &
15176 : s_offset_c1, s_offset_d1
15177 :
15178 : s_offset_a1 = 0
15179 : DO ia = 1, nl_a
15180 : s_offset_b1 = 0
15181 : DO ib = 1, nl_b
15182 : s_offset_c1 = 0
15183 : DO ic = 1, nl_c
15184 : s_offset_d1 = 0
15185 : DO id = 1, nl_d
15186 : buffer1 = 0.0_dp
15187 : imax = 1*15*3
15188 : kmax = 1
15189 : DO i = 1, imax
15190 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15191 : END DO
15192 : buffer2 = 0.0_dp
15193 : imax = 1*15*3
15194 : kmax = 1
15195 : DO i = 1, imax
15196 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
15197 : END DO
15198 : buffer1 = 0.0_dp
15199 : imax = 1*1*3
15200 : kmax = 15
15201 : DO i = 1, imax
15202 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
15203 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
15204 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
15205 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
15206 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
15207 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
15208 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
15209 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
15210 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
15211 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
15212 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
15213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
15214 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
15215 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
15216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
15217 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
15218 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
15219 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
15220 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
15221 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
15222 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
15223 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
15224 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
15225 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
15226 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
15227 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
15228 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
15229 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
15230 : END DO
15231 : imax = 1*1*9
15232 : kmax = 3
15233 : i = 0
15234 : DO i1 = 1, 9
15235 : DO i2 = 1, 1
15236 : DO i3 = 1, 1
15237 : i = i + 1
15238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
15240 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
15241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
15243 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
15246 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
15247 : END DO
15248 : END DO
15249 : END DO
15250 : s_offset_d1 = s_offset_d1 + 3
15251 : END DO
15252 : s_offset_c1 = s_offset_c1 + 9
15253 : END DO
15254 : s_offset_b1 = s_offset_b1 + 1
15255 : END DO
15256 : s_offset_a1 = s_offset_a1 + 1
15257 : END DO
15258 : END SUBROUTINE contract_ssgp
15259 : #endif
15260 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
15261 : ! **************************************************************************************************
15262 : !> \brief ...
15263 : !> \param work ...
15264 : !> \param nl_a ...
15265 : !> \param nl_b ...
15266 : !> \param nl_c ...
15267 : !> \param nl_d ...
15268 : !> \param sphi_a ...
15269 : !> \param sphi_b ...
15270 : !> \param sphi_c ...
15271 : !> \param sphi_d ...
15272 : !> \param primitives ...
15273 : !> \param buffer1 ...
15274 : !> \param buffer2 ...
15275 : ! **************************************************************************************************
15276 : SUBROUTINE contract_ssgd(work, &
15277 : nl_a, nl_b, nl_c, nl_d, &
15278 : sphi_a, sphi_b, sphi_c, sphi_d, &
15279 : primitives, &
15280 : buffer1, buffer2)
15281 : REAL(dp), DIMENSION(1*1*15*6), INTENT(IN) :: work
15282 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15283 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15284 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
15285 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
15286 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
15287 : REAL(dp), &
15288 : DIMENSION(1*nl_a, 1*nl_b, 9*nl_c, 5*nl_d) :: primitives
15289 : REAL(dp), DIMENSION(1*1*15*6) :: buffer1, buffer2
15290 :
15291 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15292 : kmax, s_offset_a1, s_offset_b1, &
15293 : s_offset_c1, s_offset_d1
15294 :
15295 : s_offset_a1 = 0
15296 : DO ia = 1, nl_a
15297 : s_offset_b1 = 0
15298 : DO ib = 1, nl_b
15299 : s_offset_c1 = 0
15300 : DO ic = 1, nl_c
15301 : s_offset_d1 = 0
15302 : DO id = 1, nl_d
15303 : buffer1 = 0.0_dp
15304 : imax = 1*15*6
15305 : kmax = 1
15306 : DO i = 1, imax
15307 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15308 : END DO
15309 : buffer2 = 0.0_dp
15310 : imax = 1*15*6
15311 : kmax = 1
15312 : DO i = 1, imax
15313 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
15314 : END DO
15315 : buffer1 = 0.0_dp
15316 : imax = 1*1*6
15317 : kmax = 15
15318 : DO i = 1, imax
15319 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
15320 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
15321 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
15322 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
15323 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
15324 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
15325 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
15326 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
15327 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
15328 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
15329 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
15330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
15331 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
15332 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
15333 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
15334 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
15335 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
15336 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
15337 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
15338 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
15339 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
15340 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
15341 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
15342 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
15343 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
15344 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
15345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
15346 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
15347 : END DO
15348 : imax = 1*1*9
15349 : kmax = 6
15350 : i = 0
15351 : DO i1 = 1, 9
15352 : DO i2 = 1, 1
15353 : DO i3 = 1, 1
15354 : i = i + 1
15355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15357 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
15358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15360 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
15361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15363 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15366 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
15367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15369 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
15370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15372 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
15373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
15375 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
15376 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15378 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
15379 : END DO
15380 : END DO
15381 : END DO
15382 : s_offset_d1 = s_offset_d1 + 5
15383 : END DO
15384 : s_offset_c1 = s_offset_c1 + 9
15385 : END DO
15386 : s_offset_b1 = s_offset_b1 + 1
15387 : END DO
15388 : s_offset_a1 = s_offset_a1 + 1
15389 : END DO
15390 : END SUBROUTINE contract_ssgd
15391 : #endif
15392 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
15393 : ! **************************************************************************************************
15394 : !> \brief ...
15395 : !> \param work ...
15396 : !> \param nl_a ...
15397 : !> \param nl_b ...
15398 : !> \param nl_c ...
15399 : !> \param nl_d ...
15400 : !> \param sphi_a ...
15401 : !> \param sphi_b ...
15402 : !> \param sphi_c ...
15403 : !> \param sphi_d ...
15404 : !> \param primitives ...
15405 : !> \param buffer1 ...
15406 : !> \param buffer2 ...
15407 : ! **************************************************************************************************
15408 : SUBROUTINE contract_ssgf(work, &
15409 : nl_a, nl_b, nl_c, nl_d, &
15410 : sphi_a, sphi_b, sphi_c, sphi_d, &
15411 : primitives, &
15412 : buffer1, buffer2)
15413 : REAL(dp), DIMENSION(1*1*15*10), INTENT(IN) :: work
15414 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15415 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15416 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
15417 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
15418 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
15419 : REAL(dp), &
15420 : DIMENSION(1*nl_a, 1*nl_b, 9*nl_c, 7*nl_d) :: primitives
15421 : REAL(dp), DIMENSION(1*1*15*10) :: buffer1, buffer2
15422 :
15423 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15424 : kmax, s_offset_a1, s_offset_b1, &
15425 : s_offset_c1, s_offset_d1
15426 :
15427 : s_offset_a1 = 0
15428 : DO ia = 1, nl_a
15429 : s_offset_b1 = 0
15430 : DO ib = 1, nl_b
15431 : s_offset_c1 = 0
15432 : DO ic = 1, nl_c
15433 : s_offset_d1 = 0
15434 : DO id = 1, nl_d
15435 : buffer1 = 0.0_dp
15436 : imax = 1*15*10
15437 : kmax = 1
15438 : DO i = 1, imax
15439 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15440 : END DO
15441 : buffer2 = 0.0_dp
15442 : imax = 1*15*10
15443 : kmax = 1
15444 : DO i = 1, imax
15445 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
15446 : END DO
15447 : buffer1 = 0.0_dp
15448 : imax = 1*1*10
15449 : kmax = 15
15450 : DO i = 1, imax
15451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
15452 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
15453 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
15454 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
15455 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
15456 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
15457 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
15458 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
15459 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
15460 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
15461 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
15462 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
15463 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
15464 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
15465 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
15466 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
15467 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
15468 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
15469 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
15470 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
15471 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
15472 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
15473 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
15474 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
15475 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
15476 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
15477 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
15478 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
15479 : END DO
15480 : imax = 1*1*9
15481 : kmax = 10
15482 : i = 0
15483 : DO i1 = 1, 9
15484 : DO i2 = 1, 1
15485 : DO i3 = 1, 1
15486 : i = i + 1
15487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15489 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
15490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15492 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
15493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15495 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15498 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
15499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15501 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
15502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
15503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
15504 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
15505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15507 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
15508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15510 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
15511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
15513 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
15514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15516 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
15517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15519 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
15520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15522 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
15523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15525 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
15526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
15527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
15528 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
15529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15531 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
15532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15534 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
15535 : END DO
15536 : END DO
15537 : END DO
15538 : s_offset_d1 = s_offset_d1 + 7
15539 : END DO
15540 : s_offset_c1 = s_offset_c1 + 9
15541 : END DO
15542 : s_offset_b1 = s_offset_b1 + 1
15543 : END DO
15544 : s_offset_a1 = s_offset_a1 + 1
15545 : END DO
15546 : END SUBROUTINE contract_ssgf
15547 : #endif
15548 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
15549 : ! **************************************************************************************************
15550 : !> \brief ...
15551 : !> \param work ...
15552 : !> \param nl_a ...
15553 : !> \param nl_b ...
15554 : !> \param nl_c ...
15555 : !> \param nl_d ...
15556 : !> \param sphi_a ...
15557 : !> \param sphi_b ...
15558 : !> \param sphi_c ...
15559 : !> \param sphi_d ...
15560 : !> \param primitives ...
15561 : !> \param buffer1 ...
15562 : !> \param buffer2 ...
15563 : ! **************************************************************************************************
15564 : SUBROUTINE contract_ssgg(work, &
15565 : nl_a, nl_b, nl_c, nl_d, &
15566 : sphi_a, sphi_b, sphi_c, sphi_d, &
15567 : primitives, &
15568 : buffer1, buffer2)
15569 : REAL(dp), DIMENSION(1*1*15*15), INTENT(IN) :: work
15570 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15571 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15572 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
15573 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
15574 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
15575 : REAL(dp), &
15576 : DIMENSION(1*nl_a, 1*nl_b, 9*nl_c, 9*nl_d) :: primitives
15577 : REAL(dp), DIMENSION(1*1*15*15) :: buffer1, buffer2
15578 :
15579 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15580 : kmax, s_offset_a1, s_offset_b1, &
15581 : s_offset_c1, s_offset_d1
15582 :
15583 : s_offset_a1 = 0
15584 : DO ia = 1, nl_a
15585 : s_offset_b1 = 0
15586 : DO ib = 1, nl_b
15587 : s_offset_c1 = 0
15588 : DO ic = 1, nl_c
15589 : s_offset_d1 = 0
15590 : DO id = 1, nl_d
15591 : buffer1 = 0.0_dp
15592 : imax = 1*15*15
15593 : kmax = 1
15594 : DO i = 1, imax
15595 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15596 : END DO
15597 : buffer2 = 0.0_dp
15598 : imax = 1*15*15
15599 : kmax = 1
15600 : DO i = 1, imax
15601 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
15602 : END DO
15603 : buffer1 = 0.0_dp
15604 : imax = 1*1*15
15605 : kmax = 15
15606 : DO i = 1, imax
15607 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
15608 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
15609 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
15610 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
15611 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
15612 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
15613 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
15614 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
15615 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
15616 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
15617 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
15618 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
15619 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
15620 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
15621 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
15622 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
15623 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
15624 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
15625 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
15626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
15627 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
15628 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
15629 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
15630 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
15631 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
15632 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
15633 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
15634 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
15635 : END DO
15636 : imax = 1*1*9
15637 : kmax = 15
15638 : i = 0
15639 : DO i1 = 1, 9
15640 : DO i2 = 1, 1
15641 : DO i3 = 1, 1
15642 : i = i + 1
15643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15645 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
15646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15648 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
15649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
15650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
15651 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
15652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15654 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15657 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
15658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
15659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
15660 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
15661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
15662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
15663 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
15664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15666 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
15667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
15668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
15669 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
15670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
15672 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
15673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15675 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
15676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15678 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
15679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15681 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
15682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15684 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
15685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15687 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
15688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
15689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
15690 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
15691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
15692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
15693 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
15694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15696 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
15697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
15698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
15699 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
15700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15702 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
15703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15705 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
15706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
15707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
15708 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
15709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
15711 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
15712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15714 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
15715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15717 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
15718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
15719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
15720 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
15721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15723 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
15724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15726 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
15727 : END DO
15728 : END DO
15729 : END DO
15730 : s_offset_d1 = s_offset_d1 + 9
15731 : END DO
15732 : s_offset_c1 = s_offset_c1 + 9
15733 : END DO
15734 : s_offset_b1 = s_offset_b1 + 1
15735 : END DO
15736 : s_offset_a1 = s_offset_a1 + 1
15737 : END DO
15738 : END SUBROUTINE contract_ssgg
15739 : #endif
15740 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
15741 : ! **************************************************************************************************
15742 : !> \brief ...
15743 : !> \param work ...
15744 : !> \param nl_a ...
15745 : !> \param nl_b ...
15746 : !> \param nl_c ...
15747 : !> \param nl_d ...
15748 : !> \param sphi_a ...
15749 : !> \param sphi_b ...
15750 : !> \param sphi_c ...
15751 : !> \param sphi_d ...
15752 : !> \param primitives ...
15753 : !> \param buffer1 ...
15754 : !> \param buffer2 ...
15755 : ! **************************************************************************************************
15756 15953045 : SUBROUTINE contract_spss(work, &
15757 : nl_a, nl_b, nl_c, nl_d, &
15758 15953045 : sphi_a, sphi_b, sphi_c, sphi_d, &
15759 15953045 : primitives, &
15760 : buffer1, buffer2)
15761 : REAL(dp), DIMENSION(1*3*1*1), INTENT(IN) :: work
15762 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15763 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15764 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
15765 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
15766 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
15767 : REAL(dp), &
15768 : DIMENSION(1*nl_a, 3*nl_b, 1*nl_c, 1*nl_d) :: primitives
15769 : REAL(dp), DIMENSION(1*3*1*1) :: buffer1, buffer2
15770 :
15771 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15772 : kmax, s_offset_a1, s_offset_b1, &
15773 : s_offset_c1, s_offset_d1
15774 :
15775 15953045 : s_offset_a1 = 0
15776 35405515 : DO ia = 1, nl_a
15777 : s_offset_b1 = 0
15778 42455239 : DO ib = 1, nl_b
15779 : s_offset_c1 = 0
15780 56170923 : DO ic = 1, nl_c
15781 : s_offset_d1 = 0
15782 86093240 : DO id = 1, nl_d
15783 52925086 : buffer1 = 0.0_dp
15784 52925086 : imax = 3*1*1
15785 52925086 : kmax = 1
15786 211700344 : DO i = 1, imax
15787 211700344 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15788 : END DO
15789 52925086 : buffer2 = 0.0_dp
15790 52925086 : imax = 1*1*1
15791 52925086 : kmax = 3
15792 105850172 : DO i = 1, imax
15793 52925086 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
15794 52925086 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
15795 105850172 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
15796 : END DO
15797 52925086 : buffer1 = 0.0_dp
15798 52925086 : imax = 1*3*1
15799 52925086 : kmax = 1
15800 211700344 : DO i = 1, imax
15801 211700344 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
15802 : END DO
15803 105850172 : imax = 1*3*1
15804 105850172 : kmax = 1
15805 : i = 0
15806 105850172 : DO i1 = 1, 1
15807 264625430 : DO i2 = 1, 3
15808 370475602 : DO i3 = 1, 1
15809 158775258 : i = i + 1
15810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
15812 317550516 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
15813 : END DO
15814 : END DO
15815 : END DO
15816 86093240 : s_offset_d1 = s_offset_d1 + 1
15817 : END DO
15818 56170923 : s_offset_c1 = s_offset_c1 + 1
15819 : END DO
15820 42455239 : s_offset_b1 = s_offset_b1 + 3
15821 : END DO
15822 35405515 : s_offset_a1 = s_offset_a1 + 1
15823 : END DO
15824 15953045 : END SUBROUTINE contract_spss
15825 : #endif
15826 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
15827 : ! **************************************************************************************************
15828 : !> \brief ...
15829 : !> \param work ...
15830 : !> \param nl_a ...
15831 : !> \param nl_b ...
15832 : !> \param nl_c ...
15833 : !> \param nl_d ...
15834 : !> \param sphi_a ...
15835 : !> \param sphi_b ...
15836 : !> \param sphi_c ...
15837 : !> \param sphi_d ...
15838 : !> \param primitives ...
15839 : !> \param buffer1 ...
15840 : !> \param buffer2 ...
15841 : ! **************************************************************************************************
15842 6579337 : SUBROUTINE contract_spsp(work, &
15843 : nl_a, nl_b, nl_c, nl_d, &
15844 6579337 : sphi_a, sphi_b, sphi_c, sphi_d, &
15845 6579337 : primitives, &
15846 : buffer1, buffer2)
15847 : REAL(dp), DIMENSION(1*3*1*3), INTENT(IN) :: work
15848 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15849 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15850 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
15851 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
15852 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
15853 : REAL(dp), &
15854 : DIMENSION(1*nl_a, 3*nl_b, 1*nl_c, 3*nl_d) :: primitives
15855 : REAL(dp), DIMENSION(1*3*1*3) :: buffer1, buffer2
15856 :
15857 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15858 : kmax, s_offset_a1, s_offset_b1, &
15859 : s_offset_c1, s_offset_d1
15860 :
15861 6579337 : s_offset_a1 = 0
15862 15142575 : DO ia = 1, nl_a
15863 : s_offset_b1 = 0
15864 18969510 : DO ib = 1, nl_b
15865 : s_offset_c1 = 0
15866 26348704 : DO ic = 1, nl_c
15867 : s_offset_d1 = 0
15868 40042122 : DO id = 1, nl_d
15869 24099690 : buffer1 = 0.0_dp
15870 24099690 : imax = 3*1*3
15871 24099690 : kmax = 1
15872 240996900 : DO i = 1, imax
15873 240996900 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15874 : END DO
15875 24099690 : buffer2 = 0.0_dp
15876 24099690 : imax = 1*1*3
15877 24099690 : kmax = 3
15878 96398760 : DO i = 1, imax
15879 72299070 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
15880 72299070 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
15881 96398760 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
15882 : END DO
15883 24099690 : buffer1 = 0.0_dp
15884 24099690 : imax = 1*3*3
15885 24099690 : kmax = 1
15886 240996900 : DO i = 1, imax
15887 240996900 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
15888 : END DO
15889 48199380 : imax = 1*3*1
15890 48199380 : kmax = 3
15891 : i = 0
15892 48199380 : DO i1 = 1, 1
15893 120498450 : DO i2 = 1, 3
15894 168697830 : DO i3 = 1, 1
15895 72299070 : i = i + 1
15896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
15898 72299070 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
15899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
15901 72299070 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
15903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
15904 144598140 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
15905 : END DO
15906 : END DO
15907 : END DO
15908 40042122 : s_offset_d1 = s_offset_d1 + 3
15909 : END DO
15910 26348704 : s_offset_c1 = s_offset_c1 + 1
15911 : END DO
15912 18969510 : s_offset_b1 = s_offset_b1 + 3
15913 : END DO
15914 15142575 : s_offset_a1 = s_offset_a1 + 1
15915 : END DO
15916 6579337 : END SUBROUTINE contract_spsp
15917 : #endif
15918 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
15919 : ! **************************************************************************************************
15920 : !> \brief ...
15921 : !> \param work ...
15922 : !> \param nl_a ...
15923 : !> \param nl_b ...
15924 : !> \param nl_c ...
15925 : !> \param nl_d ...
15926 : !> \param sphi_a ...
15927 : !> \param sphi_b ...
15928 : !> \param sphi_c ...
15929 : !> \param sphi_d ...
15930 : !> \param primitives ...
15931 : !> \param buffer1 ...
15932 : !> \param buffer2 ...
15933 : ! **************************************************************************************************
15934 1492916 : SUBROUTINE contract_spsd(work, &
15935 : nl_a, nl_b, nl_c, nl_d, &
15936 1492916 : sphi_a, sphi_b, sphi_c, sphi_d, &
15937 1492916 : primitives, &
15938 : buffer1, buffer2)
15939 : REAL(dp), DIMENSION(1*3*1*6), INTENT(IN) :: work
15940 : INTEGER :: nl_a, nl_b, nl_c, nl_d
15941 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
15942 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
15943 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
15944 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
15945 : REAL(dp), &
15946 : DIMENSION(1*nl_a, 3*nl_b, 1*nl_c, 5*nl_d) :: primitives
15947 : REAL(dp), DIMENSION(1*3*1*6) :: buffer1, buffer2
15948 :
15949 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
15950 : kmax, s_offset_a1, s_offset_b1, &
15951 : s_offset_c1, s_offset_d1
15952 :
15953 1492916 : s_offset_a1 = 0
15954 3697655 : DO ia = 1, nl_a
15955 : s_offset_b1 = 0
15956 5172902 : DO ib = 1, nl_b
15957 : s_offset_c1 = 0
15958 8010315 : DO ic = 1, nl_c
15959 : s_offset_d1 = 0
15960 10348997 : DO id = 1, nl_d
15961 5306845 : buffer1 = 0.0_dp
15962 5306845 : imax = 3*1*6
15963 5306845 : kmax = 1
15964 100830055 : DO i = 1, imax
15965 100830055 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
15966 : END DO
15967 5306845 : buffer2 = 0.0_dp
15968 5306845 : imax = 1*1*6
15969 5306845 : kmax = 3
15970 37147915 : DO i = 1, imax
15971 31841070 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
15972 31841070 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
15973 37147915 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
15974 : END DO
15975 5306845 : buffer1 = 0.0_dp
15976 5306845 : imax = 1*3*6
15977 5306845 : kmax = 1
15978 100830055 : DO i = 1, imax
15979 100830055 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
15980 : END DO
15981 10613690 : imax = 1*3*1
15982 10613690 : kmax = 6
15983 : i = 0
15984 10613690 : DO i1 = 1, 1
15985 26534225 : DO i2 = 1, 3
15986 37147915 : DO i3 = 1, 1
15987 15920535 : i = i + 1
15988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
15989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
15990 15920535 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
15991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
15992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
15993 15920535 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
15994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
15995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
15996 15920535 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
15997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
15998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
15999 15920535 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
16000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16002 15920535 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
16003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16005 15920535 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16008 15920535 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16011 31841070 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
16012 : END DO
16013 : END DO
16014 : END DO
16015 10348997 : s_offset_d1 = s_offset_d1 + 5
16016 : END DO
16017 8010315 : s_offset_c1 = s_offset_c1 + 1
16018 : END DO
16019 5172902 : s_offset_b1 = s_offset_b1 + 3
16020 : END DO
16021 3697655 : s_offset_a1 = s_offset_a1 + 1
16022 : END DO
16023 1492916 : END SUBROUTINE contract_spsd
16024 : #endif
16025 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
16026 : ! **************************************************************************************************
16027 : !> \brief ...
16028 : !> \param work ...
16029 : !> \param nl_a ...
16030 : !> \param nl_b ...
16031 : !> \param nl_c ...
16032 : !> \param nl_d ...
16033 : !> \param sphi_a ...
16034 : !> \param sphi_b ...
16035 : !> \param sphi_c ...
16036 : !> \param sphi_d ...
16037 : !> \param primitives ...
16038 : !> \param buffer1 ...
16039 : !> \param buffer2 ...
16040 : ! **************************************************************************************************
16041 : SUBROUTINE contract_spsf(work, &
16042 : nl_a, nl_b, nl_c, nl_d, &
16043 : sphi_a, sphi_b, sphi_c, sphi_d, &
16044 : primitives, &
16045 : buffer1, buffer2)
16046 : REAL(dp), DIMENSION(1*3*1*10), INTENT(IN) :: work
16047 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16048 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16049 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16050 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
16051 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
16052 : REAL(dp), &
16053 : DIMENSION(1*nl_a, 3*nl_b, 1*nl_c, 7*nl_d) :: primitives
16054 : REAL(dp), DIMENSION(1*3*1*10) :: buffer1, buffer2
16055 :
16056 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16057 : kmax, s_offset_a1, s_offset_b1, &
16058 : s_offset_c1, s_offset_d1
16059 :
16060 : s_offset_a1 = 0
16061 : DO ia = 1, nl_a
16062 : s_offset_b1 = 0
16063 : DO ib = 1, nl_b
16064 : s_offset_c1 = 0
16065 : DO ic = 1, nl_c
16066 : s_offset_d1 = 0
16067 : DO id = 1, nl_d
16068 : buffer1 = 0.0_dp
16069 : imax = 3*1*10
16070 : kmax = 1
16071 : DO i = 1, imax
16072 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16073 : END DO
16074 : buffer2 = 0.0_dp
16075 : imax = 1*1*10
16076 : kmax = 3
16077 : DO i = 1, imax
16078 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16079 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16080 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16081 : END DO
16082 : buffer1 = 0.0_dp
16083 : imax = 1*3*10
16084 : kmax = 1
16085 : DO i = 1, imax
16086 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
16087 : END DO
16088 : imax = 1*3*1
16089 : kmax = 10
16090 : i = 0
16091 : DO i1 = 1, 1
16092 : DO i2 = 1, 3
16093 : DO i3 = 1, 1
16094 : i = i + 1
16095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16097 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
16098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16100 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
16101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16103 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16106 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
16107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16109 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
16110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16112 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
16113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16115 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16118 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
16119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16121 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16124 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
16125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16127 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
16128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16130 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
16131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16133 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
16134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16136 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
16137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16139 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
16140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16142 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
16143 : END DO
16144 : END DO
16145 : END DO
16146 : s_offset_d1 = s_offset_d1 + 7
16147 : END DO
16148 : s_offset_c1 = s_offset_c1 + 1
16149 : END DO
16150 : s_offset_b1 = s_offset_b1 + 3
16151 : END DO
16152 : s_offset_a1 = s_offset_a1 + 1
16153 : END DO
16154 : END SUBROUTINE contract_spsf
16155 : #endif
16156 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
16157 : ! **************************************************************************************************
16158 : !> \brief ...
16159 : !> \param work ...
16160 : !> \param nl_a ...
16161 : !> \param nl_b ...
16162 : !> \param nl_c ...
16163 : !> \param nl_d ...
16164 : !> \param sphi_a ...
16165 : !> \param sphi_b ...
16166 : !> \param sphi_c ...
16167 : !> \param sphi_d ...
16168 : !> \param primitives ...
16169 : !> \param buffer1 ...
16170 : !> \param buffer2 ...
16171 : ! **************************************************************************************************
16172 : SUBROUTINE contract_spsg(work, &
16173 : nl_a, nl_b, nl_c, nl_d, &
16174 : sphi_a, sphi_b, sphi_c, sphi_d, &
16175 : primitives, &
16176 : buffer1, buffer2)
16177 : REAL(dp), DIMENSION(1*3*1*15), INTENT(IN) :: work
16178 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16179 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16180 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16181 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
16182 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
16183 : REAL(dp), &
16184 : DIMENSION(1*nl_a, 3*nl_b, 1*nl_c, 9*nl_d) :: primitives
16185 : REAL(dp), DIMENSION(1*3*1*15) :: buffer1, buffer2
16186 :
16187 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16188 : kmax, s_offset_a1, s_offset_b1, &
16189 : s_offset_c1, s_offset_d1
16190 :
16191 : s_offset_a1 = 0
16192 : DO ia = 1, nl_a
16193 : s_offset_b1 = 0
16194 : DO ib = 1, nl_b
16195 : s_offset_c1 = 0
16196 : DO ic = 1, nl_c
16197 : s_offset_d1 = 0
16198 : DO id = 1, nl_d
16199 : buffer1 = 0.0_dp
16200 : imax = 3*1*15
16201 : kmax = 1
16202 : DO i = 1, imax
16203 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16204 : END DO
16205 : buffer2 = 0.0_dp
16206 : imax = 1*1*15
16207 : kmax = 3
16208 : DO i = 1, imax
16209 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16210 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16211 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16212 : END DO
16213 : buffer1 = 0.0_dp
16214 : imax = 1*3*15
16215 : kmax = 1
16216 : DO i = 1, imax
16217 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
16218 : END DO
16219 : imax = 1*3*1
16220 : kmax = 15
16221 : i = 0
16222 : DO i1 = 1, 1
16223 : DO i2 = 1, 3
16224 : DO i3 = 1, 1
16225 : i = i + 1
16226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16228 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
16229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16231 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
16232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16234 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
16235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16237 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16240 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
16241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16243 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
16244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
16245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
16246 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
16247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16249 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16252 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
16253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16255 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16258 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
16259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16261 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
16262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16264 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
16265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16267 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
16268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16270 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
16271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16273 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
16274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
16275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
16276 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
16277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16279 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
16280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16282 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
16283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16285 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
16286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16288 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
16289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16291 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
16292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16294 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
16295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16297 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
16298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16300 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
16301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16303 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
16304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16306 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
16307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16309 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
16310 : END DO
16311 : END DO
16312 : END DO
16313 : s_offset_d1 = s_offset_d1 + 9
16314 : END DO
16315 : s_offset_c1 = s_offset_c1 + 1
16316 : END DO
16317 : s_offset_b1 = s_offset_b1 + 3
16318 : END DO
16319 : s_offset_a1 = s_offset_a1 + 1
16320 : END DO
16321 : END SUBROUTINE contract_spsg
16322 : #endif
16323 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
16324 : ! **************************************************************************************************
16325 : !> \brief ...
16326 : !> \param work ...
16327 : !> \param nl_a ...
16328 : !> \param nl_b ...
16329 : !> \param nl_c ...
16330 : !> \param nl_d ...
16331 : !> \param sphi_a ...
16332 : !> \param sphi_b ...
16333 : !> \param sphi_c ...
16334 : !> \param sphi_d ...
16335 : !> \param primitives ...
16336 : !> \param buffer1 ...
16337 : !> \param buffer2 ...
16338 : ! **************************************************************************************************
16339 6993377 : SUBROUTINE contract_spps(work, &
16340 : nl_a, nl_b, nl_c, nl_d, &
16341 6993377 : sphi_a, sphi_b, sphi_c, sphi_d, &
16342 6993377 : primitives, &
16343 : buffer1, buffer2)
16344 : REAL(dp), DIMENSION(1*3*3*1), INTENT(IN) :: work
16345 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16346 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16347 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16348 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
16349 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
16350 : REAL(dp), &
16351 : DIMENSION(1*nl_a, 3*nl_b, 3*nl_c, 1*nl_d) :: primitives
16352 : REAL(dp), DIMENSION(1*3*3*1) :: buffer1, buffer2
16353 :
16354 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16355 : kmax, s_offset_a1, s_offset_b1, &
16356 : s_offset_c1, s_offset_d1
16357 :
16358 6993377 : s_offset_a1 = 0
16359 15861712 : DO ia = 1, nl_a
16360 : s_offset_b1 = 0
16361 19551696 : DO ib = 1, nl_b
16362 : s_offset_c1 = 0
16363 25898401 : DO ic = 1, nl_c
16364 : s_offset_d1 = 0
16365 40187453 : DO id = 1, nl_d
16366 24972413 : buffer1 = 0.0_dp
16367 24972413 : imax = 3*3*1
16368 24972413 : kmax = 1
16369 249724130 : DO i = 1, imax
16370 249724130 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16371 : END DO
16372 24972413 : buffer2 = 0.0_dp
16373 24972413 : imax = 1*3*1
16374 24972413 : kmax = 3
16375 99889652 : DO i = 1, imax
16376 74917239 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16377 74917239 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16378 99889652 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16379 : END DO
16380 24972413 : buffer1 = 0.0_dp
16381 24972413 : imax = 1*3*1
16382 24972413 : kmax = 3
16383 99889652 : DO i = 1, imax
16384 74917239 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16385 74917239 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16386 99889652 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
16387 : END DO
16388 99889652 : imax = 1*3*3
16389 99889652 : kmax = 1
16390 : i = 0
16391 99889652 : DO i1 = 1, 3
16392 324641369 : DO i2 = 1, 3
16393 524420673 : DO i3 = 1, 1
16394 224751717 : i = i + 1
16395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
16397 449503434 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
16398 : END DO
16399 : END DO
16400 : END DO
16401 40187453 : s_offset_d1 = s_offset_d1 + 1
16402 : END DO
16403 25898401 : s_offset_c1 = s_offset_c1 + 3
16404 : END DO
16405 19551696 : s_offset_b1 = s_offset_b1 + 3
16406 : END DO
16407 15861712 : s_offset_a1 = s_offset_a1 + 1
16408 : END DO
16409 6993377 : END SUBROUTINE contract_spps
16410 : #endif
16411 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
16412 : ! **************************************************************************************************
16413 : !> \brief ...
16414 : !> \param work ...
16415 : !> \param nl_a ...
16416 : !> \param nl_b ...
16417 : !> \param nl_c ...
16418 : !> \param nl_d ...
16419 : !> \param sphi_a ...
16420 : !> \param sphi_b ...
16421 : !> \param sphi_c ...
16422 : !> \param sphi_d ...
16423 : !> \param primitives ...
16424 : !> \param buffer1 ...
16425 : !> \param buffer2 ...
16426 : ! **************************************************************************************************
16427 7434941 : SUBROUTINE contract_sppp(work, &
16428 : nl_a, nl_b, nl_c, nl_d, &
16429 7434941 : sphi_a, sphi_b, sphi_c, sphi_d, &
16430 7434941 : primitives, &
16431 : buffer1, buffer2)
16432 : REAL(dp), DIMENSION(1*3*3*3), INTENT(IN) :: work
16433 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16434 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16435 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16436 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
16437 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
16438 : REAL(dp), &
16439 : DIMENSION(1*nl_a, 3*nl_b, 3*nl_c, 3*nl_d) :: primitives
16440 : REAL(dp), DIMENSION(1*3*3*3) :: buffer1, buffer2
16441 :
16442 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16443 : kmax, s_offset_a1, s_offset_b1, &
16444 : s_offset_c1, s_offset_d1
16445 :
16446 7434941 : s_offset_a1 = 0
16447 17265675 : DO ia = 1, nl_a
16448 : s_offset_b1 = 0
16449 23152738 : DO ib = 1, nl_b
16450 : s_offset_c1 = 0
16451 34183964 : DO ic = 1, nl_c
16452 : s_offset_d1 = 0
16453 56421209 : DO id = 1, nl_d
16454 35559249 : buffer1 = 0.0_dp
16455 35559249 : imax = 3*3*3
16456 35559249 : kmax = 1
16457 995658972 : DO i = 1, imax
16458 995658972 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16459 : END DO
16460 35559249 : buffer2 = 0.0_dp
16461 35559249 : imax = 1*3*3
16462 35559249 : kmax = 3
16463 355592490 : DO i = 1, imax
16464 320033241 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16465 320033241 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16466 355592490 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16467 : END DO
16468 35559249 : buffer1 = 0.0_dp
16469 35559249 : imax = 1*3*3
16470 35559249 : kmax = 3
16471 355592490 : DO i = 1, imax
16472 320033241 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16473 320033241 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16474 355592490 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
16475 : END DO
16476 142236996 : imax = 1*3*3
16477 142236996 : kmax = 3
16478 : i = 0
16479 142236996 : DO i1 = 1, 3
16480 462270237 : DO i2 = 1, 3
16481 746744229 : DO i3 = 1, 1
16482 320033241 : i = i + 1
16483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
16485 320033241 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
16486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
16488 320033241 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
16491 640066482 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
16492 : END DO
16493 : END DO
16494 : END DO
16495 56421209 : s_offset_d1 = s_offset_d1 + 3
16496 : END DO
16497 34183964 : s_offset_c1 = s_offset_c1 + 3
16498 : END DO
16499 23152738 : s_offset_b1 = s_offset_b1 + 3
16500 : END DO
16501 17265675 : s_offset_a1 = s_offset_a1 + 1
16502 : END DO
16503 7434941 : END SUBROUTINE contract_sppp
16504 : #endif
16505 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
16506 : ! **************************************************************************************************
16507 : !> \brief ...
16508 : !> \param work ...
16509 : !> \param nl_a ...
16510 : !> \param nl_b ...
16511 : !> \param nl_c ...
16512 : !> \param nl_d ...
16513 : !> \param sphi_a ...
16514 : !> \param sphi_b ...
16515 : !> \param sphi_c ...
16516 : !> \param sphi_d ...
16517 : !> \param primitives ...
16518 : !> \param buffer1 ...
16519 : !> \param buffer2 ...
16520 : ! **************************************************************************************************
16521 853405 : SUBROUTINE contract_sppd(work, &
16522 : nl_a, nl_b, nl_c, nl_d, &
16523 853405 : sphi_a, sphi_b, sphi_c, sphi_d, &
16524 853405 : primitives, &
16525 : buffer1, buffer2)
16526 : REAL(dp), DIMENSION(1*3*3*6), INTENT(IN) :: work
16527 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16528 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16529 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16530 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
16531 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
16532 : REAL(dp), &
16533 : DIMENSION(1*nl_a, 3*nl_b, 3*nl_c, 5*nl_d) :: primitives
16534 : REAL(dp), DIMENSION(1*3*3*6) :: buffer1, buffer2
16535 :
16536 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16537 : kmax, s_offset_a1, s_offset_b1, &
16538 : s_offset_c1, s_offset_d1
16539 :
16540 853405 : s_offset_a1 = 0
16541 2134655 : DO ia = 1, nl_a
16542 : s_offset_b1 = 0
16543 2936948 : DO ib = 1, nl_b
16544 : s_offset_c1 = 0
16545 4200019 : DO ic = 1, nl_c
16546 : s_offset_d1 = 0
16547 5212583 : DO id = 1, nl_d
16548 2668262 : buffer1 = 0.0_dp
16549 2668262 : imax = 3*3*6
16550 2668262 : kmax = 1
16551 146754410 : DO i = 1, imax
16552 146754410 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16553 : END DO
16554 2668262 : buffer2 = 0.0_dp
16555 2668262 : imax = 1*3*6
16556 2668262 : kmax = 3
16557 50696978 : DO i = 1, imax
16558 48028716 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16559 48028716 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16560 50696978 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16561 : END DO
16562 2668262 : buffer1 = 0.0_dp
16563 2668262 : imax = 1*3*6
16564 2668262 : kmax = 3
16565 50696978 : DO i = 1, imax
16566 48028716 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16567 48028716 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16568 50696978 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
16569 : END DO
16570 10673048 : imax = 1*3*3
16571 10673048 : kmax = 6
16572 : i = 0
16573 10673048 : DO i1 = 1, 3
16574 34687406 : DO i2 = 1, 3
16575 56033502 : DO i3 = 1, 1
16576 24014358 : i = i + 1
16577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16579 24014358 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
16580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16582 24014358 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
16583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16585 24014358 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16588 24014358 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
16589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16591 24014358 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
16592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16594 24014358 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16597 24014358 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16600 48028716 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
16601 : END DO
16602 : END DO
16603 : END DO
16604 5212583 : s_offset_d1 = s_offset_d1 + 5
16605 : END DO
16606 4200019 : s_offset_c1 = s_offset_c1 + 3
16607 : END DO
16608 2936948 : s_offset_b1 = s_offset_b1 + 3
16609 : END DO
16610 2134655 : s_offset_a1 = s_offset_a1 + 1
16611 : END DO
16612 853405 : END SUBROUTINE contract_sppd
16613 : #endif
16614 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
16615 : ! **************************************************************************************************
16616 : !> \brief ...
16617 : !> \param work ...
16618 : !> \param nl_a ...
16619 : !> \param nl_b ...
16620 : !> \param nl_c ...
16621 : !> \param nl_d ...
16622 : !> \param sphi_a ...
16623 : !> \param sphi_b ...
16624 : !> \param sphi_c ...
16625 : !> \param sphi_d ...
16626 : !> \param primitives ...
16627 : !> \param buffer1 ...
16628 : !> \param buffer2 ...
16629 : ! **************************************************************************************************
16630 : SUBROUTINE contract_sppf(work, &
16631 : nl_a, nl_b, nl_c, nl_d, &
16632 : sphi_a, sphi_b, sphi_c, sphi_d, &
16633 : primitives, &
16634 : buffer1, buffer2)
16635 : REAL(dp), DIMENSION(1*3*3*10), INTENT(IN) :: work
16636 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16637 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16638 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16639 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
16640 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
16641 : REAL(dp), &
16642 : DIMENSION(1*nl_a, 3*nl_b, 3*nl_c, 7*nl_d) :: primitives
16643 : REAL(dp), DIMENSION(1*3*3*10) :: buffer1, buffer2
16644 :
16645 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16646 : kmax, s_offset_a1, s_offset_b1, &
16647 : s_offset_c1, s_offset_d1
16648 :
16649 : s_offset_a1 = 0
16650 : DO ia = 1, nl_a
16651 : s_offset_b1 = 0
16652 : DO ib = 1, nl_b
16653 : s_offset_c1 = 0
16654 : DO ic = 1, nl_c
16655 : s_offset_d1 = 0
16656 : DO id = 1, nl_d
16657 : buffer1 = 0.0_dp
16658 : imax = 3*3*10
16659 : kmax = 1
16660 : DO i = 1, imax
16661 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16662 : END DO
16663 : buffer2 = 0.0_dp
16664 : imax = 1*3*10
16665 : kmax = 3
16666 : DO i = 1, imax
16667 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16668 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16669 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16670 : END DO
16671 : buffer1 = 0.0_dp
16672 : imax = 1*3*10
16673 : kmax = 3
16674 : DO i = 1, imax
16675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16676 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16677 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
16678 : END DO
16679 : imax = 1*3*3
16680 : kmax = 10
16681 : i = 0
16682 : DO i1 = 1, 3
16683 : DO i2 = 1, 3
16684 : DO i3 = 1, 1
16685 : i = i + 1
16686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16688 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
16689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16691 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
16692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16694 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16697 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
16698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16700 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
16701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16703 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
16704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16706 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16709 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
16710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16712 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16715 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
16716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16718 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
16719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16721 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
16722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16724 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
16725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16727 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
16728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16730 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
16731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16733 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
16734 : END DO
16735 : END DO
16736 : END DO
16737 : s_offset_d1 = s_offset_d1 + 7
16738 : END DO
16739 : s_offset_c1 = s_offset_c1 + 3
16740 : END DO
16741 : s_offset_b1 = s_offset_b1 + 3
16742 : END DO
16743 : s_offset_a1 = s_offset_a1 + 1
16744 : END DO
16745 : END SUBROUTINE contract_sppf
16746 : #endif
16747 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
16748 : ! **************************************************************************************************
16749 : !> \brief ...
16750 : !> \param work ...
16751 : !> \param nl_a ...
16752 : !> \param nl_b ...
16753 : !> \param nl_c ...
16754 : !> \param nl_d ...
16755 : !> \param sphi_a ...
16756 : !> \param sphi_b ...
16757 : !> \param sphi_c ...
16758 : !> \param sphi_d ...
16759 : !> \param primitives ...
16760 : !> \param buffer1 ...
16761 : !> \param buffer2 ...
16762 : ! **************************************************************************************************
16763 : SUBROUTINE contract_sppg(work, &
16764 : nl_a, nl_b, nl_c, nl_d, &
16765 : sphi_a, sphi_b, sphi_c, sphi_d, &
16766 : primitives, &
16767 : buffer1, buffer2)
16768 : REAL(dp), DIMENSION(1*3*3*15), INTENT(IN) :: work
16769 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16770 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16771 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16772 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
16773 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
16774 : REAL(dp), &
16775 : DIMENSION(1*nl_a, 3*nl_b, 3*nl_c, 9*nl_d) :: primitives
16776 : REAL(dp), DIMENSION(1*3*3*15) :: buffer1, buffer2
16777 :
16778 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16779 : kmax, s_offset_a1, s_offset_b1, &
16780 : s_offset_c1, s_offset_d1
16781 :
16782 : s_offset_a1 = 0
16783 : DO ia = 1, nl_a
16784 : s_offset_b1 = 0
16785 : DO ib = 1, nl_b
16786 : s_offset_c1 = 0
16787 : DO ic = 1, nl_c
16788 : s_offset_d1 = 0
16789 : DO id = 1, nl_d
16790 : buffer1 = 0.0_dp
16791 : imax = 3*3*15
16792 : kmax = 1
16793 : DO i = 1, imax
16794 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16795 : END DO
16796 : buffer2 = 0.0_dp
16797 : imax = 1*3*15
16798 : kmax = 3
16799 : DO i = 1, imax
16800 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16801 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16802 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16803 : END DO
16804 : buffer1 = 0.0_dp
16805 : imax = 1*3*15
16806 : kmax = 3
16807 : DO i = 1, imax
16808 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16809 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16810 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
16811 : END DO
16812 : imax = 1*3*3
16813 : kmax = 15
16814 : i = 0
16815 : DO i1 = 1, 3
16816 : DO i2 = 1, 3
16817 : DO i3 = 1, 1
16818 : i = i + 1
16819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16821 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
16822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16824 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
16825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16827 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
16828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16830 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
16831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16833 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
16834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16836 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
16837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
16838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
16839 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
16840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16842 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
16843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16845 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
16846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16848 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
16849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16851 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
16852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16854 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
16855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16857 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
16858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
16860 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
16861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16863 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
16864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16866 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
16867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
16868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
16869 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
16870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
16871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
16872 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
16873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
16874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
16875 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
16876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16878 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
16879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16881 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
16882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
16883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
16884 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
16885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
16886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
16887 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
16888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16890 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
16891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16893 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
16894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
16895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
16896 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
16897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
16898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
16899 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
16900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
16901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
16902 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
16903 : END DO
16904 : END DO
16905 : END DO
16906 : s_offset_d1 = s_offset_d1 + 9
16907 : END DO
16908 : s_offset_c1 = s_offset_c1 + 3
16909 : END DO
16910 : s_offset_b1 = s_offset_b1 + 3
16911 : END DO
16912 : s_offset_a1 = s_offset_a1 + 1
16913 : END DO
16914 : END SUBROUTINE contract_sppg
16915 : #endif
16916 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
16917 : ! **************************************************************************************************
16918 : !> \brief ...
16919 : !> \param work ...
16920 : !> \param nl_a ...
16921 : !> \param nl_b ...
16922 : !> \param nl_c ...
16923 : !> \param nl_d ...
16924 : !> \param sphi_a ...
16925 : !> \param sphi_b ...
16926 : !> \param sphi_c ...
16927 : !> \param sphi_d ...
16928 : !> \param primitives ...
16929 : !> \param buffer1 ...
16930 : !> \param buffer2 ...
16931 : ! **************************************************************************************************
16932 1760088 : SUBROUTINE contract_spds(work, &
16933 : nl_a, nl_b, nl_c, nl_d, &
16934 1760088 : sphi_a, sphi_b, sphi_c, sphi_d, &
16935 1760088 : primitives, &
16936 : buffer1, buffer2)
16937 : REAL(dp), DIMENSION(1*3*6*1), INTENT(IN) :: work
16938 : INTEGER :: nl_a, nl_b, nl_c, nl_d
16939 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
16940 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
16941 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
16942 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
16943 : REAL(dp), &
16944 : DIMENSION(1*nl_a, 3*nl_b, 5*nl_c, 1*nl_d) :: primitives
16945 : REAL(dp), DIMENSION(1*3*6*1) :: buffer1, buffer2
16946 :
16947 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
16948 : kmax, s_offset_a1, s_offset_b1, &
16949 : s_offset_c1, s_offset_d1
16950 :
16951 1760088 : s_offset_a1 = 0
16952 4179705 : DO ia = 1, nl_a
16953 : s_offset_b1 = 0
16954 5595512 : DO ib = 1, nl_b
16955 : s_offset_c1 = 0
16956 6434569 : DO ic = 1, nl_c
16957 : s_offset_d1 = 0
16958 8571137 : DO id = 1, nl_d
16959 5312463 : buffer1 = 0.0_dp
16960 5312463 : imax = 3*6*1
16961 5312463 : kmax = 1
16962 100936797 : DO i = 1, imax
16963 100936797 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
16964 : END DO
16965 5312463 : buffer2 = 0.0_dp
16966 5312463 : imax = 1*6*1
16967 5312463 : kmax = 3
16968 37187241 : DO i = 1, imax
16969 31874778 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
16970 31874778 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
16971 37187241 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
16972 : END DO
16973 5312463 : buffer1 = 0.0_dp
16974 5312463 : imax = 1*3*1
16975 5312463 : kmax = 6
16976 21249852 : DO i = 1, imax
16977 15937389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
16978 15937389 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
16979 15937389 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
16980 15937389 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
16981 15937389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
16982 15937389 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
16983 15937389 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
16984 21249852 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
16985 : END DO
16986 31874778 : imax = 1*3*5
16987 31874778 : kmax = 1
16988 : i = 0
16989 31874778 : DO i1 = 1, 5
16990 111561723 : DO i2 = 1, 3
16991 185936205 : DO i3 = 1, 1
16992 79686945 : i = i + 1
16993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
16994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
16995 159373890 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
16996 : END DO
16997 : END DO
16998 : END DO
16999 8571137 : s_offset_d1 = s_offset_d1 + 1
17000 : END DO
17001 6434569 : s_offset_c1 = s_offset_c1 + 5
17002 : END DO
17003 5595512 : s_offset_b1 = s_offset_b1 + 3
17004 : END DO
17005 4179705 : s_offset_a1 = s_offset_a1 + 1
17006 : END DO
17007 1760088 : END SUBROUTINE contract_spds
17008 : #endif
17009 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
17010 : ! **************************************************************************************************
17011 : !> \brief ...
17012 : !> \param work ...
17013 : !> \param nl_a ...
17014 : !> \param nl_b ...
17015 : !> \param nl_c ...
17016 : !> \param nl_d ...
17017 : !> \param sphi_a ...
17018 : !> \param sphi_b ...
17019 : !> \param sphi_c ...
17020 : !> \param sphi_d ...
17021 : !> \param primitives ...
17022 : !> \param buffer1 ...
17023 : !> \param buffer2 ...
17024 : ! **************************************************************************************************
17025 879320 : SUBROUTINE contract_spdp(work, &
17026 : nl_a, nl_b, nl_c, nl_d, &
17027 879320 : sphi_a, sphi_b, sphi_c, sphi_d, &
17028 879320 : primitives, &
17029 : buffer1, buffer2)
17030 : REAL(dp), DIMENSION(1*3*6*3), INTENT(IN) :: work
17031 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17032 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17033 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17034 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
17035 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
17036 : REAL(dp), &
17037 : DIMENSION(1*nl_a, 3*nl_b, 5*nl_c, 3*nl_d) :: primitives
17038 : REAL(dp), DIMENSION(1*3*6*3) :: buffer1, buffer2
17039 :
17040 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17041 : kmax, s_offset_a1, s_offset_b1, &
17042 : s_offset_c1, s_offset_d1
17043 :
17044 879320 : s_offset_a1 = 0
17045 2148370 : DO ia = 1, nl_a
17046 : s_offset_b1 = 0
17047 2911478 : DO ib = 1, nl_b
17048 : s_offset_c1 = 0
17049 3355397 : DO ic = 1, nl_c
17050 : s_offset_d1 = 0
17051 4270972 : DO id = 1, nl_d
17052 2558003 : buffer1 = 0.0_dp
17053 2558003 : imax = 3*6*3
17054 2558003 : kmax = 1
17055 140690165 : DO i = 1, imax
17056 140690165 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17057 : END DO
17058 2558003 : buffer2 = 0.0_dp
17059 2558003 : imax = 1*6*3
17060 2558003 : kmax = 3
17061 48602057 : DO i = 1, imax
17062 46044054 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17063 46044054 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17064 48602057 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17065 : END DO
17066 2558003 : buffer1 = 0.0_dp
17067 2558003 : imax = 1*3*3
17068 2558003 : kmax = 6
17069 25580030 : DO i = 1, imax
17070 23022027 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
17071 23022027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17072 23022027 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17073 23022027 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17074 23022027 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
17075 23022027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17076 23022027 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17077 25580030 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
17078 : END DO
17079 15348018 : imax = 1*3*5
17080 15348018 : kmax = 3
17081 : i = 0
17082 15348018 : DO i1 = 1, 5
17083 53718063 : DO i2 = 1, 3
17084 89530105 : DO i3 = 1, 1
17085 38370045 : i = i + 1
17086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
17088 38370045 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
17089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
17091 38370045 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
17094 76740090 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
17095 : END DO
17096 : END DO
17097 : END DO
17098 4270972 : s_offset_d1 = s_offset_d1 + 3
17099 : END DO
17100 3355397 : s_offset_c1 = s_offset_c1 + 5
17101 : END DO
17102 2911478 : s_offset_b1 = s_offset_b1 + 3
17103 : END DO
17104 2148370 : s_offset_a1 = s_offset_a1 + 1
17105 : END DO
17106 879320 : END SUBROUTINE contract_spdp
17107 : #endif
17108 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
17109 : ! **************************************************************************************************
17110 : !> \brief ...
17111 : !> \param work ...
17112 : !> \param nl_a ...
17113 : !> \param nl_b ...
17114 : !> \param nl_c ...
17115 : !> \param nl_d ...
17116 : !> \param sphi_a ...
17117 : !> \param sphi_b ...
17118 : !> \param sphi_c ...
17119 : !> \param sphi_d ...
17120 : !> \param primitives ...
17121 : !> \param buffer1 ...
17122 : !> \param buffer2 ...
17123 : ! **************************************************************************************************
17124 361169 : SUBROUTINE contract_spdd(work, &
17125 : nl_a, nl_b, nl_c, nl_d, &
17126 361169 : sphi_a, sphi_b, sphi_c, sphi_d, &
17127 361169 : primitives, &
17128 : buffer1, buffer2)
17129 : REAL(dp), DIMENSION(1*3*6*6), INTENT(IN) :: work
17130 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17131 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17132 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17133 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
17134 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
17135 : REAL(dp), &
17136 : DIMENSION(1*nl_a, 3*nl_b, 5*nl_c, 5*nl_d) :: primitives
17137 : REAL(dp), DIMENSION(1*3*6*6) :: buffer1, buffer2
17138 :
17139 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17140 : kmax, s_offset_a1, s_offset_b1, &
17141 : s_offset_c1, s_offset_d1
17142 :
17143 361169 : s_offset_a1 = 0
17144 928457 : DO ia = 1, nl_a
17145 : s_offset_b1 = 0
17146 1337179 : DO ib = 1, nl_b
17147 : s_offset_c1 = 0
17148 1589156 : DO ic = 1, nl_c
17149 : s_offset_d1 = 0
17150 1714142 : DO id = 1, nl_d
17151 894877 : buffer1 = 0.0_dp
17152 894877 : imax = 3*6*6
17153 894877 : kmax = 1
17154 97541593 : DO i = 1, imax
17155 97541593 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17156 : END DO
17157 894877 : buffer2 = 0.0_dp
17158 894877 : imax = 1*6*6
17159 894877 : kmax = 3
17160 33110449 : DO i = 1, imax
17161 32215572 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17162 32215572 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17163 33110449 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17164 : END DO
17165 894877 : buffer1 = 0.0_dp
17166 894877 : imax = 1*3*6
17167 894877 : kmax = 6
17168 17002663 : DO i = 1, imax
17169 16107786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
17170 16107786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17171 16107786 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17172 16107786 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17173 16107786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
17174 16107786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17175 16107786 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17176 17002663 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
17177 : END DO
17178 5369262 : imax = 1*3*5
17179 5369262 : kmax = 6
17180 : i = 0
17181 5369262 : DO i1 = 1, 5
17182 18792417 : DO i2 = 1, 3
17183 31320695 : DO i3 = 1, 1
17184 13423155 : i = i + 1
17185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17187 13423155 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
17188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17190 13423155 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
17191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17193 13423155 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17196 13423155 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
17197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17199 13423155 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
17200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17202 13423155 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
17203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17205 13423155 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
17206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17208 26846310 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
17209 : END DO
17210 : END DO
17211 : END DO
17212 1714142 : s_offset_d1 = s_offset_d1 + 5
17213 : END DO
17214 1589156 : s_offset_c1 = s_offset_c1 + 5
17215 : END DO
17216 1337179 : s_offset_b1 = s_offset_b1 + 3
17217 : END DO
17218 928457 : s_offset_a1 = s_offset_a1 + 1
17219 : END DO
17220 361169 : END SUBROUTINE contract_spdd
17221 : #endif
17222 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
17223 : ! **************************************************************************************************
17224 : !> \brief ...
17225 : !> \param work ...
17226 : !> \param nl_a ...
17227 : !> \param nl_b ...
17228 : !> \param nl_c ...
17229 : !> \param nl_d ...
17230 : !> \param sphi_a ...
17231 : !> \param sphi_b ...
17232 : !> \param sphi_c ...
17233 : !> \param sphi_d ...
17234 : !> \param primitives ...
17235 : !> \param buffer1 ...
17236 : !> \param buffer2 ...
17237 : ! **************************************************************************************************
17238 : SUBROUTINE contract_spdf(work, &
17239 : nl_a, nl_b, nl_c, nl_d, &
17240 : sphi_a, sphi_b, sphi_c, sphi_d, &
17241 : primitives, &
17242 : buffer1, buffer2)
17243 : REAL(dp), DIMENSION(1*3*6*10), INTENT(IN) :: work
17244 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17245 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17246 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17247 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
17248 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
17249 : REAL(dp), &
17250 : DIMENSION(1*nl_a, 3*nl_b, 5*nl_c, 7*nl_d) :: primitives
17251 : REAL(dp), DIMENSION(1*3*6*10) :: buffer1, buffer2
17252 :
17253 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17254 : kmax, s_offset_a1, s_offset_b1, &
17255 : s_offset_c1, s_offset_d1
17256 :
17257 : s_offset_a1 = 0
17258 : DO ia = 1, nl_a
17259 : s_offset_b1 = 0
17260 : DO ib = 1, nl_b
17261 : s_offset_c1 = 0
17262 : DO ic = 1, nl_c
17263 : s_offset_d1 = 0
17264 : DO id = 1, nl_d
17265 : buffer1 = 0.0_dp
17266 : imax = 3*6*10
17267 : kmax = 1
17268 : DO i = 1, imax
17269 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17270 : END DO
17271 : buffer2 = 0.0_dp
17272 : imax = 1*6*10
17273 : kmax = 3
17274 : DO i = 1, imax
17275 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17276 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17277 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17278 : END DO
17279 : buffer1 = 0.0_dp
17280 : imax = 1*3*10
17281 : kmax = 6
17282 : DO i = 1, imax
17283 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
17284 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17285 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17286 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17287 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
17288 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17289 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17290 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
17291 : END DO
17292 : imax = 1*3*5
17293 : kmax = 10
17294 : i = 0
17295 : DO i1 = 1, 5
17296 : DO i2 = 1, 3
17297 : DO i3 = 1, 1
17298 : i = i + 1
17299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17301 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
17302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17304 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
17305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17307 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17310 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
17311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17313 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
17314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17316 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
17317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17319 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
17320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17322 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
17323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17325 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
17326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17328 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
17329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17331 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
17332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17334 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
17335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17337 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
17338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17340 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
17341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17343 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
17344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17346 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
17347 : END DO
17348 : END DO
17349 : END DO
17350 : s_offset_d1 = s_offset_d1 + 7
17351 : END DO
17352 : s_offset_c1 = s_offset_c1 + 5
17353 : END DO
17354 : s_offset_b1 = s_offset_b1 + 3
17355 : END DO
17356 : s_offset_a1 = s_offset_a1 + 1
17357 : END DO
17358 : END SUBROUTINE contract_spdf
17359 : #endif
17360 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
17361 : ! **************************************************************************************************
17362 : !> \brief ...
17363 : !> \param work ...
17364 : !> \param nl_a ...
17365 : !> \param nl_b ...
17366 : !> \param nl_c ...
17367 : !> \param nl_d ...
17368 : !> \param sphi_a ...
17369 : !> \param sphi_b ...
17370 : !> \param sphi_c ...
17371 : !> \param sphi_d ...
17372 : !> \param primitives ...
17373 : !> \param buffer1 ...
17374 : !> \param buffer2 ...
17375 : ! **************************************************************************************************
17376 : SUBROUTINE contract_spdg(work, &
17377 : nl_a, nl_b, nl_c, nl_d, &
17378 : sphi_a, sphi_b, sphi_c, sphi_d, &
17379 : primitives, &
17380 : buffer1, buffer2)
17381 : REAL(dp), DIMENSION(1*3*6*15), INTENT(IN) :: work
17382 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17383 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17384 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17385 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
17386 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
17387 : REAL(dp), &
17388 : DIMENSION(1*nl_a, 3*nl_b, 5*nl_c, 9*nl_d) :: primitives
17389 : REAL(dp), DIMENSION(1*3*6*15) :: buffer1, buffer2
17390 :
17391 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17392 : kmax, s_offset_a1, s_offset_b1, &
17393 : s_offset_c1, s_offset_d1
17394 :
17395 : s_offset_a1 = 0
17396 : DO ia = 1, nl_a
17397 : s_offset_b1 = 0
17398 : DO ib = 1, nl_b
17399 : s_offset_c1 = 0
17400 : DO ic = 1, nl_c
17401 : s_offset_d1 = 0
17402 : DO id = 1, nl_d
17403 : buffer1 = 0.0_dp
17404 : imax = 3*6*15
17405 : kmax = 1
17406 : DO i = 1, imax
17407 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17408 : END DO
17409 : buffer2 = 0.0_dp
17410 : imax = 1*6*15
17411 : kmax = 3
17412 : DO i = 1, imax
17413 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17414 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17415 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17416 : END DO
17417 : buffer1 = 0.0_dp
17418 : imax = 1*3*15
17419 : kmax = 6
17420 : DO i = 1, imax
17421 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
17422 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17423 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17424 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17425 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
17426 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17427 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
17429 : END DO
17430 : imax = 1*3*5
17431 : kmax = 15
17432 : i = 0
17433 : DO i1 = 1, 5
17434 : DO i2 = 1, 3
17435 : DO i3 = 1, 1
17436 : i = i + 1
17437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17439 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
17440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17442 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
17443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
17444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
17445 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
17446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17448 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17451 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
17452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17454 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
17455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
17456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
17457 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
17458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17460 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
17461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
17462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
17463 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
17464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17466 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
17467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17469 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
17470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17472 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
17473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17475 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
17476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17478 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
17479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17481 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
17482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17484 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
17485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
17486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
17487 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
17488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17490 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
17491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17493 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
17494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17496 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
17497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17499 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
17500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
17501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
17502 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
17503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17505 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
17506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17508 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
17509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17511 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
17512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17514 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
17515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17517 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
17518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17520 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
17521 : END DO
17522 : END DO
17523 : END DO
17524 : s_offset_d1 = s_offset_d1 + 9
17525 : END DO
17526 : s_offset_c1 = s_offset_c1 + 5
17527 : END DO
17528 : s_offset_b1 = s_offset_b1 + 3
17529 : END DO
17530 : s_offset_a1 = s_offset_a1 + 1
17531 : END DO
17532 : END SUBROUTINE contract_spdg
17533 : #endif
17534 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
17535 : ! **************************************************************************************************
17536 : !> \brief ...
17537 : !> \param work ...
17538 : !> \param nl_a ...
17539 : !> \param nl_b ...
17540 : !> \param nl_c ...
17541 : !> \param nl_d ...
17542 : !> \param sphi_a ...
17543 : !> \param sphi_b ...
17544 : !> \param sphi_c ...
17545 : !> \param sphi_d ...
17546 : !> \param primitives ...
17547 : !> \param buffer1 ...
17548 : !> \param buffer2 ...
17549 : ! **************************************************************************************************
17550 : SUBROUTINE contract_spfs(work, &
17551 : nl_a, nl_b, nl_c, nl_d, &
17552 : sphi_a, sphi_b, sphi_c, sphi_d, &
17553 : primitives, &
17554 : buffer1, buffer2)
17555 : REAL(dp), DIMENSION(1*3*10*1), INTENT(IN) :: work
17556 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17557 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17558 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17559 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
17560 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
17561 : REAL(dp), &
17562 : DIMENSION(1*nl_a, 3*nl_b, 7*nl_c, 1*nl_d) :: primitives
17563 : REAL(dp), DIMENSION(1*3*10*1) :: buffer1, buffer2
17564 :
17565 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17566 : kmax, s_offset_a1, s_offset_b1, &
17567 : s_offset_c1, s_offset_d1
17568 :
17569 : s_offset_a1 = 0
17570 : DO ia = 1, nl_a
17571 : s_offset_b1 = 0
17572 : DO ib = 1, nl_b
17573 : s_offset_c1 = 0
17574 : DO ic = 1, nl_c
17575 : s_offset_d1 = 0
17576 : DO id = 1, nl_d
17577 : buffer1 = 0.0_dp
17578 : imax = 3*10*1
17579 : kmax = 1
17580 : DO i = 1, imax
17581 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17582 : END DO
17583 : buffer2 = 0.0_dp
17584 : imax = 1*10*1
17585 : kmax = 3
17586 : DO i = 1, imax
17587 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17588 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17589 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17590 : END DO
17591 : buffer1 = 0.0_dp
17592 : imax = 1*3*1
17593 : kmax = 10
17594 : DO i = 1, imax
17595 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17596 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
17597 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17598 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
17599 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17600 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
17601 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17602 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
17603 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
17605 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
17606 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
17607 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
17608 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
17609 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
17610 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
17611 : END DO
17612 : imax = 1*3*7
17613 : kmax = 1
17614 : i = 0
17615 : DO i1 = 1, 7
17616 : DO i2 = 1, 3
17617 : DO i3 = 1, 1
17618 : i = i + 1
17619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
17621 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
17622 : END DO
17623 : END DO
17624 : END DO
17625 : s_offset_d1 = s_offset_d1 + 1
17626 : END DO
17627 : s_offset_c1 = s_offset_c1 + 7
17628 : END DO
17629 : s_offset_b1 = s_offset_b1 + 3
17630 : END DO
17631 : s_offset_a1 = s_offset_a1 + 1
17632 : END DO
17633 : END SUBROUTINE contract_spfs
17634 : #endif
17635 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
17636 : ! **************************************************************************************************
17637 : !> \brief ...
17638 : !> \param work ...
17639 : !> \param nl_a ...
17640 : !> \param nl_b ...
17641 : !> \param nl_c ...
17642 : !> \param nl_d ...
17643 : !> \param sphi_a ...
17644 : !> \param sphi_b ...
17645 : !> \param sphi_c ...
17646 : !> \param sphi_d ...
17647 : !> \param primitives ...
17648 : !> \param buffer1 ...
17649 : !> \param buffer2 ...
17650 : ! **************************************************************************************************
17651 : SUBROUTINE contract_spfp(work, &
17652 : nl_a, nl_b, nl_c, nl_d, &
17653 : sphi_a, sphi_b, sphi_c, sphi_d, &
17654 : primitives, &
17655 : buffer1, buffer2)
17656 : REAL(dp), DIMENSION(1*3*10*3), INTENT(IN) :: work
17657 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17658 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17659 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17660 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
17661 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
17662 : REAL(dp), &
17663 : DIMENSION(1*nl_a, 3*nl_b, 7*nl_c, 3*nl_d) :: primitives
17664 : REAL(dp), DIMENSION(1*3*10*3) :: buffer1, buffer2
17665 :
17666 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17667 : kmax, s_offset_a1, s_offset_b1, &
17668 : s_offset_c1, s_offset_d1
17669 :
17670 : s_offset_a1 = 0
17671 : DO ia = 1, nl_a
17672 : s_offset_b1 = 0
17673 : DO ib = 1, nl_b
17674 : s_offset_c1 = 0
17675 : DO ic = 1, nl_c
17676 : s_offset_d1 = 0
17677 : DO id = 1, nl_d
17678 : buffer1 = 0.0_dp
17679 : imax = 3*10*3
17680 : kmax = 1
17681 : DO i = 1, imax
17682 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17683 : END DO
17684 : buffer2 = 0.0_dp
17685 : imax = 1*10*3
17686 : kmax = 3
17687 : DO i = 1, imax
17688 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17689 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17690 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17691 : END DO
17692 : buffer1 = 0.0_dp
17693 : imax = 1*3*3
17694 : kmax = 10
17695 : DO i = 1, imax
17696 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17697 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
17698 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17699 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
17700 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17701 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
17702 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17703 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
17704 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17705 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
17706 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
17707 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
17708 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
17709 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
17710 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
17711 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
17712 : END DO
17713 : imax = 1*3*7
17714 : kmax = 3
17715 : i = 0
17716 : DO i1 = 1, 7
17717 : DO i2 = 1, 3
17718 : DO i3 = 1, 1
17719 : i = i + 1
17720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
17722 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
17723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
17725 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
17728 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
17729 : END DO
17730 : END DO
17731 : END DO
17732 : s_offset_d1 = s_offset_d1 + 3
17733 : END DO
17734 : s_offset_c1 = s_offset_c1 + 7
17735 : END DO
17736 : s_offset_b1 = s_offset_b1 + 3
17737 : END DO
17738 : s_offset_a1 = s_offset_a1 + 1
17739 : END DO
17740 : END SUBROUTINE contract_spfp
17741 : #endif
17742 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
17743 : ! **************************************************************************************************
17744 : !> \brief ...
17745 : !> \param work ...
17746 : !> \param nl_a ...
17747 : !> \param nl_b ...
17748 : !> \param nl_c ...
17749 : !> \param nl_d ...
17750 : !> \param sphi_a ...
17751 : !> \param sphi_b ...
17752 : !> \param sphi_c ...
17753 : !> \param sphi_d ...
17754 : !> \param primitives ...
17755 : !> \param buffer1 ...
17756 : !> \param buffer2 ...
17757 : ! **************************************************************************************************
17758 : SUBROUTINE contract_spfd(work, &
17759 : nl_a, nl_b, nl_c, nl_d, &
17760 : sphi_a, sphi_b, sphi_c, sphi_d, &
17761 : primitives, &
17762 : buffer1, buffer2)
17763 : REAL(dp), DIMENSION(1*3*10*6), INTENT(IN) :: work
17764 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17765 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17766 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17767 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
17768 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
17769 : REAL(dp), &
17770 : DIMENSION(1*nl_a, 3*nl_b, 7*nl_c, 5*nl_d) :: primitives
17771 : REAL(dp), DIMENSION(1*3*10*6) :: buffer1, buffer2
17772 :
17773 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17774 : kmax, s_offset_a1, s_offset_b1, &
17775 : s_offset_c1, s_offset_d1
17776 :
17777 : s_offset_a1 = 0
17778 : DO ia = 1, nl_a
17779 : s_offset_b1 = 0
17780 : DO ib = 1, nl_b
17781 : s_offset_c1 = 0
17782 : DO ic = 1, nl_c
17783 : s_offset_d1 = 0
17784 : DO id = 1, nl_d
17785 : buffer1 = 0.0_dp
17786 : imax = 3*10*6
17787 : kmax = 1
17788 : DO i = 1, imax
17789 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17790 : END DO
17791 : buffer2 = 0.0_dp
17792 : imax = 1*10*6
17793 : kmax = 3
17794 : DO i = 1, imax
17795 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17796 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17797 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17798 : END DO
17799 : buffer1 = 0.0_dp
17800 : imax = 1*3*6
17801 : kmax = 10
17802 : DO i = 1, imax
17803 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17804 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
17805 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17806 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
17807 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17808 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
17809 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17810 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
17811 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17812 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
17813 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
17814 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
17815 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
17816 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
17817 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
17818 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
17819 : END DO
17820 : imax = 1*3*7
17821 : kmax = 6
17822 : i = 0
17823 : DO i1 = 1, 7
17824 : DO i2 = 1, 3
17825 : DO i3 = 1, 1
17826 : i = i + 1
17827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17829 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
17830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17832 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
17833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17835 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17838 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
17839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17841 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
17842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17844 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
17845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17847 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
17848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17850 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
17851 : END DO
17852 : END DO
17853 : END DO
17854 : s_offset_d1 = s_offset_d1 + 5
17855 : END DO
17856 : s_offset_c1 = s_offset_c1 + 7
17857 : END DO
17858 : s_offset_b1 = s_offset_b1 + 3
17859 : END DO
17860 : s_offset_a1 = s_offset_a1 + 1
17861 : END DO
17862 : END SUBROUTINE contract_spfd
17863 : #endif
17864 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
17865 : ! **************************************************************************************************
17866 : !> \brief ...
17867 : !> \param work ...
17868 : !> \param nl_a ...
17869 : !> \param nl_b ...
17870 : !> \param nl_c ...
17871 : !> \param nl_d ...
17872 : !> \param sphi_a ...
17873 : !> \param sphi_b ...
17874 : !> \param sphi_c ...
17875 : !> \param sphi_d ...
17876 : !> \param primitives ...
17877 : !> \param buffer1 ...
17878 : !> \param buffer2 ...
17879 : ! **************************************************************************************************
17880 : SUBROUTINE contract_spff(work, &
17881 : nl_a, nl_b, nl_c, nl_d, &
17882 : sphi_a, sphi_b, sphi_c, sphi_d, &
17883 : primitives, &
17884 : buffer1, buffer2)
17885 : REAL(dp), DIMENSION(1*3*10*10), INTENT(IN) :: work
17886 : INTEGER :: nl_a, nl_b, nl_c, nl_d
17887 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
17888 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
17889 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
17890 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
17891 : REAL(dp), &
17892 : DIMENSION(1*nl_a, 3*nl_b, 7*nl_c, 7*nl_d) :: primitives
17893 : REAL(dp), DIMENSION(1*3*10*10) :: buffer1, buffer2
17894 :
17895 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
17896 : kmax, s_offset_a1, s_offset_b1, &
17897 : s_offset_c1, s_offset_d1
17898 :
17899 : s_offset_a1 = 0
17900 : DO ia = 1, nl_a
17901 : s_offset_b1 = 0
17902 : DO ib = 1, nl_b
17903 : s_offset_c1 = 0
17904 : DO ic = 1, nl_c
17905 : s_offset_d1 = 0
17906 : DO id = 1, nl_d
17907 : buffer1 = 0.0_dp
17908 : imax = 3*10*10
17909 : kmax = 1
17910 : DO i = 1, imax
17911 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
17912 : END DO
17913 : buffer2 = 0.0_dp
17914 : imax = 1*10*10
17915 : kmax = 3
17916 : DO i = 1, imax
17917 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
17918 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
17919 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
17920 : END DO
17921 : buffer1 = 0.0_dp
17922 : imax = 1*3*10
17923 : kmax = 10
17924 : DO i = 1, imax
17925 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
17926 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
17927 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
17928 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
17929 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
17930 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
17931 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
17932 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
17933 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
17934 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
17935 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
17936 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
17937 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
17938 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
17939 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
17940 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
17941 : END DO
17942 : imax = 1*3*7
17943 : kmax = 10
17944 : i = 0
17945 : DO i1 = 1, 7
17946 : DO i2 = 1, 3
17947 : DO i3 = 1, 1
17948 : i = i + 1
17949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17951 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
17952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17954 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
17955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17957 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
17958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17960 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
17961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17963 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
17964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17966 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
17967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17969 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
17970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
17971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
17972 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
17973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
17974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
17975 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
17976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
17977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
17978 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
17979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
17980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
17981 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
17982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17984 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
17985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17987 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
17988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
17989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
17990 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
17991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
17992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
17993 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
17994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
17995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
17996 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
17997 : END DO
17998 : END DO
17999 : END DO
18000 : s_offset_d1 = s_offset_d1 + 7
18001 : END DO
18002 : s_offset_c1 = s_offset_c1 + 7
18003 : END DO
18004 : s_offset_b1 = s_offset_b1 + 3
18005 : END DO
18006 : s_offset_a1 = s_offset_a1 + 1
18007 : END DO
18008 : END SUBROUTINE contract_spff
18009 : #endif
18010 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18011 : ! **************************************************************************************************
18012 : !> \brief ...
18013 : !> \param work ...
18014 : !> \param nl_a ...
18015 : !> \param nl_b ...
18016 : !> \param nl_c ...
18017 : !> \param nl_d ...
18018 : !> \param sphi_a ...
18019 : !> \param sphi_b ...
18020 : !> \param sphi_c ...
18021 : !> \param sphi_d ...
18022 : !> \param primitives ...
18023 : !> \param buffer1 ...
18024 : !> \param buffer2 ...
18025 : ! **************************************************************************************************
18026 : SUBROUTINE contract_spfg(work, &
18027 : nl_a, nl_b, nl_c, nl_d, &
18028 : sphi_a, sphi_b, sphi_c, sphi_d, &
18029 : primitives, &
18030 : buffer1, buffer2)
18031 : REAL(dp), DIMENSION(1*3*10*15), INTENT(IN) :: work
18032 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18033 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18034 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18035 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
18036 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
18037 : REAL(dp), &
18038 : DIMENSION(1*nl_a, 3*nl_b, 7*nl_c, 9*nl_d) :: primitives
18039 : REAL(dp), DIMENSION(1*3*10*15) :: buffer1, buffer2
18040 :
18041 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18042 : kmax, s_offset_a1, s_offset_b1, &
18043 : s_offset_c1, s_offset_d1
18044 :
18045 : s_offset_a1 = 0
18046 : DO ia = 1, nl_a
18047 : s_offset_b1 = 0
18048 : DO ib = 1, nl_b
18049 : s_offset_c1 = 0
18050 : DO ic = 1, nl_c
18051 : s_offset_d1 = 0
18052 : DO id = 1, nl_d
18053 : buffer1 = 0.0_dp
18054 : imax = 3*10*15
18055 : kmax = 1
18056 : DO i = 1, imax
18057 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18058 : END DO
18059 : buffer2 = 0.0_dp
18060 : imax = 1*10*15
18061 : kmax = 3
18062 : DO i = 1, imax
18063 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18064 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18065 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18066 : END DO
18067 : buffer1 = 0.0_dp
18068 : imax = 1*3*15
18069 : kmax = 10
18070 : DO i = 1, imax
18071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18072 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18073 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18074 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18075 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
18076 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18077 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18078 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
18079 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18080 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18081 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18082 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18083 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
18084 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18086 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
18087 : END DO
18088 : imax = 1*3*7
18089 : kmax = 15
18090 : i = 0
18091 : DO i1 = 1, 7
18092 : DO i2 = 1, 3
18093 : DO i3 = 1, 1
18094 : i = i + 1
18095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18097 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
18098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18100 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
18101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18103 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
18104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18106 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
18107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18109 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
18110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18112 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
18113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
18114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
18115 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
18116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18118 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
18119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18121 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
18122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18124 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
18125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18127 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
18128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18130 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
18131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18133 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
18134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18136 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
18137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18139 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
18140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18142 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
18143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
18144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
18145 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
18146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18148 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
18149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18151 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
18152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18154 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
18155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18157 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
18158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18160 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
18161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18163 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
18164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18166 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
18167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18169 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
18170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18172 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
18173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18175 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
18176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18178 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
18179 : END DO
18180 : END DO
18181 : END DO
18182 : s_offset_d1 = s_offset_d1 + 9
18183 : END DO
18184 : s_offset_c1 = s_offset_c1 + 7
18185 : END DO
18186 : s_offset_b1 = s_offset_b1 + 3
18187 : END DO
18188 : s_offset_a1 = s_offset_a1 + 1
18189 : END DO
18190 : END SUBROUTINE contract_spfg
18191 : #endif
18192 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18193 : ! **************************************************************************************************
18194 : !> \brief ...
18195 : !> \param work ...
18196 : !> \param nl_a ...
18197 : !> \param nl_b ...
18198 : !> \param nl_c ...
18199 : !> \param nl_d ...
18200 : !> \param sphi_a ...
18201 : !> \param sphi_b ...
18202 : !> \param sphi_c ...
18203 : !> \param sphi_d ...
18204 : !> \param primitives ...
18205 : !> \param buffer1 ...
18206 : !> \param buffer2 ...
18207 : ! **************************************************************************************************
18208 : SUBROUTINE contract_spgs(work, &
18209 : nl_a, nl_b, nl_c, nl_d, &
18210 : sphi_a, sphi_b, sphi_c, sphi_d, &
18211 : primitives, &
18212 : buffer1, buffer2)
18213 : REAL(dp), DIMENSION(1*3*15*1), INTENT(IN) :: work
18214 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18215 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18216 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18217 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
18218 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
18219 : REAL(dp), &
18220 : DIMENSION(1*nl_a, 3*nl_b, 9*nl_c, 1*nl_d) :: primitives
18221 : REAL(dp), DIMENSION(1*3*15*1) :: buffer1, buffer2
18222 :
18223 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18224 : kmax, s_offset_a1, s_offset_b1, &
18225 : s_offset_c1, s_offset_d1
18226 :
18227 : s_offset_a1 = 0
18228 : DO ia = 1, nl_a
18229 : s_offset_b1 = 0
18230 : DO ib = 1, nl_b
18231 : s_offset_c1 = 0
18232 : DO ic = 1, nl_c
18233 : s_offset_d1 = 0
18234 : DO id = 1, nl_d
18235 : buffer1 = 0.0_dp
18236 : imax = 3*15*1
18237 : kmax = 1
18238 : DO i = 1, imax
18239 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18240 : END DO
18241 : buffer2 = 0.0_dp
18242 : imax = 1*15*1
18243 : kmax = 3
18244 : DO i = 1, imax
18245 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18246 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18247 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18248 : END DO
18249 : buffer1 = 0.0_dp
18250 : imax = 1*3*1
18251 : kmax = 15
18252 : DO i = 1, imax
18253 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18254 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18255 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
18256 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18257 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18258 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18259 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
18260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18261 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
18262 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
18264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18265 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
18266 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18267 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18268 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18269 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
18270 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18271 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
18272 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
18273 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
18274 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
18275 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
18276 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
18277 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
18278 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
18279 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
18280 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
18281 : END DO
18282 : imax = 1*3*9
18283 : kmax = 1
18284 : i = 0
18285 : DO i1 = 1, 9
18286 : DO i2 = 1, 3
18287 : DO i3 = 1, 1
18288 : i = i + 1
18289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
18291 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
18292 : END DO
18293 : END DO
18294 : END DO
18295 : s_offset_d1 = s_offset_d1 + 1
18296 : END DO
18297 : s_offset_c1 = s_offset_c1 + 9
18298 : END DO
18299 : s_offset_b1 = s_offset_b1 + 3
18300 : END DO
18301 : s_offset_a1 = s_offset_a1 + 1
18302 : END DO
18303 : END SUBROUTINE contract_spgs
18304 : #endif
18305 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18306 : ! **************************************************************************************************
18307 : !> \brief ...
18308 : !> \param work ...
18309 : !> \param nl_a ...
18310 : !> \param nl_b ...
18311 : !> \param nl_c ...
18312 : !> \param nl_d ...
18313 : !> \param sphi_a ...
18314 : !> \param sphi_b ...
18315 : !> \param sphi_c ...
18316 : !> \param sphi_d ...
18317 : !> \param primitives ...
18318 : !> \param buffer1 ...
18319 : !> \param buffer2 ...
18320 : ! **************************************************************************************************
18321 : SUBROUTINE contract_spgp(work, &
18322 : nl_a, nl_b, nl_c, nl_d, &
18323 : sphi_a, sphi_b, sphi_c, sphi_d, &
18324 : primitives, &
18325 : buffer1, buffer2)
18326 : REAL(dp), DIMENSION(1*3*15*3), INTENT(IN) :: work
18327 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18328 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18329 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18330 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
18331 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
18332 : REAL(dp), &
18333 : DIMENSION(1*nl_a, 3*nl_b, 9*nl_c, 3*nl_d) :: primitives
18334 : REAL(dp), DIMENSION(1*3*15*3) :: buffer1, buffer2
18335 :
18336 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18337 : kmax, s_offset_a1, s_offset_b1, &
18338 : s_offset_c1, s_offset_d1
18339 :
18340 : s_offset_a1 = 0
18341 : DO ia = 1, nl_a
18342 : s_offset_b1 = 0
18343 : DO ib = 1, nl_b
18344 : s_offset_c1 = 0
18345 : DO ic = 1, nl_c
18346 : s_offset_d1 = 0
18347 : DO id = 1, nl_d
18348 : buffer1 = 0.0_dp
18349 : imax = 3*15*3
18350 : kmax = 1
18351 : DO i = 1, imax
18352 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18353 : END DO
18354 : buffer2 = 0.0_dp
18355 : imax = 1*15*3
18356 : kmax = 3
18357 : DO i = 1, imax
18358 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18359 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18360 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18361 : END DO
18362 : buffer1 = 0.0_dp
18363 : imax = 1*3*3
18364 : kmax = 15
18365 : DO i = 1, imax
18366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18367 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18368 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
18369 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18372 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
18373 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18374 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
18375 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
18377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18378 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
18379 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18380 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18381 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18382 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
18383 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18384 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
18385 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
18386 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
18387 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
18388 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
18389 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
18390 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
18391 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
18392 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
18393 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
18394 : END DO
18395 : imax = 1*3*9
18396 : kmax = 3
18397 : i = 0
18398 : DO i1 = 1, 9
18399 : DO i2 = 1, 3
18400 : DO i3 = 1, 1
18401 : i = i + 1
18402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18403 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
18404 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
18405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
18407 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
18408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
18410 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
18411 : END DO
18412 : END DO
18413 : END DO
18414 : s_offset_d1 = s_offset_d1 + 3
18415 : END DO
18416 : s_offset_c1 = s_offset_c1 + 9
18417 : END DO
18418 : s_offset_b1 = s_offset_b1 + 3
18419 : END DO
18420 : s_offset_a1 = s_offset_a1 + 1
18421 : END DO
18422 : END SUBROUTINE contract_spgp
18423 : #endif
18424 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18425 : ! **************************************************************************************************
18426 : !> \brief ...
18427 : !> \param work ...
18428 : !> \param nl_a ...
18429 : !> \param nl_b ...
18430 : !> \param nl_c ...
18431 : !> \param nl_d ...
18432 : !> \param sphi_a ...
18433 : !> \param sphi_b ...
18434 : !> \param sphi_c ...
18435 : !> \param sphi_d ...
18436 : !> \param primitives ...
18437 : !> \param buffer1 ...
18438 : !> \param buffer2 ...
18439 : ! **************************************************************************************************
18440 : SUBROUTINE contract_spgd(work, &
18441 : nl_a, nl_b, nl_c, nl_d, &
18442 : sphi_a, sphi_b, sphi_c, sphi_d, &
18443 : primitives, &
18444 : buffer1, buffer2)
18445 : REAL(dp), DIMENSION(1*3*15*6), INTENT(IN) :: work
18446 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18447 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18448 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18449 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
18450 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
18451 : REAL(dp), &
18452 : DIMENSION(1*nl_a, 3*nl_b, 9*nl_c, 5*nl_d) :: primitives
18453 : REAL(dp), DIMENSION(1*3*15*6) :: buffer1, buffer2
18454 :
18455 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18456 : kmax, s_offset_a1, s_offset_b1, &
18457 : s_offset_c1, s_offset_d1
18458 :
18459 : s_offset_a1 = 0
18460 : DO ia = 1, nl_a
18461 : s_offset_b1 = 0
18462 : DO ib = 1, nl_b
18463 : s_offset_c1 = 0
18464 : DO ic = 1, nl_c
18465 : s_offset_d1 = 0
18466 : DO id = 1, nl_d
18467 : buffer1 = 0.0_dp
18468 : imax = 3*15*6
18469 : kmax = 1
18470 : DO i = 1, imax
18471 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18472 : END DO
18473 : buffer2 = 0.0_dp
18474 : imax = 1*15*6
18475 : kmax = 3
18476 : DO i = 1, imax
18477 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18478 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18479 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18480 : END DO
18481 : buffer1 = 0.0_dp
18482 : imax = 1*3*6
18483 : kmax = 15
18484 : DO i = 1, imax
18485 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18486 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18487 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
18488 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18489 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18490 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18491 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
18492 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18493 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
18494 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18495 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
18496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18497 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
18498 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18499 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18500 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18501 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
18502 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18503 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
18504 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
18505 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
18506 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
18507 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
18508 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
18509 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
18510 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
18511 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
18512 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
18513 : END DO
18514 : imax = 1*3*9
18515 : kmax = 6
18516 : i = 0
18517 : DO i1 = 1, 9
18518 : DO i2 = 1, 3
18519 : DO i3 = 1, 1
18520 : i = i + 1
18521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18523 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
18524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18526 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
18527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18529 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
18530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18532 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
18533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18535 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
18536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18538 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
18539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18541 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
18542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18544 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
18545 : END DO
18546 : END DO
18547 : END DO
18548 : s_offset_d1 = s_offset_d1 + 5
18549 : END DO
18550 : s_offset_c1 = s_offset_c1 + 9
18551 : END DO
18552 : s_offset_b1 = s_offset_b1 + 3
18553 : END DO
18554 : s_offset_a1 = s_offset_a1 + 1
18555 : END DO
18556 : END SUBROUTINE contract_spgd
18557 : #endif
18558 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18559 : ! **************************************************************************************************
18560 : !> \brief ...
18561 : !> \param work ...
18562 : !> \param nl_a ...
18563 : !> \param nl_b ...
18564 : !> \param nl_c ...
18565 : !> \param nl_d ...
18566 : !> \param sphi_a ...
18567 : !> \param sphi_b ...
18568 : !> \param sphi_c ...
18569 : !> \param sphi_d ...
18570 : !> \param primitives ...
18571 : !> \param buffer1 ...
18572 : !> \param buffer2 ...
18573 : ! **************************************************************************************************
18574 : SUBROUTINE contract_spgf(work, &
18575 : nl_a, nl_b, nl_c, nl_d, &
18576 : sphi_a, sphi_b, sphi_c, sphi_d, &
18577 : primitives, &
18578 : buffer1, buffer2)
18579 : REAL(dp), DIMENSION(1*3*15*10), INTENT(IN) :: work
18580 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18581 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18582 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18583 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
18584 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
18585 : REAL(dp), &
18586 : DIMENSION(1*nl_a, 3*nl_b, 9*nl_c, 7*nl_d) :: primitives
18587 : REAL(dp), DIMENSION(1*3*15*10) :: buffer1, buffer2
18588 :
18589 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18590 : kmax, s_offset_a1, s_offset_b1, &
18591 : s_offset_c1, s_offset_d1
18592 :
18593 : s_offset_a1 = 0
18594 : DO ia = 1, nl_a
18595 : s_offset_b1 = 0
18596 : DO ib = 1, nl_b
18597 : s_offset_c1 = 0
18598 : DO ic = 1, nl_c
18599 : s_offset_d1 = 0
18600 : DO id = 1, nl_d
18601 : buffer1 = 0.0_dp
18602 : imax = 3*15*10
18603 : kmax = 1
18604 : DO i = 1, imax
18605 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18606 : END DO
18607 : buffer2 = 0.0_dp
18608 : imax = 1*15*10
18609 : kmax = 3
18610 : DO i = 1, imax
18611 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18612 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18613 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18614 : END DO
18615 : buffer1 = 0.0_dp
18616 : imax = 1*3*10
18617 : kmax = 15
18618 : DO i = 1, imax
18619 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18620 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18621 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
18622 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18623 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18624 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18625 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
18626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18627 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
18628 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18629 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
18630 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18631 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
18632 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18633 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18634 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18635 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
18636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18637 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
18638 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
18639 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
18640 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
18641 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
18642 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
18643 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
18644 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
18645 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
18646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
18647 : END DO
18648 : imax = 1*3*9
18649 : kmax = 10
18650 : i = 0
18651 : DO i1 = 1, 9
18652 : DO i2 = 1, 3
18653 : DO i3 = 1, 1
18654 : i = i + 1
18655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18657 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
18658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18660 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
18661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18663 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
18664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18666 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
18667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18669 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
18670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18672 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
18673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18675 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
18676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18678 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
18679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18681 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
18682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18684 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
18685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18687 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
18688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18690 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
18691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18693 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
18694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18696 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
18697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18699 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
18700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18702 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
18703 : END DO
18704 : END DO
18705 : END DO
18706 : s_offset_d1 = s_offset_d1 + 7
18707 : END DO
18708 : s_offset_c1 = s_offset_c1 + 9
18709 : END DO
18710 : s_offset_b1 = s_offset_b1 + 3
18711 : END DO
18712 : s_offset_a1 = s_offset_a1 + 1
18713 : END DO
18714 : END SUBROUTINE contract_spgf
18715 : #endif
18716 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
18717 : ! **************************************************************************************************
18718 : !> \brief ...
18719 : !> \param work ...
18720 : !> \param nl_a ...
18721 : !> \param nl_b ...
18722 : !> \param nl_c ...
18723 : !> \param nl_d ...
18724 : !> \param sphi_a ...
18725 : !> \param sphi_b ...
18726 : !> \param sphi_c ...
18727 : !> \param sphi_d ...
18728 : !> \param primitives ...
18729 : !> \param buffer1 ...
18730 : !> \param buffer2 ...
18731 : ! **************************************************************************************************
18732 : SUBROUTINE contract_spgg(work, &
18733 : nl_a, nl_b, nl_c, nl_d, &
18734 : sphi_a, sphi_b, sphi_c, sphi_d, &
18735 : primitives, &
18736 : buffer1, buffer2)
18737 : REAL(dp), DIMENSION(1*3*15*15), INTENT(IN) :: work
18738 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18739 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18740 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
18741 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
18742 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
18743 : REAL(dp), &
18744 : DIMENSION(1*nl_a, 3*nl_b, 9*nl_c, 9*nl_d) :: primitives
18745 : REAL(dp), DIMENSION(1*3*15*15) :: buffer1, buffer2
18746 :
18747 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18748 : kmax, s_offset_a1, s_offset_b1, &
18749 : s_offset_c1, s_offset_d1
18750 :
18751 : s_offset_a1 = 0
18752 : DO ia = 1, nl_a
18753 : s_offset_b1 = 0
18754 : DO ib = 1, nl_b
18755 : s_offset_c1 = 0
18756 : DO ic = 1, nl_c
18757 : s_offset_d1 = 0
18758 : DO id = 1, nl_d
18759 : buffer1 = 0.0_dp
18760 : imax = 3*15*15
18761 : kmax = 1
18762 : DO i = 1, imax
18763 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18764 : END DO
18765 : buffer2 = 0.0_dp
18766 : imax = 1*15*15
18767 : kmax = 3
18768 : DO i = 1, imax
18769 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18770 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18771 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
18772 : END DO
18773 : buffer1 = 0.0_dp
18774 : imax = 1*3*15
18775 : kmax = 15
18776 : DO i = 1, imax
18777 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
18778 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
18779 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
18780 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
18781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
18782 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
18783 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
18784 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
18785 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
18786 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
18787 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
18788 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
18789 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
18790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
18791 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
18792 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
18793 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
18794 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
18795 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
18796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
18797 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
18798 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
18799 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
18800 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
18801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
18802 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
18803 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
18804 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
18805 : END DO
18806 : imax = 1*3*9
18807 : kmax = 15
18808 : i = 0
18809 : DO i1 = 1, 9
18810 : DO i2 = 1, 3
18811 : DO i3 = 1, 1
18812 : i = i + 1
18813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18815 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
18816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18818 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
18819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18821 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
18822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18824 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
18825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18827 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
18828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18830 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
18831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
18832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
18833 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
18834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18836 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
18837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18839 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
18840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18842 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
18843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18845 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
18846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18848 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
18849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18851 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
18852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
18854 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
18855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18857 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
18858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18860 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
18861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
18862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
18863 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
18864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
18865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
18866 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
18867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
18868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
18869 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
18870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18872 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
18873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18875 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
18876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
18877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
18878 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
18879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
18880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
18881 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
18882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18884 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
18885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18887 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
18888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
18889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
18890 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
18891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
18892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
18893 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
18894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
18895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
18896 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
18897 : END DO
18898 : END DO
18899 : END DO
18900 : s_offset_d1 = s_offset_d1 + 9
18901 : END DO
18902 : s_offset_c1 = s_offset_c1 + 9
18903 : END DO
18904 : s_offset_b1 = s_offset_b1 + 3
18905 : END DO
18906 : s_offset_a1 = s_offset_a1 + 1
18907 : END DO
18908 : END SUBROUTINE contract_spgg
18909 : #endif
18910 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
18911 : ! **************************************************************************************************
18912 : !> \brief ...
18913 : !> \param work ...
18914 : !> \param nl_a ...
18915 : !> \param nl_b ...
18916 : !> \param nl_c ...
18917 : !> \param nl_d ...
18918 : !> \param sphi_a ...
18919 : !> \param sphi_b ...
18920 : !> \param sphi_c ...
18921 : !> \param sphi_d ...
18922 : !> \param primitives ...
18923 : !> \param buffer1 ...
18924 : !> \param buffer2 ...
18925 : ! **************************************************************************************************
18926 1574076 : SUBROUTINE contract_sdss(work, &
18927 : nl_a, nl_b, nl_c, nl_d, &
18928 1574076 : sphi_a, sphi_b, sphi_c, sphi_d, &
18929 1574076 : primitives, &
18930 : buffer1, buffer2)
18931 : REAL(dp), DIMENSION(1*6*1*1), INTENT(IN) :: work
18932 : INTEGER :: nl_a, nl_b, nl_c, nl_d
18933 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
18934 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
18935 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
18936 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
18937 : REAL(dp), &
18938 : DIMENSION(1*nl_a, 5*nl_b, 1*nl_c, 1*nl_d) :: primitives
18939 : REAL(dp), DIMENSION(1*6*1*1) :: buffer1, buffer2
18940 :
18941 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
18942 : kmax, s_offset_a1, s_offset_b1, &
18943 : s_offset_c1, s_offset_d1
18944 :
18945 1574076 : s_offset_a1 = 0
18946 3910468 : DO ia = 1, nl_a
18947 : s_offset_b1 = 0
18948 5012515 : DO ib = 1, nl_b
18949 : s_offset_c1 = 0
18950 6908357 : DO ic = 1, nl_c
18951 : s_offset_d1 = 0
18952 11470098 : DO id = 1, nl_d
18953 7237864 : buffer1 = 0.0_dp
18954 7237864 : imax = 6*1*1
18955 7237864 : kmax = 1
18956 50665048 : DO i = 1, imax
18957 50665048 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
18958 : END DO
18959 7237864 : buffer2 = 0.0_dp
18960 7237864 : imax = 1*1*1
18961 7237864 : kmax = 6
18962 14475728 : DO i = 1, imax
18963 7237864 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
18964 7237864 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
18965 7237864 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
18966 7237864 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
18967 7237864 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
18968 7237864 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
18969 7237864 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
18970 14475728 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
18971 : END DO
18972 7237864 : buffer1 = 0.0_dp
18973 7237864 : imax = 1*5*1
18974 7237864 : kmax = 1
18975 43427184 : DO i = 1, imax
18976 43427184 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
18977 : END DO
18978 14475728 : imax = 1*5*1
18979 14475728 : kmax = 1
18980 : i = 0
18981 14475728 : DO i1 = 1, 1
18982 50665048 : DO i2 = 1, 5
18983 79616504 : DO i3 = 1, 1
18984 36189320 : i = i + 1
18985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
18986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
18987 72378640 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
18988 : END DO
18989 : END DO
18990 : END DO
18991 11470098 : s_offset_d1 = s_offset_d1 + 1
18992 : END DO
18993 6908357 : s_offset_c1 = s_offset_c1 + 1
18994 : END DO
18995 5012515 : s_offset_b1 = s_offset_b1 + 5
18996 : END DO
18997 3910468 : s_offset_a1 = s_offset_a1 + 1
18998 : END DO
18999 1574076 : END SUBROUTINE contract_sdss
19000 : #endif
19001 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
19002 : ! **************************************************************************************************
19003 : !> \brief ...
19004 : !> \param work ...
19005 : !> \param nl_a ...
19006 : !> \param nl_b ...
19007 : !> \param nl_c ...
19008 : !> \param nl_d ...
19009 : !> \param sphi_a ...
19010 : !> \param sphi_b ...
19011 : !> \param sphi_c ...
19012 : !> \param sphi_d ...
19013 : !> \param primitives ...
19014 : !> \param buffer1 ...
19015 : !> \param buffer2 ...
19016 : ! **************************************************************************************************
19017 1355850 : SUBROUTINE contract_sdsp(work, &
19018 : nl_a, nl_b, nl_c, nl_d, &
19019 1355850 : sphi_a, sphi_b, sphi_c, sphi_d, &
19020 1355850 : primitives, &
19021 : buffer1, buffer2)
19022 : REAL(dp), DIMENSION(1*6*1*3), INTENT(IN) :: work
19023 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19024 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19025 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19026 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
19027 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
19028 : REAL(dp), &
19029 : DIMENSION(1*nl_a, 5*nl_b, 1*nl_c, 3*nl_d) :: primitives
19030 : REAL(dp), DIMENSION(1*6*1*3) :: buffer1, buffer2
19031 :
19032 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19033 : kmax, s_offset_a1, s_offset_b1, &
19034 : s_offset_c1, s_offset_d1
19035 :
19036 1355850 : s_offset_a1 = 0
19037 3502220 : DO ia = 1, nl_a
19038 : s_offset_b1 = 0
19039 4569451 : DO ib = 1, nl_b
19040 : s_offset_c1 = 0
19041 6461782 : DO ic = 1, nl_c
19042 : s_offset_d1 = 0
19043 9825181 : DO id = 1, nl_d
19044 5786480 : buffer1 = 0.0_dp
19045 5786480 : imax = 6*1*3
19046 5786480 : kmax = 1
19047 109943120 : DO i = 1, imax
19048 109943120 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19049 : END DO
19050 5786480 : buffer2 = 0.0_dp
19051 5786480 : imax = 1*1*3
19052 5786480 : kmax = 6
19053 23145920 : DO i = 1, imax
19054 17359440 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19055 17359440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19056 17359440 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19057 17359440 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19058 17359440 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19059 17359440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19060 17359440 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19061 23145920 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19062 : END DO
19063 5786480 : buffer1 = 0.0_dp
19064 5786480 : imax = 1*5*3
19065 5786480 : kmax = 1
19066 92583680 : DO i = 1, imax
19067 92583680 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
19068 : END DO
19069 11572960 : imax = 1*5*1
19070 11572960 : kmax = 3
19071 : i = 0
19072 11572960 : DO i1 = 1, 1
19073 40505360 : DO i2 = 1, 5
19074 63651280 : DO i3 = 1, 1
19075 28932400 : i = i + 1
19076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
19078 28932400 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
19079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
19081 28932400 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
19084 57864800 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
19085 : END DO
19086 : END DO
19087 : END DO
19088 9825181 : s_offset_d1 = s_offset_d1 + 3
19089 : END DO
19090 6461782 : s_offset_c1 = s_offset_c1 + 1
19091 : END DO
19092 4569451 : s_offset_b1 = s_offset_b1 + 5
19093 : END DO
19094 3502220 : s_offset_a1 = s_offset_a1 + 1
19095 : END DO
19096 1355850 : END SUBROUTINE contract_sdsp
19097 : #endif
19098 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
19099 : ! **************************************************************************************************
19100 : !> \brief ...
19101 : !> \param work ...
19102 : !> \param nl_a ...
19103 : !> \param nl_b ...
19104 : !> \param nl_c ...
19105 : !> \param nl_d ...
19106 : !> \param sphi_a ...
19107 : !> \param sphi_b ...
19108 : !> \param sphi_c ...
19109 : !> \param sphi_d ...
19110 : !> \param primitives ...
19111 : !> \param buffer1 ...
19112 : !> \param buffer2 ...
19113 : ! **************************************************************************************************
19114 431715 : SUBROUTINE contract_sdsd(work, &
19115 : nl_a, nl_b, nl_c, nl_d, &
19116 431715 : sphi_a, sphi_b, sphi_c, sphi_d, &
19117 431715 : primitives, &
19118 : buffer1, buffer2)
19119 : REAL(dp), DIMENSION(1*6*1*6), INTENT(IN) :: work
19120 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19121 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19122 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19123 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
19124 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
19125 : REAL(dp), &
19126 : DIMENSION(1*nl_a, 5*nl_b, 1*nl_c, 5*nl_d) :: primitives
19127 : REAL(dp), DIMENSION(1*6*1*6) :: buffer1, buffer2
19128 :
19129 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19130 : kmax, s_offset_a1, s_offset_b1, &
19131 : s_offset_c1, s_offset_d1
19132 :
19133 431715 : s_offset_a1 = 0
19134 1156179 : DO ia = 1, nl_a
19135 : s_offset_b1 = 0
19136 1620863 : DO ib = 1, nl_b
19137 : s_offset_c1 = 0
19138 2400124 : DO ic = 1, nl_c
19139 : s_offset_d1 = 0
19140 3312815 : DO id = 1, nl_d
19141 1809090 : buffer1 = 0.0_dp
19142 1809090 : imax = 6*1*6
19143 1809090 : kmax = 1
19144 66936330 : DO i = 1, imax
19145 66936330 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19146 : END DO
19147 1809090 : buffer2 = 0.0_dp
19148 1809090 : imax = 1*1*6
19149 1809090 : kmax = 6
19150 12663630 : DO i = 1, imax
19151 10854540 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19152 10854540 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19153 10854540 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19154 10854540 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19155 10854540 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19156 10854540 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19157 10854540 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19158 12663630 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19159 : END DO
19160 1809090 : buffer1 = 0.0_dp
19161 1809090 : imax = 1*5*6
19162 1809090 : kmax = 1
19163 56081790 : DO i = 1, imax
19164 56081790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
19165 : END DO
19166 3618180 : imax = 1*5*1
19167 3618180 : kmax = 6
19168 : i = 0
19169 3618180 : DO i1 = 1, 1
19170 12663630 : DO i2 = 1, 5
19171 19899990 : DO i3 = 1, 1
19172 9045450 : i = i + 1
19173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19175 9045450 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
19176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19178 9045450 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
19179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19181 9045450 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19184 9045450 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
19185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19187 9045450 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
19188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19190 9045450 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
19191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19193 9045450 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
19194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19196 18090900 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
19197 : END DO
19198 : END DO
19199 : END DO
19200 3312815 : s_offset_d1 = s_offset_d1 + 5
19201 : END DO
19202 2400124 : s_offset_c1 = s_offset_c1 + 1
19203 : END DO
19204 1620863 : s_offset_b1 = s_offset_b1 + 5
19205 : END DO
19206 1156179 : s_offset_a1 = s_offset_a1 + 1
19207 : END DO
19208 431715 : END SUBROUTINE contract_sdsd
19209 : #endif
19210 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
19211 : ! **************************************************************************************************
19212 : !> \brief ...
19213 : !> \param work ...
19214 : !> \param nl_a ...
19215 : !> \param nl_b ...
19216 : !> \param nl_c ...
19217 : !> \param nl_d ...
19218 : !> \param sphi_a ...
19219 : !> \param sphi_b ...
19220 : !> \param sphi_c ...
19221 : !> \param sphi_d ...
19222 : !> \param primitives ...
19223 : !> \param buffer1 ...
19224 : !> \param buffer2 ...
19225 : ! **************************************************************************************************
19226 : SUBROUTINE contract_sdsf(work, &
19227 : nl_a, nl_b, nl_c, nl_d, &
19228 : sphi_a, sphi_b, sphi_c, sphi_d, &
19229 : primitives, &
19230 : buffer1, buffer2)
19231 : REAL(dp), DIMENSION(1*6*1*10), INTENT(IN) :: work
19232 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19233 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19234 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19235 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
19236 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
19237 : REAL(dp), &
19238 : DIMENSION(1*nl_a, 5*nl_b, 1*nl_c, 7*nl_d) :: primitives
19239 : REAL(dp), DIMENSION(1*6*1*10) :: buffer1, buffer2
19240 :
19241 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19242 : kmax, s_offset_a1, s_offset_b1, &
19243 : s_offset_c1, s_offset_d1
19244 :
19245 : s_offset_a1 = 0
19246 : DO ia = 1, nl_a
19247 : s_offset_b1 = 0
19248 : DO ib = 1, nl_b
19249 : s_offset_c1 = 0
19250 : DO ic = 1, nl_c
19251 : s_offset_d1 = 0
19252 : DO id = 1, nl_d
19253 : buffer1 = 0.0_dp
19254 : imax = 6*1*10
19255 : kmax = 1
19256 : DO i = 1, imax
19257 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19258 : END DO
19259 : buffer2 = 0.0_dp
19260 : imax = 1*1*10
19261 : kmax = 6
19262 : DO i = 1, imax
19263 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19264 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19265 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19266 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19267 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19268 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19269 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19270 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19271 : END DO
19272 : buffer1 = 0.0_dp
19273 : imax = 1*5*10
19274 : kmax = 1
19275 : DO i = 1, imax
19276 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
19277 : END DO
19278 : imax = 1*5*1
19279 : kmax = 10
19280 : i = 0
19281 : DO i1 = 1, 1
19282 : DO i2 = 1, 5
19283 : DO i3 = 1, 1
19284 : i = i + 1
19285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19287 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
19288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19290 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
19291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19293 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19296 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
19297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19299 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
19300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19302 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
19303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19305 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
19306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19308 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
19309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19311 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
19312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19314 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
19315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19317 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
19318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19320 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
19321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19323 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
19324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19326 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
19327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19329 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
19330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19332 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
19333 : END DO
19334 : END DO
19335 : END DO
19336 : s_offset_d1 = s_offset_d1 + 7
19337 : END DO
19338 : s_offset_c1 = s_offset_c1 + 1
19339 : END DO
19340 : s_offset_b1 = s_offset_b1 + 5
19341 : END DO
19342 : s_offset_a1 = s_offset_a1 + 1
19343 : END DO
19344 : END SUBROUTINE contract_sdsf
19345 : #endif
19346 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
19347 : ! **************************************************************************************************
19348 : !> \brief ...
19349 : !> \param work ...
19350 : !> \param nl_a ...
19351 : !> \param nl_b ...
19352 : !> \param nl_c ...
19353 : !> \param nl_d ...
19354 : !> \param sphi_a ...
19355 : !> \param sphi_b ...
19356 : !> \param sphi_c ...
19357 : !> \param sphi_d ...
19358 : !> \param primitives ...
19359 : !> \param buffer1 ...
19360 : !> \param buffer2 ...
19361 : ! **************************************************************************************************
19362 : SUBROUTINE contract_sdsg(work, &
19363 : nl_a, nl_b, nl_c, nl_d, &
19364 : sphi_a, sphi_b, sphi_c, sphi_d, &
19365 : primitives, &
19366 : buffer1, buffer2)
19367 : REAL(dp), DIMENSION(1*6*1*15), INTENT(IN) :: work
19368 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19369 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19370 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19371 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
19372 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
19373 : REAL(dp), &
19374 : DIMENSION(1*nl_a, 5*nl_b, 1*nl_c, 9*nl_d) :: primitives
19375 : REAL(dp), DIMENSION(1*6*1*15) :: buffer1, buffer2
19376 :
19377 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19378 : kmax, s_offset_a1, s_offset_b1, &
19379 : s_offset_c1, s_offset_d1
19380 :
19381 : s_offset_a1 = 0
19382 : DO ia = 1, nl_a
19383 : s_offset_b1 = 0
19384 : DO ib = 1, nl_b
19385 : s_offset_c1 = 0
19386 : DO ic = 1, nl_c
19387 : s_offset_d1 = 0
19388 : DO id = 1, nl_d
19389 : buffer1 = 0.0_dp
19390 : imax = 6*1*15
19391 : kmax = 1
19392 : DO i = 1, imax
19393 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19394 : END DO
19395 : buffer2 = 0.0_dp
19396 : imax = 1*1*15
19397 : kmax = 6
19398 : DO i = 1, imax
19399 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19400 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19401 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19402 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19403 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19404 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19405 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19406 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19407 : END DO
19408 : buffer1 = 0.0_dp
19409 : imax = 1*5*15
19410 : kmax = 1
19411 : DO i = 1, imax
19412 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
19413 : END DO
19414 : imax = 1*5*1
19415 : kmax = 15
19416 : i = 0
19417 : DO i1 = 1, 1
19418 : DO i2 = 1, 5
19419 : DO i3 = 1, 1
19420 : i = i + 1
19421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19423 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
19424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19426 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
19427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
19428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
19429 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
19430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19432 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19435 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
19436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19438 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
19439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
19440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
19441 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
19442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19444 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
19445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
19446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
19447 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
19448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19450 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
19451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19453 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
19454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19456 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
19457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19459 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
19460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19462 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
19463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19465 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
19466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19468 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
19469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
19470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
19471 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
19472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19474 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
19475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19477 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
19478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19480 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
19481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19483 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
19484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
19485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
19486 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
19487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19489 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
19490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19492 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
19493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19495 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
19496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19498 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
19499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19501 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
19502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19504 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
19505 : END DO
19506 : END DO
19507 : END DO
19508 : s_offset_d1 = s_offset_d1 + 9
19509 : END DO
19510 : s_offset_c1 = s_offset_c1 + 1
19511 : END DO
19512 : s_offset_b1 = s_offset_b1 + 5
19513 : END DO
19514 : s_offset_a1 = s_offset_a1 + 1
19515 : END DO
19516 : END SUBROUTINE contract_sdsg
19517 : #endif
19518 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
19519 : ! **************************************************************************************************
19520 : !> \brief ...
19521 : !> \param work ...
19522 : !> \param nl_a ...
19523 : !> \param nl_b ...
19524 : !> \param nl_c ...
19525 : !> \param nl_d ...
19526 : !> \param sphi_a ...
19527 : !> \param sphi_b ...
19528 : !> \param sphi_c ...
19529 : !> \param sphi_d ...
19530 : !> \param primitives ...
19531 : !> \param buffer1 ...
19532 : !> \param buffer2 ...
19533 : ! **************************************************************************************************
19534 1199562 : SUBROUTINE contract_sdps(work, &
19535 : nl_a, nl_b, nl_c, nl_d, &
19536 1199562 : sphi_a, sphi_b, sphi_c, sphi_d, &
19537 1199562 : primitives, &
19538 : buffer1, buffer2)
19539 : REAL(dp), DIMENSION(1*6*3*1), INTENT(IN) :: work
19540 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19541 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19542 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19543 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
19544 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
19545 : REAL(dp), &
19546 : DIMENSION(1*nl_a, 5*nl_b, 3*nl_c, 1*nl_d) :: primitives
19547 : REAL(dp), DIMENSION(1*6*3*1) :: buffer1, buffer2
19548 :
19549 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19550 : kmax, s_offset_a1, s_offset_b1, &
19551 : s_offset_c1, s_offset_d1
19552 :
19553 1199562 : s_offset_a1 = 0
19554 3052899 : DO ia = 1, nl_a
19555 : s_offset_b1 = 0
19556 3905431 : DO ib = 1, nl_b
19557 : s_offset_c1 = 0
19558 5019600 : DO ic = 1, nl_c
19559 : s_offset_d1 = 0
19560 8173265 : DO id = 1, nl_d
19561 5205759 : buffer1 = 0.0_dp
19562 5205759 : imax = 6*3*1
19563 5205759 : kmax = 1
19564 98909421 : DO i = 1, imax
19565 98909421 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19566 : END DO
19567 5205759 : buffer2 = 0.0_dp
19568 5205759 : imax = 1*3*1
19569 5205759 : kmax = 6
19570 20823036 : DO i = 1, imax
19571 15617277 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19572 15617277 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19573 15617277 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19574 15617277 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19575 15617277 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19576 15617277 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19577 15617277 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19578 20823036 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19579 : END DO
19580 5205759 : buffer1 = 0.0_dp
19581 5205759 : imax = 1*5*1
19582 5205759 : kmax = 3
19583 31234554 : DO i = 1, imax
19584 26028795 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
19585 26028795 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
19586 31234554 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
19587 : END DO
19588 20823036 : imax = 1*5*3
19589 20823036 : kmax = 1
19590 : i = 0
19591 20823036 : DO i1 = 1, 3
19592 98909421 : DO i2 = 1, 5
19593 171790047 : DO i3 = 1, 1
19594 78086385 : i = i + 1
19595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
19597 156172770 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
19598 : END DO
19599 : END DO
19600 : END DO
19601 8173265 : s_offset_d1 = s_offset_d1 + 1
19602 : END DO
19603 5019600 : s_offset_c1 = s_offset_c1 + 3
19604 : END DO
19605 3905431 : s_offset_b1 = s_offset_b1 + 5
19606 : END DO
19607 3052899 : s_offset_a1 = s_offset_a1 + 1
19608 : END DO
19609 1199562 : END SUBROUTINE contract_sdps
19610 : #endif
19611 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
19612 : ! **************************************************************************************************
19613 : !> \brief ...
19614 : !> \param work ...
19615 : !> \param nl_a ...
19616 : !> \param nl_b ...
19617 : !> \param nl_c ...
19618 : !> \param nl_d ...
19619 : !> \param sphi_a ...
19620 : !> \param sphi_b ...
19621 : !> \param sphi_c ...
19622 : !> \param sphi_d ...
19623 : !> \param primitives ...
19624 : !> \param buffer1 ...
19625 : !> \param buffer2 ...
19626 : ! **************************************************************************************************
19627 699808 : SUBROUTINE contract_sdpp(work, &
19628 : nl_a, nl_b, nl_c, nl_d, &
19629 699808 : sphi_a, sphi_b, sphi_c, sphi_d, &
19630 699808 : primitives, &
19631 : buffer1, buffer2)
19632 : REAL(dp), DIMENSION(1*6*3*3), INTENT(IN) :: work
19633 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19634 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19635 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19636 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
19637 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
19638 : REAL(dp), &
19639 : DIMENSION(1*nl_a, 5*nl_b, 3*nl_c, 3*nl_d) :: primitives
19640 : REAL(dp), DIMENSION(1*6*3*3) :: buffer1, buffer2
19641 :
19642 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19643 : kmax, s_offset_a1, s_offset_b1, &
19644 : s_offset_c1, s_offset_d1
19645 :
19646 699808 : s_offset_a1 = 0
19647 1835288 : DO ia = 1, nl_a
19648 : s_offset_b1 = 0
19649 2446013 : DO ib = 1, nl_b
19650 : s_offset_c1 = 0
19651 3137206 : DO ic = 1, nl_c
19652 : s_offset_d1 = 0
19653 4498854 : DO id = 1, nl_d
19654 2672181 : buffer1 = 0.0_dp
19655 2672181 : imax = 6*3*3
19656 2672181 : kmax = 1
19657 146969955 : DO i = 1, imax
19658 146969955 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19659 : END DO
19660 2672181 : buffer2 = 0.0_dp
19661 2672181 : imax = 1*3*3
19662 2672181 : kmax = 6
19663 26721810 : DO i = 1, imax
19664 24049629 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19665 24049629 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19666 24049629 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19667 24049629 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19668 24049629 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19669 24049629 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19670 24049629 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19671 26721810 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19672 : END DO
19673 2672181 : buffer1 = 0.0_dp
19674 2672181 : imax = 1*5*3
19675 2672181 : kmax = 3
19676 42754896 : DO i = 1, imax
19677 40082715 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
19678 40082715 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
19679 42754896 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
19680 : END DO
19681 10688724 : imax = 1*5*3
19682 10688724 : kmax = 3
19683 : i = 0
19684 10688724 : DO i1 = 1, 3
19685 50771439 : DO i2 = 1, 5
19686 88181973 : DO i3 = 1, 1
19687 40082715 : i = i + 1
19688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
19690 40082715 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
19691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
19693 40082715 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
19696 80165430 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
19697 : END DO
19698 : END DO
19699 : END DO
19700 4498854 : s_offset_d1 = s_offset_d1 + 3
19701 : END DO
19702 3137206 : s_offset_c1 = s_offset_c1 + 3
19703 : END DO
19704 2446013 : s_offset_b1 = s_offset_b1 + 5
19705 : END DO
19706 1835288 : s_offset_a1 = s_offset_a1 + 1
19707 : END DO
19708 699808 : END SUBROUTINE contract_sdpp
19709 : #endif
19710 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
19711 : ! **************************************************************************************************
19712 : !> \brief ...
19713 : !> \param work ...
19714 : !> \param nl_a ...
19715 : !> \param nl_b ...
19716 : !> \param nl_c ...
19717 : !> \param nl_d ...
19718 : !> \param sphi_a ...
19719 : !> \param sphi_b ...
19720 : !> \param sphi_c ...
19721 : !> \param sphi_d ...
19722 : !> \param primitives ...
19723 : !> \param buffer1 ...
19724 : !> \param buffer2 ...
19725 : ! **************************************************************************************************
19726 366344 : SUBROUTINE contract_sdpd(work, &
19727 : nl_a, nl_b, nl_c, nl_d, &
19728 366344 : sphi_a, sphi_b, sphi_c, sphi_d, &
19729 366344 : primitives, &
19730 : buffer1, buffer2)
19731 : REAL(dp), DIMENSION(1*6*3*6), INTENT(IN) :: work
19732 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19733 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19734 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19735 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
19736 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
19737 : REAL(dp), &
19738 : DIMENSION(1*nl_a, 5*nl_b, 3*nl_c, 5*nl_d) :: primitives
19739 : REAL(dp), DIMENSION(1*6*3*6) :: buffer1, buffer2
19740 :
19741 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19742 : kmax, s_offset_a1, s_offset_b1, &
19743 : s_offset_c1, s_offset_d1
19744 :
19745 366344 : s_offset_a1 = 0
19746 981287 : DO ia = 1, nl_a
19747 : s_offset_b1 = 0
19748 1350097 : DO ib = 1, nl_b
19749 : s_offset_c1 = 0
19750 1766059 : DO ic = 1, nl_c
19751 : s_offset_d1 = 0
19752 2205393 : DO id = 1, nl_d
19753 1174488 : buffer1 = 0.0_dp
19754 1174488 : imax = 6*3*6
19755 1174488 : kmax = 1
19756 128019192 : DO i = 1, imax
19757 128019192 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19758 : END DO
19759 1174488 : buffer2 = 0.0_dp
19760 1174488 : imax = 1*3*6
19761 1174488 : kmax = 6
19762 22315272 : DO i = 1, imax
19763 21140784 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19764 21140784 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19765 21140784 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19766 21140784 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19767 21140784 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19768 21140784 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19769 21140784 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19770 22315272 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19771 : END DO
19772 1174488 : buffer1 = 0.0_dp
19773 1174488 : imax = 1*5*6
19774 1174488 : kmax = 3
19775 36409128 : DO i = 1, imax
19776 35234640 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
19777 35234640 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
19778 36409128 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
19779 : END DO
19780 4697952 : imax = 1*5*3
19781 4697952 : kmax = 6
19782 : i = 0
19783 4697952 : DO i1 = 1, 3
19784 22315272 : DO i2 = 1, 5
19785 38758104 : DO i3 = 1, 1
19786 17617320 : i = i + 1
19787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19789 17617320 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
19790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19792 17617320 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
19793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19795 17617320 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19798 17617320 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
19799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19801 17617320 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
19802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19804 17617320 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
19805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19807 17617320 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
19808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19810 35234640 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
19811 : END DO
19812 : END DO
19813 : END DO
19814 2205393 : s_offset_d1 = s_offset_d1 + 5
19815 : END DO
19816 1766059 : s_offset_c1 = s_offset_c1 + 3
19817 : END DO
19818 1350097 : s_offset_b1 = s_offset_b1 + 5
19819 : END DO
19820 981287 : s_offset_a1 = s_offset_a1 + 1
19821 : END DO
19822 366344 : END SUBROUTINE contract_sdpd
19823 : #endif
19824 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
19825 : ! **************************************************************************************************
19826 : !> \brief ...
19827 : !> \param work ...
19828 : !> \param nl_a ...
19829 : !> \param nl_b ...
19830 : !> \param nl_c ...
19831 : !> \param nl_d ...
19832 : !> \param sphi_a ...
19833 : !> \param sphi_b ...
19834 : !> \param sphi_c ...
19835 : !> \param sphi_d ...
19836 : !> \param primitives ...
19837 : !> \param buffer1 ...
19838 : !> \param buffer2 ...
19839 : ! **************************************************************************************************
19840 : SUBROUTINE contract_sdpf(work, &
19841 : nl_a, nl_b, nl_c, nl_d, &
19842 : sphi_a, sphi_b, sphi_c, sphi_d, &
19843 : primitives, &
19844 : buffer1, buffer2)
19845 : REAL(dp), DIMENSION(1*6*3*10), INTENT(IN) :: work
19846 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19847 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19848 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19849 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
19850 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
19851 : REAL(dp), &
19852 : DIMENSION(1*nl_a, 5*nl_b, 3*nl_c, 7*nl_d) :: primitives
19853 : REAL(dp), DIMENSION(1*6*3*10) :: buffer1, buffer2
19854 :
19855 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19856 : kmax, s_offset_a1, s_offset_b1, &
19857 : s_offset_c1, s_offset_d1
19858 :
19859 : s_offset_a1 = 0
19860 : DO ia = 1, nl_a
19861 : s_offset_b1 = 0
19862 : DO ib = 1, nl_b
19863 : s_offset_c1 = 0
19864 : DO ic = 1, nl_c
19865 : s_offset_d1 = 0
19866 : DO id = 1, nl_d
19867 : buffer1 = 0.0_dp
19868 : imax = 6*3*10
19869 : kmax = 1
19870 : DO i = 1, imax
19871 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
19872 : END DO
19873 : buffer2 = 0.0_dp
19874 : imax = 1*3*10
19875 : kmax = 6
19876 : DO i = 1, imax
19877 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
19878 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
19879 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
19880 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
19881 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
19882 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
19883 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
19884 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
19885 : END DO
19886 : buffer1 = 0.0_dp
19887 : imax = 1*5*10
19888 : kmax = 3
19889 : DO i = 1, imax
19890 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
19891 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
19892 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
19893 : END DO
19894 : imax = 1*5*3
19895 : kmax = 10
19896 : i = 0
19897 : DO i1 = 1, 3
19898 : DO i2 = 1, 5
19899 : DO i3 = 1, 1
19900 : i = i + 1
19901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19903 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
19904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19906 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
19907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19909 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
19910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19912 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
19913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19915 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
19916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19918 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
19919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19921 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
19922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
19923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
19924 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
19925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
19926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
19927 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
19928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
19929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
19930 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
19931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
19932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
19933 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
19934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19936 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
19937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19939 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
19940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
19941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
19942 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
19943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
19944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
19945 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
19946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
19947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
19948 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
19949 : END DO
19950 : END DO
19951 : END DO
19952 : s_offset_d1 = s_offset_d1 + 7
19953 : END DO
19954 : s_offset_c1 = s_offset_c1 + 3
19955 : END DO
19956 : s_offset_b1 = s_offset_b1 + 5
19957 : END DO
19958 : s_offset_a1 = s_offset_a1 + 1
19959 : END DO
19960 : END SUBROUTINE contract_sdpf
19961 : #endif
19962 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
19963 : ! **************************************************************************************************
19964 : !> \brief ...
19965 : !> \param work ...
19966 : !> \param nl_a ...
19967 : !> \param nl_b ...
19968 : !> \param nl_c ...
19969 : !> \param nl_d ...
19970 : !> \param sphi_a ...
19971 : !> \param sphi_b ...
19972 : !> \param sphi_c ...
19973 : !> \param sphi_d ...
19974 : !> \param primitives ...
19975 : !> \param buffer1 ...
19976 : !> \param buffer2 ...
19977 : ! **************************************************************************************************
19978 : SUBROUTINE contract_sdpg(work, &
19979 : nl_a, nl_b, nl_c, nl_d, &
19980 : sphi_a, sphi_b, sphi_c, sphi_d, &
19981 : primitives, &
19982 : buffer1, buffer2)
19983 : REAL(dp), DIMENSION(1*6*3*15), INTENT(IN) :: work
19984 : INTEGER :: nl_a, nl_b, nl_c, nl_d
19985 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
19986 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
19987 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
19988 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
19989 : REAL(dp), &
19990 : DIMENSION(1*nl_a, 5*nl_b, 3*nl_c, 9*nl_d) :: primitives
19991 : REAL(dp), DIMENSION(1*6*3*15) :: buffer1, buffer2
19992 :
19993 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
19994 : kmax, s_offset_a1, s_offset_b1, &
19995 : s_offset_c1, s_offset_d1
19996 :
19997 : s_offset_a1 = 0
19998 : DO ia = 1, nl_a
19999 : s_offset_b1 = 0
20000 : DO ib = 1, nl_b
20001 : s_offset_c1 = 0
20002 : DO ic = 1, nl_c
20003 : s_offset_d1 = 0
20004 : DO id = 1, nl_d
20005 : buffer1 = 0.0_dp
20006 : imax = 6*3*15
20007 : kmax = 1
20008 : DO i = 1, imax
20009 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20010 : END DO
20011 : buffer2 = 0.0_dp
20012 : imax = 1*3*15
20013 : kmax = 6
20014 : DO i = 1, imax
20015 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20016 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20017 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20018 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20019 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20020 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20021 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20022 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20023 : END DO
20024 : buffer1 = 0.0_dp
20025 : imax = 1*5*15
20026 : kmax = 3
20027 : DO i = 1, imax
20028 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20029 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20030 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
20031 : END DO
20032 : imax = 1*5*3
20033 : kmax = 15
20034 : i = 0
20035 : DO i1 = 1, 3
20036 : DO i2 = 1, 5
20037 : DO i3 = 1, 1
20038 : i = i + 1
20039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20041 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
20042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20044 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
20045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20047 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
20048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20050 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20053 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
20054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20056 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
20057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
20058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
20059 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
20060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20062 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
20063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20065 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
20066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20068 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
20069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20071 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
20072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20074 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
20075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20077 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
20078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20080 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
20081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20083 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
20084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20086 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
20087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
20088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
20089 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
20090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20092 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
20093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20095 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
20096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20098 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
20099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20101 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
20102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20104 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
20105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20107 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
20108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20110 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
20111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20113 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
20114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20116 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
20117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20119 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
20120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20122 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
20123 : END DO
20124 : END DO
20125 : END DO
20126 : s_offset_d1 = s_offset_d1 + 9
20127 : END DO
20128 : s_offset_c1 = s_offset_c1 + 3
20129 : END DO
20130 : s_offset_b1 = s_offset_b1 + 5
20131 : END DO
20132 : s_offset_a1 = s_offset_a1 + 1
20133 : END DO
20134 : END SUBROUTINE contract_sdpg
20135 : #endif
20136 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
20137 : ! **************************************************************************************************
20138 : !> \brief ...
20139 : !> \param work ...
20140 : !> \param nl_a ...
20141 : !> \param nl_b ...
20142 : !> \param nl_c ...
20143 : !> \param nl_d ...
20144 : !> \param sphi_a ...
20145 : !> \param sphi_b ...
20146 : !> \param sphi_c ...
20147 : !> \param sphi_d ...
20148 : !> \param primitives ...
20149 : !> \param buffer1 ...
20150 : !> \param buffer2 ...
20151 : ! **************************************************************************************************
20152 268310 : SUBROUTINE contract_sdds(work, &
20153 : nl_a, nl_b, nl_c, nl_d, &
20154 268310 : sphi_a, sphi_b, sphi_c, sphi_d, &
20155 268310 : primitives, &
20156 : buffer1, buffer2)
20157 : REAL(dp), DIMENSION(1*6*6*1), INTENT(IN) :: work
20158 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20159 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20160 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20161 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
20162 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
20163 : REAL(dp), &
20164 : DIMENSION(1*nl_a, 5*nl_b, 5*nl_c, 1*nl_d) :: primitives
20165 : REAL(dp), DIMENSION(1*6*6*1) :: buffer1, buffer2
20166 :
20167 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20168 : kmax, s_offset_a1, s_offset_b1, &
20169 : s_offset_c1, s_offset_d1
20170 :
20171 268310 : s_offset_a1 = 0
20172 692906 : DO ia = 1, nl_a
20173 : s_offset_b1 = 0
20174 930473 : DO ib = 1, nl_b
20175 : s_offset_c1 = 0
20176 1063465 : DO ic = 1, nl_c
20177 : s_offset_d1 = 0
20178 1509605 : DO id = 1, nl_d
20179 952017 : buffer1 = 0.0_dp
20180 952017 : imax = 6*6*1
20181 952017 : kmax = 1
20182 35224629 : DO i = 1, imax
20183 35224629 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20184 : END DO
20185 952017 : buffer2 = 0.0_dp
20186 952017 : imax = 1*6*1
20187 952017 : kmax = 6
20188 6664119 : DO i = 1, imax
20189 5712102 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20190 5712102 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20191 5712102 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20192 5712102 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20193 5712102 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20194 5712102 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20195 5712102 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20196 6664119 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20197 : END DO
20198 952017 : buffer1 = 0.0_dp
20199 952017 : imax = 1*5*1
20200 952017 : kmax = 6
20201 5712102 : DO i = 1, imax
20202 4760085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20203 4760085 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20204 4760085 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20205 4760085 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20206 4760085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
20207 4760085 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20208 4760085 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20209 5712102 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
20210 : END DO
20211 5712102 : imax = 1*5*5
20212 5712102 : kmax = 1
20213 : i = 0
20214 5712102 : DO i1 = 1, 5
20215 29512527 : DO i2 = 1, 5
20216 52360935 : DO i3 = 1, 1
20217 23800425 : i = i + 1
20218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
20220 47600850 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
20221 : END DO
20222 : END DO
20223 : END DO
20224 1509605 : s_offset_d1 = s_offset_d1 + 1
20225 : END DO
20226 1063465 : s_offset_c1 = s_offset_c1 + 5
20227 : END DO
20228 930473 : s_offset_b1 = s_offset_b1 + 5
20229 : END DO
20230 692906 : s_offset_a1 = s_offset_a1 + 1
20231 : END DO
20232 268310 : END SUBROUTINE contract_sdds
20233 : #endif
20234 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
20235 : ! **************************************************************************************************
20236 : !> \brief ...
20237 : !> \param work ...
20238 : !> \param nl_a ...
20239 : !> \param nl_b ...
20240 : !> \param nl_c ...
20241 : !> \param nl_d ...
20242 : !> \param sphi_a ...
20243 : !> \param sphi_b ...
20244 : !> \param sphi_c ...
20245 : !> \param sphi_d ...
20246 : !> \param primitives ...
20247 : !> \param buffer1 ...
20248 : !> \param buffer2 ...
20249 : ! **************************************************************************************************
20250 280547 : SUBROUTINE contract_sddp(work, &
20251 : nl_a, nl_b, nl_c, nl_d, &
20252 280547 : sphi_a, sphi_b, sphi_c, sphi_d, &
20253 280547 : primitives, &
20254 : buffer1, buffer2)
20255 : REAL(dp), DIMENSION(1*6*6*3), INTENT(IN) :: work
20256 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20257 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20258 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20259 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
20260 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
20261 : REAL(dp), &
20262 : DIMENSION(1*nl_a, 5*nl_b, 5*nl_c, 3*nl_d) :: primitives
20263 : REAL(dp), DIMENSION(1*6*6*3) :: buffer1, buffer2
20264 :
20265 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20266 : kmax, s_offset_a1, s_offset_b1, &
20267 : s_offset_c1, s_offset_d1
20268 :
20269 280547 : s_offset_a1 = 0
20270 741606 : DO ia = 1, nl_a
20271 : s_offset_b1 = 0
20272 990735 : DO ib = 1, nl_b
20273 : s_offset_c1 = 0
20274 1099413 : DO ic = 1, nl_c
20275 : s_offset_d1 = 0
20276 1356482 : DO id = 1, nl_d
20277 786745 : buffer1 = 0.0_dp
20278 786745 : imax = 6*6*3
20279 786745 : kmax = 1
20280 85755205 : DO i = 1, imax
20281 85755205 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20282 : END DO
20283 786745 : buffer2 = 0.0_dp
20284 786745 : imax = 1*6*3
20285 786745 : kmax = 6
20286 14948155 : DO i = 1, imax
20287 14161410 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20288 14161410 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20289 14161410 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20290 14161410 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20291 14161410 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20292 14161410 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20293 14161410 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20294 14948155 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20295 : END DO
20296 786745 : buffer1 = 0.0_dp
20297 786745 : imax = 1*5*3
20298 786745 : kmax = 6
20299 12587920 : DO i = 1, imax
20300 11801175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20301 11801175 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20302 11801175 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20303 11801175 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20304 11801175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
20305 11801175 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20306 11801175 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20307 12587920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
20308 : END DO
20309 4720470 : imax = 1*5*5
20310 4720470 : kmax = 3
20311 : i = 0
20312 4720470 : DO i1 = 1, 5
20313 24389095 : DO i2 = 1, 5
20314 43270975 : DO i3 = 1, 1
20315 19668625 : i = i + 1
20316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
20318 19668625 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
20319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
20321 19668625 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
20324 39337250 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
20325 : END DO
20326 : END DO
20327 : END DO
20328 1356482 : s_offset_d1 = s_offset_d1 + 3
20329 : END DO
20330 1099413 : s_offset_c1 = s_offset_c1 + 5
20331 : END DO
20332 990735 : s_offset_b1 = s_offset_b1 + 5
20333 : END DO
20334 741606 : s_offset_a1 = s_offset_a1 + 1
20335 : END DO
20336 280547 : END SUBROUTINE contract_sddp
20337 : #endif
20338 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
20339 : ! **************************************************************************************************
20340 : !> \brief ...
20341 : !> \param work ...
20342 : !> \param nl_a ...
20343 : !> \param nl_b ...
20344 : !> \param nl_c ...
20345 : !> \param nl_d ...
20346 : !> \param sphi_a ...
20347 : !> \param sphi_b ...
20348 : !> \param sphi_c ...
20349 : !> \param sphi_d ...
20350 : !> \param primitives ...
20351 : !> \param buffer1 ...
20352 : !> \param buffer2 ...
20353 : ! **************************************************************************************************
20354 131344 : SUBROUTINE contract_sddd(work, &
20355 : nl_a, nl_b, nl_c, nl_d, &
20356 131344 : sphi_a, sphi_b, sphi_c, sphi_d, &
20357 131344 : primitives, &
20358 : buffer1, buffer2)
20359 : REAL(dp), DIMENSION(1*6*6*6), INTENT(IN) :: work
20360 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20361 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20362 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20363 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
20364 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
20365 : REAL(dp), &
20366 : DIMENSION(1*nl_a, 5*nl_b, 5*nl_c, 5*nl_d) :: primitives
20367 : REAL(dp), DIMENSION(1*6*6*6) :: buffer1, buffer2
20368 :
20369 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20370 : kmax, s_offset_a1, s_offset_b1, &
20371 : s_offset_c1, s_offset_d1
20372 :
20373 131344 : s_offset_a1 = 0
20374 354580 : DO ia = 1, nl_a
20375 : s_offset_b1 = 0
20376 507966 : DO ib = 1, nl_b
20377 : s_offset_c1 = 0
20378 604795 : DO ic = 1, nl_c
20379 : s_offset_d1 = 0
20380 720204 : DO id = 1, nl_d
20381 400139 : buffer1 = 0.0_dp
20382 400139 : imax = 6*6*6
20383 400139 : kmax = 1
20384 86830163 : DO i = 1, imax
20385 86830163 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20386 : END DO
20387 400139 : buffer2 = 0.0_dp
20388 400139 : imax = 1*6*6
20389 400139 : kmax = 6
20390 14805143 : DO i = 1, imax
20391 14405004 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20392 14405004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20393 14405004 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20394 14405004 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20395 14405004 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20396 14405004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20397 14405004 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20398 14805143 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20399 : END DO
20400 400139 : buffer1 = 0.0_dp
20401 400139 : imax = 1*5*6
20402 400139 : kmax = 6
20403 12404309 : DO i = 1, imax
20404 12004170 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20405 12004170 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20406 12004170 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20407 12004170 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20408 12004170 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
20409 12004170 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20410 12004170 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20411 12404309 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
20412 : END DO
20413 2400834 : imax = 1*5*5
20414 2400834 : kmax = 6
20415 : i = 0
20416 2400834 : DO i1 = 1, 5
20417 12404309 : DO i2 = 1, 5
20418 22007645 : DO i3 = 1, 1
20419 10003475 : i = i + 1
20420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20422 10003475 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
20423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20425 10003475 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
20426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20428 10003475 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20431 10003475 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
20432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20434 10003475 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
20435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20437 10003475 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
20438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20440 10003475 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
20441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20443 20006950 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
20444 : END DO
20445 : END DO
20446 : END DO
20447 720204 : s_offset_d1 = s_offset_d1 + 5
20448 : END DO
20449 604795 : s_offset_c1 = s_offset_c1 + 5
20450 : END DO
20451 507966 : s_offset_b1 = s_offset_b1 + 5
20452 : END DO
20453 354580 : s_offset_a1 = s_offset_a1 + 1
20454 : END DO
20455 131344 : END SUBROUTINE contract_sddd
20456 : #endif
20457 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
20458 : ! **************************************************************************************************
20459 : !> \brief ...
20460 : !> \param work ...
20461 : !> \param nl_a ...
20462 : !> \param nl_b ...
20463 : !> \param nl_c ...
20464 : !> \param nl_d ...
20465 : !> \param sphi_a ...
20466 : !> \param sphi_b ...
20467 : !> \param sphi_c ...
20468 : !> \param sphi_d ...
20469 : !> \param primitives ...
20470 : !> \param buffer1 ...
20471 : !> \param buffer2 ...
20472 : ! **************************************************************************************************
20473 : SUBROUTINE contract_sddf(work, &
20474 : nl_a, nl_b, nl_c, nl_d, &
20475 : sphi_a, sphi_b, sphi_c, sphi_d, &
20476 : primitives, &
20477 : buffer1, buffer2)
20478 : REAL(dp), DIMENSION(1*6*6*10), INTENT(IN) :: work
20479 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20480 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20481 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20482 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
20483 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
20484 : REAL(dp), &
20485 : DIMENSION(1*nl_a, 5*nl_b, 5*nl_c, 7*nl_d) :: primitives
20486 : REAL(dp), DIMENSION(1*6*6*10) :: buffer1, buffer2
20487 :
20488 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20489 : kmax, s_offset_a1, s_offset_b1, &
20490 : s_offset_c1, s_offset_d1
20491 :
20492 : s_offset_a1 = 0
20493 : DO ia = 1, nl_a
20494 : s_offset_b1 = 0
20495 : DO ib = 1, nl_b
20496 : s_offset_c1 = 0
20497 : DO ic = 1, nl_c
20498 : s_offset_d1 = 0
20499 : DO id = 1, nl_d
20500 : buffer1 = 0.0_dp
20501 : imax = 6*6*10
20502 : kmax = 1
20503 : DO i = 1, imax
20504 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20505 : END DO
20506 : buffer2 = 0.0_dp
20507 : imax = 1*6*10
20508 : kmax = 6
20509 : DO i = 1, imax
20510 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20511 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20512 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20513 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20514 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20515 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20516 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20517 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20518 : END DO
20519 : buffer1 = 0.0_dp
20520 : imax = 1*5*10
20521 : kmax = 6
20522 : DO i = 1, imax
20523 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20524 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20525 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20526 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20527 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
20528 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20529 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20530 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
20531 : END DO
20532 : imax = 1*5*5
20533 : kmax = 10
20534 : i = 0
20535 : DO i1 = 1, 5
20536 : DO i2 = 1, 5
20537 : DO i3 = 1, 1
20538 : i = i + 1
20539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20541 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
20542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20544 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
20545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20547 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20550 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
20551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20553 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
20554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20556 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
20557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20559 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
20560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20562 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
20563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20565 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
20566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20568 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
20569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20571 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
20572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20574 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
20575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20577 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
20578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20580 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
20581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20583 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
20584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20586 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
20587 : END DO
20588 : END DO
20589 : END DO
20590 : s_offset_d1 = s_offset_d1 + 7
20591 : END DO
20592 : s_offset_c1 = s_offset_c1 + 5
20593 : END DO
20594 : s_offset_b1 = s_offset_b1 + 5
20595 : END DO
20596 : s_offset_a1 = s_offset_a1 + 1
20597 : END DO
20598 : END SUBROUTINE contract_sddf
20599 : #endif
20600 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
20601 : ! **************************************************************************************************
20602 : !> \brief ...
20603 : !> \param work ...
20604 : !> \param nl_a ...
20605 : !> \param nl_b ...
20606 : !> \param nl_c ...
20607 : !> \param nl_d ...
20608 : !> \param sphi_a ...
20609 : !> \param sphi_b ...
20610 : !> \param sphi_c ...
20611 : !> \param sphi_d ...
20612 : !> \param primitives ...
20613 : !> \param buffer1 ...
20614 : !> \param buffer2 ...
20615 : ! **************************************************************************************************
20616 : SUBROUTINE contract_sddg(work, &
20617 : nl_a, nl_b, nl_c, nl_d, &
20618 : sphi_a, sphi_b, sphi_c, sphi_d, &
20619 : primitives, &
20620 : buffer1, buffer2)
20621 : REAL(dp), DIMENSION(1*6*6*15), INTENT(IN) :: work
20622 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20623 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20624 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20625 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
20626 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
20627 : REAL(dp), &
20628 : DIMENSION(1*nl_a, 5*nl_b, 5*nl_c, 9*nl_d) :: primitives
20629 : REAL(dp), DIMENSION(1*6*6*15) :: buffer1, buffer2
20630 :
20631 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20632 : kmax, s_offset_a1, s_offset_b1, &
20633 : s_offset_c1, s_offset_d1
20634 :
20635 : s_offset_a1 = 0
20636 : DO ia = 1, nl_a
20637 : s_offset_b1 = 0
20638 : DO ib = 1, nl_b
20639 : s_offset_c1 = 0
20640 : DO ic = 1, nl_c
20641 : s_offset_d1 = 0
20642 : DO id = 1, nl_d
20643 : buffer1 = 0.0_dp
20644 : imax = 6*6*15
20645 : kmax = 1
20646 : DO i = 1, imax
20647 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20648 : END DO
20649 : buffer2 = 0.0_dp
20650 : imax = 1*6*15
20651 : kmax = 6
20652 : DO i = 1, imax
20653 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20654 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20655 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20656 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20657 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20658 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20659 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20660 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20661 : END DO
20662 : buffer1 = 0.0_dp
20663 : imax = 1*5*15
20664 : kmax = 6
20665 : DO i = 1, imax
20666 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
20667 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20668 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20669 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20670 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
20671 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20672 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20673 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
20674 : END DO
20675 : imax = 1*5*5
20676 : kmax = 15
20677 : i = 0
20678 : DO i1 = 1, 5
20679 : DO i2 = 1, 5
20680 : DO i3 = 1, 1
20681 : i = i + 1
20682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20684 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
20685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20687 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
20688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20690 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
20691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20693 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20696 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
20697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20699 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
20700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
20701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
20702 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
20703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20705 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
20706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20708 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
20709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20711 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
20712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20714 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
20715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20717 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
20718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20720 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
20721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
20723 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
20724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20726 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
20727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20729 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
20730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
20731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
20732 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
20733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
20735 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
20736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
20737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
20738 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
20739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20741 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
20742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20744 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
20745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
20746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
20747 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
20748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
20750 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
20751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20753 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
20754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20756 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
20757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
20758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
20759 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
20760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
20761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
20762 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
20763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
20764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
20765 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
20766 : END DO
20767 : END DO
20768 : END DO
20769 : s_offset_d1 = s_offset_d1 + 9
20770 : END DO
20771 : s_offset_c1 = s_offset_c1 + 5
20772 : END DO
20773 : s_offset_b1 = s_offset_b1 + 5
20774 : END DO
20775 : s_offset_a1 = s_offset_a1 + 1
20776 : END DO
20777 : END SUBROUTINE contract_sddg
20778 : #endif
20779 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
20780 : ! **************************************************************************************************
20781 : !> \brief ...
20782 : !> \param work ...
20783 : !> \param nl_a ...
20784 : !> \param nl_b ...
20785 : !> \param nl_c ...
20786 : !> \param nl_d ...
20787 : !> \param sphi_a ...
20788 : !> \param sphi_b ...
20789 : !> \param sphi_c ...
20790 : !> \param sphi_d ...
20791 : !> \param primitives ...
20792 : !> \param buffer1 ...
20793 : !> \param buffer2 ...
20794 : ! **************************************************************************************************
20795 : SUBROUTINE contract_sdfs(work, &
20796 : nl_a, nl_b, nl_c, nl_d, &
20797 : sphi_a, sphi_b, sphi_c, sphi_d, &
20798 : primitives, &
20799 : buffer1, buffer2)
20800 : REAL(dp), DIMENSION(1*6*10*1), INTENT(IN) :: work
20801 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20802 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20803 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20804 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
20805 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
20806 : REAL(dp), &
20807 : DIMENSION(1*nl_a, 5*nl_b, 7*nl_c, 1*nl_d) :: primitives
20808 : REAL(dp), DIMENSION(1*6*10*1) :: buffer1, buffer2
20809 :
20810 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20811 : kmax, s_offset_a1, s_offset_b1, &
20812 : s_offset_c1, s_offset_d1
20813 :
20814 : s_offset_a1 = 0
20815 : DO ia = 1, nl_a
20816 : s_offset_b1 = 0
20817 : DO ib = 1, nl_b
20818 : s_offset_c1 = 0
20819 : DO ic = 1, nl_c
20820 : s_offset_d1 = 0
20821 : DO id = 1, nl_d
20822 : buffer1 = 0.0_dp
20823 : imax = 6*10*1
20824 : kmax = 1
20825 : DO i = 1, imax
20826 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20827 : END DO
20828 : buffer2 = 0.0_dp
20829 : imax = 1*10*1
20830 : kmax = 6
20831 : DO i = 1, imax
20832 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20833 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20834 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20835 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20836 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20837 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20838 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20839 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20840 : END DO
20841 : buffer1 = 0.0_dp
20842 : imax = 1*5*1
20843 : kmax = 10
20844 : DO i = 1, imax
20845 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20846 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
20847 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20848 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
20849 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20850 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
20851 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20852 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
20853 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20854 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
20855 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
20856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
20857 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
20858 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
20859 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
20860 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
20861 : END DO
20862 : imax = 1*5*7
20863 : kmax = 1
20864 : i = 0
20865 : DO i1 = 1, 7
20866 : DO i2 = 1, 5
20867 : DO i3 = 1, 1
20868 : i = i + 1
20869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
20871 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
20872 : END DO
20873 : END DO
20874 : END DO
20875 : s_offset_d1 = s_offset_d1 + 1
20876 : END DO
20877 : s_offset_c1 = s_offset_c1 + 7
20878 : END DO
20879 : s_offset_b1 = s_offset_b1 + 5
20880 : END DO
20881 : s_offset_a1 = s_offset_a1 + 1
20882 : END DO
20883 : END SUBROUTINE contract_sdfs
20884 : #endif
20885 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
20886 : ! **************************************************************************************************
20887 : !> \brief ...
20888 : !> \param work ...
20889 : !> \param nl_a ...
20890 : !> \param nl_b ...
20891 : !> \param nl_c ...
20892 : !> \param nl_d ...
20893 : !> \param sphi_a ...
20894 : !> \param sphi_b ...
20895 : !> \param sphi_c ...
20896 : !> \param sphi_d ...
20897 : !> \param primitives ...
20898 : !> \param buffer1 ...
20899 : !> \param buffer2 ...
20900 : ! **************************************************************************************************
20901 : SUBROUTINE contract_sdfp(work, &
20902 : nl_a, nl_b, nl_c, nl_d, &
20903 : sphi_a, sphi_b, sphi_c, sphi_d, &
20904 : primitives, &
20905 : buffer1, buffer2)
20906 : REAL(dp), DIMENSION(1*6*10*3), INTENT(IN) :: work
20907 : INTEGER :: nl_a, nl_b, nl_c, nl_d
20908 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
20909 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
20910 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
20911 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
20912 : REAL(dp), &
20913 : DIMENSION(1*nl_a, 5*nl_b, 7*nl_c, 3*nl_d) :: primitives
20914 : REAL(dp), DIMENSION(1*6*10*3) :: buffer1, buffer2
20915 :
20916 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
20917 : kmax, s_offset_a1, s_offset_b1, &
20918 : s_offset_c1, s_offset_d1
20919 :
20920 : s_offset_a1 = 0
20921 : DO ia = 1, nl_a
20922 : s_offset_b1 = 0
20923 : DO ib = 1, nl_b
20924 : s_offset_c1 = 0
20925 : DO ic = 1, nl_c
20926 : s_offset_d1 = 0
20927 : DO id = 1, nl_d
20928 : buffer1 = 0.0_dp
20929 : imax = 6*10*3
20930 : kmax = 1
20931 : DO i = 1, imax
20932 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
20933 : END DO
20934 : buffer2 = 0.0_dp
20935 : imax = 1*10*3
20936 : kmax = 6
20937 : DO i = 1, imax
20938 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
20939 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
20940 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
20941 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
20942 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
20943 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
20944 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
20945 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
20946 : END DO
20947 : buffer1 = 0.0_dp
20948 : imax = 1*5*3
20949 : kmax = 10
20950 : DO i = 1, imax
20951 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
20952 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
20953 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
20954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
20955 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
20956 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
20957 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
20958 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
20959 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
20960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
20961 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
20962 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
20963 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
20964 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
20965 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
20966 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
20967 : END DO
20968 : imax = 1*5*7
20969 : kmax = 3
20970 : i = 0
20971 : DO i1 = 1, 7
20972 : DO i2 = 1, 5
20973 : DO i3 = 1, 1
20974 : i = i + 1
20975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
20976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
20977 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
20978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
20979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
20980 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
20981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
20982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
20983 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
20984 : END DO
20985 : END DO
20986 : END DO
20987 : s_offset_d1 = s_offset_d1 + 3
20988 : END DO
20989 : s_offset_c1 = s_offset_c1 + 7
20990 : END DO
20991 : s_offset_b1 = s_offset_b1 + 5
20992 : END DO
20993 : s_offset_a1 = s_offset_a1 + 1
20994 : END DO
20995 : END SUBROUTINE contract_sdfp
20996 : #endif
20997 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
20998 : ! **************************************************************************************************
20999 : !> \brief ...
21000 : !> \param work ...
21001 : !> \param nl_a ...
21002 : !> \param nl_b ...
21003 : !> \param nl_c ...
21004 : !> \param nl_d ...
21005 : !> \param sphi_a ...
21006 : !> \param sphi_b ...
21007 : !> \param sphi_c ...
21008 : !> \param sphi_d ...
21009 : !> \param primitives ...
21010 : !> \param buffer1 ...
21011 : !> \param buffer2 ...
21012 : ! **************************************************************************************************
21013 : SUBROUTINE contract_sdfd(work, &
21014 : nl_a, nl_b, nl_c, nl_d, &
21015 : sphi_a, sphi_b, sphi_c, sphi_d, &
21016 : primitives, &
21017 : buffer1, buffer2)
21018 : REAL(dp), DIMENSION(1*6*10*6), INTENT(IN) :: work
21019 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21020 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21021 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21022 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
21023 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
21024 : REAL(dp), &
21025 : DIMENSION(1*nl_a, 5*nl_b, 7*nl_c, 5*nl_d) :: primitives
21026 : REAL(dp), DIMENSION(1*6*10*6) :: buffer1, buffer2
21027 :
21028 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21029 : kmax, s_offset_a1, s_offset_b1, &
21030 : s_offset_c1, s_offset_d1
21031 :
21032 : s_offset_a1 = 0
21033 : DO ia = 1, nl_a
21034 : s_offset_b1 = 0
21035 : DO ib = 1, nl_b
21036 : s_offset_c1 = 0
21037 : DO ic = 1, nl_c
21038 : s_offset_d1 = 0
21039 : DO id = 1, nl_d
21040 : buffer1 = 0.0_dp
21041 : imax = 6*10*6
21042 : kmax = 1
21043 : DO i = 1, imax
21044 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21045 : END DO
21046 : buffer2 = 0.0_dp
21047 : imax = 1*10*6
21048 : kmax = 6
21049 : DO i = 1, imax
21050 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21051 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21052 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21053 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21054 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21055 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21056 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21057 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21058 : END DO
21059 : buffer1 = 0.0_dp
21060 : imax = 1*5*6
21061 : kmax = 10
21062 : DO i = 1, imax
21063 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21064 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21065 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21066 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21067 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
21068 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21069 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21070 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
21071 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21072 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21073 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21074 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21075 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
21076 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21077 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21078 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
21079 : END DO
21080 : imax = 1*5*7
21081 : kmax = 6
21082 : i = 0
21083 : DO i1 = 1, 7
21084 : DO i2 = 1, 5
21085 : DO i3 = 1, 1
21086 : i = i + 1
21087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21089 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
21090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21092 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
21093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21095 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21098 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
21099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21101 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
21102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21104 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
21105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21107 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
21108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21110 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
21111 : END DO
21112 : END DO
21113 : END DO
21114 : s_offset_d1 = s_offset_d1 + 5
21115 : END DO
21116 : s_offset_c1 = s_offset_c1 + 7
21117 : END DO
21118 : s_offset_b1 = s_offset_b1 + 5
21119 : END DO
21120 : s_offset_a1 = s_offset_a1 + 1
21121 : END DO
21122 : END SUBROUTINE contract_sdfd
21123 : #endif
21124 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
21125 : ! **************************************************************************************************
21126 : !> \brief ...
21127 : !> \param work ...
21128 : !> \param nl_a ...
21129 : !> \param nl_b ...
21130 : !> \param nl_c ...
21131 : !> \param nl_d ...
21132 : !> \param sphi_a ...
21133 : !> \param sphi_b ...
21134 : !> \param sphi_c ...
21135 : !> \param sphi_d ...
21136 : !> \param primitives ...
21137 : !> \param buffer1 ...
21138 : !> \param buffer2 ...
21139 : ! **************************************************************************************************
21140 : SUBROUTINE contract_sdff(work, &
21141 : nl_a, nl_b, nl_c, nl_d, &
21142 : sphi_a, sphi_b, sphi_c, sphi_d, &
21143 : primitives, &
21144 : buffer1, buffer2)
21145 : REAL(dp), DIMENSION(1*6*10*10), INTENT(IN) :: work
21146 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21147 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21148 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21149 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
21150 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
21151 : REAL(dp), &
21152 : DIMENSION(1*nl_a, 5*nl_b, 7*nl_c, 7*nl_d) :: primitives
21153 : REAL(dp), DIMENSION(1*6*10*10) :: buffer1, buffer2
21154 :
21155 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21156 : kmax, s_offset_a1, s_offset_b1, &
21157 : s_offset_c1, s_offset_d1
21158 :
21159 : s_offset_a1 = 0
21160 : DO ia = 1, nl_a
21161 : s_offset_b1 = 0
21162 : DO ib = 1, nl_b
21163 : s_offset_c1 = 0
21164 : DO ic = 1, nl_c
21165 : s_offset_d1 = 0
21166 : DO id = 1, nl_d
21167 : buffer1 = 0.0_dp
21168 : imax = 6*10*10
21169 : kmax = 1
21170 : DO i = 1, imax
21171 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21172 : END DO
21173 : buffer2 = 0.0_dp
21174 : imax = 1*10*10
21175 : kmax = 6
21176 : DO i = 1, imax
21177 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21178 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21179 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21180 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21181 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21182 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21183 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21184 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21185 : END DO
21186 : buffer1 = 0.0_dp
21187 : imax = 1*5*10
21188 : kmax = 10
21189 : DO i = 1, imax
21190 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21191 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21192 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21193 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21194 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
21195 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21196 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21197 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
21198 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21199 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21200 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21201 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21202 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
21203 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21204 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
21206 : END DO
21207 : imax = 1*5*7
21208 : kmax = 10
21209 : i = 0
21210 : DO i1 = 1, 7
21211 : DO i2 = 1, 5
21212 : DO i3 = 1, 1
21213 : i = i + 1
21214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21216 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
21217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21219 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
21220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21222 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21225 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
21226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21228 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
21229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21231 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
21232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21234 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
21235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21237 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
21238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21240 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
21241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21243 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
21244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21246 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
21247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21249 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
21250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21252 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
21253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21255 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
21256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21258 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
21259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21261 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
21262 : END DO
21263 : END DO
21264 : END DO
21265 : s_offset_d1 = s_offset_d1 + 7
21266 : END DO
21267 : s_offset_c1 = s_offset_c1 + 7
21268 : END DO
21269 : s_offset_b1 = s_offset_b1 + 5
21270 : END DO
21271 : s_offset_a1 = s_offset_a1 + 1
21272 : END DO
21273 : END SUBROUTINE contract_sdff
21274 : #endif
21275 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
21276 : ! **************************************************************************************************
21277 : !> \brief ...
21278 : !> \param work ...
21279 : !> \param nl_a ...
21280 : !> \param nl_b ...
21281 : !> \param nl_c ...
21282 : !> \param nl_d ...
21283 : !> \param sphi_a ...
21284 : !> \param sphi_b ...
21285 : !> \param sphi_c ...
21286 : !> \param sphi_d ...
21287 : !> \param primitives ...
21288 : !> \param buffer1 ...
21289 : !> \param buffer2 ...
21290 : ! **************************************************************************************************
21291 : SUBROUTINE contract_sdfg(work, &
21292 : nl_a, nl_b, nl_c, nl_d, &
21293 : sphi_a, sphi_b, sphi_c, sphi_d, &
21294 : primitives, &
21295 : buffer1, buffer2)
21296 : REAL(dp), DIMENSION(1*6*10*15), INTENT(IN) :: work
21297 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21298 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21299 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21300 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
21301 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
21302 : REAL(dp), &
21303 : DIMENSION(1*nl_a, 5*nl_b, 7*nl_c, 9*nl_d) :: primitives
21304 : REAL(dp), DIMENSION(1*6*10*15) :: buffer1, buffer2
21305 :
21306 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21307 : kmax, s_offset_a1, s_offset_b1, &
21308 : s_offset_c1, s_offset_d1
21309 :
21310 : s_offset_a1 = 0
21311 : DO ia = 1, nl_a
21312 : s_offset_b1 = 0
21313 : DO ib = 1, nl_b
21314 : s_offset_c1 = 0
21315 : DO ic = 1, nl_c
21316 : s_offset_d1 = 0
21317 : DO id = 1, nl_d
21318 : buffer1 = 0.0_dp
21319 : imax = 6*10*15
21320 : kmax = 1
21321 : DO i = 1, imax
21322 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21323 : END DO
21324 : buffer2 = 0.0_dp
21325 : imax = 1*10*15
21326 : kmax = 6
21327 : DO i = 1, imax
21328 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21329 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21330 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21331 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21332 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21333 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21334 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21335 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21336 : END DO
21337 : buffer1 = 0.0_dp
21338 : imax = 1*5*15
21339 : kmax = 10
21340 : DO i = 1, imax
21341 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21342 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21343 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21344 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
21346 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21347 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21348 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
21349 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21351 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21352 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21353 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
21354 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21355 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21356 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
21357 : END DO
21358 : imax = 1*5*7
21359 : kmax = 15
21360 : i = 0
21361 : DO i1 = 1, 7
21362 : DO i2 = 1, 5
21363 : DO i3 = 1, 1
21364 : i = i + 1
21365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21367 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
21368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21370 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
21371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
21372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
21373 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
21374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21376 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21379 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
21380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21382 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
21383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
21384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
21385 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
21386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21388 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
21389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
21390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
21391 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
21392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21394 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
21395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21397 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
21398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21400 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
21401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21403 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
21404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21406 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
21407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21409 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
21410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21412 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
21413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
21414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
21415 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
21416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21418 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
21419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21421 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
21422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21424 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
21425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21427 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
21428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
21429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
21430 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
21431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21433 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
21434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21436 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
21437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21439 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
21440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21442 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
21443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21445 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
21446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21448 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
21449 : END DO
21450 : END DO
21451 : END DO
21452 : s_offset_d1 = s_offset_d1 + 9
21453 : END DO
21454 : s_offset_c1 = s_offset_c1 + 7
21455 : END DO
21456 : s_offset_b1 = s_offset_b1 + 5
21457 : END DO
21458 : s_offset_a1 = s_offset_a1 + 1
21459 : END DO
21460 : END SUBROUTINE contract_sdfg
21461 : #endif
21462 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
21463 : ! **************************************************************************************************
21464 : !> \brief ...
21465 : !> \param work ...
21466 : !> \param nl_a ...
21467 : !> \param nl_b ...
21468 : !> \param nl_c ...
21469 : !> \param nl_d ...
21470 : !> \param sphi_a ...
21471 : !> \param sphi_b ...
21472 : !> \param sphi_c ...
21473 : !> \param sphi_d ...
21474 : !> \param primitives ...
21475 : !> \param buffer1 ...
21476 : !> \param buffer2 ...
21477 : ! **************************************************************************************************
21478 : SUBROUTINE contract_sdgs(work, &
21479 : nl_a, nl_b, nl_c, nl_d, &
21480 : sphi_a, sphi_b, sphi_c, sphi_d, &
21481 : primitives, &
21482 : buffer1, buffer2)
21483 : REAL(dp), DIMENSION(1*6*15*1), INTENT(IN) :: work
21484 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21485 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21486 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21487 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
21488 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
21489 : REAL(dp), &
21490 : DIMENSION(1*nl_a, 5*nl_b, 9*nl_c, 1*nl_d) :: primitives
21491 : REAL(dp), DIMENSION(1*6*15*1) :: buffer1, buffer2
21492 :
21493 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21494 : kmax, s_offset_a1, s_offset_b1, &
21495 : s_offset_c1, s_offset_d1
21496 :
21497 : s_offset_a1 = 0
21498 : DO ia = 1, nl_a
21499 : s_offset_b1 = 0
21500 : DO ib = 1, nl_b
21501 : s_offset_c1 = 0
21502 : DO ic = 1, nl_c
21503 : s_offset_d1 = 0
21504 : DO id = 1, nl_d
21505 : buffer1 = 0.0_dp
21506 : imax = 6*15*1
21507 : kmax = 1
21508 : DO i = 1, imax
21509 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21510 : END DO
21511 : buffer2 = 0.0_dp
21512 : imax = 1*15*1
21513 : kmax = 6
21514 : DO i = 1, imax
21515 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21516 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21517 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21518 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21519 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21520 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21521 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21522 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21523 : END DO
21524 : buffer1 = 0.0_dp
21525 : imax = 1*5*1
21526 : kmax = 15
21527 : DO i = 1, imax
21528 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21529 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21530 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
21531 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21532 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21533 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21534 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
21535 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21536 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
21537 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21538 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
21539 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21540 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
21541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21542 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21543 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21544 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
21545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21546 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
21547 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
21548 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
21549 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
21550 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
21551 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
21552 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
21553 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
21554 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
21555 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
21556 : END DO
21557 : imax = 1*5*9
21558 : kmax = 1
21559 : i = 0
21560 : DO i1 = 1, 9
21561 : DO i2 = 1, 5
21562 : DO i3 = 1, 1
21563 : i = i + 1
21564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
21566 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
21567 : END DO
21568 : END DO
21569 : END DO
21570 : s_offset_d1 = s_offset_d1 + 1
21571 : END DO
21572 : s_offset_c1 = s_offset_c1 + 9
21573 : END DO
21574 : s_offset_b1 = s_offset_b1 + 5
21575 : END DO
21576 : s_offset_a1 = s_offset_a1 + 1
21577 : END DO
21578 : END SUBROUTINE contract_sdgs
21579 : #endif
21580 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
21581 : ! **************************************************************************************************
21582 : !> \brief ...
21583 : !> \param work ...
21584 : !> \param nl_a ...
21585 : !> \param nl_b ...
21586 : !> \param nl_c ...
21587 : !> \param nl_d ...
21588 : !> \param sphi_a ...
21589 : !> \param sphi_b ...
21590 : !> \param sphi_c ...
21591 : !> \param sphi_d ...
21592 : !> \param primitives ...
21593 : !> \param buffer1 ...
21594 : !> \param buffer2 ...
21595 : ! **************************************************************************************************
21596 : SUBROUTINE contract_sdgp(work, &
21597 : nl_a, nl_b, nl_c, nl_d, &
21598 : sphi_a, sphi_b, sphi_c, sphi_d, &
21599 : primitives, &
21600 : buffer1, buffer2)
21601 : REAL(dp), DIMENSION(1*6*15*3), INTENT(IN) :: work
21602 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21603 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21604 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21605 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
21606 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
21607 : REAL(dp), &
21608 : DIMENSION(1*nl_a, 5*nl_b, 9*nl_c, 3*nl_d) :: primitives
21609 : REAL(dp), DIMENSION(1*6*15*3) :: buffer1, buffer2
21610 :
21611 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21612 : kmax, s_offset_a1, s_offset_b1, &
21613 : s_offset_c1, s_offset_d1
21614 :
21615 : s_offset_a1 = 0
21616 : DO ia = 1, nl_a
21617 : s_offset_b1 = 0
21618 : DO ib = 1, nl_b
21619 : s_offset_c1 = 0
21620 : DO ic = 1, nl_c
21621 : s_offset_d1 = 0
21622 : DO id = 1, nl_d
21623 : buffer1 = 0.0_dp
21624 : imax = 6*15*3
21625 : kmax = 1
21626 : DO i = 1, imax
21627 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21628 : END DO
21629 : buffer2 = 0.0_dp
21630 : imax = 1*15*3
21631 : kmax = 6
21632 : DO i = 1, imax
21633 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21634 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21635 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21636 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21637 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21638 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21639 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21640 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21641 : END DO
21642 : buffer1 = 0.0_dp
21643 : imax = 1*5*3
21644 : kmax = 15
21645 : DO i = 1, imax
21646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21647 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21648 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
21649 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21650 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21651 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21652 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
21653 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21654 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
21655 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21656 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
21657 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21658 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
21659 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21660 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21661 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21662 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
21663 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21664 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
21665 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
21666 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
21667 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
21668 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
21669 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
21670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
21671 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
21672 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
21673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
21674 : END DO
21675 : imax = 1*5*9
21676 : kmax = 3
21677 : i = 0
21678 : DO i1 = 1, 9
21679 : DO i2 = 1, 5
21680 : DO i3 = 1, 1
21681 : i = i + 1
21682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
21684 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
21685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
21687 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
21690 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
21691 : END DO
21692 : END DO
21693 : END DO
21694 : s_offset_d1 = s_offset_d1 + 3
21695 : END DO
21696 : s_offset_c1 = s_offset_c1 + 9
21697 : END DO
21698 : s_offset_b1 = s_offset_b1 + 5
21699 : END DO
21700 : s_offset_a1 = s_offset_a1 + 1
21701 : END DO
21702 : END SUBROUTINE contract_sdgp
21703 : #endif
21704 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
21705 : ! **************************************************************************************************
21706 : !> \brief ...
21707 : !> \param work ...
21708 : !> \param nl_a ...
21709 : !> \param nl_b ...
21710 : !> \param nl_c ...
21711 : !> \param nl_d ...
21712 : !> \param sphi_a ...
21713 : !> \param sphi_b ...
21714 : !> \param sphi_c ...
21715 : !> \param sphi_d ...
21716 : !> \param primitives ...
21717 : !> \param buffer1 ...
21718 : !> \param buffer2 ...
21719 : ! **************************************************************************************************
21720 : SUBROUTINE contract_sdgd(work, &
21721 : nl_a, nl_b, nl_c, nl_d, &
21722 : sphi_a, sphi_b, sphi_c, sphi_d, &
21723 : primitives, &
21724 : buffer1, buffer2)
21725 : REAL(dp), DIMENSION(1*6*15*6), INTENT(IN) :: work
21726 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21727 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21728 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21729 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
21730 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
21731 : REAL(dp), &
21732 : DIMENSION(1*nl_a, 5*nl_b, 9*nl_c, 5*nl_d) :: primitives
21733 : REAL(dp), DIMENSION(1*6*15*6) :: buffer1, buffer2
21734 :
21735 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21736 : kmax, s_offset_a1, s_offset_b1, &
21737 : s_offset_c1, s_offset_d1
21738 :
21739 : s_offset_a1 = 0
21740 : DO ia = 1, nl_a
21741 : s_offset_b1 = 0
21742 : DO ib = 1, nl_b
21743 : s_offset_c1 = 0
21744 : DO ic = 1, nl_c
21745 : s_offset_d1 = 0
21746 : DO id = 1, nl_d
21747 : buffer1 = 0.0_dp
21748 : imax = 6*15*6
21749 : kmax = 1
21750 : DO i = 1, imax
21751 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21752 : END DO
21753 : buffer2 = 0.0_dp
21754 : imax = 1*15*6
21755 : kmax = 6
21756 : DO i = 1, imax
21757 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21758 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21759 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21760 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21761 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21762 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21763 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21764 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21765 : END DO
21766 : buffer1 = 0.0_dp
21767 : imax = 1*5*6
21768 : kmax = 15
21769 : DO i = 1, imax
21770 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21771 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21772 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
21773 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21774 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21775 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21776 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
21777 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21778 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
21779 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21780 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
21781 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21782 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
21783 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21784 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21785 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21786 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
21787 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21788 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
21789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
21790 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
21791 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
21792 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
21793 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
21794 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
21795 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
21796 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
21797 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
21798 : END DO
21799 : imax = 1*5*9
21800 : kmax = 6
21801 : i = 0
21802 : DO i1 = 1, 9
21803 : DO i2 = 1, 5
21804 : DO i3 = 1, 1
21805 : i = i + 1
21806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21808 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
21809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21811 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
21812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21814 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21817 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
21818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21820 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
21821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21823 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
21824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21826 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
21827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21829 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
21830 : END DO
21831 : END DO
21832 : END DO
21833 : s_offset_d1 = s_offset_d1 + 5
21834 : END DO
21835 : s_offset_c1 = s_offset_c1 + 9
21836 : END DO
21837 : s_offset_b1 = s_offset_b1 + 5
21838 : END DO
21839 : s_offset_a1 = s_offset_a1 + 1
21840 : END DO
21841 : END SUBROUTINE contract_sdgd
21842 : #endif
21843 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
21844 : ! **************************************************************************************************
21845 : !> \brief ...
21846 : !> \param work ...
21847 : !> \param nl_a ...
21848 : !> \param nl_b ...
21849 : !> \param nl_c ...
21850 : !> \param nl_d ...
21851 : !> \param sphi_a ...
21852 : !> \param sphi_b ...
21853 : !> \param sphi_c ...
21854 : !> \param sphi_d ...
21855 : !> \param primitives ...
21856 : !> \param buffer1 ...
21857 : !> \param buffer2 ...
21858 : ! **************************************************************************************************
21859 : SUBROUTINE contract_sdgf(work, &
21860 : nl_a, nl_b, nl_c, nl_d, &
21861 : sphi_a, sphi_b, sphi_c, sphi_d, &
21862 : primitives, &
21863 : buffer1, buffer2)
21864 : REAL(dp), DIMENSION(1*6*15*10), INTENT(IN) :: work
21865 : INTEGER :: nl_a, nl_b, nl_c, nl_d
21866 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
21867 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
21868 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
21869 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
21870 : REAL(dp), &
21871 : DIMENSION(1*nl_a, 5*nl_b, 9*nl_c, 7*nl_d) :: primitives
21872 : REAL(dp), DIMENSION(1*6*15*10) :: buffer1, buffer2
21873 :
21874 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
21875 : kmax, s_offset_a1, s_offset_b1, &
21876 : s_offset_c1, s_offset_d1
21877 :
21878 : s_offset_a1 = 0
21879 : DO ia = 1, nl_a
21880 : s_offset_b1 = 0
21881 : DO ib = 1, nl_b
21882 : s_offset_c1 = 0
21883 : DO ic = 1, nl_c
21884 : s_offset_d1 = 0
21885 : DO id = 1, nl_d
21886 : buffer1 = 0.0_dp
21887 : imax = 6*15*10
21888 : kmax = 1
21889 : DO i = 1, imax
21890 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
21891 : END DO
21892 : buffer2 = 0.0_dp
21893 : imax = 1*15*10
21894 : kmax = 6
21895 : DO i = 1, imax
21896 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
21897 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
21898 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
21899 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
21900 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
21901 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
21902 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
21903 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
21904 : END DO
21905 : buffer1 = 0.0_dp
21906 : imax = 1*5*10
21907 : kmax = 15
21908 : DO i = 1, imax
21909 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
21910 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
21911 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
21912 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
21913 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
21914 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
21915 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
21916 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
21917 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
21918 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
21919 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
21920 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
21921 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
21922 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
21923 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
21924 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
21925 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
21926 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
21927 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
21928 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
21929 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
21930 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
21931 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
21932 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
21933 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
21934 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
21935 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
21936 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
21937 : END DO
21938 : imax = 1*5*9
21939 : kmax = 10
21940 : i = 0
21941 : DO i1 = 1, 9
21942 : DO i2 = 1, 5
21943 : DO i3 = 1, 1
21944 : i = i + 1
21945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21947 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
21948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21950 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
21951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21953 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
21954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21956 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
21957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21959 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
21960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21962 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
21963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21965 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
21966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
21967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
21968 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
21969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
21970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
21971 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
21972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
21973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
21974 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
21975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
21976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
21977 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
21978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21980 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
21981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21983 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
21984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
21985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
21986 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
21987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
21988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
21989 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
21990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
21991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
21992 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
21993 : END DO
21994 : END DO
21995 : END DO
21996 : s_offset_d1 = s_offset_d1 + 7
21997 : END DO
21998 : s_offset_c1 = s_offset_c1 + 9
21999 : END DO
22000 : s_offset_b1 = s_offset_b1 + 5
22001 : END DO
22002 : s_offset_a1 = s_offset_a1 + 1
22003 : END DO
22004 : END SUBROUTINE contract_sdgf
22005 : #endif
22006 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
22007 : ! **************************************************************************************************
22008 : !> \brief ...
22009 : !> \param work ...
22010 : !> \param nl_a ...
22011 : !> \param nl_b ...
22012 : !> \param nl_c ...
22013 : !> \param nl_d ...
22014 : !> \param sphi_a ...
22015 : !> \param sphi_b ...
22016 : !> \param sphi_c ...
22017 : !> \param sphi_d ...
22018 : !> \param primitives ...
22019 : !> \param buffer1 ...
22020 : !> \param buffer2 ...
22021 : ! **************************************************************************************************
22022 : SUBROUTINE contract_sdgg(work, &
22023 : nl_a, nl_b, nl_c, nl_d, &
22024 : sphi_a, sphi_b, sphi_c, sphi_d, &
22025 : primitives, &
22026 : buffer1, buffer2)
22027 : REAL(dp), DIMENSION(1*6*15*15), INTENT(IN) :: work
22028 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22029 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22030 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
22031 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
22032 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
22033 : REAL(dp), &
22034 : DIMENSION(1*nl_a, 5*nl_b, 9*nl_c, 9*nl_d) :: primitives
22035 : REAL(dp), DIMENSION(1*6*15*15) :: buffer1, buffer2
22036 :
22037 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22038 : kmax, s_offset_a1, s_offset_b1, &
22039 : s_offset_c1, s_offset_d1
22040 :
22041 : s_offset_a1 = 0
22042 : DO ia = 1, nl_a
22043 : s_offset_b1 = 0
22044 : DO ib = 1, nl_b
22045 : s_offset_c1 = 0
22046 : DO ic = 1, nl_c
22047 : s_offset_d1 = 0
22048 : DO id = 1, nl_d
22049 : buffer1 = 0.0_dp
22050 : imax = 6*15*15
22051 : kmax = 1
22052 : DO i = 1, imax
22053 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22054 : END DO
22055 : buffer2 = 0.0_dp
22056 : imax = 1*15*15
22057 : kmax = 6
22058 : DO i = 1, imax
22059 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
22060 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22061 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22062 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22063 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
22064 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22065 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22066 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
22067 : END DO
22068 : buffer1 = 0.0_dp
22069 : imax = 1*5*15
22070 : kmax = 15
22071 : DO i = 1, imax
22072 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
22073 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
22074 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
22075 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
22076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
22077 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
22078 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
22079 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
22080 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
22081 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
22082 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
22083 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
22084 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
22085 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
22086 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
22087 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
22088 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
22089 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
22090 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
22091 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
22092 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
22093 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
22094 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
22095 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
22096 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
22097 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
22098 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
22099 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
22100 : END DO
22101 : imax = 1*5*9
22102 : kmax = 15
22103 : i = 0
22104 : DO i1 = 1, 9
22105 : DO i2 = 1, 5
22106 : DO i3 = 1, 1
22107 : i = i + 1
22108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22110 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
22111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22113 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
22114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22116 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
22117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22119 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
22120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22122 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
22123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22125 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
22126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
22127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
22128 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
22129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22131 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
22132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22134 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
22135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22137 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
22138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22140 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
22141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22143 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
22144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22146 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
22147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22149 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
22150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22152 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
22153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22155 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
22156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
22157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
22158 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
22159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22161 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
22162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22164 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
22165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22167 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
22168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22170 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
22171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22173 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
22174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22176 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
22177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22179 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
22180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22182 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
22183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22185 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
22186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22188 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
22189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22191 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
22192 : END DO
22193 : END DO
22194 : END DO
22195 : s_offset_d1 = s_offset_d1 + 9
22196 : END DO
22197 : s_offset_c1 = s_offset_c1 + 9
22198 : END DO
22199 : s_offset_b1 = s_offset_b1 + 5
22200 : END DO
22201 : s_offset_a1 = s_offset_a1 + 1
22202 : END DO
22203 : END SUBROUTINE contract_sdgg
22204 : #endif
22205 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22206 : ! **************************************************************************************************
22207 : !> \brief ...
22208 : !> \param work ...
22209 : !> \param nl_a ...
22210 : !> \param nl_b ...
22211 : !> \param nl_c ...
22212 : !> \param nl_d ...
22213 : !> \param sphi_a ...
22214 : !> \param sphi_b ...
22215 : !> \param sphi_c ...
22216 : !> \param sphi_d ...
22217 : !> \param primitives ...
22218 : !> \param buffer1 ...
22219 : !> \param buffer2 ...
22220 : ! **************************************************************************************************
22221 : SUBROUTINE contract_sfss(work, &
22222 : nl_a, nl_b, nl_c, nl_d, &
22223 : sphi_a, sphi_b, sphi_c, sphi_d, &
22224 : primitives, &
22225 : buffer1, buffer2)
22226 : REAL(dp), DIMENSION(1*10*1*1), INTENT(IN) :: work
22227 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22228 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22229 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22230 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
22231 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
22232 : REAL(dp), &
22233 : DIMENSION(1*nl_a, 7*nl_b, 1*nl_c, 1*nl_d) :: primitives
22234 : REAL(dp), DIMENSION(1*10*1*1) :: buffer1, buffer2
22235 :
22236 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22237 : kmax, s_offset_a1, s_offset_b1, &
22238 : s_offset_c1, s_offset_d1
22239 :
22240 : s_offset_a1 = 0
22241 : DO ia = 1, nl_a
22242 : s_offset_b1 = 0
22243 : DO ib = 1, nl_b
22244 : s_offset_c1 = 0
22245 : DO ic = 1, nl_c
22246 : s_offset_d1 = 0
22247 : DO id = 1, nl_d
22248 : buffer1 = 0.0_dp
22249 : imax = 10*1*1
22250 : kmax = 1
22251 : DO i = 1, imax
22252 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22253 : END DO
22254 : buffer2 = 0.0_dp
22255 : imax = 1*1*1
22256 : kmax = 10
22257 : DO i = 1, imax
22258 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22259 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22260 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22261 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22262 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22263 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22264 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22265 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22266 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22267 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22268 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22269 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22270 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22271 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22272 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22273 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22274 : END DO
22275 : buffer1 = 0.0_dp
22276 : imax = 1*7*1
22277 : kmax = 1
22278 : DO i = 1, imax
22279 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
22280 : END DO
22281 : imax = 1*7*1
22282 : kmax = 1
22283 : i = 0
22284 : DO i1 = 1, 1
22285 : DO i2 = 1, 7
22286 : DO i3 = 1, 1
22287 : i = i + 1
22288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
22290 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
22291 : END DO
22292 : END DO
22293 : END DO
22294 : s_offset_d1 = s_offset_d1 + 1
22295 : END DO
22296 : s_offset_c1 = s_offset_c1 + 1
22297 : END DO
22298 : s_offset_b1 = s_offset_b1 + 7
22299 : END DO
22300 : s_offset_a1 = s_offset_a1 + 1
22301 : END DO
22302 : END SUBROUTINE contract_sfss
22303 : #endif
22304 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22305 : ! **************************************************************************************************
22306 : !> \brief ...
22307 : !> \param work ...
22308 : !> \param nl_a ...
22309 : !> \param nl_b ...
22310 : !> \param nl_c ...
22311 : !> \param nl_d ...
22312 : !> \param sphi_a ...
22313 : !> \param sphi_b ...
22314 : !> \param sphi_c ...
22315 : !> \param sphi_d ...
22316 : !> \param primitives ...
22317 : !> \param buffer1 ...
22318 : !> \param buffer2 ...
22319 : ! **************************************************************************************************
22320 : SUBROUTINE contract_sfsp(work, &
22321 : nl_a, nl_b, nl_c, nl_d, &
22322 : sphi_a, sphi_b, sphi_c, sphi_d, &
22323 : primitives, &
22324 : buffer1, buffer2)
22325 : REAL(dp), DIMENSION(1*10*1*3), INTENT(IN) :: work
22326 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22327 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22328 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22329 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
22330 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
22331 : REAL(dp), &
22332 : DIMENSION(1*nl_a, 7*nl_b, 1*nl_c, 3*nl_d) :: primitives
22333 : REAL(dp), DIMENSION(1*10*1*3) :: buffer1, buffer2
22334 :
22335 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22336 : kmax, s_offset_a1, s_offset_b1, &
22337 : s_offset_c1, s_offset_d1
22338 :
22339 : s_offset_a1 = 0
22340 : DO ia = 1, nl_a
22341 : s_offset_b1 = 0
22342 : DO ib = 1, nl_b
22343 : s_offset_c1 = 0
22344 : DO ic = 1, nl_c
22345 : s_offset_d1 = 0
22346 : DO id = 1, nl_d
22347 : buffer1 = 0.0_dp
22348 : imax = 10*1*3
22349 : kmax = 1
22350 : DO i = 1, imax
22351 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22352 : END DO
22353 : buffer2 = 0.0_dp
22354 : imax = 1*1*3
22355 : kmax = 10
22356 : DO i = 1, imax
22357 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22358 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22359 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22360 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22361 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22362 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22363 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22364 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22365 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22366 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22367 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22368 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22369 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22370 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22371 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22372 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22373 : END DO
22374 : buffer1 = 0.0_dp
22375 : imax = 1*7*3
22376 : kmax = 1
22377 : DO i = 1, imax
22378 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
22379 : END DO
22380 : imax = 1*7*1
22381 : kmax = 3
22382 : i = 0
22383 : DO i1 = 1, 1
22384 : DO i2 = 1, 7
22385 : DO i3 = 1, 1
22386 : i = i + 1
22387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22388 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
22389 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
22390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
22392 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
22393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
22395 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
22396 : END DO
22397 : END DO
22398 : END DO
22399 : s_offset_d1 = s_offset_d1 + 3
22400 : END DO
22401 : s_offset_c1 = s_offset_c1 + 1
22402 : END DO
22403 : s_offset_b1 = s_offset_b1 + 7
22404 : END DO
22405 : s_offset_a1 = s_offset_a1 + 1
22406 : END DO
22407 : END SUBROUTINE contract_sfsp
22408 : #endif
22409 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22410 : ! **************************************************************************************************
22411 : !> \brief ...
22412 : !> \param work ...
22413 : !> \param nl_a ...
22414 : !> \param nl_b ...
22415 : !> \param nl_c ...
22416 : !> \param nl_d ...
22417 : !> \param sphi_a ...
22418 : !> \param sphi_b ...
22419 : !> \param sphi_c ...
22420 : !> \param sphi_d ...
22421 : !> \param primitives ...
22422 : !> \param buffer1 ...
22423 : !> \param buffer2 ...
22424 : ! **************************************************************************************************
22425 : SUBROUTINE contract_sfsd(work, &
22426 : nl_a, nl_b, nl_c, nl_d, &
22427 : sphi_a, sphi_b, sphi_c, sphi_d, &
22428 : primitives, &
22429 : buffer1, buffer2)
22430 : REAL(dp), DIMENSION(1*10*1*6), INTENT(IN) :: work
22431 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22432 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22433 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22434 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
22435 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
22436 : REAL(dp), &
22437 : DIMENSION(1*nl_a, 7*nl_b, 1*nl_c, 5*nl_d) :: primitives
22438 : REAL(dp), DIMENSION(1*10*1*6) :: buffer1, buffer2
22439 :
22440 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22441 : kmax, s_offset_a1, s_offset_b1, &
22442 : s_offset_c1, s_offset_d1
22443 :
22444 : s_offset_a1 = 0
22445 : DO ia = 1, nl_a
22446 : s_offset_b1 = 0
22447 : DO ib = 1, nl_b
22448 : s_offset_c1 = 0
22449 : DO ic = 1, nl_c
22450 : s_offset_d1 = 0
22451 : DO id = 1, nl_d
22452 : buffer1 = 0.0_dp
22453 : imax = 10*1*6
22454 : kmax = 1
22455 : DO i = 1, imax
22456 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22457 : END DO
22458 : buffer2 = 0.0_dp
22459 : imax = 1*1*6
22460 : kmax = 10
22461 : DO i = 1, imax
22462 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22463 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22464 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22465 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22466 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22467 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22468 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22469 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22470 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22471 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22472 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22473 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22474 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22475 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22476 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22477 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22478 : END DO
22479 : buffer1 = 0.0_dp
22480 : imax = 1*7*6
22481 : kmax = 1
22482 : DO i = 1, imax
22483 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
22484 : END DO
22485 : imax = 1*7*1
22486 : kmax = 6
22487 : i = 0
22488 : DO i1 = 1, 1
22489 : DO i2 = 1, 7
22490 : DO i3 = 1, 1
22491 : i = i + 1
22492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22494 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
22495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22497 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
22498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22500 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
22501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22503 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
22504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22506 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
22507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22509 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
22510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22512 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
22513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22515 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
22516 : END DO
22517 : END DO
22518 : END DO
22519 : s_offset_d1 = s_offset_d1 + 5
22520 : END DO
22521 : s_offset_c1 = s_offset_c1 + 1
22522 : END DO
22523 : s_offset_b1 = s_offset_b1 + 7
22524 : END DO
22525 : s_offset_a1 = s_offset_a1 + 1
22526 : END DO
22527 : END SUBROUTINE contract_sfsd
22528 : #endif
22529 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22530 : ! **************************************************************************************************
22531 : !> \brief ...
22532 : !> \param work ...
22533 : !> \param nl_a ...
22534 : !> \param nl_b ...
22535 : !> \param nl_c ...
22536 : !> \param nl_d ...
22537 : !> \param sphi_a ...
22538 : !> \param sphi_b ...
22539 : !> \param sphi_c ...
22540 : !> \param sphi_d ...
22541 : !> \param primitives ...
22542 : !> \param buffer1 ...
22543 : !> \param buffer2 ...
22544 : ! **************************************************************************************************
22545 : SUBROUTINE contract_sfsf(work, &
22546 : nl_a, nl_b, nl_c, nl_d, &
22547 : sphi_a, sphi_b, sphi_c, sphi_d, &
22548 : primitives, &
22549 : buffer1, buffer2)
22550 : REAL(dp), DIMENSION(1*10*1*10), INTENT(IN) :: work
22551 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22552 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22553 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22554 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
22555 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
22556 : REAL(dp), &
22557 : DIMENSION(1*nl_a, 7*nl_b, 1*nl_c, 7*nl_d) :: primitives
22558 : REAL(dp), DIMENSION(1*10*1*10) :: buffer1, buffer2
22559 :
22560 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22561 : kmax, s_offset_a1, s_offset_b1, &
22562 : s_offset_c1, s_offset_d1
22563 :
22564 : s_offset_a1 = 0
22565 : DO ia = 1, nl_a
22566 : s_offset_b1 = 0
22567 : DO ib = 1, nl_b
22568 : s_offset_c1 = 0
22569 : DO ic = 1, nl_c
22570 : s_offset_d1 = 0
22571 : DO id = 1, nl_d
22572 : buffer1 = 0.0_dp
22573 : imax = 10*1*10
22574 : kmax = 1
22575 : DO i = 1, imax
22576 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22577 : END DO
22578 : buffer2 = 0.0_dp
22579 : imax = 1*1*10
22580 : kmax = 10
22581 : DO i = 1, imax
22582 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22583 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22584 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22585 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22586 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22587 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22588 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22589 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22590 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22591 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22592 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22593 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22594 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22595 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22596 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22597 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22598 : END DO
22599 : buffer1 = 0.0_dp
22600 : imax = 1*7*10
22601 : kmax = 1
22602 : DO i = 1, imax
22603 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
22604 : END DO
22605 : imax = 1*7*1
22606 : kmax = 10
22607 : i = 0
22608 : DO i1 = 1, 1
22609 : DO i2 = 1, 7
22610 : DO i3 = 1, 1
22611 : i = i + 1
22612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22614 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
22615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22617 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
22618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22620 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
22621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22623 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
22624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22626 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
22627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22629 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
22630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22632 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
22633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22635 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
22636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22638 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
22639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22641 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
22642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22644 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
22645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22647 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
22648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22650 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
22651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22653 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
22654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22656 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
22657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22659 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
22660 : END DO
22661 : END DO
22662 : END DO
22663 : s_offset_d1 = s_offset_d1 + 7
22664 : END DO
22665 : s_offset_c1 = s_offset_c1 + 1
22666 : END DO
22667 : s_offset_b1 = s_offset_b1 + 7
22668 : END DO
22669 : s_offset_a1 = s_offset_a1 + 1
22670 : END DO
22671 : END SUBROUTINE contract_sfsf
22672 : #endif
22673 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
22674 : ! **************************************************************************************************
22675 : !> \brief ...
22676 : !> \param work ...
22677 : !> \param nl_a ...
22678 : !> \param nl_b ...
22679 : !> \param nl_c ...
22680 : !> \param nl_d ...
22681 : !> \param sphi_a ...
22682 : !> \param sphi_b ...
22683 : !> \param sphi_c ...
22684 : !> \param sphi_d ...
22685 : !> \param primitives ...
22686 : !> \param buffer1 ...
22687 : !> \param buffer2 ...
22688 : ! **************************************************************************************************
22689 : SUBROUTINE contract_sfsg(work, &
22690 : nl_a, nl_b, nl_c, nl_d, &
22691 : sphi_a, sphi_b, sphi_c, sphi_d, &
22692 : primitives, &
22693 : buffer1, buffer2)
22694 : REAL(dp), DIMENSION(1*10*1*15), INTENT(IN) :: work
22695 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22696 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22697 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22698 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
22699 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
22700 : REAL(dp), &
22701 : DIMENSION(1*nl_a, 7*nl_b, 1*nl_c, 9*nl_d) :: primitives
22702 : REAL(dp), DIMENSION(1*10*1*15) :: buffer1, buffer2
22703 :
22704 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22705 : kmax, s_offset_a1, s_offset_b1, &
22706 : s_offset_c1, s_offset_d1
22707 :
22708 : s_offset_a1 = 0
22709 : DO ia = 1, nl_a
22710 : s_offset_b1 = 0
22711 : DO ib = 1, nl_b
22712 : s_offset_c1 = 0
22713 : DO ic = 1, nl_c
22714 : s_offset_d1 = 0
22715 : DO id = 1, nl_d
22716 : buffer1 = 0.0_dp
22717 : imax = 10*1*15
22718 : kmax = 1
22719 : DO i = 1, imax
22720 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22721 : END DO
22722 : buffer2 = 0.0_dp
22723 : imax = 1*1*15
22724 : kmax = 10
22725 : DO i = 1, imax
22726 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22727 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22728 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22729 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22730 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22731 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22732 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22733 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22734 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22735 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22736 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22737 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22738 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22739 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22740 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22741 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22742 : END DO
22743 : buffer1 = 0.0_dp
22744 : imax = 1*7*15
22745 : kmax = 1
22746 : DO i = 1, imax
22747 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
22748 : END DO
22749 : imax = 1*7*1
22750 : kmax = 15
22751 : i = 0
22752 : DO i1 = 1, 1
22753 : DO i2 = 1, 7
22754 : DO i3 = 1, 1
22755 : i = i + 1
22756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22758 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
22759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22761 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
22762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22764 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
22765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22767 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
22768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22770 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
22771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22773 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
22774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
22775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
22776 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
22777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22779 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
22780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22782 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
22783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22785 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
22786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22788 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
22789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22791 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
22792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22794 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
22795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
22797 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
22798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22800 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
22801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22803 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
22804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
22805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
22806 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
22807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
22808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
22809 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
22810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
22811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
22812 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
22813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22815 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
22816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22818 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
22819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
22820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
22821 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
22822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
22823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
22824 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
22825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22827 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
22828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22830 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
22831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
22832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
22833 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
22834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
22835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
22836 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
22837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
22838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
22839 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
22840 : END DO
22841 : END DO
22842 : END DO
22843 : s_offset_d1 = s_offset_d1 + 9
22844 : END DO
22845 : s_offset_c1 = s_offset_c1 + 1
22846 : END DO
22847 : s_offset_b1 = s_offset_b1 + 7
22848 : END DO
22849 : s_offset_a1 = s_offset_a1 + 1
22850 : END DO
22851 : END SUBROUTINE contract_sfsg
22852 : #endif
22853 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22854 : ! **************************************************************************************************
22855 : !> \brief ...
22856 : !> \param work ...
22857 : !> \param nl_a ...
22858 : !> \param nl_b ...
22859 : !> \param nl_c ...
22860 : !> \param nl_d ...
22861 : !> \param sphi_a ...
22862 : !> \param sphi_b ...
22863 : !> \param sphi_c ...
22864 : !> \param sphi_d ...
22865 : !> \param primitives ...
22866 : !> \param buffer1 ...
22867 : !> \param buffer2 ...
22868 : ! **************************************************************************************************
22869 : SUBROUTINE contract_sfps(work, &
22870 : nl_a, nl_b, nl_c, nl_d, &
22871 : sphi_a, sphi_b, sphi_c, sphi_d, &
22872 : primitives, &
22873 : buffer1, buffer2)
22874 : REAL(dp), DIMENSION(1*10*3*1), INTENT(IN) :: work
22875 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22876 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22877 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22878 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
22879 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
22880 : REAL(dp), &
22881 : DIMENSION(1*nl_a, 7*nl_b, 3*nl_c, 1*nl_d) :: primitives
22882 : REAL(dp), DIMENSION(1*10*3*1) :: buffer1, buffer2
22883 :
22884 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22885 : kmax, s_offset_a1, s_offset_b1, &
22886 : s_offset_c1, s_offset_d1
22887 :
22888 : s_offset_a1 = 0
22889 : DO ia = 1, nl_a
22890 : s_offset_b1 = 0
22891 : DO ib = 1, nl_b
22892 : s_offset_c1 = 0
22893 : DO ic = 1, nl_c
22894 : s_offset_d1 = 0
22895 : DO id = 1, nl_d
22896 : buffer1 = 0.0_dp
22897 : imax = 10*3*1
22898 : kmax = 1
22899 : DO i = 1, imax
22900 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
22901 : END DO
22902 : buffer2 = 0.0_dp
22903 : imax = 1*3*1
22904 : kmax = 10
22905 : DO i = 1, imax
22906 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
22907 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
22908 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
22909 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
22910 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
22911 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
22912 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
22913 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
22914 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
22915 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
22916 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
22917 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
22918 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
22919 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
22920 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
22921 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
22922 : END DO
22923 : buffer1 = 0.0_dp
22924 : imax = 1*7*1
22925 : kmax = 3
22926 : DO i = 1, imax
22927 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
22928 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
22929 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
22930 : END DO
22931 : imax = 1*7*3
22932 : kmax = 1
22933 : i = 0
22934 : DO i1 = 1, 3
22935 : DO i2 = 1, 7
22936 : DO i3 = 1, 1
22937 : i = i + 1
22938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
22939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
22940 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
22941 : END DO
22942 : END DO
22943 : END DO
22944 : s_offset_d1 = s_offset_d1 + 1
22945 : END DO
22946 : s_offset_c1 = s_offset_c1 + 3
22947 : END DO
22948 : s_offset_b1 = s_offset_b1 + 7
22949 : END DO
22950 : s_offset_a1 = s_offset_a1 + 1
22951 : END DO
22952 : END SUBROUTINE contract_sfps
22953 : #endif
22954 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
22955 : ! **************************************************************************************************
22956 : !> \brief ...
22957 : !> \param work ...
22958 : !> \param nl_a ...
22959 : !> \param nl_b ...
22960 : !> \param nl_c ...
22961 : !> \param nl_d ...
22962 : !> \param sphi_a ...
22963 : !> \param sphi_b ...
22964 : !> \param sphi_c ...
22965 : !> \param sphi_d ...
22966 : !> \param primitives ...
22967 : !> \param buffer1 ...
22968 : !> \param buffer2 ...
22969 : ! **************************************************************************************************
22970 : SUBROUTINE contract_sfpp(work, &
22971 : nl_a, nl_b, nl_c, nl_d, &
22972 : sphi_a, sphi_b, sphi_c, sphi_d, &
22973 : primitives, &
22974 : buffer1, buffer2)
22975 : REAL(dp), DIMENSION(1*10*3*3), INTENT(IN) :: work
22976 : INTEGER :: nl_a, nl_b, nl_c, nl_d
22977 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
22978 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
22979 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
22980 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
22981 : REAL(dp), &
22982 : DIMENSION(1*nl_a, 7*nl_b, 3*nl_c, 3*nl_d) :: primitives
22983 : REAL(dp), DIMENSION(1*10*3*3) :: buffer1, buffer2
22984 :
22985 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
22986 : kmax, s_offset_a1, s_offset_b1, &
22987 : s_offset_c1, s_offset_d1
22988 :
22989 : s_offset_a1 = 0
22990 : DO ia = 1, nl_a
22991 : s_offset_b1 = 0
22992 : DO ib = 1, nl_b
22993 : s_offset_c1 = 0
22994 : DO ic = 1, nl_c
22995 : s_offset_d1 = 0
22996 : DO id = 1, nl_d
22997 : buffer1 = 0.0_dp
22998 : imax = 10*3*3
22999 : kmax = 1
23000 : DO i = 1, imax
23001 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23002 : END DO
23003 : buffer2 = 0.0_dp
23004 : imax = 1*3*3
23005 : kmax = 10
23006 : DO i = 1, imax
23007 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23008 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23009 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23010 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23011 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23012 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23013 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23014 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23015 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23016 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23017 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23018 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23019 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23020 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23021 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23022 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23023 : END DO
23024 : buffer1 = 0.0_dp
23025 : imax = 1*7*3
23026 : kmax = 3
23027 : DO i = 1, imax
23028 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23029 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23030 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
23031 : END DO
23032 : imax = 1*7*3
23033 : kmax = 3
23034 : i = 0
23035 : DO i1 = 1, 3
23036 : DO i2 = 1, 7
23037 : DO i3 = 1, 1
23038 : i = i + 1
23039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
23041 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
23042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
23044 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
23047 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
23048 : END DO
23049 : END DO
23050 : END DO
23051 : s_offset_d1 = s_offset_d1 + 3
23052 : END DO
23053 : s_offset_c1 = s_offset_c1 + 3
23054 : END DO
23055 : s_offset_b1 = s_offset_b1 + 7
23056 : END DO
23057 : s_offset_a1 = s_offset_a1 + 1
23058 : END DO
23059 : END SUBROUTINE contract_sfpp
23060 : #endif
23061 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23062 : ! **************************************************************************************************
23063 : !> \brief ...
23064 : !> \param work ...
23065 : !> \param nl_a ...
23066 : !> \param nl_b ...
23067 : !> \param nl_c ...
23068 : !> \param nl_d ...
23069 : !> \param sphi_a ...
23070 : !> \param sphi_b ...
23071 : !> \param sphi_c ...
23072 : !> \param sphi_d ...
23073 : !> \param primitives ...
23074 : !> \param buffer1 ...
23075 : !> \param buffer2 ...
23076 : ! **************************************************************************************************
23077 : SUBROUTINE contract_sfpd(work, &
23078 : nl_a, nl_b, nl_c, nl_d, &
23079 : sphi_a, sphi_b, sphi_c, sphi_d, &
23080 : primitives, &
23081 : buffer1, buffer2)
23082 : REAL(dp), DIMENSION(1*10*3*6), INTENT(IN) :: work
23083 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23084 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23085 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23086 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
23087 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
23088 : REAL(dp), &
23089 : DIMENSION(1*nl_a, 7*nl_b, 3*nl_c, 5*nl_d) :: primitives
23090 : REAL(dp), DIMENSION(1*10*3*6) :: buffer1, buffer2
23091 :
23092 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23093 : kmax, s_offset_a1, s_offset_b1, &
23094 : s_offset_c1, s_offset_d1
23095 :
23096 : s_offset_a1 = 0
23097 : DO ia = 1, nl_a
23098 : s_offset_b1 = 0
23099 : DO ib = 1, nl_b
23100 : s_offset_c1 = 0
23101 : DO ic = 1, nl_c
23102 : s_offset_d1 = 0
23103 : DO id = 1, nl_d
23104 : buffer1 = 0.0_dp
23105 : imax = 10*3*6
23106 : kmax = 1
23107 : DO i = 1, imax
23108 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23109 : END DO
23110 : buffer2 = 0.0_dp
23111 : imax = 1*3*6
23112 : kmax = 10
23113 : DO i = 1, imax
23114 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23115 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23116 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23117 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23118 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23119 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23120 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23121 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23122 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23123 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23124 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23125 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23126 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23127 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23128 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23129 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23130 : END DO
23131 : buffer1 = 0.0_dp
23132 : imax = 1*7*6
23133 : kmax = 3
23134 : DO i = 1, imax
23135 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23136 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23137 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
23138 : END DO
23139 : imax = 1*7*3
23140 : kmax = 6
23141 : i = 0
23142 : DO i1 = 1, 3
23143 : DO i2 = 1, 7
23144 : DO i3 = 1, 1
23145 : i = i + 1
23146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23148 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
23149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23151 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
23152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23154 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23157 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
23158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23160 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
23161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23163 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
23164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23166 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
23167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23169 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
23170 : END DO
23171 : END DO
23172 : END DO
23173 : s_offset_d1 = s_offset_d1 + 5
23174 : END DO
23175 : s_offset_c1 = s_offset_c1 + 3
23176 : END DO
23177 : s_offset_b1 = s_offset_b1 + 7
23178 : END DO
23179 : s_offset_a1 = s_offset_a1 + 1
23180 : END DO
23181 : END SUBROUTINE contract_sfpd
23182 : #endif
23183 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23184 : ! **************************************************************************************************
23185 : !> \brief ...
23186 : !> \param work ...
23187 : !> \param nl_a ...
23188 : !> \param nl_b ...
23189 : !> \param nl_c ...
23190 : !> \param nl_d ...
23191 : !> \param sphi_a ...
23192 : !> \param sphi_b ...
23193 : !> \param sphi_c ...
23194 : !> \param sphi_d ...
23195 : !> \param primitives ...
23196 : !> \param buffer1 ...
23197 : !> \param buffer2 ...
23198 : ! **************************************************************************************************
23199 : SUBROUTINE contract_sfpf(work, &
23200 : nl_a, nl_b, nl_c, nl_d, &
23201 : sphi_a, sphi_b, sphi_c, sphi_d, &
23202 : primitives, &
23203 : buffer1, buffer2)
23204 : REAL(dp), DIMENSION(1*10*3*10), INTENT(IN) :: work
23205 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23206 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23207 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23208 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
23209 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
23210 : REAL(dp), &
23211 : DIMENSION(1*nl_a, 7*nl_b, 3*nl_c, 7*nl_d) :: primitives
23212 : REAL(dp), DIMENSION(1*10*3*10) :: buffer1, buffer2
23213 :
23214 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23215 : kmax, s_offset_a1, s_offset_b1, &
23216 : s_offset_c1, s_offset_d1
23217 :
23218 : s_offset_a1 = 0
23219 : DO ia = 1, nl_a
23220 : s_offset_b1 = 0
23221 : DO ib = 1, nl_b
23222 : s_offset_c1 = 0
23223 : DO ic = 1, nl_c
23224 : s_offset_d1 = 0
23225 : DO id = 1, nl_d
23226 : buffer1 = 0.0_dp
23227 : imax = 10*3*10
23228 : kmax = 1
23229 : DO i = 1, imax
23230 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23231 : END DO
23232 : buffer2 = 0.0_dp
23233 : imax = 1*3*10
23234 : kmax = 10
23235 : DO i = 1, imax
23236 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23237 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23238 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23239 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23240 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23241 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23242 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23243 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23244 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23245 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23246 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23247 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23248 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23249 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23250 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23251 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23252 : END DO
23253 : buffer1 = 0.0_dp
23254 : imax = 1*7*10
23255 : kmax = 3
23256 : DO i = 1, imax
23257 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23258 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23259 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
23260 : END DO
23261 : imax = 1*7*3
23262 : kmax = 10
23263 : i = 0
23264 : DO i1 = 1, 3
23265 : DO i2 = 1, 7
23266 : DO i3 = 1, 1
23267 : i = i + 1
23268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23270 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
23271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23273 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
23274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23276 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23279 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
23280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23282 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
23283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23285 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
23286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23288 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
23289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23291 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
23292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23294 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
23295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23297 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
23298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23300 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
23301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23303 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
23304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23306 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
23307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23309 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
23310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23312 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
23313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23315 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
23316 : END DO
23317 : END DO
23318 : END DO
23319 : s_offset_d1 = s_offset_d1 + 7
23320 : END DO
23321 : s_offset_c1 = s_offset_c1 + 3
23322 : END DO
23323 : s_offset_b1 = s_offset_b1 + 7
23324 : END DO
23325 : s_offset_a1 = s_offset_a1 + 1
23326 : END DO
23327 : END SUBROUTINE contract_sfpf
23328 : #endif
23329 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
23330 : ! **************************************************************************************************
23331 : !> \brief ...
23332 : !> \param work ...
23333 : !> \param nl_a ...
23334 : !> \param nl_b ...
23335 : !> \param nl_c ...
23336 : !> \param nl_d ...
23337 : !> \param sphi_a ...
23338 : !> \param sphi_b ...
23339 : !> \param sphi_c ...
23340 : !> \param sphi_d ...
23341 : !> \param primitives ...
23342 : !> \param buffer1 ...
23343 : !> \param buffer2 ...
23344 : ! **************************************************************************************************
23345 : SUBROUTINE contract_sfpg(work, &
23346 : nl_a, nl_b, nl_c, nl_d, &
23347 : sphi_a, sphi_b, sphi_c, sphi_d, &
23348 : primitives, &
23349 : buffer1, buffer2)
23350 : REAL(dp), DIMENSION(1*10*3*15), INTENT(IN) :: work
23351 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23352 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23353 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23354 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
23355 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
23356 : REAL(dp), &
23357 : DIMENSION(1*nl_a, 7*nl_b, 3*nl_c, 9*nl_d) :: primitives
23358 : REAL(dp), DIMENSION(1*10*3*15) :: buffer1, buffer2
23359 :
23360 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23361 : kmax, s_offset_a1, s_offset_b1, &
23362 : s_offset_c1, s_offset_d1
23363 :
23364 : s_offset_a1 = 0
23365 : DO ia = 1, nl_a
23366 : s_offset_b1 = 0
23367 : DO ib = 1, nl_b
23368 : s_offset_c1 = 0
23369 : DO ic = 1, nl_c
23370 : s_offset_d1 = 0
23371 : DO id = 1, nl_d
23372 : buffer1 = 0.0_dp
23373 : imax = 10*3*15
23374 : kmax = 1
23375 : DO i = 1, imax
23376 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23377 : END DO
23378 : buffer2 = 0.0_dp
23379 : imax = 1*3*15
23380 : kmax = 10
23381 : DO i = 1, imax
23382 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23383 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23384 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23385 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23386 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23387 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23388 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23389 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23391 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23392 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23393 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23394 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23395 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23396 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23397 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23398 : END DO
23399 : buffer1 = 0.0_dp
23400 : imax = 1*7*15
23401 : kmax = 3
23402 : DO i = 1, imax
23403 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23404 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23405 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
23406 : END DO
23407 : imax = 1*7*3
23408 : kmax = 15
23409 : i = 0
23410 : DO i1 = 1, 3
23411 : DO i2 = 1, 7
23412 : DO i3 = 1, 1
23413 : i = i + 1
23414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23416 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
23417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23419 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
23420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
23421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
23422 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
23423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23425 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23428 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
23429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23431 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
23432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
23433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
23434 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
23435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23437 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
23438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
23439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
23440 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
23441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23443 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
23444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23446 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
23447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23449 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
23450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23452 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
23453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23455 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
23456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23458 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
23459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23461 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
23462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
23463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
23464 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
23465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23467 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
23468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23470 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
23471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23473 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
23474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23476 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
23477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
23478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
23479 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
23480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23482 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
23483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23485 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
23486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23488 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
23489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23491 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
23492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23494 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
23495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23497 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
23498 : END DO
23499 : END DO
23500 : END DO
23501 : s_offset_d1 = s_offset_d1 + 9
23502 : END DO
23503 : s_offset_c1 = s_offset_c1 + 3
23504 : END DO
23505 : s_offset_b1 = s_offset_b1 + 7
23506 : END DO
23507 : s_offset_a1 = s_offset_a1 + 1
23508 : END DO
23509 : END SUBROUTINE contract_sfpg
23510 : #endif
23511 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23512 : ! **************************************************************************************************
23513 : !> \brief ...
23514 : !> \param work ...
23515 : !> \param nl_a ...
23516 : !> \param nl_b ...
23517 : !> \param nl_c ...
23518 : !> \param nl_d ...
23519 : !> \param sphi_a ...
23520 : !> \param sphi_b ...
23521 : !> \param sphi_c ...
23522 : !> \param sphi_d ...
23523 : !> \param primitives ...
23524 : !> \param buffer1 ...
23525 : !> \param buffer2 ...
23526 : ! **************************************************************************************************
23527 : SUBROUTINE contract_sfds(work, &
23528 : nl_a, nl_b, nl_c, nl_d, &
23529 : sphi_a, sphi_b, sphi_c, sphi_d, &
23530 : primitives, &
23531 : buffer1, buffer2)
23532 : REAL(dp), DIMENSION(1*10*6*1), INTENT(IN) :: work
23533 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23534 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23535 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23536 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
23537 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
23538 : REAL(dp), &
23539 : DIMENSION(1*nl_a, 7*nl_b, 5*nl_c, 1*nl_d) :: primitives
23540 : REAL(dp), DIMENSION(1*10*6*1) :: buffer1, buffer2
23541 :
23542 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23543 : kmax, s_offset_a1, s_offset_b1, &
23544 : s_offset_c1, s_offset_d1
23545 :
23546 : s_offset_a1 = 0
23547 : DO ia = 1, nl_a
23548 : s_offset_b1 = 0
23549 : DO ib = 1, nl_b
23550 : s_offset_c1 = 0
23551 : DO ic = 1, nl_c
23552 : s_offset_d1 = 0
23553 : DO id = 1, nl_d
23554 : buffer1 = 0.0_dp
23555 : imax = 10*6*1
23556 : kmax = 1
23557 : DO i = 1, imax
23558 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23559 : END DO
23560 : buffer2 = 0.0_dp
23561 : imax = 1*6*1
23562 : kmax = 10
23563 : DO i = 1, imax
23564 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23565 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23566 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23567 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23568 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23569 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23570 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23571 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23572 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23573 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23574 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23575 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23576 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23577 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23578 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23579 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23580 : END DO
23581 : buffer1 = 0.0_dp
23582 : imax = 1*7*1
23583 : kmax = 6
23584 : DO i = 1, imax
23585 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
23587 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23588 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
23589 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
23590 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
23591 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
23592 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
23593 : END DO
23594 : imax = 1*7*5
23595 : kmax = 1
23596 : i = 0
23597 : DO i1 = 1, 5
23598 : DO i2 = 1, 7
23599 : DO i3 = 1, 1
23600 : i = i + 1
23601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
23603 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
23604 : END DO
23605 : END DO
23606 : END DO
23607 : s_offset_d1 = s_offset_d1 + 1
23608 : END DO
23609 : s_offset_c1 = s_offset_c1 + 5
23610 : END DO
23611 : s_offset_b1 = s_offset_b1 + 7
23612 : END DO
23613 : s_offset_a1 = s_offset_a1 + 1
23614 : END DO
23615 : END SUBROUTINE contract_sfds
23616 : #endif
23617 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23618 : ! **************************************************************************************************
23619 : !> \brief ...
23620 : !> \param work ...
23621 : !> \param nl_a ...
23622 : !> \param nl_b ...
23623 : !> \param nl_c ...
23624 : !> \param nl_d ...
23625 : !> \param sphi_a ...
23626 : !> \param sphi_b ...
23627 : !> \param sphi_c ...
23628 : !> \param sphi_d ...
23629 : !> \param primitives ...
23630 : !> \param buffer1 ...
23631 : !> \param buffer2 ...
23632 : ! **************************************************************************************************
23633 : SUBROUTINE contract_sfdp(work, &
23634 : nl_a, nl_b, nl_c, nl_d, &
23635 : sphi_a, sphi_b, sphi_c, sphi_d, &
23636 : primitives, &
23637 : buffer1, buffer2)
23638 : REAL(dp), DIMENSION(1*10*6*3), INTENT(IN) :: work
23639 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23640 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23641 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23642 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
23643 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
23644 : REAL(dp), &
23645 : DIMENSION(1*nl_a, 7*nl_b, 5*nl_c, 3*nl_d) :: primitives
23646 : REAL(dp), DIMENSION(1*10*6*3) :: buffer1, buffer2
23647 :
23648 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23649 : kmax, s_offset_a1, s_offset_b1, &
23650 : s_offset_c1, s_offset_d1
23651 :
23652 : s_offset_a1 = 0
23653 : DO ia = 1, nl_a
23654 : s_offset_b1 = 0
23655 : DO ib = 1, nl_b
23656 : s_offset_c1 = 0
23657 : DO ic = 1, nl_c
23658 : s_offset_d1 = 0
23659 : DO id = 1, nl_d
23660 : buffer1 = 0.0_dp
23661 : imax = 10*6*3
23662 : kmax = 1
23663 : DO i = 1, imax
23664 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23665 : END DO
23666 : buffer2 = 0.0_dp
23667 : imax = 1*6*3
23668 : kmax = 10
23669 : DO i = 1, imax
23670 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23671 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23672 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23673 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23674 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23675 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23676 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23677 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23678 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23679 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23680 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23681 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23682 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23683 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23684 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23685 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23686 : END DO
23687 : buffer1 = 0.0_dp
23688 : imax = 1*7*3
23689 : kmax = 6
23690 : DO i = 1, imax
23691 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23692 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
23693 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23694 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
23695 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
23696 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
23697 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
23698 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
23699 : END DO
23700 : imax = 1*7*5
23701 : kmax = 3
23702 : i = 0
23703 : DO i1 = 1, 5
23704 : DO i2 = 1, 7
23705 : DO i3 = 1, 1
23706 : i = i + 1
23707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
23709 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
23710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
23712 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
23715 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
23716 : END DO
23717 : END DO
23718 : END DO
23719 : s_offset_d1 = s_offset_d1 + 3
23720 : END DO
23721 : s_offset_c1 = s_offset_c1 + 5
23722 : END DO
23723 : s_offset_b1 = s_offset_b1 + 7
23724 : END DO
23725 : s_offset_a1 = s_offset_a1 + 1
23726 : END DO
23727 : END SUBROUTINE contract_sfdp
23728 : #endif
23729 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23730 : ! **************************************************************************************************
23731 : !> \brief ...
23732 : !> \param work ...
23733 : !> \param nl_a ...
23734 : !> \param nl_b ...
23735 : !> \param nl_c ...
23736 : !> \param nl_d ...
23737 : !> \param sphi_a ...
23738 : !> \param sphi_b ...
23739 : !> \param sphi_c ...
23740 : !> \param sphi_d ...
23741 : !> \param primitives ...
23742 : !> \param buffer1 ...
23743 : !> \param buffer2 ...
23744 : ! **************************************************************************************************
23745 : SUBROUTINE contract_sfdd(work, &
23746 : nl_a, nl_b, nl_c, nl_d, &
23747 : sphi_a, sphi_b, sphi_c, sphi_d, &
23748 : primitives, &
23749 : buffer1, buffer2)
23750 : REAL(dp), DIMENSION(1*10*6*6), INTENT(IN) :: work
23751 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23752 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23753 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23754 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
23755 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
23756 : REAL(dp), &
23757 : DIMENSION(1*nl_a, 7*nl_b, 5*nl_c, 5*nl_d) :: primitives
23758 : REAL(dp), DIMENSION(1*10*6*6) :: buffer1, buffer2
23759 :
23760 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23761 : kmax, s_offset_a1, s_offset_b1, &
23762 : s_offset_c1, s_offset_d1
23763 :
23764 : s_offset_a1 = 0
23765 : DO ia = 1, nl_a
23766 : s_offset_b1 = 0
23767 : DO ib = 1, nl_b
23768 : s_offset_c1 = 0
23769 : DO ic = 1, nl_c
23770 : s_offset_d1 = 0
23771 : DO id = 1, nl_d
23772 : buffer1 = 0.0_dp
23773 : imax = 10*6*6
23774 : kmax = 1
23775 : DO i = 1, imax
23776 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23777 : END DO
23778 : buffer2 = 0.0_dp
23779 : imax = 1*6*6
23780 : kmax = 10
23781 : DO i = 1, imax
23782 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23783 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23784 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23785 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23786 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23787 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23788 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23789 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23790 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23791 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23792 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23793 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23794 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23795 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23796 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23797 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23798 : END DO
23799 : buffer1 = 0.0_dp
23800 : imax = 1*7*6
23801 : kmax = 6
23802 : DO i = 1, imax
23803 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23804 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
23805 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23806 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
23807 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
23808 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
23809 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
23810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
23811 : END DO
23812 : imax = 1*7*5
23813 : kmax = 6
23814 : i = 0
23815 : DO i1 = 1, 5
23816 : DO i2 = 1, 7
23817 : DO i3 = 1, 1
23818 : i = i + 1
23819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23821 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
23822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23824 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
23825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23827 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23830 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
23831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23833 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
23834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23836 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
23837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23839 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
23840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23842 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
23843 : END DO
23844 : END DO
23845 : END DO
23846 : s_offset_d1 = s_offset_d1 + 5
23847 : END DO
23848 : s_offset_c1 = s_offset_c1 + 5
23849 : END DO
23850 : s_offset_b1 = s_offset_b1 + 7
23851 : END DO
23852 : s_offset_a1 = s_offset_a1 + 1
23853 : END DO
23854 : END SUBROUTINE contract_sfdd
23855 : #endif
23856 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
23857 : ! **************************************************************************************************
23858 : !> \brief ...
23859 : !> \param work ...
23860 : !> \param nl_a ...
23861 : !> \param nl_b ...
23862 : !> \param nl_c ...
23863 : !> \param nl_d ...
23864 : !> \param sphi_a ...
23865 : !> \param sphi_b ...
23866 : !> \param sphi_c ...
23867 : !> \param sphi_d ...
23868 : !> \param primitives ...
23869 : !> \param buffer1 ...
23870 : !> \param buffer2 ...
23871 : ! **************************************************************************************************
23872 : SUBROUTINE contract_sfdf(work, &
23873 : nl_a, nl_b, nl_c, nl_d, &
23874 : sphi_a, sphi_b, sphi_c, sphi_d, &
23875 : primitives, &
23876 : buffer1, buffer2)
23877 : REAL(dp), DIMENSION(1*10*6*10), INTENT(IN) :: work
23878 : INTEGER :: nl_a, nl_b, nl_c, nl_d
23879 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
23880 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
23881 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
23882 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
23883 : REAL(dp), &
23884 : DIMENSION(1*nl_a, 7*nl_b, 5*nl_c, 7*nl_d) :: primitives
23885 : REAL(dp), DIMENSION(1*10*6*10) :: buffer1, buffer2
23886 :
23887 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
23888 : kmax, s_offset_a1, s_offset_b1, &
23889 : s_offset_c1, s_offset_d1
23890 :
23891 : s_offset_a1 = 0
23892 : DO ia = 1, nl_a
23893 : s_offset_b1 = 0
23894 : DO ib = 1, nl_b
23895 : s_offset_c1 = 0
23896 : DO ic = 1, nl_c
23897 : s_offset_d1 = 0
23898 : DO id = 1, nl_d
23899 : buffer1 = 0.0_dp
23900 : imax = 10*6*10
23901 : kmax = 1
23902 : DO i = 1, imax
23903 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
23904 : END DO
23905 : buffer2 = 0.0_dp
23906 : imax = 1*6*10
23907 : kmax = 10
23908 : DO i = 1, imax
23909 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
23910 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
23911 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
23912 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
23913 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
23914 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
23915 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
23916 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
23917 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
23918 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
23919 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
23920 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
23921 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
23922 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
23923 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
23924 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
23925 : END DO
23926 : buffer1 = 0.0_dp
23927 : imax = 1*7*10
23928 : kmax = 6
23929 : DO i = 1, imax
23930 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
23931 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
23932 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
23933 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
23934 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
23935 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
23936 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
23937 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
23938 : END DO
23939 : imax = 1*7*5
23940 : kmax = 10
23941 : i = 0
23942 : DO i1 = 1, 5
23943 : DO i2 = 1, 7
23944 : DO i3 = 1, 1
23945 : i = i + 1
23946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23948 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
23949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23951 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
23952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23954 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
23955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23957 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
23958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23960 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
23961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23963 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
23964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23966 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
23967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
23968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
23969 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
23970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
23971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
23972 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
23973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
23974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
23975 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
23976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
23977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
23978 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
23979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23981 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
23982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23984 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
23985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
23986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
23987 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
23988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
23989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
23990 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
23991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
23992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
23993 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
23994 : END DO
23995 : END DO
23996 : END DO
23997 : s_offset_d1 = s_offset_d1 + 7
23998 : END DO
23999 : s_offset_c1 = s_offset_c1 + 5
24000 : END DO
24001 : s_offset_b1 = s_offset_b1 + 7
24002 : END DO
24003 : s_offset_a1 = s_offset_a1 + 1
24004 : END DO
24005 : END SUBROUTINE contract_sfdf
24006 : #endif
24007 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
24008 : ! **************************************************************************************************
24009 : !> \brief ...
24010 : !> \param work ...
24011 : !> \param nl_a ...
24012 : !> \param nl_b ...
24013 : !> \param nl_c ...
24014 : !> \param nl_d ...
24015 : !> \param sphi_a ...
24016 : !> \param sphi_b ...
24017 : !> \param sphi_c ...
24018 : !> \param sphi_d ...
24019 : !> \param primitives ...
24020 : !> \param buffer1 ...
24021 : !> \param buffer2 ...
24022 : ! **************************************************************************************************
24023 : SUBROUTINE contract_sfdg(work, &
24024 : nl_a, nl_b, nl_c, nl_d, &
24025 : sphi_a, sphi_b, sphi_c, sphi_d, &
24026 : primitives, &
24027 : buffer1, buffer2)
24028 : REAL(dp), DIMENSION(1*10*6*15), INTENT(IN) :: work
24029 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24030 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24031 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24032 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
24033 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
24034 : REAL(dp), &
24035 : DIMENSION(1*nl_a, 7*nl_b, 5*nl_c, 9*nl_d) :: primitives
24036 : REAL(dp), DIMENSION(1*10*6*15) :: buffer1, buffer2
24037 :
24038 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24039 : kmax, s_offset_a1, s_offset_b1, &
24040 : s_offset_c1, s_offset_d1
24041 :
24042 : s_offset_a1 = 0
24043 : DO ia = 1, nl_a
24044 : s_offset_b1 = 0
24045 : DO ib = 1, nl_b
24046 : s_offset_c1 = 0
24047 : DO ic = 1, nl_c
24048 : s_offset_d1 = 0
24049 : DO id = 1, nl_d
24050 : buffer1 = 0.0_dp
24051 : imax = 10*6*15
24052 : kmax = 1
24053 : DO i = 1, imax
24054 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24055 : END DO
24056 : buffer2 = 0.0_dp
24057 : imax = 1*6*15
24058 : kmax = 10
24059 : DO i = 1, imax
24060 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24061 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24062 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24063 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24064 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24065 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24066 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24067 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24068 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24069 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24070 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24071 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24072 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24073 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24074 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24075 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24076 : END DO
24077 : buffer1 = 0.0_dp
24078 : imax = 1*7*15
24079 : kmax = 6
24080 : DO i = 1, imax
24081 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
24082 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24083 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24084 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
24086 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24087 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24088 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
24089 : END DO
24090 : imax = 1*7*5
24091 : kmax = 15
24092 : i = 0
24093 : DO i1 = 1, 5
24094 : DO i2 = 1, 7
24095 : DO i3 = 1, 1
24096 : i = i + 1
24097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24099 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
24100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24102 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
24103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24105 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
24106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24108 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
24109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24111 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
24112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24114 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
24115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
24116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
24117 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
24118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24120 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
24121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24123 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
24124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24126 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
24127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24129 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
24130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24132 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
24133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24135 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
24136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24138 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
24139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24141 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
24142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24144 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
24145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
24146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
24147 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
24148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24150 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
24151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24153 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
24154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24156 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
24157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24159 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
24160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24162 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
24163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24165 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
24166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24168 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
24169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24171 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
24172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24174 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
24175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24177 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
24178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24180 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
24181 : END DO
24182 : END DO
24183 : END DO
24184 : s_offset_d1 = s_offset_d1 + 9
24185 : END DO
24186 : s_offset_c1 = s_offset_c1 + 5
24187 : END DO
24188 : s_offset_b1 = s_offset_b1 + 7
24189 : END DO
24190 : s_offset_a1 = s_offset_a1 + 1
24191 : END DO
24192 : END SUBROUTINE contract_sfdg
24193 : #endif
24194 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
24195 : ! **************************************************************************************************
24196 : !> \brief ...
24197 : !> \param work ...
24198 : !> \param nl_a ...
24199 : !> \param nl_b ...
24200 : !> \param nl_c ...
24201 : !> \param nl_d ...
24202 : !> \param sphi_a ...
24203 : !> \param sphi_b ...
24204 : !> \param sphi_c ...
24205 : !> \param sphi_d ...
24206 : !> \param primitives ...
24207 : !> \param buffer1 ...
24208 : !> \param buffer2 ...
24209 : ! **************************************************************************************************
24210 : SUBROUTINE contract_sffs(work, &
24211 : nl_a, nl_b, nl_c, nl_d, &
24212 : sphi_a, sphi_b, sphi_c, sphi_d, &
24213 : primitives, &
24214 : buffer1, buffer2)
24215 : REAL(dp), DIMENSION(1*10*10*1), INTENT(IN) :: work
24216 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24217 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24218 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24219 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
24220 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
24221 : REAL(dp), &
24222 : DIMENSION(1*nl_a, 7*nl_b, 7*nl_c, 1*nl_d) :: primitives
24223 : REAL(dp), DIMENSION(1*10*10*1) :: buffer1, buffer2
24224 :
24225 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24226 : kmax, s_offset_a1, s_offset_b1, &
24227 : s_offset_c1, s_offset_d1
24228 :
24229 : s_offset_a1 = 0
24230 : DO ia = 1, nl_a
24231 : s_offset_b1 = 0
24232 : DO ib = 1, nl_b
24233 : s_offset_c1 = 0
24234 : DO ic = 1, nl_c
24235 : s_offset_d1 = 0
24236 : DO id = 1, nl_d
24237 : buffer1 = 0.0_dp
24238 : imax = 10*10*1
24239 : kmax = 1
24240 : DO i = 1, imax
24241 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24242 : END DO
24243 : buffer2 = 0.0_dp
24244 : imax = 1*10*1
24245 : kmax = 10
24246 : DO i = 1, imax
24247 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24248 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24249 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24250 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24251 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24252 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24253 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24254 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24255 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24256 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24257 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24258 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24259 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24260 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24261 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24262 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24263 : END DO
24264 : buffer1 = 0.0_dp
24265 : imax = 1*7*1
24266 : kmax = 10
24267 : DO i = 1, imax
24268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24269 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24272 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24273 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24274 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24275 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
24276 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24277 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
24278 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
24279 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
24280 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
24281 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
24282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
24283 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
24284 : END DO
24285 : imax = 1*7*7
24286 : kmax = 1
24287 : i = 0
24288 : DO i1 = 1, 7
24289 : DO i2 = 1, 7
24290 : DO i3 = 1, 1
24291 : i = i + 1
24292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
24294 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
24295 : END DO
24296 : END DO
24297 : END DO
24298 : s_offset_d1 = s_offset_d1 + 1
24299 : END DO
24300 : s_offset_c1 = s_offset_c1 + 7
24301 : END DO
24302 : s_offset_b1 = s_offset_b1 + 7
24303 : END DO
24304 : s_offset_a1 = s_offset_a1 + 1
24305 : END DO
24306 : END SUBROUTINE contract_sffs
24307 : #endif
24308 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
24309 : ! **************************************************************************************************
24310 : !> \brief ...
24311 : !> \param work ...
24312 : !> \param nl_a ...
24313 : !> \param nl_b ...
24314 : !> \param nl_c ...
24315 : !> \param nl_d ...
24316 : !> \param sphi_a ...
24317 : !> \param sphi_b ...
24318 : !> \param sphi_c ...
24319 : !> \param sphi_d ...
24320 : !> \param primitives ...
24321 : !> \param buffer1 ...
24322 : !> \param buffer2 ...
24323 : ! **************************************************************************************************
24324 : SUBROUTINE contract_sffp(work, &
24325 : nl_a, nl_b, nl_c, nl_d, &
24326 : sphi_a, sphi_b, sphi_c, sphi_d, &
24327 : primitives, &
24328 : buffer1, buffer2)
24329 : REAL(dp), DIMENSION(1*10*10*3), INTENT(IN) :: work
24330 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24331 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24332 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24333 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
24334 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
24335 : REAL(dp), &
24336 : DIMENSION(1*nl_a, 7*nl_b, 7*nl_c, 3*nl_d) :: primitives
24337 : REAL(dp), DIMENSION(1*10*10*3) :: buffer1, buffer2
24338 :
24339 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24340 : kmax, s_offset_a1, s_offset_b1, &
24341 : s_offset_c1, s_offset_d1
24342 :
24343 : s_offset_a1 = 0
24344 : DO ia = 1, nl_a
24345 : s_offset_b1 = 0
24346 : DO ib = 1, nl_b
24347 : s_offset_c1 = 0
24348 : DO ic = 1, nl_c
24349 : s_offset_d1 = 0
24350 : DO id = 1, nl_d
24351 : buffer1 = 0.0_dp
24352 : imax = 10*10*3
24353 : kmax = 1
24354 : DO i = 1, imax
24355 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24356 : END DO
24357 : buffer2 = 0.0_dp
24358 : imax = 1*10*3
24359 : kmax = 10
24360 : DO i = 1, imax
24361 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24362 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24363 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24364 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24365 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24366 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24367 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24368 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24369 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24370 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24371 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24372 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24373 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24374 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24375 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24376 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24377 : END DO
24378 : buffer1 = 0.0_dp
24379 : imax = 1*7*3
24380 : kmax = 10
24381 : DO i = 1, imax
24382 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24383 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24384 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24385 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24386 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24387 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24388 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24389 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
24390 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24391 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
24392 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
24393 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
24394 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
24395 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
24396 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
24397 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
24398 : END DO
24399 : imax = 1*7*7
24400 : kmax = 3
24401 : i = 0
24402 : DO i1 = 1, 7
24403 : DO i2 = 1, 7
24404 : DO i3 = 1, 1
24405 : i = i + 1
24406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
24408 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
24409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
24411 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
24412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
24414 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
24415 : END DO
24416 : END DO
24417 : END DO
24418 : s_offset_d1 = s_offset_d1 + 3
24419 : END DO
24420 : s_offset_c1 = s_offset_c1 + 7
24421 : END DO
24422 : s_offset_b1 = s_offset_b1 + 7
24423 : END DO
24424 : s_offset_a1 = s_offset_a1 + 1
24425 : END DO
24426 : END SUBROUTINE contract_sffp
24427 : #endif
24428 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
24429 : ! **************************************************************************************************
24430 : !> \brief ...
24431 : !> \param work ...
24432 : !> \param nl_a ...
24433 : !> \param nl_b ...
24434 : !> \param nl_c ...
24435 : !> \param nl_d ...
24436 : !> \param sphi_a ...
24437 : !> \param sphi_b ...
24438 : !> \param sphi_c ...
24439 : !> \param sphi_d ...
24440 : !> \param primitives ...
24441 : !> \param buffer1 ...
24442 : !> \param buffer2 ...
24443 : ! **************************************************************************************************
24444 : SUBROUTINE contract_sffd(work, &
24445 : nl_a, nl_b, nl_c, nl_d, &
24446 : sphi_a, sphi_b, sphi_c, sphi_d, &
24447 : primitives, &
24448 : buffer1, buffer2)
24449 : REAL(dp), DIMENSION(1*10*10*6), INTENT(IN) :: work
24450 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24451 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24452 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24453 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
24454 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
24455 : REAL(dp), &
24456 : DIMENSION(1*nl_a, 7*nl_b, 7*nl_c, 5*nl_d) :: primitives
24457 : REAL(dp), DIMENSION(1*10*10*6) :: buffer1, buffer2
24458 :
24459 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24460 : kmax, s_offset_a1, s_offset_b1, &
24461 : s_offset_c1, s_offset_d1
24462 :
24463 : s_offset_a1 = 0
24464 : DO ia = 1, nl_a
24465 : s_offset_b1 = 0
24466 : DO ib = 1, nl_b
24467 : s_offset_c1 = 0
24468 : DO ic = 1, nl_c
24469 : s_offset_d1 = 0
24470 : DO id = 1, nl_d
24471 : buffer1 = 0.0_dp
24472 : imax = 10*10*6
24473 : kmax = 1
24474 : DO i = 1, imax
24475 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24476 : END DO
24477 : buffer2 = 0.0_dp
24478 : imax = 1*10*6
24479 : kmax = 10
24480 : DO i = 1, imax
24481 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24482 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24483 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24484 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24485 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24486 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24487 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24488 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24489 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24490 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24491 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24492 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24493 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24494 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24495 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24496 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24497 : END DO
24498 : buffer1 = 0.0_dp
24499 : imax = 1*7*6
24500 : kmax = 10
24501 : DO i = 1, imax
24502 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24503 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24504 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24506 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24507 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24508 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24509 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
24510 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24511 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
24512 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
24513 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
24514 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
24515 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
24516 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
24517 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
24518 : END DO
24519 : imax = 1*7*7
24520 : kmax = 6
24521 : i = 0
24522 : DO i1 = 1, 7
24523 : DO i2 = 1, 7
24524 : DO i3 = 1, 1
24525 : i = i + 1
24526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24528 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
24529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24531 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
24532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24534 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
24535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24537 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
24538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24540 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
24541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24543 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
24544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24546 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
24547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24549 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
24550 : END DO
24551 : END DO
24552 : END DO
24553 : s_offset_d1 = s_offset_d1 + 5
24554 : END DO
24555 : s_offset_c1 = s_offset_c1 + 7
24556 : END DO
24557 : s_offset_b1 = s_offset_b1 + 7
24558 : END DO
24559 : s_offset_a1 = s_offset_a1 + 1
24560 : END DO
24561 : END SUBROUTINE contract_sffd
24562 : #endif
24563 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
24564 : ! **************************************************************************************************
24565 : !> \brief ...
24566 : !> \param work ...
24567 : !> \param nl_a ...
24568 : !> \param nl_b ...
24569 : !> \param nl_c ...
24570 : !> \param nl_d ...
24571 : !> \param sphi_a ...
24572 : !> \param sphi_b ...
24573 : !> \param sphi_c ...
24574 : !> \param sphi_d ...
24575 : !> \param primitives ...
24576 : !> \param buffer1 ...
24577 : !> \param buffer2 ...
24578 : ! **************************************************************************************************
24579 : SUBROUTINE contract_sfff(work, &
24580 : nl_a, nl_b, nl_c, nl_d, &
24581 : sphi_a, sphi_b, sphi_c, sphi_d, &
24582 : primitives, &
24583 : buffer1, buffer2)
24584 : REAL(dp), DIMENSION(1*10*10*10), INTENT(IN) :: work
24585 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24586 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24587 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24588 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
24589 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
24590 : REAL(dp), &
24591 : DIMENSION(1*nl_a, 7*nl_b, 7*nl_c, 7*nl_d) :: primitives
24592 : REAL(dp), DIMENSION(1*10*10*10) :: buffer1, buffer2
24593 :
24594 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24595 : kmax, s_offset_a1, s_offset_b1, &
24596 : s_offset_c1, s_offset_d1
24597 :
24598 : s_offset_a1 = 0
24599 : DO ia = 1, nl_a
24600 : s_offset_b1 = 0
24601 : DO ib = 1, nl_b
24602 : s_offset_c1 = 0
24603 : DO ic = 1, nl_c
24604 : s_offset_d1 = 0
24605 : DO id = 1, nl_d
24606 : buffer1 = 0.0_dp
24607 : imax = 10*10*10
24608 : kmax = 1
24609 : DO i = 1, imax
24610 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24611 : END DO
24612 : buffer2 = 0.0_dp
24613 : imax = 1*10*10
24614 : kmax = 10
24615 : DO i = 1, imax
24616 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24617 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24618 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24619 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24620 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24621 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24622 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24623 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24624 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24625 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24626 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24627 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24628 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24629 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24630 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24631 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24632 : END DO
24633 : buffer1 = 0.0_dp
24634 : imax = 1*7*10
24635 : kmax = 10
24636 : DO i = 1, imax
24637 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24638 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24639 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24640 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24641 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24642 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24643 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24644 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
24645 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
24647 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
24648 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
24649 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
24650 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
24651 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
24652 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
24653 : END DO
24654 : imax = 1*7*7
24655 : kmax = 10
24656 : i = 0
24657 : DO i1 = 1, 7
24658 : DO i2 = 1, 7
24659 : DO i3 = 1, 1
24660 : i = i + 1
24661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24663 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
24664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24666 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
24667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24669 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
24670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24672 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
24673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24675 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
24676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24678 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
24679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24681 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
24682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24684 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
24685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24687 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
24688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24690 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
24691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24693 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
24694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24696 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
24697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24699 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
24700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24702 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
24703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24705 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
24706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24708 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
24709 : END DO
24710 : END DO
24711 : END DO
24712 : s_offset_d1 = s_offset_d1 + 7
24713 : END DO
24714 : s_offset_c1 = s_offset_c1 + 7
24715 : END DO
24716 : s_offset_b1 = s_offset_b1 + 7
24717 : END DO
24718 : s_offset_a1 = s_offset_a1 + 1
24719 : END DO
24720 : END SUBROUTINE contract_sfff
24721 : #endif
24722 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
24723 : ! **************************************************************************************************
24724 : !> \brief ...
24725 : !> \param work ...
24726 : !> \param nl_a ...
24727 : !> \param nl_b ...
24728 : !> \param nl_c ...
24729 : !> \param nl_d ...
24730 : !> \param sphi_a ...
24731 : !> \param sphi_b ...
24732 : !> \param sphi_c ...
24733 : !> \param sphi_d ...
24734 : !> \param primitives ...
24735 : !> \param buffer1 ...
24736 : !> \param buffer2 ...
24737 : ! **************************************************************************************************
24738 : SUBROUTINE contract_sffg(work, &
24739 : nl_a, nl_b, nl_c, nl_d, &
24740 : sphi_a, sphi_b, sphi_c, sphi_d, &
24741 : primitives, &
24742 : buffer1, buffer2)
24743 : REAL(dp), DIMENSION(1*10*10*15), INTENT(IN) :: work
24744 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24745 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24746 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24747 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
24748 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
24749 : REAL(dp), &
24750 : DIMENSION(1*nl_a, 7*nl_b, 7*nl_c, 9*nl_d) :: primitives
24751 : REAL(dp), DIMENSION(1*10*10*15) :: buffer1, buffer2
24752 :
24753 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24754 : kmax, s_offset_a1, s_offset_b1, &
24755 : s_offset_c1, s_offset_d1
24756 :
24757 : s_offset_a1 = 0
24758 : DO ia = 1, nl_a
24759 : s_offset_b1 = 0
24760 : DO ib = 1, nl_b
24761 : s_offset_c1 = 0
24762 : DO ic = 1, nl_c
24763 : s_offset_d1 = 0
24764 : DO id = 1, nl_d
24765 : buffer1 = 0.0_dp
24766 : imax = 10*10*15
24767 : kmax = 1
24768 : DO i = 1, imax
24769 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24770 : END DO
24771 : buffer2 = 0.0_dp
24772 : imax = 1*10*15
24773 : kmax = 10
24774 : DO i = 1, imax
24775 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24776 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24777 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24778 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24779 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24780 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24781 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24782 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24783 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24784 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24785 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24786 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24787 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24788 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24789 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24790 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24791 : END DO
24792 : buffer1 = 0.0_dp
24793 : imax = 1*7*15
24794 : kmax = 10
24795 : DO i = 1, imax
24796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24797 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24798 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24799 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24800 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
24801 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24803 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
24804 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
24805 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
24806 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
24807 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
24808 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
24809 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
24810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
24811 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
24812 : END DO
24813 : imax = 1*7*7
24814 : kmax = 15
24815 : i = 0
24816 : DO i1 = 1, 7
24817 : DO i2 = 1, 7
24818 : DO i3 = 1, 1
24819 : i = i + 1
24820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24822 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
24823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24825 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
24826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24828 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
24829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24831 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
24832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24834 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
24835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24837 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
24838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
24839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
24840 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
24841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24843 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
24844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24846 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
24847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24849 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
24850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24852 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
24853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24855 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
24856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24858 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
24859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
24860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
24861 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
24862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24864 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
24865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24867 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
24868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
24869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
24870 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
24871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
24872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
24873 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
24874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
24875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
24876 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
24877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24879 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
24880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24882 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
24883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
24884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
24885 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
24886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
24887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
24888 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
24889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24891 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
24892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24894 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
24895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
24896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
24897 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
24898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
24899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
24900 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
24901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
24902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
24903 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
24904 : END DO
24905 : END DO
24906 : END DO
24907 : s_offset_d1 = s_offset_d1 + 9
24908 : END DO
24909 : s_offset_c1 = s_offset_c1 + 7
24910 : END DO
24911 : s_offset_b1 = s_offset_b1 + 7
24912 : END DO
24913 : s_offset_a1 = s_offset_a1 + 1
24914 : END DO
24915 : END SUBROUTINE contract_sffg
24916 : #endif
24917 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
24918 : ! **************************************************************************************************
24919 : !> \brief ...
24920 : !> \param work ...
24921 : !> \param nl_a ...
24922 : !> \param nl_b ...
24923 : !> \param nl_c ...
24924 : !> \param nl_d ...
24925 : !> \param sphi_a ...
24926 : !> \param sphi_b ...
24927 : !> \param sphi_c ...
24928 : !> \param sphi_d ...
24929 : !> \param primitives ...
24930 : !> \param buffer1 ...
24931 : !> \param buffer2 ...
24932 : ! **************************************************************************************************
24933 : SUBROUTINE contract_sfgs(work, &
24934 : nl_a, nl_b, nl_c, nl_d, &
24935 : sphi_a, sphi_b, sphi_c, sphi_d, &
24936 : primitives, &
24937 : buffer1, buffer2)
24938 : REAL(dp), DIMENSION(1*10*15*1), INTENT(IN) :: work
24939 : INTEGER :: nl_a, nl_b, nl_c, nl_d
24940 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
24941 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
24942 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
24943 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
24944 : REAL(dp), &
24945 : DIMENSION(1*nl_a, 7*nl_b, 9*nl_c, 1*nl_d) :: primitives
24946 : REAL(dp), DIMENSION(1*10*15*1) :: buffer1, buffer2
24947 :
24948 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
24949 : kmax, s_offset_a1, s_offset_b1, &
24950 : s_offset_c1, s_offset_d1
24951 :
24952 : s_offset_a1 = 0
24953 : DO ia = 1, nl_a
24954 : s_offset_b1 = 0
24955 : DO ib = 1, nl_b
24956 : s_offset_c1 = 0
24957 : DO ic = 1, nl_c
24958 : s_offset_d1 = 0
24959 : DO id = 1, nl_d
24960 : buffer1 = 0.0_dp
24961 : imax = 10*15*1
24962 : kmax = 1
24963 : DO i = 1, imax
24964 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
24965 : END DO
24966 : buffer2 = 0.0_dp
24967 : imax = 1*15*1
24968 : kmax = 10
24969 : DO i = 1, imax
24970 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
24971 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
24972 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
24973 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
24974 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
24975 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
24976 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
24977 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
24978 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
24979 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
24980 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
24981 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
24982 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
24983 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
24984 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
24985 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
24986 : END DO
24987 : buffer1 = 0.0_dp
24988 : imax = 1*7*1
24989 : kmax = 15
24990 : DO i = 1, imax
24991 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
24992 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
24993 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
24994 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
24995 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
24996 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
24997 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
24998 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
24999 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
25000 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
25001 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
25002 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
25003 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
25004 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
25005 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
25006 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
25007 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
25008 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
25009 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
25010 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
25011 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
25012 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
25013 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
25014 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
25015 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
25016 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
25017 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
25018 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
25019 : END DO
25020 : imax = 1*7*9
25021 : kmax = 1
25022 : i = 0
25023 : DO i1 = 1, 9
25024 : DO i2 = 1, 7
25025 : DO i3 = 1, 1
25026 : i = i + 1
25027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
25029 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
25030 : END DO
25031 : END DO
25032 : END DO
25033 : s_offset_d1 = s_offset_d1 + 1
25034 : END DO
25035 : s_offset_c1 = s_offset_c1 + 9
25036 : END DO
25037 : s_offset_b1 = s_offset_b1 + 7
25038 : END DO
25039 : s_offset_a1 = s_offset_a1 + 1
25040 : END DO
25041 : END SUBROUTINE contract_sfgs
25042 : #endif
25043 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25044 : ! **************************************************************************************************
25045 : !> \brief ...
25046 : !> \param work ...
25047 : !> \param nl_a ...
25048 : !> \param nl_b ...
25049 : !> \param nl_c ...
25050 : !> \param nl_d ...
25051 : !> \param sphi_a ...
25052 : !> \param sphi_b ...
25053 : !> \param sphi_c ...
25054 : !> \param sphi_d ...
25055 : !> \param primitives ...
25056 : !> \param buffer1 ...
25057 : !> \param buffer2 ...
25058 : ! **************************************************************************************************
25059 : SUBROUTINE contract_sfgp(work, &
25060 : nl_a, nl_b, nl_c, nl_d, &
25061 : sphi_a, sphi_b, sphi_c, sphi_d, &
25062 : primitives, &
25063 : buffer1, buffer2)
25064 : REAL(dp), DIMENSION(1*10*15*3), INTENT(IN) :: work
25065 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25066 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25067 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
25068 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
25069 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
25070 : REAL(dp), &
25071 : DIMENSION(1*nl_a, 7*nl_b, 9*nl_c, 3*nl_d) :: primitives
25072 : REAL(dp), DIMENSION(1*10*15*3) :: buffer1, buffer2
25073 :
25074 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25075 : kmax, s_offset_a1, s_offset_b1, &
25076 : s_offset_c1, s_offset_d1
25077 :
25078 : s_offset_a1 = 0
25079 : DO ia = 1, nl_a
25080 : s_offset_b1 = 0
25081 : DO ib = 1, nl_b
25082 : s_offset_c1 = 0
25083 : DO ic = 1, nl_c
25084 : s_offset_d1 = 0
25085 : DO id = 1, nl_d
25086 : buffer1 = 0.0_dp
25087 : imax = 10*15*3
25088 : kmax = 1
25089 : DO i = 1, imax
25090 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25091 : END DO
25092 : buffer2 = 0.0_dp
25093 : imax = 1*15*3
25094 : kmax = 10
25095 : DO i = 1, imax
25096 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25097 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25098 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25099 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25100 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
25101 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25102 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25103 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
25104 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25105 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25106 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25107 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25108 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
25109 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25110 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25111 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
25112 : END DO
25113 : buffer1 = 0.0_dp
25114 : imax = 1*7*3
25115 : kmax = 15
25116 : DO i = 1, imax
25117 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
25118 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
25119 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
25120 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
25121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
25122 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
25123 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
25124 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
25125 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
25126 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
25127 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
25128 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
25129 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
25130 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
25131 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
25132 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
25133 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
25134 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
25135 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
25136 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
25137 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
25138 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
25139 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
25140 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
25141 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
25142 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
25143 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
25144 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
25145 : END DO
25146 : imax = 1*7*9
25147 : kmax = 3
25148 : i = 0
25149 : DO i1 = 1, 9
25150 : DO i2 = 1, 7
25151 : DO i3 = 1, 1
25152 : i = i + 1
25153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
25155 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
25156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
25158 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
25159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
25161 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
25162 : END DO
25163 : END DO
25164 : END DO
25165 : s_offset_d1 = s_offset_d1 + 3
25166 : END DO
25167 : s_offset_c1 = s_offset_c1 + 9
25168 : END DO
25169 : s_offset_b1 = s_offset_b1 + 7
25170 : END DO
25171 : s_offset_a1 = s_offset_a1 + 1
25172 : END DO
25173 : END SUBROUTINE contract_sfgp
25174 : #endif
25175 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25176 : ! **************************************************************************************************
25177 : !> \brief ...
25178 : !> \param work ...
25179 : !> \param nl_a ...
25180 : !> \param nl_b ...
25181 : !> \param nl_c ...
25182 : !> \param nl_d ...
25183 : !> \param sphi_a ...
25184 : !> \param sphi_b ...
25185 : !> \param sphi_c ...
25186 : !> \param sphi_d ...
25187 : !> \param primitives ...
25188 : !> \param buffer1 ...
25189 : !> \param buffer2 ...
25190 : ! **************************************************************************************************
25191 : SUBROUTINE contract_sfgd(work, &
25192 : nl_a, nl_b, nl_c, nl_d, &
25193 : sphi_a, sphi_b, sphi_c, sphi_d, &
25194 : primitives, &
25195 : buffer1, buffer2)
25196 : REAL(dp), DIMENSION(1*10*15*6), INTENT(IN) :: work
25197 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25198 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25199 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
25200 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
25201 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
25202 : REAL(dp), &
25203 : DIMENSION(1*nl_a, 7*nl_b, 9*nl_c, 5*nl_d) :: primitives
25204 : REAL(dp), DIMENSION(1*10*15*6) :: buffer1, buffer2
25205 :
25206 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25207 : kmax, s_offset_a1, s_offset_b1, &
25208 : s_offset_c1, s_offset_d1
25209 :
25210 : s_offset_a1 = 0
25211 : DO ia = 1, nl_a
25212 : s_offset_b1 = 0
25213 : DO ib = 1, nl_b
25214 : s_offset_c1 = 0
25215 : DO ic = 1, nl_c
25216 : s_offset_d1 = 0
25217 : DO id = 1, nl_d
25218 : buffer1 = 0.0_dp
25219 : imax = 10*15*6
25220 : kmax = 1
25221 : DO i = 1, imax
25222 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25223 : END DO
25224 : buffer2 = 0.0_dp
25225 : imax = 1*15*6
25226 : kmax = 10
25227 : DO i = 1, imax
25228 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25229 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25230 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25231 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25232 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
25233 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25234 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25235 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
25236 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25237 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25238 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25239 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25240 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
25241 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25242 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25243 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
25244 : END DO
25245 : buffer1 = 0.0_dp
25246 : imax = 1*7*6
25247 : kmax = 15
25248 : DO i = 1, imax
25249 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
25250 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
25251 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
25252 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
25253 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
25254 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
25255 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
25256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
25257 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
25258 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
25259 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
25260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
25261 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
25262 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
25263 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
25264 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
25265 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
25266 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
25267 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
25268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
25269 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
25270 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
25271 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
25272 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
25273 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
25274 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
25275 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
25276 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
25277 : END DO
25278 : imax = 1*7*9
25279 : kmax = 6
25280 : i = 0
25281 : DO i1 = 1, 9
25282 : DO i2 = 1, 7
25283 : DO i3 = 1, 1
25284 : i = i + 1
25285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25287 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
25288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25290 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
25291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
25293 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
25294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25296 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
25297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25299 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
25300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25302 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
25303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
25305 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
25306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25308 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
25309 : END DO
25310 : END DO
25311 : END DO
25312 : s_offset_d1 = s_offset_d1 + 5
25313 : END DO
25314 : s_offset_c1 = s_offset_c1 + 9
25315 : END DO
25316 : s_offset_b1 = s_offset_b1 + 7
25317 : END DO
25318 : s_offset_a1 = s_offset_a1 + 1
25319 : END DO
25320 : END SUBROUTINE contract_sfgd
25321 : #endif
25322 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25323 : ! **************************************************************************************************
25324 : !> \brief ...
25325 : !> \param work ...
25326 : !> \param nl_a ...
25327 : !> \param nl_b ...
25328 : !> \param nl_c ...
25329 : !> \param nl_d ...
25330 : !> \param sphi_a ...
25331 : !> \param sphi_b ...
25332 : !> \param sphi_c ...
25333 : !> \param sphi_d ...
25334 : !> \param primitives ...
25335 : !> \param buffer1 ...
25336 : !> \param buffer2 ...
25337 : ! **************************************************************************************************
25338 : SUBROUTINE contract_sfgf(work, &
25339 : nl_a, nl_b, nl_c, nl_d, &
25340 : sphi_a, sphi_b, sphi_c, sphi_d, &
25341 : primitives, &
25342 : buffer1, buffer2)
25343 : REAL(dp), DIMENSION(1*10*15*10), INTENT(IN) :: work
25344 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25345 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25346 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
25347 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
25348 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
25349 : REAL(dp), &
25350 : DIMENSION(1*nl_a, 7*nl_b, 9*nl_c, 7*nl_d) :: primitives
25351 : REAL(dp), DIMENSION(1*10*15*10) :: buffer1, buffer2
25352 :
25353 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25354 : kmax, s_offset_a1, s_offset_b1, &
25355 : s_offset_c1, s_offset_d1
25356 :
25357 : s_offset_a1 = 0
25358 : DO ia = 1, nl_a
25359 : s_offset_b1 = 0
25360 : DO ib = 1, nl_b
25361 : s_offset_c1 = 0
25362 : DO ic = 1, nl_c
25363 : s_offset_d1 = 0
25364 : DO id = 1, nl_d
25365 : buffer1 = 0.0_dp
25366 : imax = 10*15*10
25367 : kmax = 1
25368 : DO i = 1, imax
25369 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25370 : END DO
25371 : buffer2 = 0.0_dp
25372 : imax = 1*15*10
25373 : kmax = 10
25374 : DO i = 1, imax
25375 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25376 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25377 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25378 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25379 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
25380 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25381 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25382 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
25383 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25384 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25385 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25386 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25387 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
25388 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25389 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25390 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
25391 : END DO
25392 : buffer1 = 0.0_dp
25393 : imax = 1*7*10
25394 : kmax = 15
25395 : DO i = 1, imax
25396 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
25397 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
25398 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
25399 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
25400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
25401 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
25402 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
25403 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
25404 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
25405 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
25406 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
25407 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
25408 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
25409 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
25410 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
25411 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
25412 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
25413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
25414 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
25415 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
25416 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
25417 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
25418 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
25419 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
25420 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
25421 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
25422 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
25423 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
25424 : END DO
25425 : imax = 1*7*9
25426 : kmax = 10
25427 : i = 0
25428 : DO i1 = 1, 9
25429 : DO i2 = 1, 7
25430 : DO i3 = 1, 1
25431 : i = i + 1
25432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25434 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
25435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25437 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
25438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
25440 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
25441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25443 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
25444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25446 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
25447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
25448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
25449 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
25450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25452 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
25453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25455 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
25456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
25458 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
25459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25461 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
25462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
25464 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
25465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25467 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
25468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25470 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
25471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
25472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
25473 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
25474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25476 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
25477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25479 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
25480 : END DO
25481 : END DO
25482 : END DO
25483 : s_offset_d1 = s_offset_d1 + 7
25484 : END DO
25485 : s_offset_c1 = s_offset_c1 + 9
25486 : END DO
25487 : s_offset_b1 = s_offset_b1 + 7
25488 : END DO
25489 : s_offset_a1 = s_offset_a1 + 1
25490 : END DO
25491 : END SUBROUTINE contract_sfgf
25492 : #endif
25493 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25494 : ! **************************************************************************************************
25495 : !> \brief ...
25496 : !> \param work ...
25497 : !> \param nl_a ...
25498 : !> \param nl_b ...
25499 : !> \param nl_c ...
25500 : !> \param nl_d ...
25501 : !> \param sphi_a ...
25502 : !> \param sphi_b ...
25503 : !> \param sphi_c ...
25504 : !> \param sphi_d ...
25505 : !> \param primitives ...
25506 : !> \param buffer1 ...
25507 : !> \param buffer2 ...
25508 : ! **************************************************************************************************
25509 : SUBROUTINE contract_sfgg(work, &
25510 : nl_a, nl_b, nl_c, nl_d, &
25511 : sphi_a, sphi_b, sphi_c, sphi_d, &
25512 : primitives, &
25513 : buffer1, buffer2)
25514 : REAL(dp), DIMENSION(1*10*15*15), INTENT(IN) :: work
25515 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25516 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25517 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
25518 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
25519 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
25520 : REAL(dp), &
25521 : DIMENSION(1*nl_a, 7*nl_b, 9*nl_c, 9*nl_d) :: primitives
25522 : REAL(dp), DIMENSION(1*10*15*15) :: buffer1, buffer2
25523 :
25524 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25525 : kmax, s_offset_a1, s_offset_b1, &
25526 : s_offset_c1, s_offset_d1
25527 :
25528 : s_offset_a1 = 0
25529 : DO ia = 1, nl_a
25530 : s_offset_b1 = 0
25531 : DO ib = 1, nl_b
25532 : s_offset_c1 = 0
25533 : DO ic = 1, nl_c
25534 : s_offset_d1 = 0
25535 : DO id = 1, nl_d
25536 : buffer1 = 0.0_dp
25537 : imax = 10*15*15
25538 : kmax = 1
25539 : DO i = 1, imax
25540 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25541 : END DO
25542 : buffer2 = 0.0_dp
25543 : imax = 1*15*15
25544 : kmax = 10
25545 : DO i = 1, imax
25546 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25547 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25548 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25549 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25550 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
25551 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25552 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25553 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
25554 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25555 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25556 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25557 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25558 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
25559 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25560 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25561 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
25562 : END DO
25563 : buffer1 = 0.0_dp
25564 : imax = 1*7*15
25565 : kmax = 15
25566 : DO i = 1, imax
25567 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
25568 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
25569 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
25570 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
25571 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
25572 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
25573 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
25574 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
25575 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
25576 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
25577 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
25578 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
25579 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
25580 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
25581 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
25582 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
25583 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
25584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
25585 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
25586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
25587 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
25588 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
25589 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
25590 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
25591 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
25592 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
25593 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
25594 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
25595 : END DO
25596 : imax = 1*7*9
25597 : kmax = 15
25598 : i = 0
25599 : DO i1 = 1, 9
25600 : DO i2 = 1, 7
25601 : DO i3 = 1, 1
25602 : i = i + 1
25603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25605 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
25606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25608 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
25609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
25610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
25611 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
25612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
25614 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
25615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25617 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
25618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
25619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
25620 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
25621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
25622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
25623 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
25624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25626 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
25627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
25628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
25629 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
25630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
25632 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
25633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25635 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
25636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25638 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
25639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25641 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
25642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
25644 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
25645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25647 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
25648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
25649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
25650 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
25651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
25652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
25653 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
25654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
25656 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
25657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
25658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
25659 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
25660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25662 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
25663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25665 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
25666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
25667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
25668 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
25669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
25671 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
25672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25674 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
25675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25677 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
25678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
25679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
25680 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
25681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
25682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
25683 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
25684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
25685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
25686 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
25687 : END DO
25688 : END DO
25689 : END DO
25690 : s_offset_d1 = s_offset_d1 + 9
25691 : END DO
25692 : s_offset_c1 = s_offset_c1 + 9
25693 : END DO
25694 : s_offset_b1 = s_offset_b1 + 7
25695 : END DO
25696 : s_offset_a1 = s_offset_a1 + 1
25697 : END DO
25698 : END SUBROUTINE contract_sfgg
25699 : #endif
25700 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25701 : ! **************************************************************************************************
25702 : !> \brief ...
25703 : !> \param work ...
25704 : !> \param nl_a ...
25705 : !> \param nl_b ...
25706 : !> \param nl_c ...
25707 : !> \param nl_d ...
25708 : !> \param sphi_a ...
25709 : !> \param sphi_b ...
25710 : !> \param sphi_c ...
25711 : !> \param sphi_d ...
25712 : !> \param primitives ...
25713 : !> \param buffer1 ...
25714 : !> \param buffer2 ...
25715 : ! **************************************************************************************************
25716 : SUBROUTINE contract_sgss(work, &
25717 : nl_a, nl_b, nl_c, nl_d, &
25718 : sphi_a, sphi_b, sphi_c, sphi_d, &
25719 : primitives, &
25720 : buffer1, buffer2)
25721 : REAL(dp), DIMENSION(1*15*1*1), INTENT(IN) :: work
25722 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25723 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25724 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
25725 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
25726 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
25727 : REAL(dp), &
25728 : DIMENSION(1*nl_a, 9*nl_b, 1*nl_c, 1*nl_d) :: primitives
25729 : REAL(dp), DIMENSION(1*15*1*1) :: buffer1, buffer2
25730 :
25731 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25732 : kmax, s_offset_a1, s_offset_b1, &
25733 : s_offset_c1, s_offset_d1
25734 :
25735 : s_offset_a1 = 0
25736 : DO ia = 1, nl_a
25737 : s_offset_b1 = 0
25738 : DO ib = 1, nl_b
25739 : s_offset_c1 = 0
25740 : DO ic = 1, nl_c
25741 : s_offset_d1 = 0
25742 : DO id = 1, nl_d
25743 : buffer1 = 0.0_dp
25744 : imax = 15*1*1
25745 : kmax = 1
25746 : DO i = 1, imax
25747 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25748 : END DO
25749 : buffer2 = 0.0_dp
25750 : imax = 1*1*1
25751 : kmax = 15
25752 : DO i = 1, imax
25753 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25754 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25755 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
25756 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25757 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25758 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25759 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
25760 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25761 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
25762 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25763 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
25764 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25765 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
25766 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25767 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25768 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25769 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
25770 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25771 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
25772 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
25773 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
25774 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
25775 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
25776 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
25777 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
25778 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
25779 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
25780 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
25781 : END DO
25782 : buffer1 = 0.0_dp
25783 : imax = 1*9*1
25784 : kmax = 1
25785 : DO i = 1, imax
25786 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
25787 : END DO
25788 : imax = 1*9*1
25789 : kmax = 1
25790 : i = 0
25791 : DO i1 = 1, 1
25792 : DO i2 = 1, 9
25793 : DO i3 = 1, 1
25794 : i = i + 1
25795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
25797 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
25798 : END DO
25799 : END DO
25800 : END DO
25801 : s_offset_d1 = s_offset_d1 + 1
25802 : END DO
25803 : s_offset_c1 = s_offset_c1 + 1
25804 : END DO
25805 : s_offset_b1 = s_offset_b1 + 9
25806 : END DO
25807 : s_offset_a1 = s_offset_a1 + 1
25808 : END DO
25809 : END SUBROUTINE contract_sgss
25810 : #endif
25811 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25812 : ! **************************************************************************************************
25813 : !> \brief ...
25814 : !> \param work ...
25815 : !> \param nl_a ...
25816 : !> \param nl_b ...
25817 : !> \param nl_c ...
25818 : !> \param nl_d ...
25819 : !> \param sphi_a ...
25820 : !> \param sphi_b ...
25821 : !> \param sphi_c ...
25822 : !> \param sphi_d ...
25823 : !> \param primitives ...
25824 : !> \param buffer1 ...
25825 : !> \param buffer2 ...
25826 : ! **************************************************************************************************
25827 : SUBROUTINE contract_sgsp(work, &
25828 : nl_a, nl_b, nl_c, nl_d, &
25829 : sphi_a, sphi_b, sphi_c, sphi_d, &
25830 : primitives, &
25831 : buffer1, buffer2)
25832 : REAL(dp), DIMENSION(1*15*1*3), INTENT(IN) :: work
25833 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25834 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25835 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
25836 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
25837 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
25838 : REAL(dp), &
25839 : DIMENSION(1*nl_a, 9*nl_b, 1*nl_c, 3*nl_d) :: primitives
25840 : REAL(dp), DIMENSION(1*15*1*3) :: buffer1, buffer2
25841 :
25842 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25843 : kmax, s_offset_a1, s_offset_b1, &
25844 : s_offset_c1, s_offset_d1
25845 :
25846 : s_offset_a1 = 0
25847 : DO ia = 1, nl_a
25848 : s_offset_b1 = 0
25849 : DO ib = 1, nl_b
25850 : s_offset_c1 = 0
25851 : DO ic = 1, nl_c
25852 : s_offset_d1 = 0
25853 : DO id = 1, nl_d
25854 : buffer1 = 0.0_dp
25855 : imax = 15*1*3
25856 : kmax = 1
25857 : DO i = 1, imax
25858 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25859 : END DO
25860 : buffer2 = 0.0_dp
25861 : imax = 1*1*3
25862 : kmax = 15
25863 : DO i = 1, imax
25864 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25865 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25866 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
25867 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25868 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25869 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25870 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
25871 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25872 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
25873 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25874 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
25875 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25876 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
25877 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25878 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25879 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25880 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
25881 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25882 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
25883 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
25884 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
25885 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
25886 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
25887 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
25888 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
25889 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
25890 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
25891 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
25892 : END DO
25893 : buffer1 = 0.0_dp
25894 : imax = 1*9*3
25895 : kmax = 1
25896 : DO i = 1, imax
25897 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
25898 : END DO
25899 : imax = 1*9*1
25900 : kmax = 3
25901 : i = 0
25902 : DO i1 = 1, 1
25903 : DO i2 = 1, 9
25904 : DO i3 = 1, 1
25905 : i = i + 1
25906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
25907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
25908 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
25909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
25910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
25911 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
25912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
25913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
25914 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
25915 : END DO
25916 : END DO
25917 : END DO
25918 : s_offset_d1 = s_offset_d1 + 3
25919 : END DO
25920 : s_offset_c1 = s_offset_c1 + 1
25921 : END DO
25922 : s_offset_b1 = s_offset_b1 + 9
25923 : END DO
25924 : s_offset_a1 = s_offset_a1 + 1
25925 : END DO
25926 : END SUBROUTINE contract_sgsp
25927 : #endif
25928 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
25929 : ! **************************************************************************************************
25930 : !> \brief ...
25931 : !> \param work ...
25932 : !> \param nl_a ...
25933 : !> \param nl_b ...
25934 : !> \param nl_c ...
25935 : !> \param nl_d ...
25936 : !> \param sphi_a ...
25937 : !> \param sphi_b ...
25938 : !> \param sphi_c ...
25939 : !> \param sphi_d ...
25940 : !> \param primitives ...
25941 : !> \param buffer1 ...
25942 : !> \param buffer2 ...
25943 : ! **************************************************************************************************
25944 : SUBROUTINE contract_sgsd(work, &
25945 : nl_a, nl_b, nl_c, nl_d, &
25946 : sphi_a, sphi_b, sphi_c, sphi_d, &
25947 : primitives, &
25948 : buffer1, buffer2)
25949 : REAL(dp), DIMENSION(1*15*1*6), INTENT(IN) :: work
25950 : INTEGER :: nl_a, nl_b, nl_c, nl_d
25951 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
25952 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
25953 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
25954 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
25955 : REAL(dp), &
25956 : DIMENSION(1*nl_a, 9*nl_b, 1*nl_c, 5*nl_d) :: primitives
25957 : REAL(dp), DIMENSION(1*15*1*6) :: buffer1, buffer2
25958 :
25959 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
25960 : kmax, s_offset_a1, s_offset_b1, &
25961 : s_offset_c1, s_offset_d1
25962 :
25963 : s_offset_a1 = 0
25964 : DO ia = 1, nl_a
25965 : s_offset_b1 = 0
25966 : DO ib = 1, nl_b
25967 : s_offset_c1 = 0
25968 : DO ic = 1, nl_c
25969 : s_offset_d1 = 0
25970 : DO id = 1, nl_d
25971 : buffer1 = 0.0_dp
25972 : imax = 15*1*6
25973 : kmax = 1
25974 : DO i = 1, imax
25975 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
25976 : END DO
25977 : buffer2 = 0.0_dp
25978 : imax = 1*1*6
25979 : kmax = 15
25980 : DO i = 1, imax
25981 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
25982 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
25983 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
25984 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
25985 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
25986 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
25987 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
25988 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
25989 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
25990 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
25991 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
25992 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
25993 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
25994 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
25995 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
25996 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
25997 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
25998 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
25999 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26000 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26001 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26002 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26003 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26004 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26005 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26006 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26007 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26008 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26009 : END DO
26010 : buffer1 = 0.0_dp
26011 : imax = 1*9*6
26012 : kmax = 1
26013 : DO i = 1, imax
26014 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
26015 : END DO
26016 : imax = 1*9*1
26017 : kmax = 6
26018 : i = 0
26019 : DO i1 = 1, 1
26020 : DO i2 = 1, 9
26021 : DO i3 = 1, 1
26022 : i = i + 1
26023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26025 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
26026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26028 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
26029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26031 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26034 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
26035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26037 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
26038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26040 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
26041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26043 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
26044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26046 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
26047 : END DO
26048 : END DO
26049 : END DO
26050 : s_offset_d1 = s_offset_d1 + 5
26051 : END DO
26052 : s_offset_c1 = s_offset_c1 + 1
26053 : END DO
26054 : s_offset_b1 = s_offset_b1 + 9
26055 : END DO
26056 : s_offset_a1 = s_offset_a1 + 1
26057 : END DO
26058 : END SUBROUTINE contract_sgsd
26059 : #endif
26060 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26061 : ! **************************************************************************************************
26062 : !> \brief ...
26063 : !> \param work ...
26064 : !> \param nl_a ...
26065 : !> \param nl_b ...
26066 : !> \param nl_c ...
26067 : !> \param nl_d ...
26068 : !> \param sphi_a ...
26069 : !> \param sphi_b ...
26070 : !> \param sphi_c ...
26071 : !> \param sphi_d ...
26072 : !> \param primitives ...
26073 : !> \param buffer1 ...
26074 : !> \param buffer2 ...
26075 : ! **************************************************************************************************
26076 : SUBROUTINE contract_sgsf(work, &
26077 : nl_a, nl_b, nl_c, nl_d, &
26078 : sphi_a, sphi_b, sphi_c, sphi_d, &
26079 : primitives, &
26080 : buffer1, buffer2)
26081 : REAL(dp), DIMENSION(1*15*1*10), INTENT(IN) :: work
26082 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26083 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26084 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26085 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
26086 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
26087 : REAL(dp), &
26088 : DIMENSION(1*nl_a, 9*nl_b, 1*nl_c, 7*nl_d) :: primitives
26089 : REAL(dp), DIMENSION(1*15*1*10) :: buffer1, buffer2
26090 :
26091 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26092 : kmax, s_offset_a1, s_offset_b1, &
26093 : s_offset_c1, s_offset_d1
26094 :
26095 : s_offset_a1 = 0
26096 : DO ia = 1, nl_a
26097 : s_offset_b1 = 0
26098 : DO ib = 1, nl_b
26099 : s_offset_c1 = 0
26100 : DO ic = 1, nl_c
26101 : s_offset_d1 = 0
26102 : DO id = 1, nl_d
26103 : buffer1 = 0.0_dp
26104 : imax = 15*1*10
26105 : kmax = 1
26106 : DO i = 1, imax
26107 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26108 : END DO
26109 : buffer2 = 0.0_dp
26110 : imax = 1*1*10
26111 : kmax = 15
26112 : DO i = 1, imax
26113 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26114 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26115 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26116 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26117 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26118 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26119 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26120 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26121 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26122 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26123 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26124 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26125 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26126 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26127 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26128 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26129 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26130 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26131 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26132 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26133 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26134 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26135 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26136 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26137 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26138 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26139 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26140 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26141 : END DO
26142 : buffer1 = 0.0_dp
26143 : imax = 1*9*10
26144 : kmax = 1
26145 : DO i = 1, imax
26146 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
26147 : END DO
26148 : imax = 1*9*1
26149 : kmax = 10
26150 : i = 0
26151 : DO i1 = 1, 1
26152 : DO i2 = 1, 9
26153 : DO i3 = 1, 1
26154 : i = i + 1
26155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26157 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
26158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26160 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
26161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26163 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26166 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
26167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26169 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
26170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26172 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
26173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26175 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
26176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26178 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
26179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26181 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
26182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26184 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
26185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26187 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
26188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26190 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
26191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26193 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
26194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26196 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
26197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26199 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
26200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26202 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
26203 : END DO
26204 : END DO
26205 : END DO
26206 : s_offset_d1 = s_offset_d1 + 7
26207 : END DO
26208 : s_offset_c1 = s_offset_c1 + 1
26209 : END DO
26210 : s_offset_b1 = s_offset_b1 + 9
26211 : END DO
26212 : s_offset_a1 = s_offset_a1 + 1
26213 : END DO
26214 : END SUBROUTINE contract_sgsf
26215 : #endif
26216 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26217 : ! **************************************************************************************************
26218 : !> \brief ...
26219 : !> \param work ...
26220 : !> \param nl_a ...
26221 : !> \param nl_b ...
26222 : !> \param nl_c ...
26223 : !> \param nl_d ...
26224 : !> \param sphi_a ...
26225 : !> \param sphi_b ...
26226 : !> \param sphi_c ...
26227 : !> \param sphi_d ...
26228 : !> \param primitives ...
26229 : !> \param buffer1 ...
26230 : !> \param buffer2 ...
26231 : ! **************************************************************************************************
26232 : SUBROUTINE contract_sgsg(work, &
26233 : nl_a, nl_b, nl_c, nl_d, &
26234 : sphi_a, sphi_b, sphi_c, sphi_d, &
26235 : primitives, &
26236 : buffer1, buffer2)
26237 : REAL(dp), DIMENSION(1*15*1*15), INTENT(IN) :: work
26238 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26239 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26240 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26241 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
26242 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
26243 : REAL(dp), &
26244 : DIMENSION(1*nl_a, 9*nl_b, 1*nl_c, 9*nl_d) :: primitives
26245 : REAL(dp), DIMENSION(1*15*1*15) :: buffer1, buffer2
26246 :
26247 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26248 : kmax, s_offset_a1, s_offset_b1, &
26249 : s_offset_c1, s_offset_d1
26250 :
26251 : s_offset_a1 = 0
26252 : DO ia = 1, nl_a
26253 : s_offset_b1 = 0
26254 : DO ib = 1, nl_b
26255 : s_offset_c1 = 0
26256 : DO ic = 1, nl_c
26257 : s_offset_d1 = 0
26258 : DO id = 1, nl_d
26259 : buffer1 = 0.0_dp
26260 : imax = 15*1*15
26261 : kmax = 1
26262 : DO i = 1, imax
26263 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26264 : END DO
26265 : buffer2 = 0.0_dp
26266 : imax = 1*1*15
26267 : kmax = 15
26268 : DO i = 1, imax
26269 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26270 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26271 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26272 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26273 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26274 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26275 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26276 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26277 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26278 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26279 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26280 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26281 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26282 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26283 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26284 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26285 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26286 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26287 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26288 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26289 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26290 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26291 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26292 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26293 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26294 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26295 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26296 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26297 : END DO
26298 : buffer1 = 0.0_dp
26299 : imax = 1*9*15
26300 : kmax = 1
26301 : DO i = 1, imax
26302 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
26303 : END DO
26304 : imax = 1*9*1
26305 : kmax = 15
26306 : i = 0
26307 : DO i1 = 1, 1
26308 : DO i2 = 1, 9
26309 : DO i3 = 1, 1
26310 : i = i + 1
26311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26313 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
26314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26316 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
26317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
26318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
26319 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
26320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26322 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
26326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
26329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
26330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
26331 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
26332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
26335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
26336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
26337 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
26338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26340 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
26341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26343 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
26344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26346 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
26347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26349 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
26350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26352 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
26353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26355 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
26356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26358 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
26359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
26360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
26361 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
26362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26364 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
26365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26367 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
26368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26370 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
26371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26373 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
26374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
26375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
26376 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
26377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26379 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
26380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26382 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
26383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26385 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
26386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26388 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
26389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26391 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
26392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26394 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
26395 : END DO
26396 : END DO
26397 : END DO
26398 : s_offset_d1 = s_offset_d1 + 9
26399 : END DO
26400 : s_offset_c1 = s_offset_c1 + 1
26401 : END DO
26402 : s_offset_b1 = s_offset_b1 + 9
26403 : END DO
26404 : s_offset_a1 = s_offset_a1 + 1
26405 : END DO
26406 : END SUBROUTINE contract_sgsg
26407 : #endif
26408 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26409 : ! **************************************************************************************************
26410 : !> \brief ...
26411 : !> \param work ...
26412 : !> \param nl_a ...
26413 : !> \param nl_b ...
26414 : !> \param nl_c ...
26415 : !> \param nl_d ...
26416 : !> \param sphi_a ...
26417 : !> \param sphi_b ...
26418 : !> \param sphi_c ...
26419 : !> \param sphi_d ...
26420 : !> \param primitives ...
26421 : !> \param buffer1 ...
26422 : !> \param buffer2 ...
26423 : ! **************************************************************************************************
26424 : SUBROUTINE contract_sgps(work, &
26425 : nl_a, nl_b, nl_c, nl_d, &
26426 : sphi_a, sphi_b, sphi_c, sphi_d, &
26427 : primitives, &
26428 : buffer1, buffer2)
26429 : REAL(dp), DIMENSION(1*15*3*1), INTENT(IN) :: work
26430 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26431 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26432 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26433 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
26434 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
26435 : REAL(dp), &
26436 : DIMENSION(1*nl_a, 9*nl_b, 3*nl_c, 1*nl_d) :: primitives
26437 : REAL(dp), DIMENSION(1*15*3*1) :: buffer1, buffer2
26438 :
26439 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26440 : kmax, s_offset_a1, s_offset_b1, &
26441 : s_offset_c1, s_offset_d1
26442 :
26443 : s_offset_a1 = 0
26444 : DO ia = 1, nl_a
26445 : s_offset_b1 = 0
26446 : DO ib = 1, nl_b
26447 : s_offset_c1 = 0
26448 : DO ic = 1, nl_c
26449 : s_offset_d1 = 0
26450 : DO id = 1, nl_d
26451 : buffer1 = 0.0_dp
26452 : imax = 15*3*1
26453 : kmax = 1
26454 : DO i = 1, imax
26455 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26456 : END DO
26457 : buffer2 = 0.0_dp
26458 : imax = 1*3*1
26459 : kmax = 15
26460 : DO i = 1, imax
26461 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26462 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26463 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26464 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26465 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26466 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26467 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26468 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26469 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26470 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26471 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26472 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26473 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26474 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26475 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26476 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26477 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26478 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26479 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26480 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26481 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26482 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26483 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26484 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26485 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26486 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26487 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26488 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26489 : END DO
26490 : buffer1 = 0.0_dp
26491 : imax = 1*9*1
26492 : kmax = 3
26493 : DO i = 1, imax
26494 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
26495 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
26496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
26497 : END DO
26498 : imax = 1*9*3
26499 : kmax = 1
26500 : i = 0
26501 : DO i1 = 1, 3
26502 : DO i2 = 1, 9
26503 : DO i3 = 1, 1
26504 : i = i + 1
26505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
26507 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
26508 : END DO
26509 : END DO
26510 : END DO
26511 : s_offset_d1 = s_offset_d1 + 1
26512 : END DO
26513 : s_offset_c1 = s_offset_c1 + 3
26514 : END DO
26515 : s_offset_b1 = s_offset_b1 + 9
26516 : END DO
26517 : s_offset_a1 = s_offset_a1 + 1
26518 : END DO
26519 : END SUBROUTINE contract_sgps
26520 : #endif
26521 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26522 : ! **************************************************************************************************
26523 : !> \brief ...
26524 : !> \param work ...
26525 : !> \param nl_a ...
26526 : !> \param nl_b ...
26527 : !> \param nl_c ...
26528 : !> \param nl_d ...
26529 : !> \param sphi_a ...
26530 : !> \param sphi_b ...
26531 : !> \param sphi_c ...
26532 : !> \param sphi_d ...
26533 : !> \param primitives ...
26534 : !> \param buffer1 ...
26535 : !> \param buffer2 ...
26536 : ! **************************************************************************************************
26537 : SUBROUTINE contract_sgpp(work, &
26538 : nl_a, nl_b, nl_c, nl_d, &
26539 : sphi_a, sphi_b, sphi_c, sphi_d, &
26540 : primitives, &
26541 : buffer1, buffer2)
26542 : REAL(dp), DIMENSION(1*15*3*3), INTENT(IN) :: work
26543 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26544 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26545 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26546 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
26547 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
26548 : REAL(dp), &
26549 : DIMENSION(1*nl_a, 9*nl_b, 3*nl_c, 3*nl_d) :: primitives
26550 : REAL(dp), DIMENSION(1*15*3*3) :: buffer1, buffer2
26551 :
26552 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26553 : kmax, s_offset_a1, s_offset_b1, &
26554 : s_offset_c1, s_offset_d1
26555 :
26556 : s_offset_a1 = 0
26557 : DO ia = 1, nl_a
26558 : s_offset_b1 = 0
26559 : DO ib = 1, nl_b
26560 : s_offset_c1 = 0
26561 : DO ic = 1, nl_c
26562 : s_offset_d1 = 0
26563 : DO id = 1, nl_d
26564 : buffer1 = 0.0_dp
26565 : imax = 15*3*3
26566 : kmax = 1
26567 : DO i = 1, imax
26568 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26569 : END DO
26570 : buffer2 = 0.0_dp
26571 : imax = 1*3*3
26572 : kmax = 15
26573 : DO i = 1, imax
26574 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26575 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26576 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26577 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26578 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26579 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26580 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26581 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26582 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26583 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26584 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26585 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26586 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26587 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26588 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26589 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26590 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26591 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26592 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26593 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26594 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26595 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26596 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26597 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26598 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26599 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26600 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26601 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26602 : END DO
26603 : buffer1 = 0.0_dp
26604 : imax = 1*9*3
26605 : kmax = 3
26606 : DO i = 1, imax
26607 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
26608 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
26609 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
26610 : END DO
26611 : imax = 1*9*3
26612 : kmax = 3
26613 : i = 0
26614 : DO i1 = 1, 3
26615 : DO i2 = 1, 9
26616 : DO i3 = 1, 1
26617 : i = i + 1
26618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
26620 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
26621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
26623 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
26626 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
26627 : END DO
26628 : END DO
26629 : END DO
26630 : s_offset_d1 = s_offset_d1 + 3
26631 : END DO
26632 : s_offset_c1 = s_offset_c1 + 3
26633 : END DO
26634 : s_offset_b1 = s_offset_b1 + 9
26635 : END DO
26636 : s_offset_a1 = s_offset_a1 + 1
26637 : END DO
26638 : END SUBROUTINE contract_sgpp
26639 : #endif
26640 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26641 : ! **************************************************************************************************
26642 : !> \brief ...
26643 : !> \param work ...
26644 : !> \param nl_a ...
26645 : !> \param nl_b ...
26646 : !> \param nl_c ...
26647 : !> \param nl_d ...
26648 : !> \param sphi_a ...
26649 : !> \param sphi_b ...
26650 : !> \param sphi_c ...
26651 : !> \param sphi_d ...
26652 : !> \param primitives ...
26653 : !> \param buffer1 ...
26654 : !> \param buffer2 ...
26655 : ! **************************************************************************************************
26656 : SUBROUTINE contract_sgpd(work, &
26657 : nl_a, nl_b, nl_c, nl_d, &
26658 : sphi_a, sphi_b, sphi_c, sphi_d, &
26659 : primitives, &
26660 : buffer1, buffer2)
26661 : REAL(dp), DIMENSION(1*15*3*6), INTENT(IN) :: work
26662 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26663 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26664 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26665 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
26666 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
26667 : REAL(dp), &
26668 : DIMENSION(1*nl_a, 9*nl_b, 3*nl_c, 5*nl_d) :: primitives
26669 : REAL(dp), DIMENSION(1*15*3*6) :: buffer1, buffer2
26670 :
26671 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26672 : kmax, s_offset_a1, s_offset_b1, &
26673 : s_offset_c1, s_offset_d1
26674 :
26675 : s_offset_a1 = 0
26676 : DO ia = 1, nl_a
26677 : s_offset_b1 = 0
26678 : DO ib = 1, nl_b
26679 : s_offset_c1 = 0
26680 : DO ic = 1, nl_c
26681 : s_offset_d1 = 0
26682 : DO id = 1, nl_d
26683 : buffer1 = 0.0_dp
26684 : imax = 15*3*6
26685 : kmax = 1
26686 : DO i = 1, imax
26687 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26688 : END DO
26689 : buffer2 = 0.0_dp
26690 : imax = 1*3*6
26691 : kmax = 15
26692 : DO i = 1, imax
26693 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26694 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26695 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26696 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26697 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26698 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26699 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26700 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26701 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26702 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26703 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26704 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26705 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26706 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26707 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26708 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26709 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26710 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26711 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26712 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26713 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26714 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26715 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26716 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26717 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26718 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26719 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26720 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26721 : END DO
26722 : buffer1 = 0.0_dp
26723 : imax = 1*9*6
26724 : kmax = 3
26725 : DO i = 1, imax
26726 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
26727 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
26728 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
26729 : END DO
26730 : imax = 1*9*3
26731 : kmax = 6
26732 : i = 0
26733 : DO i1 = 1, 3
26734 : DO i2 = 1, 9
26735 : DO i3 = 1, 1
26736 : i = i + 1
26737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26739 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
26740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26742 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
26743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26745 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26748 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
26749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26751 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
26752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26754 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
26755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26757 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
26758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26760 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
26761 : END DO
26762 : END DO
26763 : END DO
26764 : s_offset_d1 = s_offset_d1 + 5
26765 : END DO
26766 : s_offset_c1 = s_offset_c1 + 3
26767 : END DO
26768 : s_offset_b1 = s_offset_b1 + 9
26769 : END DO
26770 : s_offset_a1 = s_offset_a1 + 1
26771 : END DO
26772 : END SUBROUTINE contract_sgpd
26773 : #endif
26774 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26775 : ! **************************************************************************************************
26776 : !> \brief ...
26777 : !> \param work ...
26778 : !> \param nl_a ...
26779 : !> \param nl_b ...
26780 : !> \param nl_c ...
26781 : !> \param nl_d ...
26782 : !> \param sphi_a ...
26783 : !> \param sphi_b ...
26784 : !> \param sphi_c ...
26785 : !> \param sphi_d ...
26786 : !> \param primitives ...
26787 : !> \param buffer1 ...
26788 : !> \param buffer2 ...
26789 : ! **************************************************************************************************
26790 : SUBROUTINE contract_sgpf(work, &
26791 : nl_a, nl_b, nl_c, nl_d, &
26792 : sphi_a, sphi_b, sphi_c, sphi_d, &
26793 : primitives, &
26794 : buffer1, buffer2)
26795 : REAL(dp), DIMENSION(1*15*3*10), INTENT(IN) :: work
26796 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26797 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26798 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26799 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
26800 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
26801 : REAL(dp), &
26802 : DIMENSION(1*nl_a, 9*nl_b, 3*nl_c, 7*nl_d) :: primitives
26803 : REAL(dp), DIMENSION(1*15*3*10) :: buffer1, buffer2
26804 :
26805 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26806 : kmax, s_offset_a1, s_offset_b1, &
26807 : s_offset_c1, s_offset_d1
26808 :
26809 : s_offset_a1 = 0
26810 : DO ia = 1, nl_a
26811 : s_offset_b1 = 0
26812 : DO ib = 1, nl_b
26813 : s_offset_c1 = 0
26814 : DO ic = 1, nl_c
26815 : s_offset_d1 = 0
26816 : DO id = 1, nl_d
26817 : buffer1 = 0.0_dp
26818 : imax = 15*3*10
26819 : kmax = 1
26820 : DO i = 1, imax
26821 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26822 : END DO
26823 : buffer2 = 0.0_dp
26824 : imax = 1*3*10
26825 : kmax = 15
26826 : DO i = 1, imax
26827 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26828 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26829 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26830 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26831 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26832 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26833 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26834 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26835 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26836 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26837 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26838 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26839 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26840 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26841 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
26842 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
26843 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
26844 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
26845 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
26846 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
26847 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
26848 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
26849 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
26850 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
26851 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
26852 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
26853 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
26854 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
26855 : END DO
26856 : buffer1 = 0.0_dp
26857 : imax = 1*9*10
26858 : kmax = 3
26859 : DO i = 1, imax
26860 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
26861 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
26862 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
26863 : END DO
26864 : imax = 1*9*3
26865 : kmax = 10
26866 : i = 0
26867 : DO i1 = 1, 3
26868 : DO i2 = 1, 9
26869 : DO i3 = 1, 1
26870 : i = i + 1
26871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26873 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
26874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26876 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
26877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26879 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
26880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26882 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
26883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26885 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
26886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26888 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
26889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26891 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
26892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
26893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
26894 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
26895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
26896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
26897 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
26898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
26899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
26900 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
26901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
26902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
26903 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
26904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26906 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
26907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26909 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
26910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
26911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
26912 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
26913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
26914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
26915 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
26916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
26917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
26918 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
26919 : END DO
26920 : END DO
26921 : END DO
26922 : s_offset_d1 = s_offset_d1 + 7
26923 : END DO
26924 : s_offset_c1 = s_offset_c1 + 3
26925 : END DO
26926 : s_offset_b1 = s_offset_b1 + 9
26927 : END DO
26928 : s_offset_a1 = s_offset_a1 + 1
26929 : END DO
26930 : END SUBROUTINE contract_sgpf
26931 : #endif
26932 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
26933 : ! **************************************************************************************************
26934 : !> \brief ...
26935 : !> \param work ...
26936 : !> \param nl_a ...
26937 : !> \param nl_b ...
26938 : !> \param nl_c ...
26939 : !> \param nl_d ...
26940 : !> \param sphi_a ...
26941 : !> \param sphi_b ...
26942 : !> \param sphi_c ...
26943 : !> \param sphi_d ...
26944 : !> \param primitives ...
26945 : !> \param buffer1 ...
26946 : !> \param buffer2 ...
26947 : ! **************************************************************************************************
26948 : SUBROUTINE contract_sgpg(work, &
26949 : nl_a, nl_b, nl_c, nl_d, &
26950 : sphi_a, sphi_b, sphi_c, sphi_d, &
26951 : primitives, &
26952 : buffer1, buffer2)
26953 : REAL(dp), DIMENSION(1*15*3*15), INTENT(IN) :: work
26954 : INTEGER :: nl_a, nl_b, nl_c, nl_d
26955 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
26956 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
26957 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
26958 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
26959 : REAL(dp), &
26960 : DIMENSION(1*nl_a, 9*nl_b, 3*nl_c, 9*nl_d) :: primitives
26961 : REAL(dp), DIMENSION(1*15*3*15) :: buffer1, buffer2
26962 :
26963 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
26964 : kmax, s_offset_a1, s_offset_b1, &
26965 : s_offset_c1, s_offset_d1
26966 :
26967 : s_offset_a1 = 0
26968 : DO ia = 1, nl_a
26969 : s_offset_b1 = 0
26970 : DO ib = 1, nl_b
26971 : s_offset_c1 = 0
26972 : DO ic = 1, nl_c
26973 : s_offset_d1 = 0
26974 : DO id = 1, nl_d
26975 : buffer1 = 0.0_dp
26976 : imax = 15*3*15
26977 : kmax = 1
26978 : DO i = 1, imax
26979 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
26980 : END DO
26981 : buffer2 = 0.0_dp
26982 : imax = 1*3*15
26983 : kmax = 15
26984 : DO i = 1, imax
26985 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
26986 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
26987 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
26988 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
26989 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
26990 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
26991 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
26992 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
26993 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
26994 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
26995 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
26996 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
26997 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
26998 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
26999 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27000 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27001 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27002 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27003 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27005 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27006 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27007 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27008 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27009 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27010 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27011 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27012 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27013 : END DO
27014 : buffer1 = 0.0_dp
27015 : imax = 1*9*15
27016 : kmax = 3
27017 : DO i = 1, imax
27018 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27019 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27020 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
27021 : END DO
27022 : imax = 1*9*3
27023 : kmax = 15
27024 : i = 0
27025 : DO i1 = 1, 3
27026 : DO i2 = 1, 9
27027 : DO i3 = 1, 1
27028 : i = i + 1
27029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27031 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
27032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27034 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
27035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27037 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
27038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27040 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
27041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27043 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
27044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27046 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
27047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
27048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
27049 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
27050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27052 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
27053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27055 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
27056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27058 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
27059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27061 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
27062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27064 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
27065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27067 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
27068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27070 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
27071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27073 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
27074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27076 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
27077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
27078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
27079 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
27080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27082 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
27083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27085 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
27086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27088 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
27089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27091 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
27092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27094 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
27095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27097 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
27098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27100 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
27101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27103 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
27104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27106 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
27107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27109 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
27110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27112 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
27113 : END DO
27114 : END DO
27115 : END DO
27116 : s_offset_d1 = s_offset_d1 + 9
27117 : END DO
27118 : s_offset_c1 = s_offset_c1 + 3
27119 : END DO
27120 : s_offset_b1 = s_offset_b1 + 9
27121 : END DO
27122 : s_offset_a1 = s_offset_a1 + 1
27123 : END DO
27124 : END SUBROUTINE contract_sgpg
27125 : #endif
27126 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27127 : ! **************************************************************************************************
27128 : !> \brief ...
27129 : !> \param work ...
27130 : !> \param nl_a ...
27131 : !> \param nl_b ...
27132 : !> \param nl_c ...
27133 : !> \param nl_d ...
27134 : !> \param sphi_a ...
27135 : !> \param sphi_b ...
27136 : !> \param sphi_c ...
27137 : !> \param sphi_d ...
27138 : !> \param primitives ...
27139 : !> \param buffer1 ...
27140 : !> \param buffer2 ...
27141 : ! **************************************************************************************************
27142 : SUBROUTINE contract_sgds(work, &
27143 : nl_a, nl_b, nl_c, nl_d, &
27144 : sphi_a, sphi_b, sphi_c, sphi_d, &
27145 : primitives, &
27146 : buffer1, buffer2)
27147 : REAL(dp), DIMENSION(1*15*6*1), INTENT(IN) :: work
27148 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27149 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27150 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27151 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
27152 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
27153 : REAL(dp), &
27154 : DIMENSION(1*nl_a, 9*nl_b, 5*nl_c, 1*nl_d) :: primitives
27155 : REAL(dp), DIMENSION(1*15*6*1) :: buffer1, buffer2
27156 :
27157 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27158 : kmax, s_offset_a1, s_offset_b1, &
27159 : s_offset_c1, s_offset_d1
27160 :
27161 : s_offset_a1 = 0
27162 : DO ia = 1, nl_a
27163 : s_offset_b1 = 0
27164 : DO ib = 1, nl_b
27165 : s_offset_c1 = 0
27166 : DO ic = 1, nl_c
27167 : s_offset_d1 = 0
27168 : DO id = 1, nl_d
27169 : buffer1 = 0.0_dp
27170 : imax = 15*6*1
27171 : kmax = 1
27172 : DO i = 1, imax
27173 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27174 : END DO
27175 : buffer2 = 0.0_dp
27176 : imax = 1*6*1
27177 : kmax = 15
27178 : DO i = 1, imax
27179 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27180 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27181 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27182 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27183 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27184 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27185 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27186 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27187 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27188 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27189 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27190 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27191 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27192 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27193 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27194 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27195 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27196 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27197 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27198 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27199 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27200 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27201 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27202 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27203 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27204 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27205 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27206 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27207 : END DO
27208 : buffer1 = 0.0_dp
27209 : imax = 1*9*1
27210 : kmax = 6
27211 : DO i = 1, imax
27212 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27214 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27215 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
27217 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27218 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27219 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
27220 : END DO
27221 : imax = 1*9*5
27222 : kmax = 1
27223 : i = 0
27224 : DO i1 = 1, 5
27225 : DO i2 = 1, 9
27226 : DO i3 = 1, 1
27227 : i = i + 1
27228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
27230 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
27231 : END DO
27232 : END DO
27233 : END DO
27234 : s_offset_d1 = s_offset_d1 + 1
27235 : END DO
27236 : s_offset_c1 = s_offset_c1 + 5
27237 : END DO
27238 : s_offset_b1 = s_offset_b1 + 9
27239 : END DO
27240 : s_offset_a1 = s_offset_a1 + 1
27241 : END DO
27242 : END SUBROUTINE contract_sgds
27243 : #endif
27244 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27245 : ! **************************************************************************************************
27246 : !> \brief ...
27247 : !> \param work ...
27248 : !> \param nl_a ...
27249 : !> \param nl_b ...
27250 : !> \param nl_c ...
27251 : !> \param nl_d ...
27252 : !> \param sphi_a ...
27253 : !> \param sphi_b ...
27254 : !> \param sphi_c ...
27255 : !> \param sphi_d ...
27256 : !> \param primitives ...
27257 : !> \param buffer1 ...
27258 : !> \param buffer2 ...
27259 : ! **************************************************************************************************
27260 : SUBROUTINE contract_sgdp(work, &
27261 : nl_a, nl_b, nl_c, nl_d, &
27262 : sphi_a, sphi_b, sphi_c, sphi_d, &
27263 : primitives, &
27264 : buffer1, buffer2)
27265 : REAL(dp), DIMENSION(1*15*6*3), INTENT(IN) :: work
27266 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27267 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27268 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27269 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
27270 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
27271 : REAL(dp), &
27272 : DIMENSION(1*nl_a, 9*nl_b, 5*nl_c, 3*nl_d) :: primitives
27273 : REAL(dp), DIMENSION(1*15*6*3) :: buffer1, buffer2
27274 :
27275 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27276 : kmax, s_offset_a1, s_offset_b1, &
27277 : s_offset_c1, s_offset_d1
27278 :
27279 : s_offset_a1 = 0
27280 : DO ia = 1, nl_a
27281 : s_offset_b1 = 0
27282 : DO ib = 1, nl_b
27283 : s_offset_c1 = 0
27284 : DO ic = 1, nl_c
27285 : s_offset_d1 = 0
27286 : DO id = 1, nl_d
27287 : buffer1 = 0.0_dp
27288 : imax = 15*6*3
27289 : kmax = 1
27290 : DO i = 1, imax
27291 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27292 : END DO
27293 : buffer2 = 0.0_dp
27294 : imax = 1*6*3
27295 : kmax = 15
27296 : DO i = 1, imax
27297 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27298 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27299 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27300 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27301 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27302 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27303 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27304 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27305 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27306 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27307 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27308 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27309 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27310 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27311 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27312 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27313 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27314 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27315 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27316 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27317 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27318 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27319 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27320 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27321 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27322 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27323 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27324 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27325 : END DO
27326 : buffer1 = 0.0_dp
27327 : imax = 1*9*3
27328 : kmax = 6
27329 : DO i = 1, imax
27330 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27331 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27332 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27333 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27334 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
27335 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27336 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27337 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
27338 : END DO
27339 : imax = 1*9*5
27340 : kmax = 3
27341 : i = 0
27342 : DO i1 = 1, 5
27343 : DO i2 = 1, 9
27344 : DO i3 = 1, 1
27345 : i = i + 1
27346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
27348 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
27349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
27351 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
27352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
27354 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
27355 : END DO
27356 : END DO
27357 : END DO
27358 : s_offset_d1 = s_offset_d1 + 3
27359 : END DO
27360 : s_offset_c1 = s_offset_c1 + 5
27361 : END DO
27362 : s_offset_b1 = s_offset_b1 + 9
27363 : END DO
27364 : s_offset_a1 = s_offset_a1 + 1
27365 : END DO
27366 : END SUBROUTINE contract_sgdp
27367 : #endif
27368 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27369 : ! **************************************************************************************************
27370 : !> \brief ...
27371 : !> \param work ...
27372 : !> \param nl_a ...
27373 : !> \param nl_b ...
27374 : !> \param nl_c ...
27375 : !> \param nl_d ...
27376 : !> \param sphi_a ...
27377 : !> \param sphi_b ...
27378 : !> \param sphi_c ...
27379 : !> \param sphi_d ...
27380 : !> \param primitives ...
27381 : !> \param buffer1 ...
27382 : !> \param buffer2 ...
27383 : ! **************************************************************************************************
27384 : SUBROUTINE contract_sgdd(work, &
27385 : nl_a, nl_b, nl_c, nl_d, &
27386 : sphi_a, sphi_b, sphi_c, sphi_d, &
27387 : primitives, &
27388 : buffer1, buffer2)
27389 : REAL(dp), DIMENSION(1*15*6*6), INTENT(IN) :: work
27390 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27391 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27392 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27393 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
27394 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
27395 : REAL(dp), &
27396 : DIMENSION(1*nl_a, 9*nl_b, 5*nl_c, 5*nl_d) :: primitives
27397 : REAL(dp), DIMENSION(1*15*6*6) :: buffer1, buffer2
27398 :
27399 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27400 : kmax, s_offset_a1, s_offset_b1, &
27401 : s_offset_c1, s_offset_d1
27402 :
27403 : s_offset_a1 = 0
27404 : DO ia = 1, nl_a
27405 : s_offset_b1 = 0
27406 : DO ib = 1, nl_b
27407 : s_offset_c1 = 0
27408 : DO ic = 1, nl_c
27409 : s_offset_d1 = 0
27410 : DO id = 1, nl_d
27411 : buffer1 = 0.0_dp
27412 : imax = 15*6*6
27413 : kmax = 1
27414 : DO i = 1, imax
27415 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27416 : END DO
27417 : buffer2 = 0.0_dp
27418 : imax = 1*6*6
27419 : kmax = 15
27420 : DO i = 1, imax
27421 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27422 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27423 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27424 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27425 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27426 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27427 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27428 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27429 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27430 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27431 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27432 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27433 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27434 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27435 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27436 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27437 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27438 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27439 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27441 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27442 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27443 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27444 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27445 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27446 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27447 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27448 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27449 : END DO
27450 : buffer1 = 0.0_dp
27451 : imax = 1*9*6
27452 : kmax = 6
27453 : DO i = 1, imax
27454 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27455 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27456 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27457 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27458 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
27459 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27460 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27461 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
27462 : END DO
27463 : imax = 1*9*5
27464 : kmax = 6
27465 : i = 0
27466 : DO i1 = 1, 5
27467 : DO i2 = 1, 9
27468 : DO i3 = 1, 1
27469 : i = i + 1
27470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27472 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
27473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27475 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
27476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27478 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
27479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27481 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
27482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27484 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
27485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27487 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
27488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27490 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
27491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27493 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
27494 : END DO
27495 : END DO
27496 : END DO
27497 : s_offset_d1 = s_offset_d1 + 5
27498 : END DO
27499 : s_offset_c1 = s_offset_c1 + 5
27500 : END DO
27501 : s_offset_b1 = s_offset_b1 + 9
27502 : END DO
27503 : s_offset_a1 = s_offset_a1 + 1
27504 : END DO
27505 : END SUBROUTINE contract_sgdd
27506 : #endif
27507 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27508 : ! **************************************************************************************************
27509 : !> \brief ...
27510 : !> \param work ...
27511 : !> \param nl_a ...
27512 : !> \param nl_b ...
27513 : !> \param nl_c ...
27514 : !> \param nl_d ...
27515 : !> \param sphi_a ...
27516 : !> \param sphi_b ...
27517 : !> \param sphi_c ...
27518 : !> \param sphi_d ...
27519 : !> \param primitives ...
27520 : !> \param buffer1 ...
27521 : !> \param buffer2 ...
27522 : ! **************************************************************************************************
27523 : SUBROUTINE contract_sgdf(work, &
27524 : nl_a, nl_b, nl_c, nl_d, &
27525 : sphi_a, sphi_b, sphi_c, sphi_d, &
27526 : primitives, &
27527 : buffer1, buffer2)
27528 : REAL(dp), DIMENSION(1*15*6*10), INTENT(IN) :: work
27529 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27530 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27531 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27532 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
27533 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
27534 : REAL(dp), &
27535 : DIMENSION(1*nl_a, 9*nl_b, 5*nl_c, 7*nl_d) :: primitives
27536 : REAL(dp), DIMENSION(1*15*6*10) :: buffer1, buffer2
27537 :
27538 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27539 : kmax, s_offset_a1, s_offset_b1, &
27540 : s_offset_c1, s_offset_d1
27541 :
27542 : s_offset_a1 = 0
27543 : DO ia = 1, nl_a
27544 : s_offset_b1 = 0
27545 : DO ib = 1, nl_b
27546 : s_offset_c1 = 0
27547 : DO ic = 1, nl_c
27548 : s_offset_d1 = 0
27549 : DO id = 1, nl_d
27550 : buffer1 = 0.0_dp
27551 : imax = 15*6*10
27552 : kmax = 1
27553 : DO i = 1, imax
27554 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27555 : END DO
27556 : buffer2 = 0.0_dp
27557 : imax = 1*6*10
27558 : kmax = 15
27559 : DO i = 1, imax
27560 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27561 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27562 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27563 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27564 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27565 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27566 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27567 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27568 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27569 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27570 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27571 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27572 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27573 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27574 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27575 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27576 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27577 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27578 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27579 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27580 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27581 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27582 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27583 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27584 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27585 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27586 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27587 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27588 : END DO
27589 : buffer1 = 0.0_dp
27590 : imax = 1*9*10
27591 : kmax = 6
27592 : DO i = 1, imax
27593 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27594 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27595 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27596 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27597 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
27598 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27599 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
27601 : END DO
27602 : imax = 1*9*5
27603 : kmax = 10
27604 : i = 0
27605 : DO i1 = 1, 5
27606 : DO i2 = 1, 9
27607 : DO i3 = 1, 1
27608 : i = i + 1
27609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27611 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
27612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27614 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
27615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27617 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
27618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27620 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
27621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27623 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
27624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27626 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
27627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27629 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
27630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27632 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
27633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27635 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
27636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27638 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
27639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27641 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
27642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27644 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
27645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27647 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
27648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27650 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
27651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27653 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
27654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27656 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
27657 : END DO
27658 : END DO
27659 : END DO
27660 : s_offset_d1 = s_offset_d1 + 7
27661 : END DO
27662 : s_offset_c1 = s_offset_c1 + 5
27663 : END DO
27664 : s_offset_b1 = s_offset_b1 + 9
27665 : END DO
27666 : s_offset_a1 = s_offset_a1 + 1
27667 : END DO
27668 : END SUBROUTINE contract_sgdf
27669 : #endif
27670 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27671 : ! **************************************************************************************************
27672 : !> \brief ...
27673 : !> \param work ...
27674 : !> \param nl_a ...
27675 : !> \param nl_b ...
27676 : !> \param nl_c ...
27677 : !> \param nl_d ...
27678 : !> \param sphi_a ...
27679 : !> \param sphi_b ...
27680 : !> \param sphi_c ...
27681 : !> \param sphi_d ...
27682 : !> \param primitives ...
27683 : !> \param buffer1 ...
27684 : !> \param buffer2 ...
27685 : ! **************************************************************************************************
27686 : SUBROUTINE contract_sgdg(work, &
27687 : nl_a, nl_b, nl_c, nl_d, &
27688 : sphi_a, sphi_b, sphi_c, sphi_d, &
27689 : primitives, &
27690 : buffer1, buffer2)
27691 : REAL(dp), DIMENSION(1*15*6*15), INTENT(IN) :: work
27692 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27693 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27694 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27695 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
27696 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
27697 : REAL(dp), &
27698 : DIMENSION(1*nl_a, 9*nl_b, 5*nl_c, 9*nl_d) :: primitives
27699 : REAL(dp), DIMENSION(1*15*6*15) :: buffer1, buffer2
27700 :
27701 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27702 : kmax, s_offset_a1, s_offset_b1, &
27703 : s_offset_c1, s_offset_d1
27704 :
27705 : s_offset_a1 = 0
27706 : DO ia = 1, nl_a
27707 : s_offset_b1 = 0
27708 : DO ib = 1, nl_b
27709 : s_offset_c1 = 0
27710 : DO ic = 1, nl_c
27711 : s_offset_d1 = 0
27712 : DO id = 1, nl_d
27713 : buffer1 = 0.0_dp
27714 : imax = 15*6*15
27715 : kmax = 1
27716 : DO i = 1, imax
27717 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27718 : END DO
27719 : buffer2 = 0.0_dp
27720 : imax = 1*6*15
27721 : kmax = 15
27722 : DO i = 1, imax
27723 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27724 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27725 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27726 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27727 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27728 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27729 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27730 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27731 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27732 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27733 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27734 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27735 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27736 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27737 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27738 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27739 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27740 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27741 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27742 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27743 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27744 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27745 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27746 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27747 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27748 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27749 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27750 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27751 : END DO
27752 : buffer1 = 0.0_dp
27753 : imax = 1*9*15
27754 : kmax = 6
27755 : DO i = 1, imax
27756 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
27757 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27758 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27759 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27760 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
27761 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27762 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27763 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
27764 : END DO
27765 : imax = 1*9*5
27766 : kmax = 15
27767 : i = 0
27768 : DO i1 = 1, 5
27769 : DO i2 = 1, 9
27770 : DO i3 = 1, 1
27771 : i = i + 1
27772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27774 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
27775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27777 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
27778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27780 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
27781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27783 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
27784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27786 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
27787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27789 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
27790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
27791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
27792 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
27793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27795 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
27796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27798 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
27799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27801 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
27802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27804 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
27805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27807 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
27808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27810 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
27811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
27813 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
27814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27816 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
27817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27819 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
27820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
27821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
27822 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
27823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
27824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
27825 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
27826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
27827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
27828 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
27829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27831 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
27832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27834 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
27835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
27836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
27837 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
27838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
27839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
27840 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
27841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27843 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
27844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27846 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
27847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
27848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
27849 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
27850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
27851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
27852 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
27853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
27854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
27855 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
27856 : END DO
27857 : END DO
27858 : END DO
27859 : s_offset_d1 = s_offset_d1 + 9
27860 : END DO
27861 : s_offset_c1 = s_offset_c1 + 5
27862 : END DO
27863 : s_offset_b1 = s_offset_b1 + 9
27864 : END DO
27865 : s_offset_a1 = s_offset_a1 + 1
27866 : END DO
27867 : END SUBROUTINE contract_sgdg
27868 : #endif
27869 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27870 : ! **************************************************************************************************
27871 : !> \brief ...
27872 : !> \param work ...
27873 : !> \param nl_a ...
27874 : !> \param nl_b ...
27875 : !> \param nl_c ...
27876 : !> \param nl_d ...
27877 : !> \param sphi_a ...
27878 : !> \param sphi_b ...
27879 : !> \param sphi_c ...
27880 : !> \param sphi_d ...
27881 : !> \param primitives ...
27882 : !> \param buffer1 ...
27883 : !> \param buffer2 ...
27884 : ! **************************************************************************************************
27885 : SUBROUTINE contract_sgfs(work, &
27886 : nl_a, nl_b, nl_c, nl_d, &
27887 : sphi_a, sphi_b, sphi_c, sphi_d, &
27888 : primitives, &
27889 : buffer1, buffer2)
27890 : REAL(dp), DIMENSION(1*15*10*1), INTENT(IN) :: work
27891 : INTEGER :: nl_a, nl_b, nl_c, nl_d
27892 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
27893 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
27894 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
27895 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
27896 : REAL(dp), &
27897 : DIMENSION(1*nl_a, 9*nl_b, 7*nl_c, 1*nl_d) :: primitives
27898 : REAL(dp), DIMENSION(1*15*10*1) :: buffer1, buffer2
27899 :
27900 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
27901 : kmax, s_offset_a1, s_offset_b1, &
27902 : s_offset_c1, s_offset_d1
27903 :
27904 : s_offset_a1 = 0
27905 : DO ia = 1, nl_a
27906 : s_offset_b1 = 0
27907 : DO ib = 1, nl_b
27908 : s_offset_c1 = 0
27909 : DO ic = 1, nl_c
27910 : s_offset_d1 = 0
27911 : DO id = 1, nl_d
27912 : buffer1 = 0.0_dp
27913 : imax = 15*10*1
27914 : kmax = 1
27915 : DO i = 1, imax
27916 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
27917 : END DO
27918 : buffer2 = 0.0_dp
27919 : imax = 1*10*1
27920 : kmax = 15
27921 : DO i = 1, imax
27922 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
27923 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
27924 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
27925 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
27926 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
27927 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
27928 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
27929 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
27930 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
27931 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
27932 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
27933 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
27934 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
27935 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
27936 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
27937 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
27938 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
27939 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
27940 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
27941 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
27942 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
27943 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
27944 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
27945 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
27946 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
27947 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
27948 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
27949 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
27950 : END DO
27951 : buffer1 = 0.0_dp
27952 : imax = 1*9*1
27953 : kmax = 10
27954 : DO i = 1, imax
27955 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
27956 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
27957 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
27958 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
27959 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
27960 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
27961 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
27962 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
27963 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
27964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
27965 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
27966 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
27967 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
27968 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
27969 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
27970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
27971 : END DO
27972 : imax = 1*9*7
27973 : kmax = 1
27974 : i = 0
27975 : DO i1 = 1, 7
27976 : DO i2 = 1, 9
27977 : DO i3 = 1, 1
27978 : i = i + 1
27979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
27980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
27981 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
27982 : END DO
27983 : END DO
27984 : END DO
27985 : s_offset_d1 = s_offset_d1 + 1
27986 : END DO
27987 : s_offset_c1 = s_offset_c1 + 7
27988 : END DO
27989 : s_offset_b1 = s_offset_b1 + 9
27990 : END DO
27991 : s_offset_a1 = s_offset_a1 + 1
27992 : END DO
27993 : END SUBROUTINE contract_sgfs
27994 : #endif
27995 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
27996 : ! **************************************************************************************************
27997 : !> \brief ...
27998 : !> \param work ...
27999 : !> \param nl_a ...
28000 : !> \param nl_b ...
28001 : !> \param nl_c ...
28002 : !> \param nl_d ...
28003 : !> \param sphi_a ...
28004 : !> \param sphi_b ...
28005 : !> \param sphi_c ...
28006 : !> \param sphi_d ...
28007 : !> \param primitives ...
28008 : !> \param buffer1 ...
28009 : !> \param buffer2 ...
28010 : ! **************************************************************************************************
28011 : SUBROUTINE contract_sgfp(work, &
28012 : nl_a, nl_b, nl_c, nl_d, &
28013 : sphi_a, sphi_b, sphi_c, sphi_d, &
28014 : primitives, &
28015 : buffer1, buffer2)
28016 : REAL(dp), DIMENSION(1*15*10*3), INTENT(IN) :: work
28017 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28018 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28019 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28020 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
28021 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
28022 : REAL(dp), &
28023 : DIMENSION(1*nl_a, 9*nl_b, 7*nl_c, 3*nl_d) :: primitives
28024 : REAL(dp), DIMENSION(1*15*10*3) :: buffer1, buffer2
28025 :
28026 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28027 : kmax, s_offset_a1, s_offset_b1, &
28028 : s_offset_c1, s_offset_d1
28029 :
28030 : s_offset_a1 = 0
28031 : DO ia = 1, nl_a
28032 : s_offset_b1 = 0
28033 : DO ib = 1, nl_b
28034 : s_offset_c1 = 0
28035 : DO ic = 1, nl_c
28036 : s_offset_d1 = 0
28037 : DO id = 1, nl_d
28038 : buffer1 = 0.0_dp
28039 : imax = 15*10*3
28040 : kmax = 1
28041 : DO i = 1, imax
28042 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28043 : END DO
28044 : buffer2 = 0.0_dp
28045 : imax = 1*10*3
28046 : kmax = 15
28047 : DO i = 1, imax
28048 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28049 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28050 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28051 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28052 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28053 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28054 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28055 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28056 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28057 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28058 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28059 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28060 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28061 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28062 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28063 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28064 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28065 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28066 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28067 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28068 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28069 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28070 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28071 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28072 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28073 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28074 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28075 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28076 : END DO
28077 : buffer1 = 0.0_dp
28078 : imax = 1*9*3
28079 : kmax = 10
28080 : DO i = 1, imax
28081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28082 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28083 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28084 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28085 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
28086 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28087 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28088 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
28089 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28090 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28091 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28092 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28093 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
28094 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28096 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
28097 : END DO
28098 : imax = 1*9*7
28099 : kmax = 3
28100 : i = 0
28101 : DO i1 = 1, 7
28102 : DO i2 = 1, 9
28103 : DO i3 = 1, 1
28104 : i = i + 1
28105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
28107 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
28108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
28110 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
28111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
28113 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
28114 : END DO
28115 : END DO
28116 : END DO
28117 : s_offset_d1 = s_offset_d1 + 3
28118 : END DO
28119 : s_offset_c1 = s_offset_c1 + 7
28120 : END DO
28121 : s_offset_b1 = s_offset_b1 + 9
28122 : END DO
28123 : s_offset_a1 = s_offset_a1 + 1
28124 : END DO
28125 : END SUBROUTINE contract_sgfp
28126 : #endif
28127 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28128 : ! **************************************************************************************************
28129 : !> \brief ...
28130 : !> \param work ...
28131 : !> \param nl_a ...
28132 : !> \param nl_b ...
28133 : !> \param nl_c ...
28134 : !> \param nl_d ...
28135 : !> \param sphi_a ...
28136 : !> \param sphi_b ...
28137 : !> \param sphi_c ...
28138 : !> \param sphi_d ...
28139 : !> \param primitives ...
28140 : !> \param buffer1 ...
28141 : !> \param buffer2 ...
28142 : ! **************************************************************************************************
28143 : SUBROUTINE contract_sgfd(work, &
28144 : nl_a, nl_b, nl_c, nl_d, &
28145 : sphi_a, sphi_b, sphi_c, sphi_d, &
28146 : primitives, &
28147 : buffer1, buffer2)
28148 : REAL(dp), DIMENSION(1*15*10*6), INTENT(IN) :: work
28149 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28150 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28151 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28152 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
28153 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
28154 : REAL(dp), &
28155 : DIMENSION(1*nl_a, 9*nl_b, 7*nl_c, 5*nl_d) :: primitives
28156 : REAL(dp), DIMENSION(1*15*10*6) :: buffer1, buffer2
28157 :
28158 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28159 : kmax, s_offset_a1, s_offset_b1, &
28160 : s_offset_c1, s_offset_d1
28161 :
28162 : s_offset_a1 = 0
28163 : DO ia = 1, nl_a
28164 : s_offset_b1 = 0
28165 : DO ib = 1, nl_b
28166 : s_offset_c1 = 0
28167 : DO ic = 1, nl_c
28168 : s_offset_d1 = 0
28169 : DO id = 1, nl_d
28170 : buffer1 = 0.0_dp
28171 : imax = 15*10*6
28172 : kmax = 1
28173 : DO i = 1, imax
28174 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28175 : END DO
28176 : buffer2 = 0.0_dp
28177 : imax = 1*10*6
28178 : kmax = 15
28179 : DO i = 1, imax
28180 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28181 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28182 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28183 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28184 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28185 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28186 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28187 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28188 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28189 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28190 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28191 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28192 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28193 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28194 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28195 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28196 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28197 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28198 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28199 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28200 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28201 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28202 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28203 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28204 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28205 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28206 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28207 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28208 : END DO
28209 : buffer1 = 0.0_dp
28210 : imax = 1*9*6
28211 : kmax = 10
28212 : DO i = 1, imax
28213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28214 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28215 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28217 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
28218 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28219 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28220 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
28221 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28222 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28223 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28224 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28225 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
28226 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28227 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28228 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
28229 : END DO
28230 : imax = 1*9*7
28231 : kmax = 6
28232 : i = 0
28233 : DO i1 = 1, 7
28234 : DO i2 = 1, 9
28235 : DO i3 = 1, 1
28236 : i = i + 1
28237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28239 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
28240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28242 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
28243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
28245 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
28246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28248 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
28249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28251 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
28252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28254 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
28255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
28257 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
28258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28260 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
28261 : END DO
28262 : END DO
28263 : END DO
28264 : s_offset_d1 = s_offset_d1 + 5
28265 : END DO
28266 : s_offset_c1 = s_offset_c1 + 7
28267 : END DO
28268 : s_offset_b1 = s_offset_b1 + 9
28269 : END DO
28270 : s_offset_a1 = s_offset_a1 + 1
28271 : END DO
28272 : END SUBROUTINE contract_sgfd
28273 : #endif
28274 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28275 : ! **************************************************************************************************
28276 : !> \brief ...
28277 : !> \param work ...
28278 : !> \param nl_a ...
28279 : !> \param nl_b ...
28280 : !> \param nl_c ...
28281 : !> \param nl_d ...
28282 : !> \param sphi_a ...
28283 : !> \param sphi_b ...
28284 : !> \param sphi_c ...
28285 : !> \param sphi_d ...
28286 : !> \param primitives ...
28287 : !> \param buffer1 ...
28288 : !> \param buffer2 ...
28289 : ! **************************************************************************************************
28290 : SUBROUTINE contract_sgff(work, &
28291 : nl_a, nl_b, nl_c, nl_d, &
28292 : sphi_a, sphi_b, sphi_c, sphi_d, &
28293 : primitives, &
28294 : buffer1, buffer2)
28295 : REAL(dp), DIMENSION(1*15*10*10), INTENT(IN) :: work
28296 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28297 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28298 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28299 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
28300 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
28301 : REAL(dp), &
28302 : DIMENSION(1*nl_a, 9*nl_b, 7*nl_c, 7*nl_d) :: primitives
28303 : REAL(dp), DIMENSION(1*15*10*10) :: buffer1, buffer2
28304 :
28305 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28306 : kmax, s_offset_a1, s_offset_b1, &
28307 : s_offset_c1, s_offset_d1
28308 :
28309 : s_offset_a1 = 0
28310 : DO ia = 1, nl_a
28311 : s_offset_b1 = 0
28312 : DO ib = 1, nl_b
28313 : s_offset_c1 = 0
28314 : DO ic = 1, nl_c
28315 : s_offset_d1 = 0
28316 : DO id = 1, nl_d
28317 : buffer1 = 0.0_dp
28318 : imax = 15*10*10
28319 : kmax = 1
28320 : DO i = 1, imax
28321 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28322 : END DO
28323 : buffer2 = 0.0_dp
28324 : imax = 1*10*10
28325 : kmax = 15
28326 : DO i = 1, imax
28327 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28328 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28329 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28330 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28331 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28332 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28333 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28334 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28335 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28336 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28337 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28338 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28339 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28340 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28341 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28342 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28343 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28344 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28345 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28346 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28347 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28348 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28349 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28350 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28351 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28352 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28353 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28354 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28355 : END DO
28356 : buffer1 = 0.0_dp
28357 : imax = 1*9*10
28358 : kmax = 10
28359 : DO i = 1, imax
28360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28361 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28362 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28363 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28364 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
28365 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28367 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
28368 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28369 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28370 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28371 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28372 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
28373 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28374 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28375 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
28376 : END DO
28377 : imax = 1*9*7
28378 : kmax = 10
28379 : i = 0
28380 : DO i1 = 1, 7
28381 : DO i2 = 1, 9
28382 : DO i3 = 1, 1
28383 : i = i + 1
28384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28385 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28386 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
28387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28388 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28389 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
28390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
28392 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
28393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28395 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
28396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28398 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
28399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
28400 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
28401 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
28402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28403 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28404 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
28405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28407 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
28408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
28410 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
28411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28413 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
28414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
28416 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
28417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28419 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
28420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28422 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
28423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
28424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
28425 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
28426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28428 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
28429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28431 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
28432 : END DO
28433 : END DO
28434 : END DO
28435 : s_offset_d1 = s_offset_d1 + 7
28436 : END DO
28437 : s_offset_c1 = s_offset_c1 + 7
28438 : END DO
28439 : s_offset_b1 = s_offset_b1 + 9
28440 : END DO
28441 : s_offset_a1 = s_offset_a1 + 1
28442 : END DO
28443 : END SUBROUTINE contract_sgff
28444 : #endif
28445 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28446 : ! **************************************************************************************************
28447 : !> \brief ...
28448 : !> \param work ...
28449 : !> \param nl_a ...
28450 : !> \param nl_b ...
28451 : !> \param nl_c ...
28452 : !> \param nl_d ...
28453 : !> \param sphi_a ...
28454 : !> \param sphi_b ...
28455 : !> \param sphi_c ...
28456 : !> \param sphi_d ...
28457 : !> \param primitives ...
28458 : !> \param buffer1 ...
28459 : !> \param buffer2 ...
28460 : ! **************************************************************************************************
28461 : SUBROUTINE contract_sgfg(work, &
28462 : nl_a, nl_b, nl_c, nl_d, &
28463 : sphi_a, sphi_b, sphi_c, sphi_d, &
28464 : primitives, &
28465 : buffer1, buffer2)
28466 : REAL(dp), DIMENSION(1*15*10*15), INTENT(IN) :: work
28467 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28468 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28469 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28470 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
28471 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
28472 : REAL(dp), &
28473 : DIMENSION(1*nl_a, 9*nl_b, 7*nl_c, 9*nl_d) :: primitives
28474 : REAL(dp), DIMENSION(1*15*10*15) :: buffer1, buffer2
28475 :
28476 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28477 : kmax, s_offset_a1, s_offset_b1, &
28478 : s_offset_c1, s_offset_d1
28479 :
28480 : s_offset_a1 = 0
28481 : DO ia = 1, nl_a
28482 : s_offset_b1 = 0
28483 : DO ib = 1, nl_b
28484 : s_offset_c1 = 0
28485 : DO ic = 1, nl_c
28486 : s_offset_d1 = 0
28487 : DO id = 1, nl_d
28488 : buffer1 = 0.0_dp
28489 : imax = 15*10*15
28490 : kmax = 1
28491 : DO i = 1, imax
28492 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28493 : END DO
28494 : buffer2 = 0.0_dp
28495 : imax = 1*10*15
28496 : kmax = 15
28497 : DO i = 1, imax
28498 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28499 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28500 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28501 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28502 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28503 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28504 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28505 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28506 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28507 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28508 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28509 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28510 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28511 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28512 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28513 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28514 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28515 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28516 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28517 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28518 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28519 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28520 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28521 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28522 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28523 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28524 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28525 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28526 : END DO
28527 : buffer1 = 0.0_dp
28528 : imax = 1*9*15
28529 : kmax = 10
28530 : DO i = 1, imax
28531 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28532 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28533 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28534 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28535 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
28536 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28537 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28538 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
28539 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28540 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28542 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28543 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
28544 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28546 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
28547 : END DO
28548 : imax = 1*9*7
28549 : kmax = 15
28550 : i = 0
28551 : DO i1 = 1, 7
28552 : DO i2 = 1, 9
28553 : DO i3 = 1, 1
28554 : i = i + 1
28555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28557 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
28558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28560 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
28561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
28562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
28563 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
28564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
28566 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
28567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28569 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
28570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
28571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
28572 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
28573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
28574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
28575 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
28576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28578 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
28579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
28580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
28581 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
28582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
28584 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
28585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28587 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
28588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28590 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
28591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28593 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
28594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
28596 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
28597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28599 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
28600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
28601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
28602 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
28603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
28604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
28605 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
28606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
28608 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
28609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
28610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
28611 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
28612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28614 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
28615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28617 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
28618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
28619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
28620 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
28621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
28623 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
28624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28626 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
28627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28629 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
28630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
28631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
28632 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
28633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
28634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
28635 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
28636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
28637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
28638 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
28639 : END DO
28640 : END DO
28641 : END DO
28642 : s_offset_d1 = s_offset_d1 + 9
28643 : END DO
28644 : s_offset_c1 = s_offset_c1 + 7
28645 : END DO
28646 : s_offset_b1 = s_offset_b1 + 9
28647 : END DO
28648 : s_offset_a1 = s_offset_a1 + 1
28649 : END DO
28650 : END SUBROUTINE contract_sgfg
28651 : #endif
28652 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28653 : ! **************************************************************************************************
28654 : !> \brief ...
28655 : !> \param work ...
28656 : !> \param nl_a ...
28657 : !> \param nl_b ...
28658 : !> \param nl_c ...
28659 : !> \param nl_d ...
28660 : !> \param sphi_a ...
28661 : !> \param sphi_b ...
28662 : !> \param sphi_c ...
28663 : !> \param sphi_d ...
28664 : !> \param primitives ...
28665 : !> \param buffer1 ...
28666 : !> \param buffer2 ...
28667 : ! **************************************************************************************************
28668 : SUBROUTINE contract_sggs(work, &
28669 : nl_a, nl_b, nl_c, nl_d, &
28670 : sphi_a, sphi_b, sphi_c, sphi_d, &
28671 : primitives, &
28672 : buffer1, buffer2)
28673 : REAL(dp), DIMENSION(1*15*15*1), INTENT(IN) :: work
28674 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28675 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28676 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28677 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
28678 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
28679 : REAL(dp), &
28680 : DIMENSION(1*nl_a, 9*nl_b, 9*nl_c, 1*nl_d) :: primitives
28681 : REAL(dp), DIMENSION(1*15*15*1) :: buffer1, buffer2
28682 :
28683 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28684 : kmax, s_offset_a1, s_offset_b1, &
28685 : s_offset_c1, s_offset_d1
28686 :
28687 : s_offset_a1 = 0
28688 : DO ia = 1, nl_a
28689 : s_offset_b1 = 0
28690 : DO ib = 1, nl_b
28691 : s_offset_c1 = 0
28692 : DO ic = 1, nl_c
28693 : s_offset_d1 = 0
28694 : DO id = 1, nl_d
28695 : buffer1 = 0.0_dp
28696 : imax = 15*15*1
28697 : kmax = 1
28698 : DO i = 1, imax
28699 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28700 : END DO
28701 : buffer2 = 0.0_dp
28702 : imax = 1*15*1
28703 : kmax = 15
28704 : DO i = 1, imax
28705 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28706 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28707 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28708 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28709 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28710 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28711 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28712 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28713 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28714 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28715 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28716 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28717 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28718 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28719 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28720 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28721 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28722 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28723 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28724 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28725 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28726 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28727 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28728 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28729 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28730 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28731 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28732 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28733 : END DO
28734 : buffer1 = 0.0_dp
28735 : imax = 1*9*1
28736 : kmax = 15
28737 : DO i = 1, imax
28738 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28739 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28740 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
28741 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28742 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28743 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28744 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
28745 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28746 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
28747 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28748 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
28749 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28750 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
28751 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28752 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28753 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28754 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
28755 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28756 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
28757 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
28758 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
28759 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
28760 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
28761 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
28762 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
28763 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
28764 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
28765 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
28766 : END DO
28767 : imax = 1*9*9
28768 : kmax = 1
28769 : i = 0
28770 : DO i1 = 1, 9
28771 : DO i2 = 1, 9
28772 : DO i3 = 1, 1
28773 : i = i + 1
28774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
28776 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
28777 : END DO
28778 : END DO
28779 : END DO
28780 : s_offset_d1 = s_offset_d1 + 1
28781 : END DO
28782 : s_offset_c1 = s_offset_c1 + 9
28783 : END DO
28784 : s_offset_b1 = s_offset_b1 + 9
28785 : END DO
28786 : s_offset_a1 = s_offset_a1 + 1
28787 : END DO
28788 : END SUBROUTINE contract_sggs
28789 : #endif
28790 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28791 : ! **************************************************************************************************
28792 : !> \brief ...
28793 : !> \param work ...
28794 : !> \param nl_a ...
28795 : !> \param nl_b ...
28796 : !> \param nl_c ...
28797 : !> \param nl_d ...
28798 : !> \param sphi_a ...
28799 : !> \param sphi_b ...
28800 : !> \param sphi_c ...
28801 : !> \param sphi_d ...
28802 : !> \param primitives ...
28803 : !> \param buffer1 ...
28804 : !> \param buffer2 ...
28805 : ! **************************************************************************************************
28806 : SUBROUTINE contract_sggp(work, &
28807 : nl_a, nl_b, nl_c, nl_d, &
28808 : sphi_a, sphi_b, sphi_c, sphi_d, &
28809 : primitives, &
28810 : buffer1, buffer2)
28811 : REAL(dp), DIMENSION(1*15*15*3), INTENT(IN) :: work
28812 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28813 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28814 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28815 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
28816 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
28817 : REAL(dp), &
28818 : DIMENSION(1*nl_a, 9*nl_b, 9*nl_c, 3*nl_d) :: primitives
28819 : REAL(dp), DIMENSION(1*15*15*3) :: buffer1, buffer2
28820 :
28821 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28822 : kmax, s_offset_a1, s_offset_b1, &
28823 : s_offset_c1, s_offset_d1
28824 :
28825 : s_offset_a1 = 0
28826 : DO ia = 1, nl_a
28827 : s_offset_b1 = 0
28828 : DO ib = 1, nl_b
28829 : s_offset_c1 = 0
28830 : DO ic = 1, nl_c
28831 : s_offset_d1 = 0
28832 : DO id = 1, nl_d
28833 : buffer1 = 0.0_dp
28834 : imax = 15*15*3
28835 : kmax = 1
28836 : DO i = 1, imax
28837 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28838 : END DO
28839 : buffer2 = 0.0_dp
28840 : imax = 1*15*3
28841 : kmax = 15
28842 : DO i = 1, imax
28843 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28844 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28845 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28846 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28847 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28848 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28849 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28850 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28851 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28852 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28853 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28854 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28855 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
28856 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
28857 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
28858 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
28859 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
28860 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
28861 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
28862 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
28863 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
28864 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
28865 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
28866 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
28867 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
28868 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
28869 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
28870 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
28871 : END DO
28872 : buffer1 = 0.0_dp
28873 : imax = 1*9*3
28874 : kmax = 15
28875 : DO i = 1, imax
28876 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
28877 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
28878 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
28879 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
28880 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
28881 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
28882 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
28883 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
28884 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
28885 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
28886 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
28887 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
28888 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
28889 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
28890 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
28891 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
28892 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
28893 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
28894 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
28895 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
28896 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
28897 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
28898 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
28899 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
28900 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
28901 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
28902 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
28903 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
28904 : END DO
28905 : imax = 1*9*9
28906 : kmax = 3
28907 : i = 0
28908 : DO i1 = 1, 9
28909 : DO i2 = 1, 9
28910 : DO i3 = 1, 1
28911 : i = i + 1
28912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
28913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
28914 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
28915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
28916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
28917 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
28918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
28919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
28920 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
28921 : END DO
28922 : END DO
28923 : END DO
28924 : s_offset_d1 = s_offset_d1 + 3
28925 : END DO
28926 : s_offset_c1 = s_offset_c1 + 9
28927 : END DO
28928 : s_offset_b1 = s_offset_b1 + 9
28929 : END DO
28930 : s_offset_a1 = s_offset_a1 + 1
28931 : END DO
28932 : END SUBROUTINE contract_sggp
28933 : #endif
28934 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
28935 : ! **************************************************************************************************
28936 : !> \brief ...
28937 : !> \param work ...
28938 : !> \param nl_a ...
28939 : !> \param nl_b ...
28940 : !> \param nl_c ...
28941 : !> \param nl_d ...
28942 : !> \param sphi_a ...
28943 : !> \param sphi_b ...
28944 : !> \param sphi_c ...
28945 : !> \param sphi_d ...
28946 : !> \param primitives ...
28947 : !> \param buffer1 ...
28948 : !> \param buffer2 ...
28949 : ! **************************************************************************************************
28950 : SUBROUTINE contract_sggd(work, &
28951 : nl_a, nl_b, nl_c, nl_d, &
28952 : sphi_a, sphi_b, sphi_c, sphi_d, &
28953 : primitives, &
28954 : buffer1, buffer2)
28955 : REAL(dp), DIMENSION(1*15*15*6), INTENT(IN) :: work
28956 : INTEGER :: nl_a, nl_b, nl_c, nl_d
28957 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
28958 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
28959 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
28960 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
28961 : REAL(dp), &
28962 : DIMENSION(1*nl_a, 9*nl_b, 9*nl_c, 5*nl_d) :: primitives
28963 : REAL(dp), DIMENSION(1*15*15*6) :: buffer1, buffer2
28964 :
28965 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
28966 : kmax, s_offset_a1, s_offset_b1, &
28967 : s_offset_c1, s_offset_d1
28968 :
28969 : s_offset_a1 = 0
28970 : DO ia = 1, nl_a
28971 : s_offset_b1 = 0
28972 : DO ib = 1, nl_b
28973 : s_offset_c1 = 0
28974 : DO ic = 1, nl_c
28975 : s_offset_d1 = 0
28976 : DO id = 1, nl_d
28977 : buffer1 = 0.0_dp
28978 : imax = 15*15*6
28979 : kmax = 1
28980 : DO i = 1, imax
28981 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
28982 : END DO
28983 : buffer2 = 0.0_dp
28984 : imax = 1*15*6
28985 : kmax = 15
28986 : DO i = 1, imax
28987 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
28988 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
28989 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
28990 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
28991 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
28992 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
28993 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
28994 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
28995 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
28996 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
28997 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
28998 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
28999 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
29000 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
29001 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
29002 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
29003 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
29004 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
29005 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
29006 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
29007 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
29008 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
29009 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
29010 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
29011 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
29012 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
29013 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
29014 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
29015 : END DO
29016 : buffer1 = 0.0_dp
29017 : imax = 1*9*6
29018 : kmax = 15
29019 : DO i = 1, imax
29020 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
29021 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
29022 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
29023 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
29024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
29025 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
29026 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
29027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
29028 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
29029 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
29030 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
29031 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
29032 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
29033 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
29034 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
29035 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
29036 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
29037 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
29038 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
29039 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
29040 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
29041 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
29042 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
29043 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
29044 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
29045 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
29046 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
29047 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
29048 : END DO
29049 : imax = 1*9*9
29050 : kmax = 6
29051 : i = 0
29052 : DO i1 = 1, 9
29053 : DO i2 = 1, 9
29054 : DO i3 = 1, 1
29055 : i = i + 1
29056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29058 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
29059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29061 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29064 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29067 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
29068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29070 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
29071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29073 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
29074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29076 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
29077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29079 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
29080 : END DO
29081 : END DO
29082 : END DO
29083 : s_offset_d1 = s_offset_d1 + 5
29084 : END DO
29085 : s_offset_c1 = s_offset_c1 + 9
29086 : END DO
29087 : s_offset_b1 = s_offset_b1 + 9
29088 : END DO
29089 : s_offset_a1 = s_offset_a1 + 1
29090 : END DO
29091 : END SUBROUTINE contract_sggd
29092 : #endif
29093 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
29094 : ! **************************************************************************************************
29095 : !> \brief ...
29096 : !> \param work ...
29097 : !> \param nl_a ...
29098 : !> \param nl_b ...
29099 : !> \param nl_c ...
29100 : !> \param nl_d ...
29101 : !> \param sphi_a ...
29102 : !> \param sphi_b ...
29103 : !> \param sphi_c ...
29104 : !> \param sphi_d ...
29105 : !> \param primitives ...
29106 : !> \param buffer1 ...
29107 : !> \param buffer2 ...
29108 : ! **************************************************************************************************
29109 : SUBROUTINE contract_sggf(work, &
29110 : nl_a, nl_b, nl_c, nl_d, &
29111 : sphi_a, sphi_b, sphi_c, sphi_d, &
29112 : primitives, &
29113 : buffer1, buffer2)
29114 : REAL(dp), DIMENSION(1*15*15*10), INTENT(IN) :: work
29115 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29116 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
29117 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
29118 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
29119 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
29120 : REAL(dp), &
29121 : DIMENSION(1*nl_a, 9*nl_b, 9*nl_c, 7*nl_d) :: primitives
29122 : REAL(dp), DIMENSION(1*15*15*10) :: buffer1, buffer2
29123 :
29124 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29125 : kmax, s_offset_a1, s_offset_b1, &
29126 : s_offset_c1, s_offset_d1
29127 :
29128 : s_offset_a1 = 0
29129 : DO ia = 1, nl_a
29130 : s_offset_b1 = 0
29131 : DO ib = 1, nl_b
29132 : s_offset_c1 = 0
29133 : DO ic = 1, nl_c
29134 : s_offset_d1 = 0
29135 : DO id = 1, nl_d
29136 : buffer1 = 0.0_dp
29137 : imax = 15*15*10
29138 : kmax = 1
29139 : DO i = 1, imax
29140 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
29141 : END DO
29142 : buffer2 = 0.0_dp
29143 : imax = 1*15*10
29144 : kmax = 15
29145 : DO i = 1, imax
29146 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
29147 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
29148 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
29149 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
29150 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
29151 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
29152 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
29153 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
29154 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
29155 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
29156 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
29157 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
29158 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
29159 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
29160 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
29161 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
29162 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
29163 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
29164 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
29165 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
29166 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
29167 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
29168 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
29169 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
29170 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
29171 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
29172 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
29173 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
29174 : END DO
29175 : buffer1 = 0.0_dp
29176 : imax = 1*9*10
29177 : kmax = 15
29178 : DO i = 1, imax
29179 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
29180 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
29181 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
29182 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
29183 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
29184 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
29185 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
29186 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
29187 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
29188 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
29189 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
29190 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
29191 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
29192 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
29193 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
29194 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
29195 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
29196 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
29197 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
29198 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
29199 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
29200 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
29201 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
29202 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
29203 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
29204 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
29205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
29206 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
29207 : END DO
29208 : imax = 1*9*9
29209 : kmax = 10
29210 : i = 0
29211 : DO i1 = 1, 9
29212 : DO i2 = 1, 9
29213 : DO i3 = 1, 1
29214 : i = i + 1
29215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29217 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29220 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
29221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29223 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29226 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
29227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29229 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
29230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29232 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
29233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29235 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
29236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29238 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
29239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29241 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
29242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29244 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
29245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29247 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
29248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29250 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
29251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29253 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
29254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29256 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
29257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29259 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
29260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29262 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
29263 : END DO
29264 : END DO
29265 : END DO
29266 : s_offset_d1 = s_offset_d1 + 7
29267 : END DO
29268 : s_offset_c1 = s_offset_c1 + 9
29269 : END DO
29270 : s_offset_b1 = s_offset_b1 + 9
29271 : END DO
29272 : s_offset_a1 = s_offset_a1 + 1
29273 : END DO
29274 : END SUBROUTINE contract_sggf
29275 : #endif
29276 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
29277 : ! **************************************************************************************************
29278 : !> \brief ...
29279 : !> \param work ...
29280 : !> \param nl_a ...
29281 : !> \param nl_b ...
29282 : !> \param nl_c ...
29283 : !> \param nl_d ...
29284 : !> \param sphi_a ...
29285 : !> \param sphi_b ...
29286 : !> \param sphi_c ...
29287 : !> \param sphi_d ...
29288 : !> \param primitives ...
29289 : !> \param buffer1 ...
29290 : !> \param buffer2 ...
29291 : ! **************************************************************************************************
29292 : SUBROUTINE contract_sggg(work, &
29293 : nl_a, nl_b, nl_c, nl_d, &
29294 : sphi_a, sphi_b, sphi_c, sphi_d, &
29295 : primitives, &
29296 : buffer1, buffer2)
29297 : REAL(dp), DIMENSION(1*15*15*15), INTENT(IN) :: work
29298 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29299 : REAL(dp), DIMENSION(1, 1*nl_a), INTENT(IN) :: sphi_a
29300 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
29301 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
29302 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
29303 : REAL(dp), &
29304 : DIMENSION(1*nl_a, 9*nl_b, 9*nl_c, 9*nl_d) :: primitives
29305 : REAL(dp), DIMENSION(1*15*15*15) :: buffer1, buffer2
29306 :
29307 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29308 : kmax, s_offset_a1, s_offset_b1, &
29309 : s_offset_c1, s_offset_d1
29310 :
29311 : s_offset_a1 = 0
29312 : DO ia = 1, nl_a
29313 : s_offset_b1 = 0
29314 : DO ib = 1, nl_b
29315 : s_offset_c1 = 0
29316 : DO ic = 1, nl_c
29317 : s_offset_d1 = 0
29318 : DO id = 1, nl_d
29319 : buffer1 = 0.0_dp
29320 : imax = 15*15*15
29321 : kmax = 1
29322 : DO i = 1, imax
29323 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
29324 : END DO
29325 : buffer2 = 0.0_dp
29326 : imax = 1*15*15
29327 : kmax = 15
29328 : DO i = 1, imax
29329 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
29330 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
29331 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
29332 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
29333 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
29334 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
29335 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
29336 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
29337 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
29338 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
29339 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
29340 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
29341 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
29342 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
29343 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
29344 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
29345 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
29346 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
29347 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
29348 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
29349 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
29350 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
29351 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
29352 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
29353 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
29354 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
29355 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
29356 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
29357 : END DO
29358 : buffer1 = 0.0_dp
29359 : imax = 1*9*15
29360 : kmax = 15
29361 : DO i = 1, imax
29362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
29363 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
29364 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
29365 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
29366 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
29367 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
29368 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
29369 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
29370 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
29371 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
29372 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
29373 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
29374 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
29375 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
29376 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
29377 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
29378 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
29379 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
29380 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
29381 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
29382 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
29383 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
29384 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
29385 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
29386 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
29387 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
29388 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
29389 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
29390 : END DO
29391 : imax = 1*9*9
29392 : kmax = 15
29393 : i = 0
29394 : DO i1 = 1, 9
29395 : DO i2 = 1, 9
29396 : DO i3 = 1, 1
29397 : i = i + 1
29398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29400 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29403 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
29404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
29405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
29406 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
29407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29409 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29412 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
29413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29415 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
29416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
29417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
29418 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
29419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29421 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
29422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
29423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
29424 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
29425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29427 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
29428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29430 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
29431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29433 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
29434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29436 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
29437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29439 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
29440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29442 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
29443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29445 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
29446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
29447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
29448 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
29449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29451 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
29452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29454 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
29455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29457 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
29458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29460 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
29461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
29462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
29463 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
29464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29466 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
29467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29469 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
29470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29472 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
29473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29475 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
29476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29478 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
29479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29481 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
29482 : END DO
29483 : END DO
29484 : END DO
29485 : s_offset_d1 = s_offset_d1 + 9
29486 : END DO
29487 : s_offset_c1 = s_offset_c1 + 9
29488 : END DO
29489 : s_offset_b1 = s_offset_b1 + 9
29490 : END DO
29491 : s_offset_a1 = s_offset_a1 + 1
29492 : END DO
29493 : END SUBROUTINE contract_sggg
29494 : #endif
29495 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
29496 : ! **************************************************************************************************
29497 : !> \brief ...
29498 : !> \param work ...
29499 : !> \param nl_a ...
29500 : !> \param nl_b ...
29501 : !> \param nl_c ...
29502 : !> \param nl_d ...
29503 : !> \param sphi_a ...
29504 : !> \param sphi_b ...
29505 : !> \param sphi_c ...
29506 : !> \param sphi_d ...
29507 : !> \param primitives ...
29508 : !> \param buffer1 ...
29509 : !> \param buffer2 ...
29510 : ! **************************************************************************************************
29511 40021090 : SUBROUTINE contract_psss(work, &
29512 : nl_a, nl_b, nl_c, nl_d, &
29513 40021090 : sphi_a, sphi_b, sphi_c, sphi_d, &
29514 40021090 : primitives, &
29515 : buffer1, buffer2)
29516 : REAL(dp), DIMENSION(3*1*1*1), INTENT(IN) :: work
29517 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29518 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
29519 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
29520 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
29521 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
29522 : REAL(dp), &
29523 : DIMENSION(3*nl_a, 1*nl_b, 1*nl_c, 1*nl_d) :: primitives
29524 : REAL(dp), DIMENSION(3*1*1*1) :: buffer1, buffer2
29525 :
29526 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29527 : kmax, s_offset_a1, s_offset_b1, &
29528 : s_offset_c1, s_offset_d1
29529 :
29530 40021090 : s_offset_a1 = 0
29531 85565143 : DO ia = 1, nl_a
29532 : s_offset_b1 = 0
29533 103342455 : DO ib = 1, nl_b
29534 : s_offset_c1 = 0
29535 139922994 : DO ic = 1, nl_c
29536 : s_offset_d1 = 0
29537 212677781 : DO id = 1, nl_d
29538 130553189 : buffer1 = 0.0_dp
29539 130553189 : imax = 1*1*1
29540 130553189 : kmax = 3
29541 261106378 : DO i = 1, imax
29542 130553189 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
29543 130553189 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
29544 261106378 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
29545 : END DO
29546 130553189 : buffer2 = 0.0_dp
29547 130553189 : imax = 3*1*1
29548 130553189 : kmax = 1
29549 522212756 : DO i = 1, imax
29550 522212756 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
29551 : END DO
29552 130553189 : buffer1 = 0.0_dp
29553 130553189 : imax = 3*1*1
29554 130553189 : kmax = 1
29555 522212756 : DO i = 1, imax
29556 522212756 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
29557 : END DO
29558 261106378 : imax = 3*1*1
29559 261106378 : kmax = 1
29560 : i = 0
29561 261106378 : DO i1 = 1, 1
29562 391659567 : DO i2 = 1, 1
29563 652765945 : DO i3 = 1, 3
29564 391659567 : i = i + 1
29565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
29567 522212756 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
29568 : END DO
29569 : END DO
29570 : END DO
29571 212677781 : s_offset_d1 = s_offset_d1 + 1
29572 : END DO
29573 139922994 : s_offset_c1 = s_offset_c1 + 1
29574 : END DO
29575 103342455 : s_offset_b1 = s_offset_b1 + 1
29576 : END DO
29577 85565143 : s_offset_a1 = s_offset_a1 + 3
29578 : END DO
29579 40021090 : END SUBROUTINE contract_psss
29580 : #endif
29581 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
29582 : ! **************************************************************************************************
29583 : !> \brief ...
29584 : !> \param work ...
29585 : !> \param nl_a ...
29586 : !> \param nl_b ...
29587 : !> \param nl_c ...
29588 : !> \param nl_d ...
29589 : !> \param sphi_a ...
29590 : !> \param sphi_b ...
29591 : !> \param sphi_c ...
29592 : !> \param sphi_d ...
29593 : !> \param primitives ...
29594 : !> \param buffer1 ...
29595 : !> \param buffer2 ...
29596 : ! **************************************************************************************************
29597 13576505 : SUBROUTINE contract_pssp(work, &
29598 : nl_a, nl_b, nl_c, nl_d, &
29599 13576505 : sphi_a, sphi_b, sphi_c, sphi_d, &
29600 13576505 : primitives, &
29601 : buffer1, buffer2)
29602 : REAL(dp), DIMENSION(3*1*1*3), INTENT(IN) :: work
29603 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29604 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
29605 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
29606 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
29607 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
29608 : REAL(dp), &
29609 : DIMENSION(3*nl_a, 1*nl_b, 1*nl_c, 3*nl_d) :: primitives
29610 : REAL(dp), DIMENSION(3*1*1*3) :: buffer1, buffer2
29611 :
29612 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29613 : kmax, s_offset_a1, s_offset_b1, &
29614 : s_offset_c1, s_offset_d1
29615 :
29616 13576505 : s_offset_a1 = 0
29617 29673255 : DO ia = 1, nl_a
29618 : s_offset_b1 = 0
29619 38011865 : DO ib = 1, nl_b
29620 : s_offset_c1 = 0
29621 55224549 : DO ic = 1, nl_c
29622 : s_offset_d1 = 0
29623 85628148 : DO id = 1, nl_d
29624 52318714 : buffer1 = 0.0_dp
29625 52318714 : imax = 1*1*3
29626 52318714 : kmax = 3
29627 209274856 : DO i = 1, imax
29628 156956142 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
29629 156956142 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
29630 209274856 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
29631 : END DO
29632 52318714 : buffer2 = 0.0_dp
29633 52318714 : imax = 3*1*3
29634 52318714 : kmax = 1
29635 523187140 : DO i = 1, imax
29636 523187140 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
29637 : END DO
29638 52318714 : buffer1 = 0.0_dp
29639 52318714 : imax = 3*1*3
29640 52318714 : kmax = 1
29641 523187140 : DO i = 1, imax
29642 523187140 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
29643 : END DO
29644 104637428 : imax = 3*1*1
29645 104637428 : kmax = 3
29646 : i = 0
29647 104637428 : DO i1 = 1, 1
29648 156956142 : DO i2 = 1, 1
29649 261593570 : DO i3 = 1, 3
29650 156956142 : i = i + 1
29651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
29653 156956142 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
29654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
29656 156956142 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
29659 209274856 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
29660 : END DO
29661 : END DO
29662 : END DO
29663 85628148 : s_offset_d1 = s_offset_d1 + 3
29664 : END DO
29665 55224549 : s_offset_c1 = s_offset_c1 + 1
29666 : END DO
29667 38011865 : s_offset_b1 = s_offset_b1 + 1
29668 : END DO
29669 29673255 : s_offset_a1 = s_offset_a1 + 3
29670 : END DO
29671 13576505 : END SUBROUTINE contract_pssp
29672 : #endif
29673 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
29674 : ! **************************************************************************************************
29675 : !> \brief ...
29676 : !> \param work ...
29677 : !> \param nl_a ...
29678 : !> \param nl_b ...
29679 : !> \param nl_c ...
29680 : !> \param nl_d ...
29681 : !> \param sphi_a ...
29682 : !> \param sphi_b ...
29683 : !> \param sphi_c ...
29684 : !> \param sphi_d ...
29685 : !> \param primitives ...
29686 : !> \param buffer1 ...
29687 : !> \param buffer2 ...
29688 : ! **************************************************************************************************
29689 2066157 : SUBROUTINE contract_pssd(work, &
29690 : nl_a, nl_b, nl_c, nl_d, &
29691 2066157 : sphi_a, sphi_b, sphi_c, sphi_d, &
29692 2066157 : primitives, &
29693 : buffer1, buffer2)
29694 : REAL(dp), DIMENSION(3*1*1*6), INTENT(IN) :: work
29695 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29696 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
29697 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
29698 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
29699 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
29700 : REAL(dp), &
29701 : DIMENSION(3*nl_a, 1*nl_b, 1*nl_c, 5*nl_d) :: primitives
29702 : REAL(dp), DIMENSION(3*1*1*6) :: buffer1, buffer2
29703 :
29704 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29705 : kmax, s_offset_a1, s_offset_b1, &
29706 : s_offset_c1, s_offset_d1
29707 :
29708 2066157 : s_offset_a1 = 0
29709 4914634 : DO ia = 1, nl_a
29710 : s_offset_b1 = 0
29711 7575746 : DO ib = 1, nl_b
29712 : s_offset_c1 = 0
29713 13027433 : DO ic = 1, nl_c
29714 : s_offset_d1 = 0
29715 16972354 : DO id = 1, nl_d
29716 8672190 : buffer1 = 0.0_dp
29717 8672190 : imax = 1*1*6
29718 8672190 : kmax = 3
29719 60705330 : DO i = 1, imax
29720 52033140 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
29721 52033140 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
29722 60705330 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
29723 : END DO
29724 8672190 : buffer2 = 0.0_dp
29725 8672190 : imax = 3*1*6
29726 8672190 : kmax = 1
29727 164771610 : DO i = 1, imax
29728 164771610 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
29729 : END DO
29730 8672190 : buffer1 = 0.0_dp
29731 8672190 : imax = 3*1*6
29732 8672190 : kmax = 1
29733 164771610 : DO i = 1, imax
29734 164771610 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
29735 : END DO
29736 17344380 : imax = 3*1*1
29737 17344380 : kmax = 6
29738 : i = 0
29739 17344380 : DO i1 = 1, 1
29740 26016570 : DO i2 = 1, 1
29741 43360950 : DO i3 = 1, 3
29742 26016570 : i = i + 1
29743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29745 26016570 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
29746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29748 26016570 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29751 26016570 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29754 26016570 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
29755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29757 26016570 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
29758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29760 26016570 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
29761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29763 26016570 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
29764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29766 34688760 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
29767 : END DO
29768 : END DO
29769 : END DO
29770 16972354 : s_offset_d1 = s_offset_d1 + 5
29771 : END DO
29772 13027433 : s_offset_c1 = s_offset_c1 + 1
29773 : END DO
29774 7575746 : s_offset_b1 = s_offset_b1 + 1
29775 : END DO
29776 4914634 : s_offset_a1 = s_offset_a1 + 3
29777 : END DO
29778 2066157 : END SUBROUTINE contract_pssd
29779 : #endif
29780 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
29781 : ! **************************************************************************************************
29782 : !> \brief ...
29783 : !> \param work ...
29784 : !> \param nl_a ...
29785 : !> \param nl_b ...
29786 : !> \param nl_c ...
29787 : !> \param nl_d ...
29788 : !> \param sphi_a ...
29789 : !> \param sphi_b ...
29790 : !> \param sphi_c ...
29791 : !> \param sphi_d ...
29792 : !> \param primitives ...
29793 : !> \param buffer1 ...
29794 : !> \param buffer2 ...
29795 : ! **************************************************************************************************
29796 : SUBROUTINE contract_pssf(work, &
29797 : nl_a, nl_b, nl_c, nl_d, &
29798 : sphi_a, sphi_b, sphi_c, sphi_d, &
29799 : primitives, &
29800 : buffer1, buffer2)
29801 : REAL(dp), DIMENSION(3*1*1*10), INTENT(IN) :: work
29802 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29803 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
29804 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
29805 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
29806 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
29807 : REAL(dp), &
29808 : DIMENSION(3*nl_a, 1*nl_b, 1*nl_c, 7*nl_d) :: primitives
29809 : REAL(dp), DIMENSION(3*1*1*10) :: buffer1, buffer2
29810 :
29811 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29812 : kmax, s_offset_a1, s_offset_b1, &
29813 : s_offset_c1, s_offset_d1
29814 :
29815 : s_offset_a1 = 0
29816 : DO ia = 1, nl_a
29817 : s_offset_b1 = 0
29818 : DO ib = 1, nl_b
29819 : s_offset_c1 = 0
29820 : DO ic = 1, nl_c
29821 : s_offset_d1 = 0
29822 : DO id = 1, nl_d
29823 : buffer1 = 0.0_dp
29824 : imax = 1*1*10
29825 : kmax = 3
29826 : DO i = 1, imax
29827 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
29828 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
29829 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
29830 : END DO
29831 : buffer2 = 0.0_dp
29832 : imax = 3*1*10
29833 : kmax = 1
29834 : DO i = 1, imax
29835 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
29836 : END DO
29837 : buffer1 = 0.0_dp
29838 : imax = 3*1*10
29839 : kmax = 1
29840 : DO i = 1, imax
29841 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
29842 : END DO
29843 : imax = 3*1*1
29844 : kmax = 10
29845 : i = 0
29846 : DO i1 = 1, 1
29847 : DO i2 = 1, 1
29848 : DO i3 = 1, 3
29849 : i = i + 1
29850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29852 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29855 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
29856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29858 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29861 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
29862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29864 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
29865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29867 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
29868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29870 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
29871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29873 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
29874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
29875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
29876 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
29877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29879 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
29880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29882 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
29883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29885 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
29886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29888 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
29889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29891 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
29892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29894 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
29895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
29896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
29897 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
29898 : END DO
29899 : END DO
29900 : END DO
29901 : s_offset_d1 = s_offset_d1 + 7
29902 : END DO
29903 : s_offset_c1 = s_offset_c1 + 1
29904 : END DO
29905 : s_offset_b1 = s_offset_b1 + 1
29906 : END DO
29907 : s_offset_a1 = s_offset_a1 + 3
29908 : END DO
29909 : END SUBROUTINE contract_pssf
29910 : #endif
29911 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
29912 : ! **************************************************************************************************
29913 : !> \brief ...
29914 : !> \param work ...
29915 : !> \param nl_a ...
29916 : !> \param nl_b ...
29917 : !> \param nl_c ...
29918 : !> \param nl_d ...
29919 : !> \param sphi_a ...
29920 : !> \param sphi_b ...
29921 : !> \param sphi_c ...
29922 : !> \param sphi_d ...
29923 : !> \param primitives ...
29924 : !> \param buffer1 ...
29925 : !> \param buffer2 ...
29926 : ! **************************************************************************************************
29927 : SUBROUTINE contract_pssg(work, &
29928 : nl_a, nl_b, nl_c, nl_d, &
29929 : sphi_a, sphi_b, sphi_c, sphi_d, &
29930 : primitives, &
29931 : buffer1, buffer2)
29932 : REAL(dp), DIMENSION(3*1*1*15), INTENT(IN) :: work
29933 : INTEGER :: nl_a, nl_b, nl_c, nl_d
29934 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
29935 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
29936 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
29937 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
29938 : REAL(dp), &
29939 : DIMENSION(3*nl_a, 1*nl_b, 1*nl_c, 9*nl_d) :: primitives
29940 : REAL(dp), DIMENSION(3*1*1*15) :: buffer1, buffer2
29941 :
29942 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
29943 : kmax, s_offset_a1, s_offset_b1, &
29944 : s_offset_c1, s_offset_d1
29945 :
29946 : s_offset_a1 = 0
29947 : DO ia = 1, nl_a
29948 : s_offset_b1 = 0
29949 : DO ib = 1, nl_b
29950 : s_offset_c1 = 0
29951 : DO ic = 1, nl_c
29952 : s_offset_d1 = 0
29953 : DO id = 1, nl_d
29954 : buffer1 = 0.0_dp
29955 : imax = 1*1*15
29956 : kmax = 3
29957 : DO i = 1, imax
29958 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
29959 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
29960 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
29961 : END DO
29962 : buffer2 = 0.0_dp
29963 : imax = 3*1*15
29964 : kmax = 1
29965 : DO i = 1, imax
29966 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
29967 : END DO
29968 : buffer1 = 0.0_dp
29969 : imax = 3*1*15
29970 : kmax = 1
29971 : DO i = 1, imax
29972 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
29973 : END DO
29974 : imax = 3*1*1
29975 : kmax = 15
29976 : i = 0
29977 : DO i1 = 1, 1
29978 : DO i2 = 1, 1
29979 : DO i3 = 1, 3
29980 : i = i + 1
29981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
29982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
29983 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
29984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
29985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
29986 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
29987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
29988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
29989 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
29990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
29991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
29992 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
29993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
29994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
29995 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
29996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
29997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
29998 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
29999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
30000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
30001 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
30002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30004 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
30005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
30006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
30007 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
30008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30010 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
30011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30013 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
30014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30016 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
30017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30019 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
30020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30022 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
30023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30025 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
30026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30028 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
30029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
30030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
30031 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
30032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30034 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
30035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30037 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
30038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30040 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
30041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30043 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
30044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
30045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
30046 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
30047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30049 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
30050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30052 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
30053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30055 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
30056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30058 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
30059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30061 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
30062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30064 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
30065 : END DO
30066 : END DO
30067 : END DO
30068 : s_offset_d1 = s_offset_d1 + 9
30069 : END DO
30070 : s_offset_c1 = s_offset_c1 + 1
30071 : END DO
30072 : s_offset_b1 = s_offset_b1 + 1
30073 : END DO
30074 : s_offset_a1 = s_offset_a1 + 3
30075 : END DO
30076 : END SUBROUTINE contract_pssg
30077 : #endif
30078 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
30079 : ! **************************************************************************************************
30080 : !> \brief ...
30081 : !> \param work ...
30082 : !> \param nl_a ...
30083 : !> \param nl_b ...
30084 : !> \param nl_c ...
30085 : !> \param nl_d ...
30086 : !> \param sphi_a ...
30087 : !> \param sphi_b ...
30088 : !> \param sphi_c ...
30089 : !> \param sphi_d ...
30090 : !> \param primitives ...
30091 : !> \param buffer1 ...
30092 : !> \param buffer2 ...
30093 : ! **************************************************************************************************
30094 25315966 : SUBROUTINE contract_psps(work, &
30095 : nl_a, nl_b, nl_c, nl_d, &
30096 25315966 : sphi_a, sphi_b, sphi_c, sphi_d, &
30097 25315966 : primitives, &
30098 : buffer1, buffer2)
30099 : REAL(dp), DIMENSION(3*1*3*1), INTENT(IN) :: work
30100 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30101 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30102 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30103 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
30104 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
30105 : REAL(dp), &
30106 : DIMENSION(3*nl_a, 1*nl_b, 3*nl_c, 1*nl_d) :: primitives
30107 : REAL(dp), DIMENSION(3*1*3*1) :: buffer1, buffer2
30108 :
30109 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30110 : kmax, s_offset_a1, s_offset_b1, &
30111 : s_offset_c1, s_offset_d1
30112 :
30113 25315966 : s_offset_a1 = 0
30114 54805647 : DO ia = 1, nl_a
30115 : s_offset_b1 = 0
30116 68039659 : DO ib = 1, nl_b
30117 : s_offset_c1 = 0
30118 94035203 : DO ic = 1, nl_c
30119 : s_offset_d1 = 0
30120 145845011 : DO id = 1, nl_d
30121 90359786 : buffer1 = 0.0_dp
30122 90359786 : imax = 1*3*1
30123 90359786 : kmax = 3
30124 361439144 : DO i = 1, imax
30125 271079358 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30126 271079358 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30127 361439144 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30128 : END DO
30129 90359786 : buffer2 = 0.0_dp
30130 90359786 : imax = 3*3*1
30131 90359786 : kmax = 1
30132 903597860 : DO i = 1, imax
30133 903597860 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30134 : END DO
30135 90359786 : buffer1 = 0.0_dp
30136 90359786 : imax = 3*1*1
30137 90359786 : kmax = 3
30138 361439144 : DO i = 1, imax
30139 271079358 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30140 271079358 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30141 361439144 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
30142 : END DO
30143 361439144 : imax = 3*1*3
30144 361439144 : kmax = 1
30145 : i = 0
30146 361439144 : DO i1 = 1, 3
30147 632518502 : DO i2 = 1, 1
30148 1355396790 : DO i3 = 1, 3
30149 813238074 : i = i + 1
30150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
30152 1084317432 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
30153 : END DO
30154 : END DO
30155 : END DO
30156 145845011 : s_offset_d1 = s_offset_d1 + 1
30157 : END DO
30158 94035203 : s_offset_c1 = s_offset_c1 + 3
30159 : END DO
30160 68039659 : s_offset_b1 = s_offset_b1 + 1
30161 : END DO
30162 54805647 : s_offset_a1 = s_offset_a1 + 3
30163 : END DO
30164 25315966 : END SUBROUTINE contract_psps
30165 : #endif
30166 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
30167 : ! **************************************************************************************************
30168 : !> \brief ...
30169 : !> \param work ...
30170 : !> \param nl_a ...
30171 : !> \param nl_b ...
30172 : !> \param nl_c ...
30173 : !> \param nl_d ...
30174 : !> \param sphi_a ...
30175 : !> \param sphi_b ...
30176 : !> \param sphi_c ...
30177 : !> \param sphi_d ...
30178 : !> \param primitives ...
30179 : !> \param buffer1 ...
30180 : !> \param buffer2 ...
30181 : ! **************************************************************************************************
30182 14153946 : SUBROUTINE contract_pspp(work, &
30183 : nl_a, nl_b, nl_c, nl_d, &
30184 14153946 : sphi_a, sphi_b, sphi_c, sphi_d, &
30185 14153946 : primitives, &
30186 : buffer1, buffer2)
30187 : REAL(dp), DIMENSION(3*1*3*3), INTENT(IN) :: work
30188 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30189 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30190 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30191 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
30192 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
30193 : REAL(dp), &
30194 : DIMENSION(3*nl_a, 1*nl_b, 3*nl_c, 3*nl_d) :: primitives
30195 : REAL(dp), DIMENSION(3*1*3*3) :: buffer1, buffer2
30196 :
30197 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30198 : kmax, s_offset_a1, s_offset_b1, &
30199 : s_offset_c1, s_offset_d1
30200 :
30201 14153946 : s_offset_a1 = 0
30202 31611246 : DO ia = 1, nl_a
30203 : s_offset_b1 = 0
30204 42022521 : DO ib = 1, nl_b
30205 : s_offset_c1 = 0
30206 62476328 : DO ic = 1, nl_c
30207 : s_offset_d1 = 0
30208 101376664 : DO id = 1, nl_d
30209 63465557 : buffer1 = 0.0_dp
30210 63465557 : imax = 1*3*3
30211 63465557 : kmax = 3
30212 634655570 : DO i = 1, imax
30213 571190013 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30214 571190013 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30215 634655570 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30216 : END DO
30217 63465557 : buffer2 = 0.0_dp
30218 63465557 : imax = 3*3*3
30219 63465557 : kmax = 1
30220 1777035596 : DO i = 1, imax
30221 1777035596 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30222 : END DO
30223 63465557 : buffer1 = 0.0_dp
30224 63465557 : imax = 3*1*3
30225 63465557 : kmax = 3
30226 634655570 : DO i = 1, imax
30227 571190013 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30228 571190013 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30229 634655570 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
30230 : END DO
30231 253862228 : imax = 3*1*3
30232 253862228 : kmax = 3
30233 : i = 0
30234 253862228 : DO i1 = 1, 3
30235 444258899 : DO i2 = 1, 1
30236 951983355 : DO i3 = 1, 3
30237 571190013 : i = i + 1
30238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
30240 571190013 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
30241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
30243 571190013 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
30246 761586684 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
30247 : END DO
30248 : END DO
30249 : END DO
30250 101376664 : s_offset_d1 = s_offset_d1 + 3
30251 : END DO
30252 62476328 : s_offset_c1 = s_offset_c1 + 3
30253 : END DO
30254 42022521 : s_offset_b1 = s_offset_b1 + 1
30255 : END DO
30256 31611246 : s_offset_a1 = s_offset_a1 + 3
30257 : END DO
30258 14153946 : END SUBROUTINE contract_pspp
30259 : #endif
30260 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
30261 : ! **************************************************************************************************
30262 : !> \brief ...
30263 : !> \param work ...
30264 : !> \param nl_a ...
30265 : !> \param nl_b ...
30266 : !> \param nl_c ...
30267 : !> \param nl_d ...
30268 : !> \param sphi_a ...
30269 : !> \param sphi_b ...
30270 : !> \param sphi_c ...
30271 : !> \param sphi_d ...
30272 : !> \param primitives ...
30273 : !> \param buffer1 ...
30274 : !> \param buffer2 ...
30275 : ! **************************************************************************************************
30276 1421880 : SUBROUTINE contract_pspd(work, &
30277 : nl_a, nl_b, nl_c, nl_d, &
30278 1421880 : sphi_a, sphi_b, sphi_c, sphi_d, &
30279 1421880 : primitives, &
30280 : buffer1, buffer2)
30281 : REAL(dp), DIMENSION(3*1*3*6), INTENT(IN) :: work
30282 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30283 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30284 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30285 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
30286 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
30287 : REAL(dp), &
30288 : DIMENSION(3*nl_a, 1*nl_b, 3*nl_c, 5*nl_d) :: primitives
30289 : REAL(dp), DIMENSION(3*1*3*6) :: buffer1, buffer2
30290 :
30291 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30292 : kmax, s_offset_a1, s_offset_b1, &
30293 : s_offset_c1, s_offset_d1
30294 :
30295 1421880 : s_offset_a1 = 0
30296 3414032 : DO ia = 1, nl_a
30297 : s_offset_b1 = 0
30298 5350700 : DO ib = 1, nl_b
30299 : s_offset_c1 = 0
30300 8983164 : DO ic = 1, nl_c
30301 : s_offset_d1 = 0
30302 11428800 : DO id = 1, nl_d
30303 5804184 : buffer1 = 0.0_dp
30304 5804184 : imax = 1*3*6
30305 5804184 : kmax = 3
30306 110279496 : DO i = 1, imax
30307 104475312 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30308 104475312 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30309 110279496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30310 : END DO
30311 5804184 : buffer2 = 0.0_dp
30312 5804184 : imax = 3*3*6
30313 5804184 : kmax = 1
30314 319230120 : DO i = 1, imax
30315 319230120 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30316 : END DO
30317 5804184 : buffer1 = 0.0_dp
30318 5804184 : imax = 3*1*6
30319 5804184 : kmax = 3
30320 110279496 : DO i = 1, imax
30321 104475312 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30322 104475312 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30323 110279496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
30324 : END DO
30325 23216736 : imax = 3*1*3
30326 23216736 : kmax = 6
30327 : i = 0
30328 23216736 : DO i1 = 1, 3
30329 40629288 : DO i2 = 1, 1
30330 87062760 : DO i3 = 1, 3
30331 52237656 : i = i + 1
30332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30334 52237656 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
30335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30337 52237656 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
30338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30340 52237656 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30343 52237656 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
30344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30346 52237656 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
30347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30349 52237656 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
30350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30352 52237656 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
30353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30355 69650208 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
30356 : END DO
30357 : END DO
30358 : END DO
30359 11428800 : s_offset_d1 = s_offset_d1 + 5
30360 : END DO
30361 8983164 : s_offset_c1 = s_offset_c1 + 3
30362 : END DO
30363 5350700 : s_offset_b1 = s_offset_b1 + 1
30364 : END DO
30365 3414032 : s_offset_a1 = s_offset_a1 + 3
30366 : END DO
30367 1421880 : END SUBROUTINE contract_pspd
30368 : #endif
30369 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
30370 : ! **************************************************************************************************
30371 : !> \brief ...
30372 : !> \param work ...
30373 : !> \param nl_a ...
30374 : !> \param nl_b ...
30375 : !> \param nl_c ...
30376 : !> \param nl_d ...
30377 : !> \param sphi_a ...
30378 : !> \param sphi_b ...
30379 : !> \param sphi_c ...
30380 : !> \param sphi_d ...
30381 : !> \param primitives ...
30382 : !> \param buffer1 ...
30383 : !> \param buffer2 ...
30384 : ! **************************************************************************************************
30385 : SUBROUTINE contract_pspf(work, &
30386 : nl_a, nl_b, nl_c, nl_d, &
30387 : sphi_a, sphi_b, sphi_c, sphi_d, &
30388 : primitives, &
30389 : buffer1, buffer2)
30390 : REAL(dp), DIMENSION(3*1*3*10), INTENT(IN) :: work
30391 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30392 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30393 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30394 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
30395 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
30396 : REAL(dp), &
30397 : DIMENSION(3*nl_a, 1*nl_b, 3*nl_c, 7*nl_d) :: primitives
30398 : REAL(dp), DIMENSION(3*1*3*10) :: buffer1, buffer2
30399 :
30400 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30401 : kmax, s_offset_a1, s_offset_b1, &
30402 : s_offset_c1, s_offset_d1
30403 :
30404 : s_offset_a1 = 0
30405 : DO ia = 1, nl_a
30406 : s_offset_b1 = 0
30407 : DO ib = 1, nl_b
30408 : s_offset_c1 = 0
30409 : DO ic = 1, nl_c
30410 : s_offset_d1 = 0
30411 : DO id = 1, nl_d
30412 : buffer1 = 0.0_dp
30413 : imax = 1*3*10
30414 : kmax = 3
30415 : DO i = 1, imax
30416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30417 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30418 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30419 : END DO
30420 : buffer2 = 0.0_dp
30421 : imax = 3*3*10
30422 : kmax = 1
30423 : DO i = 1, imax
30424 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30425 : END DO
30426 : buffer1 = 0.0_dp
30427 : imax = 3*1*10
30428 : kmax = 3
30429 : DO i = 1, imax
30430 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30431 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30432 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
30433 : END DO
30434 : imax = 3*1*3
30435 : kmax = 10
30436 : i = 0
30437 : DO i1 = 1, 3
30438 : DO i2 = 1, 1
30439 : DO i3 = 1, 3
30440 : i = i + 1
30441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30443 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
30444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30446 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
30447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30449 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30452 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
30453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30455 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
30456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30458 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
30459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30461 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
30462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30464 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
30465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30467 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
30468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30470 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
30471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30473 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
30474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30476 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
30477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30479 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
30480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30482 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
30483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30485 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
30486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30488 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
30489 : END DO
30490 : END DO
30491 : END DO
30492 : s_offset_d1 = s_offset_d1 + 7
30493 : END DO
30494 : s_offset_c1 = s_offset_c1 + 3
30495 : END DO
30496 : s_offset_b1 = s_offset_b1 + 1
30497 : END DO
30498 : s_offset_a1 = s_offset_a1 + 3
30499 : END DO
30500 : END SUBROUTINE contract_pspf
30501 : #endif
30502 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
30503 : ! **************************************************************************************************
30504 : !> \brief ...
30505 : !> \param work ...
30506 : !> \param nl_a ...
30507 : !> \param nl_b ...
30508 : !> \param nl_c ...
30509 : !> \param nl_d ...
30510 : !> \param sphi_a ...
30511 : !> \param sphi_b ...
30512 : !> \param sphi_c ...
30513 : !> \param sphi_d ...
30514 : !> \param primitives ...
30515 : !> \param buffer1 ...
30516 : !> \param buffer2 ...
30517 : ! **************************************************************************************************
30518 : SUBROUTINE contract_pspg(work, &
30519 : nl_a, nl_b, nl_c, nl_d, &
30520 : sphi_a, sphi_b, sphi_c, sphi_d, &
30521 : primitives, &
30522 : buffer1, buffer2)
30523 : REAL(dp), DIMENSION(3*1*3*15), INTENT(IN) :: work
30524 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30525 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30526 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30527 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
30528 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
30529 : REAL(dp), &
30530 : DIMENSION(3*nl_a, 1*nl_b, 3*nl_c, 9*nl_d) :: primitives
30531 : REAL(dp), DIMENSION(3*1*3*15) :: buffer1, buffer2
30532 :
30533 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30534 : kmax, s_offset_a1, s_offset_b1, &
30535 : s_offset_c1, s_offset_d1
30536 :
30537 : s_offset_a1 = 0
30538 : DO ia = 1, nl_a
30539 : s_offset_b1 = 0
30540 : DO ib = 1, nl_b
30541 : s_offset_c1 = 0
30542 : DO ic = 1, nl_c
30543 : s_offset_d1 = 0
30544 : DO id = 1, nl_d
30545 : buffer1 = 0.0_dp
30546 : imax = 1*3*15
30547 : kmax = 3
30548 : DO i = 1, imax
30549 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30550 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30551 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30552 : END DO
30553 : buffer2 = 0.0_dp
30554 : imax = 3*3*15
30555 : kmax = 1
30556 : DO i = 1, imax
30557 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30558 : END DO
30559 : buffer1 = 0.0_dp
30560 : imax = 3*1*15
30561 : kmax = 3
30562 : DO i = 1, imax
30563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30564 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30565 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
30566 : END DO
30567 : imax = 3*1*3
30568 : kmax = 15
30569 : i = 0
30570 : DO i1 = 1, 3
30571 : DO i2 = 1, 1
30572 : DO i3 = 1, 3
30573 : i = i + 1
30574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30576 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
30577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30579 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
30580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
30581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
30582 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
30583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30585 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30588 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
30589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30591 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
30592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
30593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
30594 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
30595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30597 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
30598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
30599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
30600 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
30601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30603 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
30604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30606 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
30607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30609 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
30610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30612 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
30613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30615 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
30616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30618 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
30619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30621 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
30622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
30623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
30624 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
30625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30627 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
30628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
30629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
30630 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
30631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30633 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
30634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30636 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
30637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
30638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
30639 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
30640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30642 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
30643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30645 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
30646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30648 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
30649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
30650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
30651 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
30652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30654 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
30655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30657 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
30658 : END DO
30659 : END DO
30660 : END DO
30661 : s_offset_d1 = s_offset_d1 + 9
30662 : END DO
30663 : s_offset_c1 = s_offset_c1 + 3
30664 : END DO
30665 : s_offset_b1 = s_offset_b1 + 1
30666 : END DO
30667 : s_offset_a1 = s_offset_a1 + 3
30668 : END DO
30669 : END SUBROUTINE contract_pspg
30670 : #endif
30671 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
30672 : ! **************************************************************************************************
30673 : !> \brief ...
30674 : !> \param work ...
30675 : !> \param nl_a ...
30676 : !> \param nl_b ...
30677 : !> \param nl_c ...
30678 : !> \param nl_d ...
30679 : !> \param sphi_a ...
30680 : !> \param sphi_b ...
30681 : !> \param sphi_c ...
30682 : !> \param sphi_d ...
30683 : !> \param primitives ...
30684 : !> \param buffer1 ...
30685 : !> \param buffer2 ...
30686 : ! **************************************************************************************************
30687 3009598 : SUBROUTINE contract_psds(work, &
30688 : nl_a, nl_b, nl_c, nl_d, &
30689 3009598 : sphi_a, sphi_b, sphi_c, sphi_d, &
30690 3009598 : primitives, &
30691 : buffer1, buffer2)
30692 : REAL(dp), DIMENSION(3*1*6*1), INTENT(IN) :: work
30693 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30694 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30695 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30696 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
30697 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
30698 : REAL(dp), &
30699 : DIMENSION(3*nl_a, 1*nl_b, 5*nl_c, 1*nl_d) :: primitives
30700 : REAL(dp), DIMENSION(3*1*6*1) :: buffer1, buffer2
30701 :
30702 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30703 : kmax, s_offset_a1, s_offset_b1, &
30704 : s_offset_c1, s_offset_d1
30705 :
30706 3009598 : s_offset_a1 = 0
30707 7235873 : DO ia = 1, nl_a
30708 : s_offset_b1 = 0
30709 11127304 : DO ib = 1, nl_b
30710 : s_offset_c1 = 0
30711 13941111 : DO ic = 1, nl_c
30712 : s_offset_d1 = 0
30713 19508784 : DO id = 1, nl_d
30714 12468702 : buffer1 = 0.0_dp
30715 12468702 : imax = 1*6*1
30716 12468702 : kmax = 3
30717 87280914 : DO i = 1, imax
30718 74812212 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30719 74812212 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30720 87280914 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30721 : END DO
30722 12468702 : buffer2 = 0.0_dp
30723 12468702 : imax = 3*6*1
30724 12468702 : kmax = 1
30725 236905338 : DO i = 1, imax
30726 236905338 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30727 : END DO
30728 12468702 : buffer1 = 0.0_dp
30729 12468702 : imax = 3*1*1
30730 12468702 : kmax = 6
30731 49874808 : DO i = 1, imax
30732 37406106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30733 37406106 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
30734 37406106 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30735 37406106 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
30736 37406106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
30737 37406106 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
30738 37406106 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
30739 49874808 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
30740 : END DO
30741 74812212 : imax = 3*1*5
30742 74812212 : kmax = 1
30743 : i = 0
30744 74812212 : DO i1 = 1, 5
30745 137155722 : DO i2 = 1, 1
30746 311717550 : DO i3 = 1, 3
30747 187030530 : i = i + 1
30748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
30750 249374040 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
30751 : END DO
30752 : END DO
30753 : END DO
30754 19508784 : s_offset_d1 = s_offset_d1 + 1
30755 : END DO
30756 13941111 : s_offset_c1 = s_offset_c1 + 5
30757 : END DO
30758 11127304 : s_offset_b1 = s_offset_b1 + 1
30759 : END DO
30760 7235873 : s_offset_a1 = s_offset_a1 + 3
30761 : END DO
30762 3009598 : END SUBROUTINE contract_psds
30763 : #endif
30764 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
30765 : ! **************************************************************************************************
30766 : !> \brief ...
30767 : !> \param work ...
30768 : !> \param nl_a ...
30769 : !> \param nl_b ...
30770 : !> \param nl_c ...
30771 : !> \param nl_d ...
30772 : !> \param sphi_a ...
30773 : !> \param sphi_b ...
30774 : !> \param sphi_c ...
30775 : !> \param sphi_d ...
30776 : !> \param primitives ...
30777 : !> \param buffer1 ...
30778 : !> \param buffer2 ...
30779 : ! **************************************************************************************************
30780 1488651 : SUBROUTINE contract_psdp(work, &
30781 : nl_a, nl_b, nl_c, nl_d, &
30782 1488651 : sphi_a, sphi_b, sphi_c, sphi_d, &
30783 1488651 : primitives, &
30784 : buffer1, buffer2)
30785 : REAL(dp), DIMENSION(3*1*6*3), INTENT(IN) :: work
30786 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30787 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30788 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30789 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
30790 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
30791 : REAL(dp), &
30792 : DIMENSION(3*nl_a, 1*nl_b, 5*nl_c, 3*nl_d) :: primitives
30793 : REAL(dp), DIMENSION(3*1*6*3) :: buffer1, buffer2
30794 :
30795 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30796 : kmax, s_offset_a1, s_offset_b1, &
30797 : s_offset_c1, s_offset_d1
30798 :
30799 1488651 : s_offset_a1 = 0
30800 3560822 : DO ia = 1, nl_a
30801 : s_offset_b1 = 0
30802 5503426 : DO ib = 1, nl_b
30803 : s_offset_c1 = 0
30804 6974267 : DO ic = 1, nl_c
30805 : s_offset_d1 = 0
30806 9292519 : DO id = 1, nl_d
30807 5749507 : buffer1 = 0.0_dp
30808 5749507 : imax = 1*6*3
30809 5749507 : kmax = 3
30810 109240633 : DO i = 1, imax
30811 103491126 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30812 103491126 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30813 109240633 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30814 : END DO
30815 5749507 : buffer2 = 0.0_dp
30816 5749507 : imax = 3*6*3
30817 5749507 : kmax = 1
30818 316222885 : DO i = 1, imax
30819 316222885 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30820 : END DO
30821 5749507 : buffer1 = 0.0_dp
30822 5749507 : imax = 3*1*3
30823 5749507 : kmax = 6
30824 57495070 : DO i = 1, imax
30825 51745563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30826 51745563 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
30827 51745563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30828 51745563 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
30829 51745563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
30830 51745563 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
30831 51745563 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
30832 57495070 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
30833 : END DO
30834 34497042 : imax = 3*1*5
30835 34497042 : kmax = 3
30836 : i = 0
30837 34497042 : DO i1 = 1, 5
30838 63244577 : DO i2 = 1, 1
30839 143737675 : DO i3 = 1, 3
30840 86242605 : i = i + 1
30841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
30843 86242605 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
30844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
30846 86242605 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
30849 114990140 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
30850 : END DO
30851 : END DO
30852 : END DO
30853 9292519 : s_offset_d1 = s_offset_d1 + 3
30854 : END DO
30855 6974267 : s_offset_c1 = s_offset_c1 + 5
30856 : END DO
30857 5503426 : s_offset_b1 = s_offset_b1 + 1
30858 : END DO
30859 3560822 : s_offset_a1 = s_offset_a1 + 3
30860 : END DO
30861 1488651 : END SUBROUTINE contract_psdp
30862 : #endif
30863 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
30864 : ! **************************************************************************************************
30865 : !> \brief ...
30866 : !> \param work ...
30867 : !> \param nl_a ...
30868 : !> \param nl_b ...
30869 : !> \param nl_c ...
30870 : !> \param nl_d ...
30871 : !> \param sphi_a ...
30872 : !> \param sphi_b ...
30873 : !> \param sphi_c ...
30874 : !> \param sphi_d ...
30875 : !> \param primitives ...
30876 : !> \param buffer1 ...
30877 : !> \param buffer2 ...
30878 : ! **************************************************************************************************
30879 519793 : SUBROUTINE contract_psdd(work, &
30880 : nl_a, nl_b, nl_c, nl_d, &
30881 519793 : sphi_a, sphi_b, sphi_c, sphi_d, &
30882 519793 : primitives, &
30883 : buffer1, buffer2)
30884 : REAL(dp), DIMENSION(3*1*6*6), INTENT(IN) :: work
30885 : INTEGER :: nl_a, nl_b, nl_c, nl_d
30886 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
30887 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
30888 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
30889 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
30890 : REAL(dp), &
30891 : DIMENSION(3*nl_a, 1*nl_b, 5*nl_c, 5*nl_d) :: primitives
30892 : REAL(dp), DIMENSION(3*1*6*6) :: buffer1, buffer2
30893 :
30894 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
30895 : kmax, s_offset_a1, s_offset_b1, &
30896 : s_offset_c1, s_offset_d1
30897 :
30898 519793 : s_offset_a1 = 0
30899 1245869 : DO ia = 1, nl_a
30900 : s_offset_b1 = 0
30901 1974991 : DO ib = 1, nl_b
30902 : s_offset_c1 = 0
30903 2569632 : DO ic = 1, nl_c
30904 : s_offset_d1 = 0
30905 2748463 : DO id = 1, nl_d
30906 1427746 : buffer1 = 0.0_dp
30907 1427746 : imax = 1*6*6
30908 1427746 : kmax = 3
30909 52826602 : DO i = 1, imax
30910 51398856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
30911 51398856 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
30912 52826602 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
30913 : END DO
30914 1427746 : buffer2 = 0.0_dp
30915 1427746 : imax = 3*6*6
30916 1427746 : kmax = 1
30917 155624314 : DO i = 1, imax
30918 155624314 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
30919 : END DO
30920 1427746 : buffer1 = 0.0_dp
30921 1427746 : imax = 3*1*6
30922 1427746 : kmax = 6
30923 27127174 : DO i = 1, imax
30924 25699428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
30925 25699428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
30926 25699428 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
30927 25699428 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
30928 25699428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
30929 25699428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
30930 25699428 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
30931 27127174 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
30932 : END DO
30933 8566476 : imax = 3*1*5
30934 8566476 : kmax = 6
30935 : i = 0
30936 8566476 : DO i1 = 1, 5
30937 15705206 : DO i2 = 1, 1
30938 35693650 : DO i3 = 1, 3
30939 21416190 : i = i + 1
30940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30942 21416190 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
30943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30945 21416190 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
30946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
30947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
30948 21416190 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
30949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
30950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
30951 21416190 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
30952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30954 21416190 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
30955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
30956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
30957 21416190 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
30958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
30959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
30960 21416190 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
30961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
30962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
30963 28554920 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
30964 : END DO
30965 : END DO
30966 : END DO
30967 2748463 : s_offset_d1 = s_offset_d1 + 5
30968 : END DO
30969 2569632 : s_offset_c1 = s_offset_c1 + 5
30970 : END DO
30971 1974991 : s_offset_b1 = s_offset_b1 + 1
30972 : END DO
30973 1245869 : s_offset_a1 = s_offset_a1 + 3
30974 : END DO
30975 519793 : END SUBROUTINE contract_psdd
30976 : #endif
30977 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
30978 : ! **************************************************************************************************
30979 : !> \brief ...
30980 : !> \param work ...
30981 : !> \param nl_a ...
30982 : !> \param nl_b ...
30983 : !> \param nl_c ...
30984 : !> \param nl_d ...
30985 : !> \param sphi_a ...
30986 : !> \param sphi_b ...
30987 : !> \param sphi_c ...
30988 : !> \param sphi_d ...
30989 : !> \param primitives ...
30990 : !> \param buffer1 ...
30991 : !> \param buffer2 ...
30992 : ! **************************************************************************************************
30993 : SUBROUTINE contract_psdf(work, &
30994 : nl_a, nl_b, nl_c, nl_d, &
30995 : sphi_a, sphi_b, sphi_c, sphi_d, &
30996 : primitives, &
30997 : buffer1, buffer2)
30998 : REAL(dp), DIMENSION(3*1*6*10), INTENT(IN) :: work
30999 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31000 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31001 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31002 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
31003 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
31004 : REAL(dp), &
31005 : DIMENSION(3*nl_a, 1*nl_b, 5*nl_c, 7*nl_d) :: primitives
31006 : REAL(dp), DIMENSION(3*1*6*10) :: buffer1, buffer2
31007 :
31008 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31009 : kmax, s_offset_a1, s_offset_b1, &
31010 : s_offset_c1, s_offset_d1
31011 :
31012 : s_offset_a1 = 0
31013 : DO ia = 1, nl_a
31014 : s_offset_b1 = 0
31015 : DO ib = 1, nl_b
31016 : s_offset_c1 = 0
31017 : DO ic = 1, nl_c
31018 : s_offset_d1 = 0
31019 : DO id = 1, nl_d
31020 : buffer1 = 0.0_dp
31021 : imax = 1*6*10
31022 : kmax = 3
31023 : DO i = 1, imax
31024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31025 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31026 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31027 : END DO
31028 : buffer2 = 0.0_dp
31029 : imax = 3*6*10
31030 : kmax = 1
31031 : DO i = 1, imax
31032 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31033 : END DO
31034 : buffer1 = 0.0_dp
31035 : imax = 3*1*10
31036 : kmax = 6
31037 : DO i = 1, imax
31038 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
31039 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31040 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31041 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31042 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
31043 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31044 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31045 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
31046 : END DO
31047 : imax = 3*1*5
31048 : kmax = 10
31049 : i = 0
31050 : DO i1 = 1, 5
31051 : DO i2 = 1, 1
31052 : DO i3 = 1, 3
31053 : i = i + 1
31054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31056 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
31057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31059 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
31060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31062 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31065 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
31066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31068 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
31069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31071 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
31072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31074 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
31075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31077 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
31078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31080 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
31081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31083 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
31084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31086 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
31087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31089 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
31090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31092 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
31093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31095 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
31096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31098 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
31099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31101 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
31102 : END DO
31103 : END DO
31104 : END DO
31105 : s_offset_d1 = s_offset_d1 + 7
31106 : END DO
31107 : s_offset_c1 = s_offset_c1 + 5
31108 : END DO
31109 : s_offset_b1 = s_offset_b1 + 1
31110 : END DO
31111 : s_offset_a1 = s_offset_a1 + 3
31112 : END DO
31113 : END SUBROUTINE contract_psdf
31114 : #endif
31115 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
31116 : ! **************************************************************************************************
31117 : !> \brief ...
31118 : !> \param work ...
31119 : !> \param nl_a ...
31120 : !> \param nl_b ...
31121 : !> \param nl_c ...
31122 : !> \param nl_d ...
31123 : !> \param sphi_a ...
31124 : !> \param sphi_b ...
31125 : !> \param sphi_c ...
31126 : !> \param sphi_d ...
31127 : !> \param primitives ...
31128 : !> \param buffer1 ...
31129 : !> \param buffer2 ...
31130 : ! **************************************************************************************************
31131 : SUBROUTINE contract_psdg(work, &
31132 : nl_a, nl_b, nl_c, nl_d, &
31133 : sphi_a, sphi_b, sphi_c, sphi_d, &
31134 : primitives, &
31135 : buffer1, buffer2)
31136 : REAL(dp), DIMENSION(3*1*6*15), INTENT(IN) :: work
31137 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31138 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31139 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31140 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
31141 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
31142 : REAL(dp), &
31143 : DIMENSION(3*nl_a, 1*nl_b, 5*nl_c, 9*nl_d) :: primitives
31144 : REAL(dp), DIMENSION(3*1*6*15) :: buffer1, buffer2
31145 :
31146 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31147 : kmax, s_offset_a1, s_offset_b1, &
31148 : s_offset_c1, s_offset_d1
31149 :
31150 : s_offset_a1 = 0
31151 : DO ia = 1, nl_a
31152 : s_offset_b1 = 0
31153 : DO ib = 1, nl_b
31154 : s_offset_c1 = 0
31155 : DO ic = 1, nl_c
31156 : s_offset_d1 = 0
31157 : DO id = 1, nl_d
31158 : buffer1 = 0.0_dp
31159 : imax = 1*6*15
31160 : kmax = 3
31161 : DO i = 1, imax
31162 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31163 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31164 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31165 : END DO
31166 : buffer2 = 0.0_dp
31167 : imax = 3*6*15
31168 : kmax = 1
31169 : DO i = 1, imax
31170 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31171 : END DO
31172 : buffer1 = 0.0_dp
31173 : imax = 3*1*15
31174 : kmax = 6
31175 : DO i = 1, imax
31176 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
31177 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31178 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31179 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31180 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
31181 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31182 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31183 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
31184 : END DO
31185 : imax = 3*1*5
31186 : kmax = 15
31187 : i = 0
31188 : DO i1 = 1, 5
31189 : DO i2 = 1, 1
31190 : DO i3 = 1, 3
31191 : i = i + 1
31192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31194 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
31195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31197 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
31198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31200 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
31201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31203 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31206 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
31207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31209 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
31210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
31211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
31212 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
31213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31215 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
31216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31218 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
31219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31221 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
31222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31224 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
31225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31227 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
31228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31230 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
31231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31233 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
31234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31236 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
31237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31239 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
31240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
31241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
31242 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
31243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31245 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
31246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31248 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
31249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31251 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
31252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31254 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
31255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31257 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
31258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31260 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
31261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31263 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
31264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31266 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
31267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31269 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
31270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31272 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
31273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31275 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
31276 : END DO
31277 : END DO
31278 : END DO
31279 : s_offset_d1 = s_offset_d1 + 9
31280 : END DO
31281 : s_offset_c1 = s_offset_c1 + 5
31282 : END DO
31283 : s_offset_b1 = s_offset_b1 + 1
31284 : END DO
31285 : s_offset_a1 = s_offset_a1 + 3
31286 : END DO
31287 : END SUBROUTINE contract_psdg
31288 : #endif
31289 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
31290 : ! **************************************************************************************************
31291 : !> \brief ...
31292 : !> \param work ...
31293 : !> \param nl_a ...
31294 : !> \param nl_b ...
31295 : !> \param nl_c ...
31296 : !> \param nl_d ...
31297 : !> \param sphi_a ...
31298 : !> \param sphi_b ...
31299 : !> \param sphi_c ...
31300 : !> \param sphi_d ...
31301 : !> \param primitives ...
31302 : !> \param buffer1 ...
31303 : !> \param buffer2 ...
31304 : ! **************************************************************************************************
31305 : SUBROUTINE contract_psfs(work, &
31306 : nl_a, nl_b, nl_c, nl_d, &
31307 : sphi_a, sphi_b, sphi_c, sphi_d, &
31308 : primitives, &
31309 : buffer1, buffer2)
31310 : REAL(dp), DIMENSION(3*1*10*1), INTENT(IN) :: work
31311 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31312 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31313 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31314 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
31315 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
31316 : REAL(dp), &
31317 : DIMENSION(3*nl_a, 1*nl_b, 7*nl_c, 1*nl_d) :: primitives
31318 : REAL(dp), DIMENSION(3*1*10*1) :: buffer1, buffer2
31319 :
31320 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31321 : kmax, s_offset_a1, s_offset_b1, &
31322 : s_offset_c1, s_offset_d1
31323 :
31324 : s_offset_a1 = 0
31325 : DO ia = 1, nl_a
31326 : s_offset_b1 = 0
31327 : DO ib = 1, nl_b
31328 : s_offset_c1 = 0
31329 : DO ic = 1, nl_c
31330 : s_offset_d1 = 0
31331 : DO id = 1, nl_d
31332 : buffer1 = 0.0_dp
31333 : imax = 1*10*1
31334 : kmax = 3
31335 : DO i = 1, imax
31336 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31337 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31338 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31339 : END DO
31340 : buffer2 = 0.0_dp
31341 : imax = 3*10*1
31342 : kmax = 1
31343 : DO i = 1, imax
31344 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31345 : END DO
31346 : buffer1 = 0.0_dp
31347 : imax = 3*1*1
31348 : kmax = 10
31349 : DO i = 1, imax
31350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31351 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
31352 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31353 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
31354 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31355 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
31356 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31357 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
31358 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31359 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
31360 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
31361 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
31362 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
31363 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
31364 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
31365 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
31366 : END DO
31367 : imax = 3*1*7
31368 : kmax = 1
31369 : i = 0
31370 : DO i1 = 1, 7
31371 : DO i2 = 1, 1
31372 : DO i3 = 1, 3
31373 : i = i + 1
31374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
31376 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
31377 : END DO
31378 : END DO
31379 : END DO
31380 : s_offset_d1 = s_offset_d1 + 1
31381 : END DO
31382 : s_offset_c1 = s_offset_c1 + 7
31383 : END DO
31384 : s_offset_b1 = s_offset_b1 + 1
31385 : END DO
31386 : s_offset_a1 = s_offset_a1 + 3
31387 : END DO
31388 : END SUBROUTINE contract_psfs
31389 : #endif
31390 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
31391 : ! **************************************************************************************************
31392 : !> \brief ...
31393 : !> \param work ...
31394 : !> \param nl_a ...
31395 : !> \param nl_b ...
31396 : !> \param nl_c ...
31397 : !> \param nl_d ...
31398 : !> \param sphi_a ...
31399 : !> \param sphi_b ...
31400 : !> \param sphi_c ...
31401 : !> \param sphi_d ...
31402 : !> \param primitives ...
31403 : !> \param buffer1 ...
31404 : !> \param buffer2 ...
31405 : ! **************************************************************************************************
31406 : SUBROUTINE contract_psfp(work, &
31407 : nl_a, nl_b, nl_c, nl_d, &
31408 : sphi_a, sphi_b, sphi_c, sphi_d, &
31409 : primitives, &
31410 : buffer1, buffer2)
31411 : REAL(dp), DIMENSION(3*1*10*3), INTENT(IN) :: work
31412 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31413 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31414 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31415 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
31416 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
31417 : REAL(dp), &
31418 : DIMENSION(3*nl_a, 1*nl_b, 7*nl_c, 3*nl_d) :: primitives
31419 : REAL(dp), DIMENSION(3*1*10*3) :: buffer1, buffer2
31420 :
31421 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31422 : kmax, s_offset_a1, s_offset_b1, &
31423 : s_offset_c1, s_offset_d1
31424 :
31425 : s_offset_a1 = 0
31426 : DO ia = 1, nl_a
31427 : s_offset_b1 = 0
31428 : DO ib = 1, nl_b
31429 : s_offset_c1 = 0
31430 : DO ic = 1, nl_c
31431 : s_offset_d1 = 0
31432 : DO id = 1, nl_d
31433 : buffer1 = 0.0_dp
31434 : imax = 1*10*3
31435 : kmax = 3
31436 : DO i = 1, imax
31437 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31438 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31439 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31440 : END DO
31441 : buffer2 = 0.0_dp
31442 : imax = 3*10*3
31443 : kmax = 1
31444 : DO i = 1, imax
31445 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31446 : END DO
31447 : buffer1 = 0.0_dp
31448 : imax = 3*1*3
31449 : kmax = 10
31450 : DO i = 1, imax
31451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31452 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
31453 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31454 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
31455 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31456 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
31457 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31458 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
31459 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31460 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
31461 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
31462 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
31463 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
31464 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
31465 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
31466 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
31467 : END DO
31468 : imax = 3*1*7
31469 : kmax = 3
31470 : i = 0
31471 : DO i1 = 1, 7
31472 : DO i2 = 1, 1
31473 : DO i3 = 1, 3
31474 : i = i + 1
31475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
31477 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
31478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
31480 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
31483 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
31484 : END DO
31485 : END DO
31486 : END DO
31487 : s_offset_d1 = s_offset_d1 + 3
31488 : END DO
31489 : s_offset_c1 = s_offset_c1 + 7
31490 : END DO
31491 : s_offset_b1 = s_offset_b1 + 1
31492 : END DO
31493 : s_offset_a1 = s_offset_a1 + 3
31494 : END DO
31495 : END SUBROUTINE contract_psfp
31496 : #endif
31497 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
31498 : ! **************************************************************************************************
31499 : !> \brief ...
31500 : !> \param work ...
31501 : !> \param nl_a ...
31502 : !> \param nl_b ...
31503 : !> \param nl_c ...
31504 : !> \param nl_d ...
31505 : !> \param sphi_a ...
31506 : !> \param sphi_b ...
31507 : !> \param sphi_c ...
31508 : !> \param sphi_d ...
31509 : !> \param primitives ...
31510 : !> \param buffer1 ...
31511 : !> \param buffer2 ...
31512 : ! **************************************************************************************************
31513 : SUBROUTINE contract_psfd(work, &
31514 : nl_a, nl_b, nl_c, nl_d, &
31515 : sphi_a, sphi_b, sphi_c, sphi_d, &
31516 : primitives, &
31517 : buffer1, buffer2)
31518 : REAL(dp), DIMENSION(3*1*10*6), INTENT(IN) :: work
31519 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31520 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31521 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31522 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
31523 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
31524 : REAL(dp), &
31525 : DIMENSION(3*nl_a, 1*nl_b, 7*nl_c, 5*nl_d) :: primitives
31526 : REAL(dp), DIMENSION(3*1*10*6) :: buffer1, buffer2
31527 :
31528 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31529 : kmax, s_offset_a1, s_offset_b1, &
31530 : s_offset_c1, s_offset_d1
31531 :
31532 : s_offset_a1 = 0
31533 : DO ia = 1, nl_a
31534 : s_offset_b1 = 0
31535 : DO ib = 1, nl_b
31536 : s_offset_c1 = 0
31537 : DO ic = 1, nl_c
31538 : s_offset_d1 = 0
31539 : DO id = 1, nl_d
31540 : buffer1 = 0.0_dp
31541 : imax = 1*10*6
31542 : kmax = 3
31543 : DO i = 1, imax
31544 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31545 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31546 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31547 : END DO
31548 : buffer2 = 0.0_dp
31549 : imax = 3*10*6
31550 : kmax = 1
31551 : DO i = 1, imax
31552 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31553 : END DO
31554 : buffer1 = 0.0_dp
31555 : imax = 3*1*6
31556 : kmax = 10
31557 : DO i = 1, imax
31558 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31559 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
31560 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31561 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
31562 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31563 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
31564 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31565 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
31566 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31567 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
31568 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
31569 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
31570 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
31571 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
31572 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
31573 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
31574 : END DO
31575 : imax = 3*1*7
31576 : kmax = 6
31577 : i = 0
31578 : DO i1 = 1, 7
31579 : DO i2 = 1, 1
31580 : DO i3 = 1, 3
31581 : i = i + 1
31582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31584 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
31585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31587 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
31588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31590 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31593 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
31594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31596 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
31597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31599 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
31600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31602 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
31603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31605 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
31606 : END DO
31607 : END DO
31608 : END DO
31609 : s_offset_d1 = s_offset_d1 + 5
31610 : END DO
31611 : s_offset_c1 = s_offset_c1 + 7
31612 : END DO
31613 : s_offset_b1 = s_offset_b1 + 1
31614 : END DO
31615 : s_offset_a1 = s_offset_a1 + 3
31616 : END DO
31617 : END SUBROUTINE contract_psfd
31618 : #endif
31619 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
31620 : ! **************************************************************************************************
31621 : !> \brief ...
31622 : !> \param work ...
31623 : !> \param nl_a ...
31624 : !> \param nl_b ...
31625 : !> \param nl_c ...
31626 : !> \param nl_d ...
31627 : !> \param sphi_a ...
31628 : !> \param sphi_b ...
31629 : !> \param sphi_c ...
31630 : !> \param sphi_d ...
31631 : !> \param primitives ...
31632 : !> \param buffer1 ...
31633 : !> \param buffer2 ...
31634 : ! **************************************************************************************************
31635 : SUBROUTINE contract_psff(work, &
31636 : nl_a, nl_b, nl_c, nl_d, &
31637 : sphi_a, sphi_b, sphi_c, sphi_d, &
31638 : primitives, &
31639 : buffer1, buffer2)
31640 : REAL(dp), DIMENSION(3*1*10*10), INTENT(IN) :: work
31641 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31642 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31643 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31644 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
31645 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
31646 : REAL(dp), &
31647 : DIMENSION(3*nl_a, 1*nl_b, 7*nl_c, 7*nl_d) :: primitives
31648 : REAL(dp), DIMENSION(3*1*10*10) :: buffer1, buffer2
31649 :
31650 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31651 : kmax, s_offset_a1, s_offset_b1, &
31652 : s_offset_c1, s_offset_d1
31653 :
31654 : s_offset_a1 = 0
31655 : DO ia = 1, nl_a
31656 : s_offset_b1 = 0
31657 : DO ib = 1, nl_b
31658 : s_offset_c1 = 0
31659 : DO ic = 1, nl_c
31660 : s_offset_d1 = 0
31661 : DO id = 1, nl_d
31662 : buffer1 = 0.0_dp
31663 : imax = 1*10*10
31664 : kmax = 3
31665 : DO i = 1, imax
31666 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31667 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31668 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31669 : END DO
31670 : buffer2 = 0.0_dp
31671 : imax = 3*10*10
31672 : kmax = 1
31673 : DO i = 1, imax
31674 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31675 : END DO
31676 : buffer1 = 0.0_dp
31677 : imax = 3*1*10
31678 : kmax = 10
31679 : DO i = 1, imax
31680 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31681 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
31682 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31683 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
31684 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31685 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
31686 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31687 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
31688 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31689 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
31690 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
31691 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
31692 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
31693 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
31694 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
31695 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
31696 : END DO
31697 : imax = 3*1*7
31698 : kmax = 10
31699 : i = 0
31700 : DO i1 = 1, 7
31701 : DO i2 = 1, 1
31702 : DO i3 = 1, 3
31703 : i = i + 1
31704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31706 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
31707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31709 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
31710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31712 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31715 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
31716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31718 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
31719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31721 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
31722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31724 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
31725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31727 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
31728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31730 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
31731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31733 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
31734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31736 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
31737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31739 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
31740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31742 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
31743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31745 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
31746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31748 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
31749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31751 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
31752 : END DO
31753 : END DO
31754 : END DO
31755 : s_offset_d1 = s_offset_d1 + 7
31756 : END DO
31757 : s_offset_c1 = s_offset_c1 + 7
31758 : END DO
31759 : s_offset_b1 = s_offset_b1 + 1
31760 : END DO
31761 : s_offset_a1 = s_offset_a1 + 3
31762 : END DO
31763 : END SUBROUTINE contract_psff
31764 : #endif
31765 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
31766 : ! **************************************************************************************************
31767 : !> \brief ...
31768 : !> \param work ...
31769 : !> \param nl_a ...
31770 : !> \param nl_b ...
31771 : !> \param nl_c ...
31772 : !> \param nl_d ...
31773 : !> \param sphi_a ...
31774 : !> \param sphi_b ...
31775 : !> \param sphi_c ...
31776 : !> \param sphi_d ...
31777 : !> \param primitives ...
31778 : !> \param buffer1 ...
31779 : !> \param buffer2 ...
31780 : ! **************************************************************************************************
31781 : SUBROUTINE contract_psfg(work, &
31782 : nl_a, nl_b, nl_c, nl_d, &
31783 : sphi_a, sphi_b, sphi_c, sphi_d, &
31784 : primitives, &
31785 : buffer1, buffer2)
31786 : REAL(dp), DIMENSION(3*1*10*15), INTENT(IN) :: work
31787 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31788 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31789 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31790 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
31791 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
31792 : REAL(dp), &
31793 : DIMENSION(3*nl_a, 1*nl_b, 7*nl_c, 9*nl_d) :: primitives
31794 : REAL(dp), DIMENSION(3*1*10*15) :: buffer1, buffer2
31795 :
31796 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31797 : kmax, s_offset_a1, s_offset_b1, &
31798 : s_offset_c1, s_offset_d1
31799 :
31800 : s_offset_a1 = 0
31801 : DO ia = 1, nl_a
31802 : s_offset_b1 = 0
31803 : DO ib = 1, nl_b
31804 : s_offset_c1 = 0
31805 : DO ic = 1, nl_c
31806 : s_offset_d1 = 0
31807 : DO id = 1, nl_d
31808 : buffer1 = 0.0_dp
31809 : imax = 1*10*15
31810 : kmax = 3
31811 : DO i = 1, imax
31812 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31813 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31814 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31815 : END DO
31816 : buffer2 = 0.0_dp
31817 : imax = 3*10*15
31818 : kmax = 1
31819 : DO i = 1, imax
31820 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
31821 : END DO
31822 : buffer1 = 0.0_dp
31823 : imax = 3*1*15
31824 : kmax = 10
31825 : DO i = 1, imax
31826 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
31827 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
31828 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
31829 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
31830 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
31831 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
31832 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
31833 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
31834 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
31835 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
31836 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
31837 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
31838 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
31839 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
31840 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
31841 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
31842 : END DO
31843 : imax = 3*1*7
31844 : kmax = 15
31845 : i = 0
31846 : DO i1 = 1, 7
31847 : DO i2 = 1, 1
31848 : DO i3 = 1, 3
31849 : i = i + 1
31850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31852 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
31853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31855 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
31856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31858 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
31859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31861 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
31862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31864 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
31865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31867 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
31868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
31869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
31870 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
31871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31873 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
31874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31876 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
31877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31879 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
31880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31882 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
31883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31885 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
31886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31888 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
31889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
31890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
31891 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
31892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31894 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
31895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31897 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
31898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
31899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
31900 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
31901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
31902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
31903 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
31904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
31905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
31906 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
31907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31909 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
31910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31912 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
31913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
31914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
31915 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
31916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
31917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
31918 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
31919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31921 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
31922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31924 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
31925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
31926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
31927 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
31928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
31929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
31930 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
31931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
31932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
31933 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
31934 : END DO
31935 : END DO
31936 : END DO
31937 : s_offset_d1 = s_offset_d1 + 9
31938 : END DO
31939 : s_offset_c1 = s_offset_c1 + 7
31940 : END DO
31941 : s_offset_b1 = s_offset_b1 + 1
31942 : END DO
31943 : s_offset_a1 = s_offset_a1 + 3
31944 : END DO
31945 : END SUBROUTINE contract_psfg
31946 : #endif
31947 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
31948 : ! **************************************************************************************************
31949 : !> \brief ...
31950 : !> \param work ...
31951 : !> \param nl_a ...
31952 : !> \param nl_b ...
31953 : !> \param nl_c ...
31954 : !> \param nl_d ...
31955 : !> \param sphi_a ...
31956 : !> \param sphi_b ...
31957 : !> \param sphi_c ...
31958 : !> \param sphi_d ...
31959 : !> \param primitives ...
31960 : !> \param buffer1 ...
31961 : !> \param buffer2 ...
31962 : ! **************************************************************************************************
31963 : SUBROUTINE contract_psgs(work, &
31964 : nl_a, nl_b, nl_c, nl_d, &
31965 : sphi_a, sphi_b, sphi_c, sphi_d, &
31966 : primitives, &
31967 : buffer1, buffer2)
31968 : REAL(dp), DIMENSION(3*1*15*1), INTENT(IN) :: work
31969 : INTEGER :: nl_a, nl_b, nl_c, nl_d
31970 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
31971 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
31972 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
31973 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
31974 : REAL(dp), &
31975 : DIMENSION(3*nl_a, 1*nl_b, 9*nl_c, 1*nl_d) :: primitives
31976 : REAL(dp), DIMENSION(3*1*15*1) :: buffer1, buffer2
31977 :
31978 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
31979 : kmax, s_offset_a1, s_offset_b1, &
31980 : s_offset_c1, s_offset_d1
31981 :
31982 : s_offset_a1 = 0
31983 : DO ia = 1, nl_a
31984 : s_offset_b1 = 0
31985 : DO ib = 1, nl_b
31986 : s_offset_c1 = 0
31987 : DO ic = 1, nl_c
31988 : s_offset_d1 = 0
31989 : DO id = 1, nl_d
31990 : buffer1 = 0.0_dp
31991 : imax = 1*15*1
31992 : kmax = 3
31993 : DO i = 1, imax
31994 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
31995 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
31996 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
31997 : END DO
31998 : buffer2 = 0.0_dp
31999 : imax = 3*15*1
32000 : kmax = 1
32001 : DO i = 1, imax
32002 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
32003 : END DO
32004 : buffer1 = 0.0_dp
32005 : imax = 3*1*1
32006 : kmax = 15
32007 : DO i = 1, imax
32008 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
32009 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
32010 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
32011 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
32012 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
32013 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
32014 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
32015 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
32016 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
32017 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
32018 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
32019 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
32020 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
32021 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
32022 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
32023 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
32024 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
32025 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
32026 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
32027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
32028 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
32029 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
32030 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
32031 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
32032 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
32033 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
32034 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
32035 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
32036 : END DO
32037 : imax = 3*1*9
32038 : kmax = 1
32039 : i = 0
32040 : DO i1 = 1, 9
32041 : DO i2 = 1, 1
32042 : DO i3 = 1, 3
32043 : i = i + 1
32044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
32046 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
32047 : END DO
32048 : END DO
32049 : END DO
32050 : s_offset_d1 = s_offset_d1 + 1
32051 : END DO
32052 : s_offset_c1 = s_offset_c1 + 9
32053 : END DO
32054 : s_offset_b1 = s_offset_b1 + 1
32055 : END DO
32056 : s_offset_a1 = s_offset_a1 + 3
32057 : END DO
32058 : END SUBROUTINE contract_psgs
32059 : #endif
32060 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
32061 : ! **************************************************************************************************
32062 : !> \brief ...
32063 : !> \param work ...
32064 : !> \param nl_a ...
32065 : !> \param nl_b ...
32066 : !> \param nl_c ...
32067 : !> \param nl_d ...
32068 : !> \param sphi_a ...
32069 : !> \param sphi_b ...
32070 : !> \param sphi_c ...
32071 : !> \param sphi_d ...
32072 : !> \param primitives ...
32073 : !> \param buffer1 ...
32074 : !> \param buffer2 ...
32075 : ! **************************************************************************************************
32076 : SUBROUTINE contract_psgp(work, &
32077 : nl_a, nl_b, nl_c, nl_d, &
32078 : sphi_a, sphi_b, sphi_c, sphi_d, &
32079 : primitives, &
32080 : buffer1, buffer2)
32081 : REAL(dp), DIMENSION(3*1*15*3), INTENT(IN) :: work
32082 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32083 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32084 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
32085 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
32086 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
32087 : REAL(dp), &
32088 : DIMENSION(3*nl_a, 1*nl_b, 9*nl_c, 3*nl_d) :: primitives
32089 : REAL(dp), DIMENSION(3*1*15*3) :: buffer1, buffer2
32090 :
32091 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32092 : kmax, s_offset_a1, s_offset_b1, &
32093 : s_offset_c1, s_offset_d1
32094 :
32095 : s_offset_a1 = 0
32096 : DO ia = 1, nl_a
32097 : s_offset_b1 = 0
32098 : DO ib = 1, nl_b
32099 : s_offset_c1 = 0
32100 : DO ic = 1, nl_c
32101 : s_offset_d1 = 0
32102 : DO id = 1, nl_d
32103 : buffer1 = 0.0_dp
32104 : imax = 1*15*3
32105 : kmax = 3
32106 : DO i = 1, imax
32107 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32108 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32109 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32110 : END DO
32111 : buffer2 = 0.0_dp
32112 : imax = 3*15*3
32113 : kmax = 1
32114 : DO i = 1, imax
32115 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
32116 : END DO
32117 : buffer1 = 0.0_dp
32118 : imax = 3*1*3
32119 : kmax = 15
32120 : DO i = 1, imax
32121 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
32122 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
32123 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
32124 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
32125 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
32126 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
32127 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
32128 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
32129 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
32130 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
32131 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
32132 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
32133 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
32134 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
32135 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
32136 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
32137 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
32138 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
32139 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
32140 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
32141 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
32142 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
32143 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
32144 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
32145 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
32146 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
32147 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
32148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
32149 : END DO
32150 : imax = 3*1*9
32151 : kmax = 3
32152 : i = 0
32153 : DO i1 = 1, 9
32154 : DO i2 = 1, 1
32155 : DO i3 = 1, 3
32156 : i = i + 1
32157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
32159 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
32160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
32162 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
32165 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
32166 : END DO
32167 : END DO
32168 : END DO
32169 : s_offset_d1 = s_offset_d1 + 3
32170 : END DO
32171 : s_offset_c1 = s_offset_c1 + 9
32172 : END DO
32173 : s_offset_b1 = s_offset_b1 + 1
32174 : END DO
32175 : s_offset_a1 = s_offset_a1 + 3
32176 : END DO
32177 : END SUBROUTINE contract_psgp
32178 : #endif
32179 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
32180 : ! **************************************************************************************************
32181 : !> \brief ...
32182 : !> \param work ...
32183 : !> \param nl_a ...
32184 : !> \param nl_b ...
32185 : !> \param nl_c ...
32186 : !> \param nl_d ...
32187 : !> \param sphi_a ...
32188 : !> \param sphi_b ...
32189 : !> \param sphi_c ...
32190 : !> \param sphi_d ...
32191 : !> \param primitives ...
32192 : !> \param buffer1 ...
32193 : !> \param buffer2 ...
32194 : ! **************************************************************************************************
32195 : SUBROUTINE contract_psgd(work, &
32196 : nl_a, nl_b, nl_c, nl_d, &
32197 : sphi_a, sphi_b, sphi_c, sphi_d, &
32198 : primitives, &
32199 : buffer1, buffer2)
32200 : REAL(dp), DIMENSION(3*1*15*6), INTENT(IN) :: work
32201 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32202 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32203 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
32204 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
32205 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
32206 : REAL(dp), &
32207 : DIMENSION(3*nl_a, 1*nl_b, 9*nl_c, 5*nl_d) :: primitives
32208 : REAL(dp), DIMENSION(3*1*15*6) :: buffer1, buffer2
32209 :
32210 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32211 : kmax, s_offset_a1, s_offset_b1, &
32212 : s_offset_c1, s_offset_d1
32213 :
32214 : s_offset_a1 = 0
32215 : DO ia = 1, nl_a
32216 : s_offset_b1 = 0
32217 : DO ib = 1, nl_b
32218 : s_offset_c1 = 0
32219 : DO ic = 1, nl_c
32220 : s_offset_d1 = 0
32221 : DO id = 1, nl_d
32222 : buffer1 = 0.0_dp
32223 : imax = 1*15*6
32224 : kmax = 3
32225 : DO i = 1, imax
32226 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32227 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32228 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32229 : END DO
32230 : buffer2 = 0.0_dp
32231 : imax = 3*15*6
32232 : kmax = 1
32233 : DO i = 1, imax
32234 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
32235 : END DO
32236 : buffer1 = 0.0_dp
32237 : imax = 3*1*6
32238 : kmax = 15
32239 : DO i = 1, imax
32240 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
32241 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
32242 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
32243 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
32244 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
32245 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
32246 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
32247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
32248 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
32249 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
32250 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
32251 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
32252 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
32253 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
32254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
32255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
32256 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
32257 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
32258 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
32259 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
32260 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
32261 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
32262 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
32263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
32264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
32265 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
32266 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
32267 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
32268 : END DO
32269 : imax = 3*1*9
32270 : kmax = 6
32271 : i = 0
32272 : DO i1 = 1, 9
32273 : DO i2 = 1, 1
32274 : DO i3 = 1, 3
32275 : i = i + 1
32276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32278 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
32279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32281 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
32282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32284 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32287 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
32288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32290 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
32291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32293 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
32294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
32296 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
32297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32299 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
32300 : END DO
32301 : END DO
32302 : END DO
32303 : s_offset_d1 = s_offset_d1 + 5
32304 : END DO
32305 : s_offset_c1 = s_offset_c1 + 9
32306 : END DO
32307 : s_offset_b1 = s_offset_b1 + 1
32308 : END DO
32309 : s_offset_a1 = s_offset_a1 + 3
32310 : END DO
32311 : END SUBROUTINE contract_psgd
32312 : #endif
32313 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
32314 : ! **************************************************************************************************
32315 : !> \brief ...
32316 : !> \param work ...
32317 : !> \param nl_a ...
32318 : !> \param nl_b ...
32319 : !> \param nl_c ...
32320 : !> \param nl_d ...
32321 : !> \param sphi_a ...
32322 : !> \param sphi_b ...
32323 : !> \param sphi_c ...
32324 : !> \param sphi_d ...
32325 : !> \param primitives ...
32326 : !> \param buffer1 ...
32327 : !> \param buffer2 ...
32328 : ! **************************************************************************************************
32329 : SUBROUTINE contract_psgf(work, &
32330 : nl_a, nl_b, nl_c, nl_d, &
32331 : sphi_a, sphi_b, sphi_c, sphi_d, &
32332 : primitives, &
32333 : buffer1, buffer2)
32334 : REAL(dp), DIMENSION(3*1*15*10), INTENT(IN) :: work
32335 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32336 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32337 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
32338 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
32339 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
32340 : REAL(dp), &
32341 : DIMENSION(3*nl_a, 1*nl_b, 9*nl_c, 7*nl_d) :: primitives
32342 : REAL(dp), DIMENSION(3*1*15*10) :: buffer1, buffer2
32343 :
32344 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32345 : kmax, s_offset_a1, s_offset_b1, &
32346 : s_offset_c1, s_offset_d1
32347 :
32348 : s_offset_a1 = 0
32349 : DO ia = 1, nl_a
32350 : s_offset_b1 = 0
32351 : DO ib = 1, nl_b
32352 : s_offset_c1 = 0
32353 : DO ic = 1, nl_c
32354 : s_offset_d1 = 0
32355 : DO id = 1, nl_d
32356 : buffer1 = 0.0_dp
32357 : imax = 1*15*10
32358 : kmax = 3
32359 : DO i = 1, imax
32360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32361 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32362 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32363 : END DO
32364 : buffer2 = 0.0_dp
32365 : imax = 3*15*10
32366 : kmax = 1
32367 : DO i = 1, imax
32368 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
32369 : END DO
32370 : buffer1 = 0.0_dp
32371 : imax = 3*1*10
32372 : kmax = 15
32373 : DO i = 1, imax
32374 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
32375 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
32376 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
32377 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
32378 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
32379 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
32380 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
32381 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
32382 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
32383 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
32384 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
32385 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
32386 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
32387 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
32388 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
32389 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
32390 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
32391 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
32392 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
32393 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
32394 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
32395 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
32396 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
32397 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
32398 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
32399 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
32400 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
32401 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
32402 : END DO
32403 : imax = 3*1*9
32404 : kmax = 10
32405 : i = 0
32406 : DO i1 = 1, 9
32407 : DO i2 = 1, 1
32408 : DO i3 = 1, 3
32409 : i = i + 1
32410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32412 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
32413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32415 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
32416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32418 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32421 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
32422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32424 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
32425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
32426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
32427 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
32428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32430 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
32431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32433 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
32434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
32436 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
32437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32439 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
32440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32442 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
32443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32445 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
32446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32448 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
32449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
32450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
32451 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
32452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32454 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
32455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32457 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
32458 : END DO
32459 : END DO
32460 : END DO
32461 : s_offset_d1 = s_offset_d1 + 7
32462 : END DO
32463 : s_offset_c1 = s_offset_c1 + 9
32464 : END DO
32465 : s_offset_b1 = s_offset_b1 + 1
32466 : END DO
32467 : s_offset_a1 = s_offset_a1 + 3
32468 : END DO
32469 : END SUBROUTINE contract_psgf
32470 : #endif
32471 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
32472 : ! **************************************************************************************************
32473 : !> \brief ...
32474 : !> \param work ...
32475 : !> \param nl_a ...
32476 : !> \param nl_b ...
32477 : !> \param nl_c ...
32478 : !> \param nl_d ...
32479 : !> \param sphi_a ...
32480 : !> \param sphi_b ...
32481 : !> \param sphi_c ...
32482 : !> \param sphi_d ...
32483 : !> \param primitives ...
32484 : !> \param buffer1 ...
32485 : !> \param buffer2 ...
32486 : ! **************************************************************************************************
32487 : SUBROUTINE contract_psgg(work, &
32488 : nl_a, nl_b, nl_c, nl_d, &
32489 : sphi_a, sphi_b, sphi_c, sphi_d, &
32490 : primitives, &
32491 : buffer1, buffer2)
32492 : REAL(dp), DIMENSION(3*1*15*15), INTENT(IN) :: work
32493 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32494 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32495 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
32496 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
32497 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
32498 : REAL(dp), &
32499 : DIMENSION(3*nl_a, 1*nl_b, 9*nl_c, 9*nl_d) :: primitives
32500 : REAL(dp), DIMENSION(3*1*15*15) :: buffer1, buffer2
32501 :
32502 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32503 : kmax, s_offset_a1, s_offset_b1, &
32504 : s_offset_c1, s_offset_d1
32505 :
32506 : s_offset_a1 = 0
32507 : DO ia = 1, nl_a
32508 : s_offset_b1 = 0
32509 : DO ib = 1, nl_b
32510 : s_offset_c1 = 0
32511 : DO ic = 1, nl_c
32512 : s_offset_d1 = 0
32513 : DO id = 1, nl_d
32514 : buffer1 = 0.0_dp
32515 : imax = 1*15*15
32516 : kmax = 3
32517 : DO i = 1, imax
32518 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32519 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32520 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32521 : END DO
32522 : buffer2 = 0.0_dp
32523 : imax = 3*15*15
32524 : kmax = 1
32525 : DO i = 1, imax
32526 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
32527 : END DO
32528 : buffer1 = 0.0_dp
32529 : imax = 3*1*15
32530 : kmax = 15
32531 : DO i = 1, imax
32532 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
32533 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
32534 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
32535 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
32536 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
32537 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
32538 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
32539 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
32540 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
32541 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
32542 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
32543 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
32544 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
32545 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
32546 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
32547 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
32548 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
32549 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
32550 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
32551 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
32552 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
32553 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
32554 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
32555 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
32556 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
32557 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
32558 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
32559 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
32560 : END DO
32561 : imax = 3*1*9
32562 : kmax = 15
32563 : i = 0
32564 : DO i1 = 1, 9
32565 : DO i2 = 1, 1
32566 : DO i3 = 1, 3
32567 : i = i + 1
32568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32570 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
32571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32573 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
32574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
32575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
32576 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
32577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32579 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32582 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
32583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
32584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
32585 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
32586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
32587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
32588 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
32589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32591 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
32592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
32593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
32594 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
32595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
32597 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
32598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32600 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
32601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32603 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
32604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32606 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
32607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32609 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
32610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32612 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
32613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
32614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
32615 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
32616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
32617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
32618 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
32619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32621 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
32622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
32623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
32624 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
32625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32627 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
32628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32630 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
32631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
32632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
32633 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
32634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
32636 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
32637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32639 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
32640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32642 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
32643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
32644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
32645 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
32646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32648 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
32649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32651 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
32652 : END DO
32653 : END DO
32654 : END DO
32655 : s_offset_d1 = s_offset_d1 + 9
32656 : END DO
32657 : s_offset_c1 = s_offset_c1 + 9
32658 : END DO
32659 : s_offset_b1 = s_offset_b1 + 1
32660 : END DO
32661 : s_offset_a1 = s_offset_a1 + 3
32662 : END DO
32663 : END SUBROUTINE contract_psgg
32664 : #endif
32665 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
32666 : ! **************************************************************************************************
32667 : !> \brief ...
32668 : !> \param work ...
32669 : !> \param nl_a ...
32670 : !> \param nl_b ...
32671 : !> \param nl_c ...
32672 : !> \param nl_d ...
32673 : !> \param sphi_a ...
32674 : !> \param sphi_b ...
32675 : !> \param sphi_c ...
32676 : !> \param sphi_d ...
32677 : !> \param primitives ...
32678 : !> \param buffer1 ...
32679 : !> \param buffer2 ...
32680 : ! **************************************************************************************************
32681 7055122 : SUBROUTINE contract_ppss(work, &
32682 : nl_a, nl_b, nl_c, nl_d, &
32683 7055122 : sphi_a, sphi_b, sphi_c, sphi_d, &
32684 7055122 : primitives, &
32685 : buffer1, buffer2)
32686 : REAL(dp), DIMENSION(3*3*1*1), INTENT(IN) :: work
32687 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32688 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32689 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
32690 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
32691 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
32692 : REAL(dp), &
32693 : DIMENSION(3*nl_a, 3*nl_b, 1*nl_c, 1*nl_d) :: primitives
32694 : REAL(dp), DIMENSION(3*3*1*1) :: buffer1, buffer2
32695 :
32696 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32697 : kmax, s_offset_a1, s_offset_b1, &
32698 : s_offset_c1, s_offset_d1
32699 :
32700 7055122 : s_offset_a1 = 0
32701 15319459 : DO ia = 1, nl_a
32702 : s_offset_b1 = 0
32703 18362496 : DO ib = 1, nl_b
32704 : s_offset_c1 = 0
32705 25162293 : DO ic = 1, nl_c
32706 : s_offset_d1 = 0
32707 39852064 : DO id = 1, nl_d
32708 24787930 : buffer1 = 0.0_dp
32709 24787930 : imax = 3*1*1
32710 24787930 : kmax = 3
32711 99151720 : DO i = 1, imax
32712 74363790 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32713 74363790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32714 99151720 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32715 : END DO
32716 24787930 : buffer2 = 0.0_dp
32717 24787930 : imax = 3*1*1
32718 24787930 : kmax = 3
32719 99151720 : DO i = 1, imax
32720 74363790 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
32721 74363790 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
32722 99151720 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
32723 : END DO
32724 24787930 : buffer1 = 0.0_dp
32725 24787930 : imax = 3*3*1
32726 24787930 : kmax = 1
32727 247879300 : DO i = 1, imax
32728 247879300 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
32729 : END DO
32730 49575860 : imax = 3*3*1
32731 49575860 : kmax = 1
32732 : i = 0
32733 49575860 : DO i1 = 1, 1
32734 123939650 : DO i2 = 1, 3
32735 322243090 : DO i3 = 1, 3
32736 223091370 : i = i + 1
32737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
32739 297455160 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
32740 : END DO
32741 : END DO
32742 : END DO
32743 39852064 : s_offset_d1 = s_offset_d1 + 1
32744 : END DO
32745 25162293 : s_offset_c1 = s_offset_c1 + 1
32746 : END DO
32747 18362496 : s_offset_b1 = s_offset_b1 + 3
32748 : END DO
32749 15319459 : s_offset_a1 = s_offset_a1 + 3
32750 : END DO
32751 7055122 : END SUBROUTINE contract_ppss
32752 : #endif
32753 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
32754 : ! **************************************************************************************************
32755 : !> \brief ...
32756 : !> \param work ...
32757 : !> \param nl_a ...
32758 : !> \param nl_b ...
32759 : !> \param nl_c ...
32760 : !> \param nl_d ...
32761 : !> \param sphi_a ...
32762 : !> \param sphi_b ...
32763 : !> \param sphi_c ...
32764 : !> \param sphi_d ...
32765 : !> \param primitives ...
32766 : !> \param buffer1 ...
32767 : !> \param buffer2 ...
32768 : ! **************************************************************************************************
32769 7209755 : SUBROUTINE contract_ppsp(work, &
32770 : nl_a, nl_b, nl_c, nl_d, &
32771 7209755 : sphi_a, sphi_b, sphi_c, sphi_d, &
32772 7209755 : primitives, &
32773 : buffer1, buffer2)
32774 : REAL(dp), DIMENSION(3*3*1*3), INTENT(IN) :: work
32775 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32776 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32777 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
32778 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
32779 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
32780 : REAL(dp), &
32781 : DIMENSION(3*nl_a, 3*nl_b, 1*nl_c, 3*nl_d) :: primitives
32782 : REAL(dp), DIMENSION(3*3*1*3) :: buffer1, buffer2
32783 :
32784 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32785 : kmax, s_offset_a1, s_offset_b1, &
32786 : s_offset_c1, s_offset_d1
32787 :
32788 7209755 : s_offset_a1 = 0
32789 16358591 : DO ia = 1, nl_a
32790 : s_offset_b1 = 0
32791 21795416 : DO ib = 1, nl_b
32792 : s_offset_c1 = 0
32793 33087956 : DO ic = 1, nl_c
32794 : s_offset_d1 = 0
32795 55268830 : DO id = 1, nl_d
32796 34827454 : buffer1 = 0.0_dp
32797 34827454 : imax = 3*1*3
32798 34827454 : kmax = 3
32799 348274540 : DO i = 1, imax
32800 313447086 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32801 313447086 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32802 348274540 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32803 : END DO
32804 34827454 : buffer2 = 0.0_dp
32805 34827454 : imax = 3*1*3
32806 34827454 : kmax = 3
32807 348274540 : DO i = 1, imax
32808 313447086 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
32809 313447086 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
32810 348274540 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
32811 : END DO
32812 34827454 : buffer1 = 0.0_dp
32813 34827454 : imax = 3*3*3
32814 34827454 : kmax = 1
32815 975168712 : DO i = 1, imax
32816 975168712 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
32817 : END DO
32818 69654908 : imax = 3*3*1
32819 69654908 : kmax = 3
32820 : i = 0
32821 69654908 : DO i1 = 1, 1
32822 174137270 : DO i2 = 1, 3
32823 452756902 : DO i3 = 1, 3
32824 313447086 : i = i + 1
32825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
32827 313447086 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
32828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
32830 313447086 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
32833 417929448 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
32834 : END DO
32835 : END DO
32836 : END DO
32837 55268830 : s_offset_d1 = s_offset_d1 + 3
32838 : END DO
32839 33087956 : s_offset_c1 = s_offset_c1 + 1
32840 : END DO
32841 21795416 : s_offset_b1 = s_offset_b1 + 3
32842 : END DO
32843 16358591 : s_offset_a1 = s_offset_a1 + 3
32844 : END DO
32845 7209755 : END SUBROUTINE contract_ppsp
32846 : #endif
32847 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
32848 : ! **************************************************************************************************
32849 : !> \brief ...
32850 : !> \param work ...
32851 : !> \param nl_a ...
32852 : !> \param nl_b ...
32853 : !> \param nl_c ...
32854 : !> \param nl_d ...
32855 : !> \param sphi_a ...
32856 : !> \param sphi_b ...
32857 : !> \param sphi_c ...
32858 : !> \param sphi_d ...
32859 : !> \param primitives ...
32860 : !> \param buffer1 ...
32861 : !> \param buffer2 ...
32862 : ! **************************************************************************************************
32863 829790 : SUBROUTINE contract_ppsd(work, &
32864 : nl_a, nl_b, nl_c, nl_d, &
32865 829790 : sphi_a, sphi_b, sphi_c, sphi_d, &
32866 829790 : primitives, &
32867 : buffer1, buffer2)
32868 : REAL(dp), DIMENSION(3*3*1*6), INTENT(IN) :: work
32869 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32870 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32871 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
32872 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
32873 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
32874 : REAL(dp), &
32875 : DIMENSION(3*nl_a, 3*nl_b, 1*nl_c, 5*nl_d) :: primitives
32876 : REAL(dp), DIMENSION(3*3*1*6) :: buffer1, buffer2
32877 :
32878 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32879 : kmax, s_offset_a1, s_offset_b1, &
32880 : s_offset_c1, s_offset_d1
32881 :
32882 829790 : s_offset_a1 = 0
32883 1910734 : DO ia = 1, nl_a
32884 : s_offset_b1 = 0
32885 2536827 : DO ib = 1, nl_b
32886 : s_offset_c1 = 0
32887 3956929 : DO ic = 1, nl_c
32888 : s_offset_d1 = 0
32889 5154002 : DO id = 1, nl_d
32890 2652956 : buffer1 = 0.0_dp
32891 2652956 : imax = 3*1*6
32892 2652956 : kmax = 3
32893 50406164 : DO i = 1, imax
32894 47753208 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
32895 47753208 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
32896 50406164 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
32897 : END DO
32898 2652956 : buffer2 = 0.0_dp
32899 2652956 : imax = 3*1*6
32900 2652956 : kmax = 3
32901 50406164 : DO i = 1, imax
32902 47753208 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
32903 47753208 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
32904 50406164 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
32905 : END DO
32906 2652956 : buffer1 = 0.0_dp
32907 2652956 : imax = 3*3*6
32908 2652956 : kmax = 1
32909 145912580 : DO i = 1, imax
32910 145912580 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
32911 : END DO
32912 5305912 : imax = 3*3*1
32913 5305912 : kmax = 6
32914 : i = 0
32915 5305912 : DO i1 = 1, 1
32916 13264780 : DO i2 = 1, 3
32917 34488428 : DO i3 = 1, 3
32918 23876604 : i = i + 1
32919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32921 23876604 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
32922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32924 23876604 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
32925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
32926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
32927 23876604 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
32928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
32929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
32930 23876604 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
32931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32933 23876604 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
32934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
32935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
32936 23876604 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
32937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
32938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
32939 23876604 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
32940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
32941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
32942 31835472 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
32943 : END DO
32944 : END DO
32945 : END DO
32946 5154002 : s_offset_d1 = s_offset_d1 + 5
32947 : END DO
32948 3956929 : s_offset_c1 = s_offset_c1 + 1
32949 : END DO
32950 2536827 : s_offset_b1 = s_offset_b1 + 3
32951 : END DO
32952 1910734 : s_offset_a1 = s_offset_a1 + 3
32953 : END DO
32954 829790 : END SUBROUTINE contract_ppsd
32955 : #endif
32956 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
32957 : ! **************************************************************************************************
32958 : !> \brief ...
32959 : !> \param work ...
32960 : !> \param nl_a ...
32961 : !> \param nl_b ...
32962 : !> \param nl_c ...
32963 : !> \param nl_d ...
32964 : !> \param sphi_a ...
32965 : !> \param sphi_b ...
32966 : !> \param sphi_c ...
32967 : !> \param sphi_d ...
32968 : !> \param primitives ...
32969 : !> \param buffer1 ...
32970 : !> \param buffer2 ...
32971 : ! **************************************************************************************************
32972 : SUBROUTINE contract_ppsf(work, &
32973 : nl_a, nl_b, nl_c, nl_d, &
32974 : sphi_a, sphi_b, sphi_c, sphi_d, &
32975 : primitives, &
32976 : buffer1, buffer2)
32977 : REAL(dp), DIMENSION(3*3*1*10), INTENT(IN) :: work
32978 : INTEGER :: nl_a, nl_b, nl_c, nl_d
32979 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
32980 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
32981 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
32982 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
32983 : REAL(dp), &
32984 : DIMENSION(3*nl_a, 3*nl_b, 1*nl_c, 7*nl_d) :: primitives
32985 : REAL(dp), DIMENSION(3*3*1*10) :: buffer1, buffer2
32986 :
32987 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
32988 : kmax, s_offset_a1, s_offset_b1, &
32989 : s_offset_c1, s_offset_d1
32990 :
32991 : s_offset_a1 = 0
32992 : DO ia = 1, nl_a
32993 : s_offset_b1 = 0
32994 : DO ib = 1, nl_b
32995 : s_offset_c1 = 0
32996 : DO ic = 1, nl_c
32997 : s_offset_d1 = 0
32998 : DO id = 1, nl_d
32999 : buffer1 = 0.0_dp
33000 : imax = 3*1*10
33001 : kmax = 3
33002 : DO i = 1, imax
33003 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33004 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33005 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33006 : END DO
33007 : buffer2 = 0.0_dp
33008 : imax = 3*1*10
33009 : kmax = 3
33010 : DO i = 1, imax
33011 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33012 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33013 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33014 : END DO
33015 : buffer1 = 0.0_dp
33016 : imax = 3*3*10
33017 : kmax = 1
33018 : DO i = 1, imax
33019 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
33020 : END DO
33021 : imax = 3*3*1
33022 : kmax = 10
33023 : i = 0
33024 : DO i1 = 1, 1
33025 : DO i2 = 1, 3
33026 : DO i3 = 1, 3
33027 : i = i + 1
33028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33030 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
33031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33033 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
33034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33036 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33039 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
33040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33042 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
33043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33045 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
33046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33048 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
33049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33051 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
33052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33054 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
33055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33057 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
33058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33060 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
33061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33063 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
33064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33066 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
33067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33069 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
33070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33072 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
33073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33075 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
33076 : END DO
33077 : END DO
33078 : END DO
33079 : s_offset_d1 = s_offset_d1 + 7
33080 : END DO
33081 : s_offset_c1 = s_offset_c1 + 1
33082 : END DO
33083 : s_offset_b1 = s_offset_b1 + 3
33084 : END DO
33085 : s_offset_a1 = s_offset_a1 + 3
33086 : END DO
33087 : END SUBROUTINE contract_ppsf
33088 : #endif
33089 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
33090 : ! **************************************************************************************************
33091 : !> \brief ...
33092 : !> \param work ...
33093 : !> \param nl_a ...
33094 : !> \param nl_b ...
33095 : !> \param nl_c ...
33096 : !> \param nl_d ...
33097 : !> \param sphi_a ...
33098 : !> \param sphi_b ...
33099 : !> \param sphi_c ...
33100 : !> \param sphi_d ...
33101 : !> \param primitives ...
33102 : !> \param buffer1 ...
33103 : !> \param buffer2 ...
33104 : ! **************************************************************************************************
33105 : SUBROUTINE contract_ppsg(work, &
33106 : nl_a, nl_b, nl_c, nl_d, &
33107 : sphi_a, sphi_b, sphi_c, sphi_d, &
33108 : primitives, &
33109 : buffer1, buffer2)
33110 : REAL(dp), DIMENSION(3*3*1*15), INTENT(IN) :: work
33111 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33112 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33113 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33114 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
33115 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
33116 : REAL(dp), &
33117 : DIMENSION(3*nl_a, 3*nl_b, 1*nl_c, 9*nl_d) :: primitives
33118 : REAL(dp), DIMENSION(3*3*1*15) :: buffer1, buffer2
33119 :
33120 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33121 : kmax, s_offset_a1, s_offset_b1, &
33122 : s_offset_c1, s_offset_d1
33123 :
33124 : s_offset_a1 = 0
33125 : DO ia = 1, nl_a
33126 : s_offset_b1 = 0
33127 : DO ib = 1, nl_b
33128 : s_offset_c1 = 0
33129 : DO ic = 1, nl_c
33130 : s_offset_d1 = 0
33131 : DO id = 1, nl_d
33132 : buffer1 = 0.0_dp
33133 : imax = 3*1*15
33134 : kmax = 3
33135 : DO i = 1, imax
33136 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33137 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33138 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33139 : END DO
33140 : buffer2 = 0.0_dp
33141 : imax = 3*1*15
33142 : kmax = 3
33143 : DO i = 1, imax
33144 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33145 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33146 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33147 : END DO
33148 : buffer1 = 0.0_dp
33149 : imax = 3*3*15
33150 : kmax = 1
33151 : DO i = 1, imax
33152 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
33153 : END DO
33154 : imax = 3*3*1
33155 : kmax = 15
33156 : i = 0
33157 : DO i1 = 1, 1
33158 : DO i2 = 1, 3
33159 : DO i3 = 1, 3
33160 : i = i + 1
33161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33163 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
33164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33166 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
33167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33169 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
33170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33172 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33175 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
33176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33178 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
33179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
33180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
33181 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
33182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33184 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
33185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33187 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
33188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33190 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
33191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33193 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
33194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33196 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
33197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33199 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
33200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33202 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
33203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33205 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
33206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33208 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
33209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
33210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
33211 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
33212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33214 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
33215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33217 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
33218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33220 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
33221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33223 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
33224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33226 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
33227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33229 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
33230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33232 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
33233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33235 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
33236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33238 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
33239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33241 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
33242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33244 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
33245 : END DO
33246 : END DO
33247 : END DO
33248 : s_offset_d1 = s_offset_d1 + 9
33249 : END DO
33250 : s_offset_c1 = s_offset_c1 + 1
33251 : END DO
33252 : s_offset_b1 = s_offset_b1 + 3
33253 : END DO
33254 : s_offset_a1 = s_offset_a1 + 3
33255 : END DO
33256 : END SUBROUTINE contract_ppsg
33257 : #endif
33258 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
33259 : ! **************************************************************************************************
33260 : !> \brief ...
33261 : !> \param work ...
33262 : !> \param nl_a ...
33263 : !> \param nl_b ...
33264 : !> \param nl_c ...
33265 : !> \param nl_d ...
33266 : !> \param sphi_a ...
33267 : !> \param sphi_b ...
33268 : !> \param sphi_c ...
33269 : !> \param sphi_d ...
33270 : !> \param primitives ...
33271 : !> \param buffer1 ...
33272 : !> \param buffer2 ...
33273 : ! **************************************************************************************************
33274 7413574 : SUBROUTINE contract_ppps(work, &
33275 : nl_a, nl_b, nl_c, nl_d, &
33276 7413574 : sphi_a, sphi_b, sphi_c, sphi_d, &
33277 7413574 : primitives, &
33278 : buffer1, buffer2)
33279 : REAL(dp), DIMENSION(3*3*3*1), INTENT(IN) :: work
33280 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33281 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33282 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33283 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
33284 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
33285 : REAL(dp), &
33286 : DIMENSION(3*nl_a, 3*nl_b, 3*nl_c, 1*nl_d) :: primitives
33287 : REAL(dp), DIMENSION(3*3*3*1) :: buffer1, buffer2
33288 :
33289 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33290 : kmax, s_offset_a1, s_offset_b1, &
33291 : s_offset_c1, s_offset_d1
33292 :
33293 7413574 : s_offset_a1 = 0
33294 16810011 : DO ia = 1, nl_a
33295 : s_offset_b1 = 0
33296 22275539 : DO ib = 1, nl_b
33297 : s_offset_c1 = 0
33298 33187545 : DO ic = 1, nl_c
33299 : s_offset_d1 = 0
33300 55781267 : DO id = 1, nl_d
33301 35472824 : buffer1 = 0.0_dp
33302 35472824 : imax = 3*3*1
33303 35472824 : kmax = 3
33304 354728240 : DO i = 1, imax
33305 319255416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33306 319255416 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33307 354728240 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33308 : END DO
33309 35472824 : buffer2 = 0.0_dp
33310 35472824 : imax = 3*3*1
33311 35472824 : kmax = 3
33312 354728240 : DO i = 1, imax
33313 319255416 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33314 319255416 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33315 354728240 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33316 : END DO
33317 35472824 : buffer1 = 0.0_dp
33318 35472824 : imax = 3*3*1
33319 35472824 : kmax = 3
33320 354728240 : DO i = 1, imax
33321 319255416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33322 319255416 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33323 354728240 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
33324 : END DO
33325 141891296 : imax = 3*3*3
33326 141891296 : kmax = 1
33327 : i = 0
33328 141891296 : DO i1 = 1, 3
33329 461146712 : DO i2 = 1, 3
33330 1383440136 : DO i3 = 1, 3
33331 957766248 : i = i + 1
33332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
33334 1277021664 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
33335 : END DO
33336 : END DO
33337 : END DO
33338 55781267 : s_offset_d1 = s_offset_d1 + 1
33339 : END DO
33340 33187545 : s_offset_c1 = s_offset_c1 + 3
33341 : END DO
33342 22275539 : s_offset_b1 = s_offset_b1 + 3
33343 : END DO
33344 16810011 : s_offset_a1 = s_offset_a1 + 3
33345 : END DO
33346 7413574 : END SUBROUTINE contract_ppps
33347 : #endif
33348 : #if __MAX_CONTR > 1 || __MAX_CONTR == 1
33349 : ! **************************************************************************************************
33350 : !> \brief ...
33351 : !> \param work ...
33352 : !> \param nl_a ...
33353 : !> \param nl_b ...
33354 : !> \param nl_c ...
33355 : !> \param nl_d ...
33356 : !> \param sphi_a ...
33357 : !> \param sphi_b ...
33358 : !> \param sphi_c ...
33359 : !> \param sphi_d ...
33360 : !> \param primitives ...
33361 : !> \param buffer1 ...
33362 : !> \param buffer2 ...
33363 : ! **************************************************************************************************
33364 3702206 : SUBROUTINE contract_pppp(work, &
33365 : nl_a, nl_b, nl_c, nl_d, &
33366 3702206 : sphi_a, sphi_b, sphi_c, sphi_d, &
33367 3702206 : primitives, &
33368 : buffer1, buffer2)
33369 : REAL(dp), DIMENSION(3*3*3*3), INTENT(IN) :: work
33370 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33371 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33372 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33373 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
33374 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
33375 : REAL(dp), &
33376 : DIMENSION(3*nl_a, 3*nl_b, 3*nl_c, 3*nl_d) :: primitives
33377 : REAL(dp), DIMENSION(3*3*3*3) :: buffer1, buffer2
33378 :
33379 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33380 : kmax, s_offset_a1, s_offset_b1, &
33381 : s_offset_c1, s_offset_d1
33382 :
33383 3702206 : s_offset_a1 = 0
33384 8465516 : DO ia = 1, nl_a
33385 : s_offset_b1 = 0
33386 11325459 : DO ib = 1, nl_b
33387 : s_offset_c1 = 0
33388 17019232 : DO ic = 1, nl_c
33389 : s_offset_d1 = 0
33390 28495093 : DO id = 1, nl_d
33391 18038010 : buffer1 = 0.0_dp
33392 18038010 : imax = 3*3*3
33393 18038010 : kmax = 3
33394 505064280 : DO i = 1, imax
33395 487026270 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33396 487026270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33397 505064280 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33398 : END DO
33399 18038010 : buffer2 = 0.0_dp
33400 18038010 : imax = 3*3*3
33401 18038010 : kmax = 3
33402 505064280 : DO i = 1, imax
33403 487026270 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33404 487026270 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33405 505064280 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33406 : END DO
33407 18038010 : buffer1 = 0.0_dp
33408 18038010 : imax = 3*3*3
33409 18038010 : kmax = 3
33410 505064280 : DO i = 1, imax
33411 487026270 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33412 487026270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33413 505064280 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
33414 : END DO
33415 72152040 : imax = 3*3*3
33416 72152040 : kmax = 3
33417 : i = 0
33418 72152040 : DO i1 = 1, 3
33419 234494130 : DO i2 = 1, 3
33420 703482390 : DO i3 = 1, 3
33421 487026270 : i = i + 1
33422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
33424 487026270 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
33425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
33427 487026270 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
33430 649368360 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
33431 : END DO
33432 : END DO
33433 : END DO
33434 28495093 : s_offset_d1 = s_offset_d1 + 3
33435 : END DO
33436 17019232 : s_offset_c1 = s_offset_c1 + 3
33437 : END DO
33438 11325459 : s_offset_b1 = s_offset_b1 + 3
33439 : END DO
33440 8465516 : s_offset_a1 = s_offset_a1 + 3
33441 : END DO
33442 3702206 : END SUBROUTINE contract_pppp
33443 : #endif
33444 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
33445 : ! **************************************************************************************************
33446 : !> \brief ...
33447 : !> \param work ...
33448 : !> \param nl_a ...
33449 : !> \param nl_b ...
33450 : !> \param nl_c ...
33451 : !> \param nl_d ...
33452 : !> \param sphi_a ...
33453 : !> \param sphi_b ...
33454 : !> \param sphi_c ...
33455 : !> \param sphi_d ...
33456 : !> \param primitives ...
33457 : !> \param buffer1 ...
33458 : !> \param buffer2 ...
33459 : ! **************************************************************************************************
33460 911648 : SUBROUTINE contract_pppd(work, &
33461 : nl_a, nl_b, nl_c, nl_d, &
33462 911648 : sphi_a, sphi_b, sphi_c, sphi_d, &
33463 911648 : primitives, &
33464 : buffer1, buffer2)
33465 : REAL(dp), DIMENSION(3*3*3*6), INTENT(IN) :: work
33466 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33467 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33468 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33469 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
33470 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
33471 : REAL(dp), &
33472 : DIMENSION(3*nl_a, 3*nl_b, 3*nl_c, 5*nl_d) :: primitives
33473 : REAL(dp), DIMENSION(3*3*3*6) :: buffer1, buffer2
33474 :
33475 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33476 : kmax, s_offset_a1, s_offset_b1, &
33477 : s_offset_c1, s_offset_d1
33478 :
33479 911648 : s_offset_a1 = 0
33480 2248093 : DO ia = 1, nl_a
33481 : s_offset_b1 = 0
33482 3419835 : DO ib = 1, nl_b
33483 : s_offset_c1 = 0
33484 5737804 : DO ic = 1, nl_c
33485 : s_offset_d1 = 0
33486 7382277 : DO id = 1, nl_d
33487 3727863 : buffer1 = 0.0_dp
33488 3727863 : imax = 3*3*6
33489 3727863 : kmax = 3
33490 205032465 : DO i = 1, imax
33491 201304602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33492 201304602 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33493 205032465 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33494 : END DO
33495 3727863 : buffer2 = 0.0_dp
33496 3727863 : imax = 3*3*6
33497 3727863 : kmax = 3
33498 205032465 : DO i = 1, imax
33499 201304602 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33500 201304602 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33501 205032465 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33502 : END DO
33503 3727863 : buffer1 = 0.0_dp
33504 3727863 : imax = 3*3*6
33505 3727863 : kmax = 3
33506 205032465 : DO i = 1, imax
33507 201304602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33508 201304602 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33509 205032465 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
33510 : END DO
33511 14911452 : imax = 3*3*3
33512 14911452 : kmax = 6
33513 : i = 0
33514 14911452 : DO i1 = 1, 3
33515 48462219 : DO i2 = 1, 3
33516 145386657 : DO i3 = 1, 3
33517 100652301 : i = i + 1
33518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33520 100652301 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
33521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33523 100652301 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
33524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33526 100652301 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33529 100652301 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
33530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33532 100652301 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
33533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33535 100652301 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
33536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33538 100652301 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
33539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33541 134203068 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
33542 : END DO
33543 : END DO
33544 : END DO
33545 7382277 : s_offset_d1 = s_offset_d1 + 5
33546 : END DO
33547 5737804 : s_offset_c1 = s_offset_c1 + 3
33548 : END DO
33549 3419835 : s_offset_b1 = s_offset_b1 + 3
33550 : END DO
33551 2248093 : s_offset_a1 = s_offset_a1 + 3
33552 : END DO
33553 911648 : END SUBROUTINE contract_pppd
33554 : #endif
33555 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
33556 : ! **************************************************************************************************
33557 : !> \brief ...
33558 : !> \param work ...
33559 : !> \param nl_a ...
33560 : !> \param nl_b ...
33561 : !> \param nl_c ...
33562 : !> \param nl_d ...
33563 : !> \param sphi_a ...
33564 : !> \param sphi_b ...
33565 : !> \param sphi_c ...
33566 : !> \param sphi_d ...
33567 : !> \param primitives ...
33568 : !> \param buffer1 ...
33569 : !> \param buffer2 ...
33570 : ! **************************************************************************************************
33571 : SUBROUTINE contract_pppf(work, &
33572 : nl_a, nl_b, nl_c, nl_d, &
33573 : sphi_a, sphi_b, sphi_c, sphi_d, &
33574 : primitives, &
33575 : buffer1, buffer2)
33576 : REAL(dp), DIMENSION(3*3*3*10), INTENT(IN) :: work
33577 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33578 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33579 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33580 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
33581 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
33582 : REAL(dp), &
33583 : DIMENSION(3*nl_a, 3*nl_b, 3*nl_c, 7*nl_d) :: primitives
33584 : REAL(dp), DIMENSION(3*3*3*10) :: buffer1, buffer2
33585 :
33586 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33587 : kmax, s_offset_a1, s_offset_b1, &
33588 : s_offset_c1, s_offset_d1
33589 :
33590 : s_offset_a1 = 0
33591 : DO ia = 1, nl_a
33592 : s_offset_b1 = 0
33593 : DO ib = 1, nl_b
33594 : s_offset_c1 = 0
33595 : DO ic = 1, nl_c
33596 : s_offset_d1 = 0
33597 : DO id = 1, nl_d
33598 : buffer1 = 0.0_dp
33599 : imax = 3*3*10
33600 : kmax = 3
33601 : DO i = 1, imax
33602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33603 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33604 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33605 : END DO
33606 : buffer2 = 0.0_dp
33607 : imax = 3*3*10
33608 : kmax = 3
33609 : DO i = 1, imax
33610 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33611 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33612 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33613 : END DO
33614 : buffer1 = 0.0_dp
33615 : imax = 3*3*10
33616 : kmax = 3
33617 : DO i = 1, imax
33618 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33619 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33620 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
33621 : END DO
33622 : imax = 3*3*3
33623 : kmax = 10
33624 : i = 0
33625 : DO i1 = 1, 3
33626 : DO i2 = 1, 3
33627 : DO i3 = 1, 3
33628 : i = i + 1
33629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33631 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
33632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33634 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
33635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33637 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33640 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
33641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33643 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
33644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33646 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
33647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33649 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
33650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33652 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
33653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33655 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
33656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33658 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
33659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33661 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
33662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33664 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
33665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33667 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
33668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33670 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
33671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33673 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
33674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33676 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
33677 : END DO
33678 : END DO
33679 : END DO
33680 : s_offset_d1 = s_offset_d1 + 7
33681 : END DO
33682 : s_offset_c1 = s_offset_c1 + 3
33683 : END DO
33684 : s_offset_b1 = s_offset_b1 + 3
33685 : END DO
33686 : s_offset_a1 = s_offset_a1 + 3
33687 : END DO
33688 : END SUBROUTINE contract_pppf
33689 : #endif
33690 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
33691 : ! **************************************************************************************************
33692 : !> \brief ...
33693 : !> \param work ...
33694 : !> \param nl_a ...
33695 : !> \param nl_b ...
33696 : !> \param nl_c ...
33697 : !> \param nl_d ...
33698 : !> \param sphi_a ...
33699 : !> \param sphi_b ...
33700 : !> \param sphi_c ...
33701 : !> \param sphi_d ...
33702 : !> \param primitives ...
33703 : !> \param buffer1 ...
33704 : !> \param buffer2 ...
33705 : ! **************************************************************************************************
33706 : SUBROUTINE contract_pppg(work, &
33707 : nl_a, nl_b, nl_c, nl_d, &
33708 : sphi_a, sphi_b, sphi_c, sphi_d, &
33709 : primitives, &
33710 : buffer1, buffer2)
33711 : REAL(dp), DIMENSION(3*3*3*15), INTENT(IN) :: work
33712 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33713 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33714 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33715 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
33716 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
33717 : REAL(dp), &
33718 : DIMENSION(3*nl_a, 3*nl_b, 3*nl_c, 9*nl_d) :: primitives
33719 : REAL(dp), DIMENSION(3*3*3*15) :: buffer1, buffer2
33720 :
33721 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33722 : kmax, s_offset_a1, s_offset_b1, &
33723 : s_offset_c1, s_offset_d1
33724 :
33725 : s_offset_a1 = 0
33726 : DO ia = 1, nl_a
33727 : s_offset_b1 = 0
33728 : DO ib = 1, nl_b
33729 : s_offset_c1 = 0
33730 : DO ic = 1, nl_c
33731 : s_offset_d1 = 0
33732 : DO id = 1, nl_d
33733 : buffer1 = 0.0_dp
33734 : imax = 3*3*15
33735 : kmax = 3
33736 : DO i = 1, imax
33737 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33738 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33739 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33740 : END DO
33741 : buffer2 = 0.0_dp
33742 : imax = 3*3*15
33743 : kmax = 3
33744 : DO i = 1, imax
33745 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33746 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33747 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33748 : END DO
33749 : buffer1 = 0.0_dp
33750 : imax = 3*3*15
33751 : kmax = 3
33752 : DO i = 1, imax
33753 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33754 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33755 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
33756 : END DO
33757 : imax = 3*3*3
33758 : kmax = 15
33759 : i = 0
33760 : DO i1 = 1, 3
33761 : DO i2 = 1, 3
33762 : DO i3 = 1, 3
33763 : i = i + 1
33764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33766 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
33767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33769 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
33770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33772 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
33773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33775 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
33776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33778 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
33779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33781 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
33782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
33783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
33784 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
33785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33787 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
33788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33790 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
33791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33793 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
33794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33796 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
33797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33799 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
33800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33802 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
33803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
33805 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
33806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33808 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
33809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33811 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
33812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
33813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
33814 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
33815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
33816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
33817 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
33818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
33819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
33820 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
33821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33823 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
33824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33826 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
33827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
33828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
33829 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
33830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
33831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
33832 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
33833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33835 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
33836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33838 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
33839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
33840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
33841 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
33842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
33843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
33844 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
33845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
33846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
33847 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
33848 : END DO
33849 : END DO
33850 : END DO
33851 : s_offset_d1 = s_offset_d1 + 9
33852 : END DO
33853 : s_offset_c1 = s_offset_c1 + 3
33854 : END DO
33855 : s_offset_b1 = s_offset_b1 + 3
33856 : END DO
33857 : s_offset_a1 = s_offset_a1 + 3
33858 : END DO
33859 : END SUBROUTINE contract_pppg
33860 : #endif
33861 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
33862 : ! **************************************************************************************************
33863 : !> \brief ...
33864 : !> \param work ...
33865 : !> \param nl_a ...
33866 : !> \param nl_b ...
33867 : !> \param nl_c ...
33868 : !> \param nl_d ...
33869 : !> \param sphi_a ...
33870 : !> \param sphi_b ...
33871 : !> \param sphi_c ...
33872 : !> \param sphi_d ...
33873 : !> \param primitives ...
33874 : !> \param buffer1 ...
33875 : !> \param buffer2 ...
33876 : ! **************************************************************************************************
33877 891623 : SUBROUTINE contract_ppds(work, &
33878 : nl_a, nl_b, nl_c, nl_d, &
33879 891623 : sphi_a, sphi_b, sphi_c, sphi_d, &
33880 891623 : primitives, &
33881 : buffer1, buffer2)
33882 : REAL(dp), DIMENSION(3*3*6*1), INTENT(IN) :: work
33883 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33884 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33885 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33886 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
33887 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
33888 : REAL(dp), &
33889 : DIMENSION(3*nl_a, 3*nl_b, 5*nl_c, 1*nl_d) :: primitives
33890 : REAL(dp), DIMENSION(3*3*6*1) :: buffer1, buffer2
33891 :
33892 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33893 : kmax, s_offset_a1, s_offset_b1, &
33894 : s_offset_c1, s_offset_d1
33895 :
33896 891623 : s_offset_a1 = 0
33897 2037587 : DO ia = 1, nl_a
33898 : s_offset_b1 = 0
33899 2661565 : DO ib = 1, nl_b
33900 : s_offset_c1 = 0
33901 3079853 : DO ic = 1, nl_c
33902 : s_offset_d1 = 0
33903 4171261 : DO id = 1, nl_d
33904 2607009 : buffer1 = 0.0_dp
33905 2607009 : imax = 3*6*1
33906 2607009 : kmax = 3
33907 49533171 : DO i = 1, imax
33908 46926162 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
33909 46926162 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
33910 49533171 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
33911 : END DO
33912 2607009 : buffer2 = 0.0_dp
33913 2607009 : imax = 3*6*1
33914 2607009 : kmax = 3
33915 49533171 : DO i = 1, imax
33916 46926162 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
33917 46926162 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
33918 49533171 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
33919 : END DO
33920 2607009 : buffer1 = 0.0_dp
33921 2607009 : imax = 3*3*1
33922 2607009 : kmax = 6
33923 26070090 : DO i = 1, imax
33924 23463081 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
33925 23463081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
33926 23463081 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
33927 23463081 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
33928 23463081 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
33929 23463081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
33930 23463081 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
33931 26070090 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
33932 : END DO
33933 15642054 : imax = 3*3*5
33934 15642054 : kmax = 1
33935 : i = 0
33936 15642054 : DO i1 = 1, 5
33937 54747189 : DO i2 = 1, 3
33938 169455585 : DO i3 = 1, 3
33939 117315405 : i = i + 1
33940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
33941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
33942 156420540 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
33943 : END DO
33944 : END DO
33945 : END DO
33946 4171261 : s_offset_d1 = s_offset_d1 + 1
33947 : END DO
33948 3079853 : s_offset_c1 = s_offset_c1 + 5
33949 : END DO
33950 2661565 : s_offset_b1 = s_offset_b1 + 3
33951 : END DO
33952 2037587 : s_offset_a1 = s_offset_a1 + 3
33953 : END DO
33954 891623 : END SUBROUTINE contract_ppds
33955 : #endif
33956 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
33957 : ! **************************************************************************************************
33958 : !> \brief ...
33959 : !> \param work ...
33960 : !> \param nl_a ...
33961 : !> \param nl_b ...
33962 : !> \param nl_c ...
33963 : !> \param nl_d ...
33964 : !> \param sphi_a ...
33965 : !> \param sphi_b ...
33966 : !> \param sphi_c ...
33967 : !> \param sphi_d ...
33968 : !> \param primitives ...
33969 : !> \param buffer1 ...
33970 : !> \param buffer2 ...
33971 : ! **************************************************************************************************
33972 901749 : SUBROUTINE contract_ppdp(work, &
33973 : nl_a, nl_b, nl_c, nl_d, &
33974 901749 : sphi_a, sphi_b, sphi_c, sphi_d, &
33975 901749 : primitives, &
33976 : buffer1, buffer2)
33977 : REAL(dp), DIMENSION(3*3*6*3), INTENT(IN) :: work
33978 : INTEGER :: nl_a, nl_b, nl_c, nl_d
33979 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
33980 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
33981 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
33982 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
33983 : REAL(dp), &
33984 : DIMENSION(3*nl_a, 3*nl_b, 5*nl_c, 3*nl_d) :: primitives
33985 : REAL(dp), DIMENSION(3*3*6*3) :: buffer1, buffer2
33986 :
33987 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
33988 : kmax, s_offset_a1, s_offset_b1, &
33989 : s_offset_c1, s_offset_d1
33990 :
33991 901749 : s_offset_a1 = 0
33992 2224428 : DO ia = 1, nl_a
33993 : s_offset_b1 = 0
33994 3391946 : DO ib = 1, nl_b
33995 : s_offset_c1 = 0
33996 4179029 : DO ic = 1, nl_c
33997 : s_offset_d1 = 0
33998 5761955 : DO id = 1, nl_d
33999 3652193 : buffer1 = 0.0_dp
34000 3652193 : imax = 3*6*3
34001 3652193 : kmax = 3
34002 200870615 : DO i = 1, imax
34003 197218422 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34004 197218422 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34005 200870615 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34006 : END DO
34007 3652193 : buffer2 = 0.0_dp
34008 3652193 : imax = 3*6*3
34009 3652193 : kmax = 3
34010 200870615 : DO i = 1, imax
34011 197218422 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34012 197218422 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34013 200870615 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34014 : END DO
34015 3652193 : buffer1 = 0.0_dp
34016 3652193 : imax = 3*3*3
34017 3652193 : kmax = 6
34018 102261404 : DO i = 1, imax
34019 98609211 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
34020 98609211 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34021 98609211 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34022 98609211 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34023 98609211 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
34024 98609211 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34025 98609211 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34026 102261404 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
34027 : END DO
34028 21913158 : imax = 3*3*5
34029 21913158 : kmax = 3
34030 : i = 0
34031 21913158 : DO i1 = 1, 5
34032 76696053 : DO i2 = 1, 3
34033 237392545 : DO i3 = 1, 3
34034 164348685 : i = i + 1
34035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
34037 164348685 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
34038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
34040 164348685 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
34043 219131580 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
34044 : END DO
34045 : END DO
34046 : END DO
34047 5761955 : s_offset_d1 = s_offset_d1 + 3
34048 : END DO
34049 4179029 : s_offset_c1 = s_offset_c1 + 5
34050 : END DO
34051 3391946 : s_offset_b1 = s_offset_b1 + 3
34052 : END DO
34053 2224428 : s_offset_a1 = s_offset_a1 + 3
34054 : END DO
34055 901749 : END SUBROUTINE contract_ppdp
34056 : #endif
34057 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
34058 : ! **************************************************************************************************
34059 : !> \brief ...
34060 : !> \param work ...
34061 : !> \param nl_a ...
34062 : !> \param nl_b ...
34063 : !> \param nl_c ...
34064 : !> \param nl_d ...
34065 : !> \param sphi_a ...
34066 : !> \param sphi_b ...
34067 : !> \param sphi_c ...
34068 : !> \param sphi_d ...
34069 : !> \param primitives ...
34070 : !> \param buffer1 ...
34071 : !> \param buffer2 ...
34072 : ! **************************************************************************************************
34073 232612 : SUBROUTINE contract_ppdd(work, &
34074 : nl_a, nl_b, nl_c, nl_d, &
34075 232612 : sphi_a, sphi_b, sphi_c, sphi_d, &
34076 232612 : primitives, &
34077 : buffer1, buffer2)
34078 : REAL(dp), DIMENSION(3*3*6*6), INTENT(IN) :: work
34079 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34080 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34081 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34082 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
34083 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
34084 : REAL(dp), &
34085 : DIMENSION(3*nl_a, 3*nl_b, 5*nl_c, 5*nl_d) :: primitives
34086 : REAL(dp), DIMENSION(3*3*6*6) :: buffer1, buffer2
34087 :
34088 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34089 : kmax, s_offset_a1, s_offset_b1, &
34090 : s_offset_c1, s_offset_d1
34091 :
34092 232612 : s_offset_a1 = 0
34093 536810 : DO ia = 1, nl_a
34094 : s_offset_b1 = 0
34095 712714 : DO ib = 1, nl_b
34096 : s_offset_c1 = 0
34097 844886 : DO ic = 1, nl_c
34098 : s_offset_d1 = 0
34099 917998 : DO id = 1, nl_d
34100 481628 : buffer1 = 0.0_dp
34101 481628 : imax = 3*6*6
34102 481628 : kmax = 3
34103 52497452 : DO i = 1, imax
34104 52015824 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34105 52015824 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34106 52497452 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34107 : END DO
34108 481628 : buffer2 = 0.0_dp
34109 481628 : imax = 3*6*6
34110 481628 : kmax = 3
34111 52497452 : DO i = 1, imax
34112 52015824 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34113 52015824 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34114 52497452 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34115 : END DO
34116 481628 : buffer1 = 0.0_dp
34117 481628 : imax = 3*3*6
34118 481628 : kmax = 6
34119 26489540 : DO i = 1, imax
34120 26007912 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
34121 26007912 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34122 26007912 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34123 26007912 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34124 26007912 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
34125 26007912 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34126 26007912 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34127 26489540 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
34128 : END DO
34129 2889768 : imax = 3*3*5
34130 2889768 : kmax = 6
34131 : i = 0
34132 2889768 : DO i1 = 1, 5
34133 10114188 : DO i2 = 1, 3
34134 31305820 : DO i3 = 1, 3
34135 21673260 : i = i + 1
34136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34138 21673260 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
34139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34141 21673260 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
34142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34144 21673260 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34147 21673260 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
34148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34150 21673260 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
34151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34153 21673260 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
34154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34156 21673260 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
34157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34159 28897680 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
34160 : END DO
34161 : END DO
34162 : END DO
34163 917998 : s_offset_d1 = s_offset_d1 + 5
34164 : END DO
34165 844886 : s_offset_c1 = s_offset_c1 + 5
34166 : END DO
34167 712714 : s_offset_b1 = s_offset_b1 + 3
34168 : END DO
34169 536810 : s_offset_a1 = s_offset_a1 + 3
34170 : END DO
34171 232612 : END SUBROUTINE contract_ppdd
34172 : #endif
34173 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
34174 : ! **************************************************************************************************
34175 : !> \brief ...
34176 : !> \param work ...
34177 : !> \param nl_a ...
34178 : !> \param nl_b ...
34179 : !> \param nl_c ...
34180 : !> \param nl_d ...
34181 : !> \param sphi_a ...
34182 : !> \param sphi_b ...
34183 : !> \param sphi_c ...
34184 : !> \param sphi_d ...
34185 : !> \param primitives ...
34186 : !> \param buffer1 ...
34187 : !> \param buffer2 ...
34188 : ! **************************************************************************************************
34189 : SUBROUTINE contract_ppdf(work, &
34190 : nl_a, nl_b, nl_c, nl_d, &
34191 : sphi_a, sphi_b, sphi_c, sphi_d, &
34192 : primitives, &
34193 : buffer1, buffer2)
34194 : REAL(dp), DIMENSION(3*3*6*10), INTENT(IN) :: work
34195 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34196 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34197 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34198 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
34199 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
34200 : REAL(dp), &
34201 : DIMENSION(3*nl_a, 3*nl_b, 5*nl_c, 7*nl_d) :: primitives
34202 : REAL(dp), DIMENSION(3*3*6*10) :: buffer1, buffer2
34203 :
34204 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34205 : kmax, s_offset_a1, s_offset_b1, &
34206 : s_offset_c1, s_offset_d1
34207 :
34208 : s_offset_a1 = 0
34209 : DO ia = 1, nl_a
34210 : s_offset_b1 = 0
34211 : DO ib = 1, nl_b
34212 : s_offset_c1 = 0
34213 : DO ic = 1, nl_c
34214 : s_offset_d1 = 0
34215 : DO id = 1, nl_d
34216 : buffer1 = 0.0_dp
34217 : imax = 3*6*10
34218 : kmax = 3
34219 : DO i = 1, imax
34220 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34221 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34222 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34223 : END DO
34224 : buffer2 = 0.0_dp
34225 : imax = 3*6*10
34226 : kmax = 3
34227 : DO i = 1, imax
34228 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34229 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34230 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34231 : END DO
34232 : buffer1 = 0.0_dp
34233 : imax = 3*3*10
34234 : kmax = 6
34235 : DO i = 1, imax
34236 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
34237 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34238 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34239 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34240 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
34241 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34242 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34243 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
34244 : END DO
34245 : imax = 3*3*5
34246 : kmax = 10
34247 : i = 0
34248 : DO i1 = 1, 5
34249 : DO i2 = 1, 3
34250 : DO i3 = 1, 3
34251 : i = i + 1
34252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34254 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
34255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34257 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
34258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34260 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34263 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
34264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34266 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
34267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34269 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
34270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34272 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
34273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34275 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
34276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34278 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
34279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34281 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
34282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34284 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
34285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34287 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
34288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34290 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
34291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34293 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
34294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34296 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
34297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34299 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
34300 : END DO
34301 : END DO
34302 : END DO
34303 : s_offset_d1 = s_offset_d1 + 7
34304 : END DO
34305 : s_offset_c1 = s_offset_c1 + 5
34306 : END DO
34307 : s_offset_b1 = s_offset_b1 + 3
34308 : END DO
34309 : s_offset_a1 = s_offset_a1 + 3
34310 : END DO
34311 : END SUBROUTINE contract_ppdf
34312 : #endif
34313 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
34314 : ! **************************************************************************************************
34315 : !> \brief ...
34316 : !> \param work ...
34317 : !> \param nl_a ...
34318 : !> \param nl_b ...
34319 : !> \param nl_c ...
34320 : !> \param nl_d ...
34321 : !> \param sphi_a ...
34322 : !> \param sphi_b ...
34323 : !> \param sphi_c ...
34324 : !> \param sphi_d ...
34325 : !> \param primitives ...
34326 : !> \param buffer1 ...
34327 : !> \param buffer2 ...
34328 : ! **************************************************************************************************
34329 : SUBROUTINE contract_ppdg(work, &
34330 : nl_a, nl_b, nl_c, nl_d, &
34331 : sphi_a, sphi_b, sphi_c, sphi_d, &
34332 : primitives, &
34333 : buffer1, buffer2)
34334 : REAL(dp), DIMENSION(3*3*6*15), INTENT(IN) :: work
34335 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34336 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34337 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34338 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
34339 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
34340 : REAL(dp), &
34341 : DIMENSION(3*nl_a, 3*nl_b, 5*nl_c, 9*nl_d) :: primitives
34342 : REAL(dp), DIMENSION(3*3*6*15) :: buffer1, buffer2
34343 :
34344 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34345 : kmax, s_offset_a1, s_offset_b1, &
34346 : s_offset_c1, s_offset_d1
34347 :
34348 : s_offset_a1 = 0
34349 : DO ia = 1, nl_a
34350 : s_offset_b1 = 0
34351 : DO ib = 1, nl_b
34352 : s_offset_c1 = 0
34353 : DO ic = 1, nl_c
34354 : s_offset_d1 = 0
34355 : DO id = 1, nl_d
34356 : buffer1 = 0.0_dp
34357 : imax = 3*6*15
34358 : kmax = 3
34359 : DO i = 1, imax
34360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34361 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34362 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34363 : END DO
34364 : buffer2 = 0.0_dp
34365 : imax = 3*6*15
34366 : kmax = 3
34367 : DO i = 1, imax
34368 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34369 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34370 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34371 : END DO
34372 : buffer1 = 0.0_dp
34373 : imax = 3*3*15
34374 : kmax = 6
34375 : DO i = 1, imax
34376 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
34377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34378 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34380 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
34381 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34382 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34383 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
34384 : END DO
34385 : imax = 3*3*5
34386 : kmax = 15
34387 : i = 0
34388 : DO i1 = 1, 5
34389 : DO i2 = 1, 3
34390 : DO i3 = 1, 3
34391 : i = i + 1
34392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34394 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
34395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34397 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
34398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
34399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
34400 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
34401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34403 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34406 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
34407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34409 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
34410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
34411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
34412 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
34413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34415 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
34416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
34417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
34418 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
34419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34421 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
34422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34424 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
34425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34427 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
34428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34430 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
34431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34433 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
34434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34436 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
34437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34439 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
34440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
34441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
34442 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
34443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34445 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
34446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34448 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
34449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34451 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
34452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34454 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
34455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
34456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
34457 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
34458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34460 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
34461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34463 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
34464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34466 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
34467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34469 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
34470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34472 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
34473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34475 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
34476 : END DO
34477 : END DO
34478 : END DO
34479 : s_offset_d1 = s_offset_d1 + 9
34480 : END DO
34481 : s_offset_c1 = s_offset_c1 + 5
34482 : END DO
34483 : s_offset_b1 = s_offset_b1 + 3
34484 : END DO
34485 : s_offset_a1 = s_offset_a1 + 3
34486 : END DO
34487 : END SUBROUTINE contract_ppdg
34488 : #endif
34489 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
34490 : ! **************************************************************************************************
34491 : !> \brief ...
34492 : !> \param work ...
34493 : !> \param nl_a ...
34494 : !> \param nl_b ...
34495 : !> \param nl_c ...
34496 : !> \param nl_d ...
34497 : !> \param sphi_a ...
34498 : !> \param sphi_b ...
34499 : !> \param sphi_c ...
34500 : !> \param sphi_d ...
34501 : !> \param primitives ...
34502 : !> \param buffer1 ...
34503 : !> \param buffer2 ...
34504 : ! **************************************************************************************************
34505 : SUBROUTINE contract_ppfs(work, &
34506 : nl_a, nl_b, nl_c, nl_d, &
34507 : sphi_a, sphi_b, sphi_c, sphi_d, &
34508 : primitives, &
34509 : buffer1, buffer2)
34510 : REAL(dp), DIMENSION(3*3*10*1), INTENT(IN) :: work
34511 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34512 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34513 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34514 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
34515 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
34516 : REAL(dp), &
34517 : DIMENSION(3*nl_a, 3*nl_b, 7*nl_c, 1*nl_d) :: primitives
34518 : REAL(dp), DIMENSION(3*3*10*1) :: buffer1, buffer2
34519 :
34520 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34521 : kmax, s_offset_a1, s_offset_b1, &
34522 : s_offset_c1, s_offset_d1
34523 :
34524 : s_offset_a1 = 0
34525 : DO ia = 1, nl_a
34526 : s_offset_b1 = 0
34527 : DO ib = 1, nl_b
34528 : s_offset_c1 = 0
34529 : DO ic = 1, nl_c
34530 : s_offset_d1 = 0
34531 : DO id = 1, nl_d
34532 : buffer1 = 0.0_dp
34533 : imax = 3*10*1
34534 : kmax = 3
34535 : DO i = 1, imax
34536 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34537 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34538 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34539 : END DO
34540 : buffer2 = 0.0_dp
34541 : imax = 3*10*1
34542 : kmax = 3
34543 : DO i = 1, imax
34544 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34545 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34546 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34547 : END DO
34548 : buffer1 = 0.0_dp
34549 : imax = 3*3*1
34550 : kmax = 10
34551 : DO i = 1, imax
34552 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34553 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
34554 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34555 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
34556 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34557 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
34558 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34559 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
34560 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
34562 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
34563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
34564 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
34565 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
34566 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
34567 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
34568 : END DO
34569 : imax = 3*3*7
34570 : kmax = 1
34571 : i = 0
34572 : DO i1 = 1, 7
34573 : DO i2 = 1, 3
34574 : DO i3 = 1, 3
34575 : i = i + 1
34576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
34578 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
34579 : END DO
34580 : END DO
34581 : END DO
34582 : s_offset_d1 = s_offset_d1 + 1
34583 : END DO
34584 : s_offset_c1 = s_offset_c1 + 7
34585 : END DO
34586 : s_offset_b1 = s_offset_b1 + 3
34587 : END DO
34588 : s_offset_a1 = s_offset_a1 + 3
34589 : END DO
34590 : END SUBROUTINE contract_ppfs
34591 : #endif
34592 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
34593 : ! **************************************************************************************************
34594 : !> \brief ...
34595 : !> \param work ...
34596 : !> \param nl_a ...
34597 : !> \param nl_b ...
34598 : !> \param nl_c ...
34599 : !> \param nl_d ...
34600 : !> \param sphi_a ...
34601 : !> \param sphi_b ...
34602 : !> \param sphi_c ...
34603 : !> \param sphi_d ...
34604 : !> \param primitives ...
34605 : !> \param buffer1 ...
34606 : !> \param buffer2 ...
34607 : ! **************************************************************************************************
34608 : SUBROUTINE contract_ppfp(work, &
34609 : nl_a, nl_b, nl_c, nl_d, &
34610 : sphi_a, sphi_b, sphi_c, sphi_d, &
34611 : primitives, &
34612 : buffer1, buffer2)
34613 : REAL(dp), DIMENSION(3*3*10*3), INTENT(IN) :: work
34614 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34615 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34616 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34617 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
34618 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
34619 : REAL(dp), &
34620 : DIMENSION(3*nl_a, 3*nl_b, 7*nl_c, 3*nl_d) :: primitives
34621 : REAL(dp), DIMENSION(3*3*10*3) :: buffer1, buffer2
34622 :
34623 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34624 : kmax, s_offset_a1, s_offset_b1, &
34625 : s_offset_c1, s_offset_d1
34626 :
34627 : s_offset_a1 = 0
34628 : DO ia = 1, nl_a
34629 : s_offset_b1 = 0
34630 : DO ib = 1, nl_b
34631 : s_offset_c1 = 0
34632 : DO ic = 1, nl_c
34633 : s_offset_d1 = 0
34634 : DO id = 1, nl_d
34635 : buffer1 = 0.0_dp
34636 : imax = 3*10*3
34637 : kmax = 3
34638 : DO i = 1, imax
34639 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34640 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34641 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34642 : END DO
34643 : buffer2 = 0.0_dp
34644 : imax = 3*10*3
34645 : kmax = 3
34646 : DO i = 1, imax
34647 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34648 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34649 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34650 : END DO
34651 : buffer1 = 0.0_dp
34652 : imax = 3*3*3
34653 : kmax = 10
34654 : DO i = 1, imax
34655 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34656 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
34657 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
34659 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34660 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
34661 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34662 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
34663 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34664 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
34665 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
34666 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
34667 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
34668 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
34669 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
34670 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
34671 : END DO
34672 : imax = 3*3*7
34673 : kmax = 3
34674 : i = 0
34675 : DO i1 = 1, 7
34676 : DO i2 = 1, 3
34677 : DO i3 = 1, 3
34678 : i = i + 1
34679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
34681 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
34682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
34684 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
34687 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
34688 : END DO
34689 : END DO
34690 : END DO
34691 : s_offset_d1 = s_offset_d1 + 3
34692 : END DO
34693 : s_offset_c1 = s_offset_c1 + 7
34694 : END DO
34695 : s_offset_b1 = s_offset_b1 + 3
34696 : END DO
34697 : s_offset_a1 = s_offset_a1 + 3
34698 : END DO
34699 : END SUBROUTINE contract_ppfp
34700 : #endif
34701 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
34702 : ! **************************************************************************************************
34703 : !> \brief ...
34704 : !> \param work ...
34705 : !> \param nl_a ...
34706 : !> \param nl_b ...
34707 : !> \param nl_c ...
34708 : !> \param nl_d ...
34709 : !> \param sphi_a ...
34710 : !> \param sphi_b ...
34711 : !> \param sphi_c ...
34712 : !> \param sphi_d ...
34713 : !> \param primitives ...
34714 : !> \param buffer1 ...
34715 : !> \param buffer2 ...
34716 : ! **************************************************************************************************
34717 : SUBROUTINE contract_ppfd(work, &
34718 : nl_a, nl_b, nl_c, nl_d, &
34719 : sphi_a, sphi_b, sphi_c, sphi_d, &
34720 : primitives, &
34721 : buffer1, buffer2)
34722 : REAL(dp), DIMENSION(3*3*10*6), INTENT(IN) :: work
34723 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34724 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34725 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34726 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
34727 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
34728 : REAL(dp), &
34729 : DIMENSION(3*nl_a, 3*nl_b, 7*nl_c, 5*nl_d) :: primitives
34730 : REAL(dp), DIMENSION(3*3*10*6) :: buffer1, buffer2
34731 :
34732 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34733 : kmax, s_offset_a1, s_offset_b1, &
34734 : s_offset_c1, s_offset_d1
34735 :
34736 : s_offset_a1 = 0
34737 : DO ia = 1, nl_a
34738 : s_offset_b1 = 0
34739 : DO ib = 1, nl_b
34740 : s_offset_c1 = 0
34741 : DO ic = 1, nl_c
34742 : s_offset_d1 = 0
34743 : DO id = 1, nl_d
34744 : buffer1 = 0.0_dp
34745 : imax = 3*10*6
34746 : kmax = 3
34747 : DO i = 1, imax
34748 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34749 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34750 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34751 : END DO
34752 : buffer2 = 0.0_dp
34753 : imax = 3*10*6
34754 : kmax = 3
34755 : DO i = 1, imax
34756 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34757 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34758 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34759 : END DO
34760 : buffer1 = 0.0_dp
34761 : imax = 3*3*6
34762 : kmax = 10
34763 : DO i = 1, imax
34764 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34765 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
34766 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34767 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
34768 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34769 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
34770 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34771 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
34772 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34773 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
34774 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
34775 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
34776 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
34777 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
34778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
34779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
34780 : END DO
34781 : imax = 3*3*7
34782 : kmax = 6
34783 : i = 0
34784 : DO i1 = 1, 7
34785 : DO i2 = 1, 3
34786 : DO i3 = 1, 3
34787 : i = i + 1
34788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34790 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
34791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34793 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
34794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34796 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34799 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
34800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34802 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
34803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34805 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
34806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34808 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
34809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34811 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
34812 : END DO
34813 : END DO
34814 : END DO
34815 : s_offset_d1 = s_offset_d1 + 5
34816 : END DO
34817 : s_offset_c1 = s_offset_c1 + 7
34818 : END DO
34819 : s_offset_b1 = s_offset_b1 + 3
34820 : END DO
34821 : s_offset_a1 = s_offset_a1 + 3
34822 : END DO
34823 : END SUBROUTINE contract_ppfd
34824 : #endif
34825 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
34826 : ! **************************************************************************************************
34827 : !> \brief ...
34828 : !> \param work ...
34829 : !> \param nl_a ...
34830 : !> \param nl_b ...
34831 : !> \param nl_c ...
34832 : !> \param nl_d ...
34833 : !> \param sphi_a ...
34834 : !> \param sphi_b ...
34835 : !> \param sphi_c ...
34836 : !> \param sphi_d ...
34837 : !> \param primitives ...
34838 : !> \param buffer1 ...
34839 : !> \param buffer2 ...
34840 : ! **************************************************************************************************
34841 : SUBROUTINE contract_ppff(work, &
34842 : nl_a, nl_b, nl_c, nl_d, &
34843 : sphi_a, sphi_b, sphi_c, sphi_d, &
34844 : primitives, &
34845 : buffer1, buffer2)
34846 : REAL(dp), DIMENSION(3*3*10*10), INTENT(IN) :: work
34847 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34848 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34849 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34850 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
34851 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
34852 : REAL(dp), &
34853 : DIMENSION(3*nl_a, 3*nl_b, 7*nl_c, 7*nl_d) :: primitives
34854 : REAL(dp), DIMENSION(3*3*10*10) :: buffer1, buffer2
34855 :
34856 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
34857 : kmax, s_offset_a1, s_offset_b1, &
34858 : s_offset_c1, s_offset_d1
34859 :
34860 : s_offset_a1 = 0
34861 : DO ia = 1, nl_a
34862 : s_offset_b1 = 0
34863 : DO ib = 1, nl_b
34864 : s_offset_c1 = 0
34865 : DO ic = 1, nl_c
34866 : s_offset_d1 = 0
34867 : DO id = 1, nl_d
34868 : buffer1 = 0.0_dp
34869 : imax = 3*10*10
34870 : kmax = 3
34871 : DO i = 1, imax
34872 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
34873 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
34874 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
34875 : END DO
34876 : buffer2 = 0.0_dp
34877 : imax = 3*10*10
34878 : kmax = 3
34879 : DO i = 1, imax
34880 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
34881 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
34882 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
34883 : END DO
34884 : buffer1 = 0.0_dp
34885 : imax = 3*3*10
34886 : kmax = 10
34887 : DO i = 1, imax
34888 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
34889 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
34890 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
34891 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
34892 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
34893 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
34894 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
34895 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
34896 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
34897 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
34898 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
34899 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
34900 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
34901 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
34902 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
34903 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
34904 : END DO
34905 : imax = 3*3*7
34906 : kmax = 10
34907 : i = 0
34908 : DO i1 = 1, 7
34909 : DO i2 = 1, 3
34910 : DO i3 = 1, 3
34911 : i = i + 1
34912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34914 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
34915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34917 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
34918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34920 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
34921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34923 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
34924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34926 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
34927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34929 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
34930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34932 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
34933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
34934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
34935 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
34936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
34937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
34938 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
34939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
34940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
34941 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
34942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
34943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
34944 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
34945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34947 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
34948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34950 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
34951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
34952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
34953 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
34954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
34955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
34956 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
34957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
34958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
34959 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
34960 : END DO
34961 : END DO
34962 : END DO
34963 : s_offset_d1 = s_offset_d1 + 7
34964 : END DO
34965 : s_offset_c1 = s_offset_c1 + 7
34966 : END DO
34967 : s_offset_b1 = s_offset_b1 + 3
34968 : END DO
34969 : s_offset_a1 = s_offset_a1 + 3
34970 : END DO
34971 : END SUBROUTINE contract_ppff
34972 : #endif
34973 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
34974 : ! **************************************************************************************************
34975 : !> \brief ...
34976 : !> \param work ...
34977 : !> \param nl_a ...
34978 : !> \param nl_b ...
34979 : !> \param nl_c ...
34980 : !> \param nl_d ...
34981 : !> \param sphi_a ...
34982 : !> \param sphi_b ...
34983 : !> \param sphi_c ...
34984 : !> \param sphi_d ...
34985 : !> \param primitives ...
34986 : !> \param buffer1 ...
34987 : !> \param buffer2 ...
34988 : ! **************************************************************************************************
34989 : SUBROUTINE contract_ppfg(work, &
34990 : nl_a, nl_b, nl_c, nl_d, &
34991 : sphi_a, sphi_b, sphi_c, sphi_d, &
34992 : primitives, &
34993 : buffer1, buffer2)
34994 : REAL(dp), DIMENSION(3*3*10*15), INTENT(IN) :: work
34995 : INTEGER :: nl_a, nl_b, nl_c, nl_d
34996 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
34997 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
34998 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
34999 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
35000 : REAL(dp), &
35001 : DIMENSION(3*nl_a, 3*nl_b, 7*nl_c, 9*nl_d) :: primitives
35002 : REAL(dp), DIMENSION(3*3*10*15) :: buffer1, buffer2
35003 :
35004 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35005 : kmax, s_offset_a1, s_offset_b1, &
35006 : s_offset_c1, s_offset_d1
35007 :
35008 : s_offset_a1 = 0
35009 : DO ia = 1, nl_a
35010 : s_offset_b1 = 0
35011 : DO ib = 1, nl_b
35012 : s_offset_c1 = 0
35013 : DO ic = 1, nl_c
35014 : s_offset_d1 = 0
35015 : DO id = 1, nl_d
35016 : buffer1 = 0.0_dp
35017 : imax = 3*10*15
35018 : kmax = 3
35019 : DO i = 1, imax
35020 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35021 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35022 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35023 : END DO
35024 : buffer2 = 0.0_dp
35025 : imax = 3*10*15
35026 : kmax = 3
35027 : DO i = 1, imax
35028 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35029 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35030 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35031 : END DO
35032 : buffer1 = 0.0_dp
35033 : imax = 3*3*15
35034 : kmax = 10
35035 : DO i = 1, imax
35036 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35037 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35038 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35039 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35040 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
35041 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35042 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35043 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
35044 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35045 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35046 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35047 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35048 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
35049 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35050 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35051 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
35052 : END DO
35053 : imax = 3*3*7
35054 : kmax = 15
35055 : i = 0
35056 : DO i1 = 1, 7
35057 : DO i2 = 1, 3
35058 : DO i3 = 1, 3
35059 : i = i + 1
35060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35062 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
35063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35065 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
35066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35068 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
35069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35071 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
35072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35074 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
35075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35077 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
35078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
35079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
35080 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
35081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35083 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
35084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35086 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
35087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35089 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
35090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35092 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
35093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35095 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
35096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35098 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
35099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35101 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
35102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35104 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
35105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35107 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
35108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
35109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
35110 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
35111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35113 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
35114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35116 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
35117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35119 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
35120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35122 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
35123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35125 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
35126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35128 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
35129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35131 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
35132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35134 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
35135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35137 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
35138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35140 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
35141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35143 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
35144 : END DO
35145 : END DO
35146 : END DO
35147 : s_offset_d1 = s_offset_d1 + 9
35148 : END DO
35149 : s_offset_c1 = s_offset_c1 + 7
35150 : END DO
35151 : s_offset_b1 = s_offset_b1 + 3
35152 : END DO
35153 : s_offset_a1 = s_offset_a1 + 3
35154 : END DO
35155 : END SUBROUTINE contract_ppfg
35156 : #endif
35157 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
35158 : ! **************************************************************************************************
35159 : !> \brief ...
35160 : !> \param work ...
35161 : !> \param nl_a ...
35162 : !> \param nl_b ...
35163 : !> \param nl_c ...
35164 : !> \param nl_d ...
35165 : !> \param sphi_a ...
35166 : !> \param sphi_b ...
35167 : !> \param sphi_c ...
35168 : !> \param sphi_d ...
35169 : !> \param primitives ...
35170 : !> \param buffer1 ...
35171 : !> \param buffer2 ...
35172 : ! **************************************************************************************************
35173 : SUBROUTINE contract_ppgs(work, &
35174 : nl_a, nl_b, nl_c, nl_d, &
35175 : sphi_a, sphi_b, sphi_c, sphi_d, &
35176 : primitives, &
35177 : buffer1, buffer2)
35178 : REAL(dp), DIMENSION(3*3*15*1), INTENT(IN) :: work
35179 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35180 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35181 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
35182 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
35183 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
35184 : REAL(dp), &
35185 : DIMENSION(3*nl_a, 3*nl_b, 9*nl_c, 1*nl_d) :: primitives
35186 : REAL(dp), DIMENSION(3*3*15*1) :: buffer1, buffer2
35187 :
35188 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35189 : kmax, s_offset_a1, s_offset_b1, &
35190 : s_offset_c1, s_offset_d1
35191 :
35192 : s_offset_a1 = 0
35193 : DO ia = 1, nl_a
35194 : s_offset_b1 = 0
35195 : DO ib = 1, nl_b
35196 : s_offset_c1 = 0
35197 : DO ic = 1, nl_c
35198 : s_offset_d1 = 0
35199 : DO id = 1, nl_d
35200 : buffer1 = 0.0_dp
35201 : imax = 3*15*1
35202 : kmax = 3
35203 : DO i = 1, imax
35204 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35205 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35206 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35207 : END DO
35208 : buffer2 = 0.0_dp
35209 : imax = 3*15*1
35210 : kmax = 3
35211 : DO i = 1, imax
35212 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35213 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35214 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35215 : END DO
35216 : buffer1 = 0.0_dp
35217 : imax = 3*3*1
35218 : kmax = 15
35219 : DO i = 1, imax
35220 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35221 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35222 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
35223 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35224 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35225 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35226 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
35227 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35228 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
35229 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35230 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
35231 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35232 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
35233 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35234 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35235 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35236 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
35237 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35238 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
35239 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
35240 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
35241 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
35242 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
35243 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
35244 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
35245 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
35246 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
35247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
35248 : END DO
35249 : imax = 3*3*9
35250 : kmax = 1
35251 : i = 0
35252 : DO i1 = 1, 9
35253 : DO i2 = 1, 3
35254 : DO i3 = 1, 3
35255 : i = i + 1
35256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
35258 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
35259 : END DO
35260 : END DO
35261 : END DO
35262 : s_offset_d1 = s_offset_d1 + 1
35263 : END DO
35264 : s_offset_c1 = s_offset_c1 + 9
35265 : END DO
35266 : s_offset_b1 = s_offset_b1 + 3
35267 : END DO
35268 : s_offset_a1 = s_offset_a1 + 3
35269 : END DO
35270 : END SUBROUTINE contract_ppgs
35271 : #endif
35272 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
35273 : ! **************************************************************************************************
35274 : !> \brief ...
35275 : !> \param work ...
35276 : !> \param nl_a ...
35277 : !> \param nl_b ...
35278 : !> \param nl_c ...
35279 : !> \param nl_d ...
35280 : !> \param sphi_a ...
35281 : !> \param sphi_b ...
35282 : !> \param sphi_c ...
35283 : !> \param sphi_d ...
35284 : !> \param primitives ...
35285 : !> \param buffer1 ...
35286 : !> \param buffer2 ...
35287 : ! **************************************************************************************************
35288 : SUBROUTINE contract_ppgp(work, &
35289 : nl_a, nl_b, nl_c, nl_d, &
35290 : sphi_a, sphi_b, sphi_c, sphi_d, &
35291 : primitives, &
35292 : buffer1, buffer2)
35293 : REAL(dp), DIMENSION(3*3*15*3), INTENT(IN) :: work
35294 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35295 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35296 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
35297 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
35298 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
35299 : REAL(dp), &
35300 : DIMENSION(3*nl_a, 3*nl_b, 9*nl_c, 3*nl_d) :: primitives
35301 : REAL(dp), DIMENSION(3*3*15*3) :: buffer1, buffer2
35302 :
35303 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35304 : kmax, s_offset_a1, s_offset_b1, &
35305 : s_offset_c1, s_offset_d1
35306 :
35307 : s_offset_a1 = 0
35308 : DO ia = 1, nl_a
35309 : s_offset_b1 = 0
35310 : DO ib = 1, nl_b
35311 : s_offset_c1 = 0
35312 : DO ic = 1, nl_c
35313 : s_offset_d1 = 0
35314 : DO id = 1, nl_d
35315 : buffer1 = 0.0_dp
35316 : imax = 3*15*3
35317 : kmax = 3
35318 : DO i = 1, imax
35319 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35320 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35321 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35322 : END DO
35323 : buffer2 = 0.0_dp
35324 : imax = 3*15*3
35325 : kmax = 3
35326 : DO i = 1, imax
35327 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35328 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35329 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35330 : END DO
35331 : buffer1 = 0.0_dp
35332 : imax = 3*3*3
35333 : kmax = 15
35334 : DO i = 1, imax
35335 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35336 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35337 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
35338 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35339 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35340 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35341 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
35342 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35343 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
35344 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
35346 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35347 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
35348 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35349 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35350 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35351 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
35352 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35353 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
35354 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
35355 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
35356 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
35357 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
35358 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
35359 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
35360 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
35361 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
35362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
35363 : END DO
35364 : imax = 3*3*9
35365 : kmax = 3
35366 : i = 0
35367 : DO i1 = 1, 9
35368 : DO i2 = 1, 3
35369 : DO i3 = 1, 3
35370 : i = i + 1
35371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
35373 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
35374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
35376 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
35377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
35379 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
35380 : END DO
35381 : END DO
35382 : END DO
35383 : s_offset_d1 = s_offset_d1 + 3
35384 : END DO
35385 : s_offset_c1 = s_offset_c1 + 9
35386 : END DO
35387 : s_offset_b1 = s_offset_b1 + 3
35388 : END DO
35389 : s_offset_a1 = s_offset_a1 + 3
35390 : END DO
35391 : END SUBROUTINE contract_ppgp
35392 : #endif
35393 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
35394 : ! **************************************************************************************************
35395 : !> \brief ...
35396 : !> \param work ...
35397 : !> \param nl_a ...
35398 : !> \param nl_b ...
35399 : !> \param nl_c ...
35400 : !> \param nl_d ...
35401 : !> \param sphi_a ...
35402 : !> \param sphi_b ...
35403 : !> \param sphi_c ...
35404 : !> \param sphi_d ...
35405 : !> \param primitives ...
35406 : !> \param buffer1 ...
35407 : !> \param buffer2 ...
35408 : ! **************************************************************************************************
35409 : SUBROUTINE contract_ppgd(work, &
35410 : nl_a, nl_b, nl_c, nl_d, &
35411 : sphi_a, sphi_b, sphi_c, sphi_d, &
35412 : primitives, &
35413 : buffer1, buffer2)
35414 : REAL(dp), DIMENSION(3*3*15*6), INTENT(IN) :: work
35415 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35416 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35417 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
35418 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
35419 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
35420 : REAL(dp), &
35421 : DIMENSION(3*nl_a, 3*nl_b, 9*nl_c, 5*nl_d) :: primitives
35422 : REAL(dp), DIMENSION(3*3*15*6) :: buffer1, buffer2
35423 :
35424 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35425 : kmax, s_offset_a1, s_offset_b1, &
35426 : s_offset_c1, s_offset_d1
35427 :
35428 : s_offset_a1 = 0
35429 : DO ia = 1, nl_a
35430 : s_offset_b1 = 0
35431 : DO ib = 1, nl_b
35432 : s_offset_c1 = 0
35433 : DO ic = 1, nl_c
35434 : s_offset_d1 = 0
35435 : DO id = 1, nl_d
35436 : buffer1 = 0.0_dp
35437 : imax = 3*15*6
35438 : kmax = 3
35439 : DO i = 1, imax
35440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35441 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35442 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35443 : END DO
35444 : buffer2 = 0.0_dp
35445 : imax = 3*15*6
35446 : kmax = 3
35447 : DO i = 1, imax
35448 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35449 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35450 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35451 : END DO
35452 : buffer1 = 0.0_dp
35453 : imax = 3*3*6
35454 : kmax = 15
35455 : DO i = 1, imax
35456 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35457 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35458 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
35459 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35460 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35461 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35462 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
35463 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35464 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
35465 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35466 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
35467 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35468 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
35469 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35470 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35471 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35472 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
35473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
35475 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
35476 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
35477 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
35478 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
35479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
35480 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
35481 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
35482 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
35483 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
35484 : END DO
35485 : imax = 3*3*9
35486 : kmax = 6
35487 : i = 0
35488 : DO i1 = 1, 9
35489 : DO i2 = 1, 3
35490 : DO i3 = 1, 3
35491 : i = i + 1
35492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35494 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
35495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35497 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
35498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35500 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
35501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35503 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
35504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35506 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
35507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35509 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
35510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35512 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
35513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35515 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
35516 : END DO
35517 : END DO
35518 : END DO
35519 : s_offset_d1 = s_offset_d1 + 5
35520 : END DO
35521 : s_offset_c1 = s_offset_c1 + 9
35522 : END DO
35523 : s_offset_b1 = s_offset_b1 + 3
35524 : END DO
35525 : s_offset_a1 = s_offset_a1 + 3
35526 : END DO
35527 : END SUBROUTINE contract_ppgd
35528 : #endif
35529 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
35530 : ! **************************************************************************************************
35531 : !> \brief ...
35532 : !> \param work ...
35533 : !> \param nl_a ...
35534 : !> \param nl_b ...
35535 : !> \param nl_c ...
35536 : !> \param nl_d ...
35537 : !> \param sphi_a ...
35538 : !> \param sphi_b ...
35539 : !> \param sphi_c ...
35540 : !> \param sphi_d ...
35541 : !> \param primitives ...
35542 : !> \param buffer1 ...
35543 : !> \param buffer2 ...
35544 : ! **************************************************************************************************
35545 : SUBROUTINE contract_ppgf(work, &
35546 : nl_a, nl_b, nl_c, nl_d, &
35547 : sphi_a, sphi_b, sphi_c, sphi_d, &
35548 : primitives, &
35549 : buffer1, buffer2)
35550 : REAL(dp), DIMENSION(3*3*15*10), INTENT(IN) :: work
35551 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35552 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35553 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
35554 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
35555 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
35556 : REAL(dp), &
35557 : DIMENSION(3*nl_a, 3*nl_b, 9*nl_c, 7*nl_d) :: primitives
35558 : REAL(dp), DIMENSION(3*3*15*10) :: buffer1, buffer2
35559 :
35560 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35561 : kmax, s_offset_a1, s_offset_b1, &
35562 : s_offset_c1, s_offset_d1
35563 :
35564 : s_offset_a1 = 0
35565 : DO ia = 1, nl_a
35566 : s_offset_b1 = 0
35567 : DO ib = 1, nl_b
35568 : s_offset_c1 = 0
35569 : DO ic = 1, nl_c
35570 : s_offset_d1 = 0
35571 : DO id = 1, nl_d
35572 : buffer1 = 0.0_dp
35573 : imax = 3*15*10
35574 : kmax = 3
35575 : DO i = 1, imax
35576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35577 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35578 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35579 : END DO
35580 : buffer2 = 0.0_dp
35581 : imax = 3*15*10
35582 : kmax = 3
35583 : DO i = 1, imax
35584 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35585 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35586 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35587 : END DO
35588 : buffer1 = 0.0_dp
35589 : imax = 3*3*10
35590 : kmax = 15
35591 : DO i = 1, imax
35592 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35593 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35594 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
35595 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35596 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35597 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35598 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
35599 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35600 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
35601 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35602 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
35603 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35604 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
35605 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35606 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35607 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35608 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
35609 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35610 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
35611 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
35612 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
35613 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
35614 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
35615 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
35616 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
35617 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
35618 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
35619 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
35620 : END DO
35621 : imax = 3*3*9
35622 : kmax = 10
35623 : i = 0
35624 : DO i1 = 1, 9
35625 : DO i2 = 1, 3
35626 : DO i3 = 1, 3
35627 : i = i + 1
35628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35630 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
35631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35633 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
35634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35636 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
35637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35639 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
35640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35642 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
35643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35645 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
35646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35648 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
35649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35651 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
35652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35654 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
35655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35657 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
35658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35660 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
35661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35663 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
35664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35666 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
35667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35669 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
35670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35672 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
35673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35675 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
35676 : END DO
35677 : END DO
35678 : END DO
35679 : s_offset_d1 = s_offset_d1 + 7
35680 : END DO
35681 : s_offset_c1 = s_offset_c1 + 9
35682 : END DO
35683 : s_offset_b1 = s_offset_b1 + 3
35684 : END DO
35685 : s_offset_a1 = s_offset_a1 + 3
35686 : END DO
35687 : END SUBROUTINE contract_ppgf
35688 : #endif
35689 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
35690 : ! **************************************************************************************************
35691 : !> \brief ...
35692 : !> \param work ...
35693 : !> \param nl_a ...
35694 : !> \param nl_b ...
35695 : !> \param nl_c ...
35696 : !> \param nl_d ...
35697 : !> \param sphi_a ...
35698 : !> \param sphi_b ...
35699 : !> \param sphi_c ...
35700 : !> \param sphi_d ...
35701 : !> \param primitives ...
35702 : !> \param buffer1 ...
35703 : !> \param buffer2 ...
35704 : ! **************************************************************************************************
35705 : SUBROUTINE contract_ppgg(work, &
35706 : nl_a, nl_b, nl_c, nl_d, &
35707 : sphi_a, sphi_b, sphi_c, sphi_d, &
35708 : primitives, &
35709 : buffer1, buffer2)
35710 : REAL(dp), DIMENSION(3*3*15*15), INTENT(IN) :: work
35711 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35712 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35713 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
35714 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
35715 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
35716 : REAL(dp), &
35717 : DIMENSION(3*nl_a, 3*nl_b, 9*nl_c, 9*nl_d) :: primitives
35718 : REAL(dp), DIMENSION(3*3*15*15) :: buffer1, buffer2
35719 :
35720 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35721 : kmax, s_offset_a1, s_offset_b1, &
35722 : s_offset_c1, s_offset_d1
35723 :
35724 : s_offset_a1 = 0
35725 : DO ia = 1, nl_a
35726 : s_offset_b1 = 0
35727 : DO ib = 1, nl_b
35728 : s_offset_c1 = 0
35729 : DO ic = 1, nl_c
35730 : s_offset_d1 = 0
35731 : DO id = 1, nl_d
35732 : buffer1 = 0.0_dp
35733 : imax = 3*15*15
35734 : kmax = 3
35735 : DO i = 1, imax
35736 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35737 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35738 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35739 : END DO
35740 : buffer2 = 0.0_dp
35741 : imax = 3*15*15
35742 : kmax = 3
35743 : DO i = 1, imax
35744 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35745 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35746 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
35747 : END DO
35748 : buffer1 = 0.0_dp
35749 : imax = 3*3*15
35750 : kmax = 15
35751 : DO i = 1, imax
35752 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
35753 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
35754 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
35755 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
35756 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
35757 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
35758 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
35759 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
35760 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
35761 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
35762 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
35763 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
35764 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
35765 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
35766 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
35767 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
35768 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
35769 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
35770 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
35771 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
35772 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
35773 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
35774 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
35775 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
35776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
35777 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
35778 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
35779 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
35780 : END DO
35781 : imax = 3*3*9
35782 : kmax = 15
35783 : i = 0
35784 : DO i1 = 1, 9
35785 : DO i2 = 1, 3
35786 : DO i3 = 1, 3
35787 : i = i + 1
35788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35790 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
35791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35793 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
35794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35796 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
35797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35799 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
35800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35802 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
35803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35805 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
35806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
35807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
35808 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
35809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35811 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
35812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35814 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
35815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35817 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
35818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35820 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
35821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35823 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
35824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35826 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
35827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
35829 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
35830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35832 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
35833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35835 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
35836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
35837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
35838 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
35839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
35840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
35841 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
35842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
35843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
35844 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
35845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35847 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
35848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35850 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
35851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
35852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
35853 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
35854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
35855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
35856 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
35857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35859 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
35860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35862 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
35863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
35864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
35865 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
35866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
35867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
35868 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
35869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
35870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
35871 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
35872 : END DO
35873 : END DO
35874 : END DO
35875 : s_offset_d1 = s_offset_d1 + 9
35876 : END DO
35877 : s_offset_c1 = s_offset_c1 + 9
35878 : END DO
35879 : s_offset_b1 = s_offset_b1 + 3
35880 : END DO
35881 : s_offset_a1 = s_offset_a1 + 3
35882 : END DO
35883 : END SUBROUTINE contract_ppgg
35884 : #endif
35885 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
35886 : ! **************************************************************************************************
35887 : !> \brief ...
35888 : !> \param work ...
35889 : !> \param nl_a ...
35890 : !> \param nl_b ...
35891 : !> \param nl_c ...
35892 : !> \param nl_d ...
35893 : !> \param sphi_a ...
35894 : !> \param sphi_b ...
35895 : !> \param sphi_c ...
35896 : !> \param sphi_d ...
35897 : !> \param primitives ...
35898 : !> \param buffer1 ...
35899 : !> \param buffer2 ...
35900 : ! **************************************************************************************************
35901 1421780 : SUBROUTINE contract_pdss(work, &
35902 : nl_a, nl_b, nl_c, nl_d, &
35903 1421780 : sphi_a, sphi_b, sphi_c, sphi_d, &
35904 1421780 : primitives, &
35905 : buffer1, buffer2)
35906 : REAL(dp), DIMENSION(3*6*1*1), INTENT(IN) :: work
35907 : INTEGER :: nl_a, nl_b, nl_c, nl_d
35908 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
35909 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
35910 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
35911 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
35912 : REAL(dp), &
35913 : DIMENSION(3*nl_a, 5*nl_b, 1*nl_c, 1*nl_d) :: primitives
35914 : REAL(dp), DIMENSION(3*6*1*1) :: buffer1, buffer2
35915 :
35916 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
35917 : kmax, s_offset_a1, s_offset_b1, &
35918 : s_offset_c1, s_offset_d1
35919 :
35920 1421780 : s_offset_a1 = 0
35921 3288783 : DO ia = 1, nl_a
35922 : s_offset_b1 = 0
35923 3909489 : DO ib = 1, nl_b
35924 : s_offset_c1 = 0
35925 5367544 : DO ic = 1, nl_c
35926 : s_offset_d1 = 0
35927 9201485 : DO id = 1, nl_d
35928 5876427 : buffer1 = 0.0_dp
35929 5876427 : imax = 6*1*1
35930 5876427 : kmax = 3
35931 41134989 : DO i = 1, imax
35932 35258562 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
35933 35258562 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
35934 41134989 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
35935 : END DO
35936 5876427 : buffer2 = 0.0_dp
35937 5876427 : imax = 3*1*1
35938 5876427 : kmax = 6
35939 23505708 : DO i = 1, imax
35940 17629281 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
35941 17629281 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
35942 17629281 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
35943 17629281 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
35944 17629281 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
35945 17629281 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
35946 17629281 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
35947 23505708 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
35948 : END DO
35949 5876427 : buffer1 = 0.0_dp
35950 5876427 : imax = 3*5*1
35951 5876427 : kmax = 1
35952 94022832 : DO i = 1, imax
35953 94022832 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
35954 : END DO
35955 11752854 : imax = 3*5*1
35956 11752854 : kmax = 1
35957 : i = 0
35958 11752854 : DO i1 = 1, 1
35959 41134989 : DO i2 = 1, 5
35960 123404967 : DO i3 = 1, 3
35961 88146405 : i = i + 1
35962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
35963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
35964 117528540 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
35965 : END DO
35966 : END DO
35967 : END DO
35968 9201485 : s_offset_d1 = s_offset_d1 + 1
35969 : END DO
35970 5367544 : s_offset_c1 = s_offset_c1 + 1
35971 : END DO
35972 3909489 : s_offset_b1 = s_offset_b1 + 5
35973 : END DO
35974 3288783 : s_offset_a1 = s_offset_a1 + 3
35975 : END DO
35976 1421780 : END SUBROUTINE contract_pdss
35977 : #endif
35978 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
35979 : ! **************************************************************************************************
35980 : !> \brief ...
35981 : !> \param work ...
35982 : !> \param nl_a ...
35983 : !> \param nl_b ...
35984 : !> \param nl_c ...
35985 : !> \param nl_d ...
35986 : !> \param sphi_a ...
35987 : !> \param sphi_b ...
35988 : !> \param sphi_c ...
35989 : !> \param sphi_d ...
35990 : !> \param primitives ...
35991 : !> \param buffer1 ...
35992 : !> \param buffer2 ...
35993 : ! **************************************************************************************************
35994 802487 : SUBROUTINE contract_pdsp(work, &
35995 : nl_a, nl_b, nl_c, nl_d, &
35996 802487 : sphi_a, sphi_b, sphi_c, sphi_d, &
35997 802487 : primitives, &
35998 : buffer1, buffer2)
35999 : REAL(dp), DIMENSION(3*6*1*3), INTENT(IN) :: work
36000 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36001 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36002 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36003 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
36004 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
36005 : REAL(dp), &
36006 : DIMENSION(3*nl_a, 5*nl_b, 1*nl_c, 3*nl_d) :: primitives
36007 : REAL(dp), DIMENSION(3*6*1*3) :: buffer1, buffer2
36008 :
36009 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36010 : kmax, s_offset_a1, s_offset_b1, &
36011 : s_offset_c1, s_offset_d1
36012 :
36013 802487 : s_offset_a1 = 0
36014 1846219 : DO ia = 1, nl_a
36015 : s_offset_b1 = 0
36016 2231730 : DO ib = 1, nl_b
36017 : s_offset_c1 = 0
36018 3181592 : DO ic = 1, nl_c
36019 : s_offset_d1 = 0
36020 4831710 : DO id = 1, nl_d
36021 2838116 : buffer1 = 0.0_dp
36022 2838116 : imax = 6*1*3
36023 2838116 : kmax = 3
36024 53924204 : DO i = 1, imax
36025 51086088 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36026 51086088 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36027 53924204 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36028 : END DO
36029 2838116 : buffer2 = 0.0_dp
36030 2838116 : imax = 3*1*3
36031 2838116 : kmax = 6
36032 28381160 : DO i = 1, imax
36033 25543044 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36034 25543044 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36035 25543044 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36036 25543044 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36037 25543044 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36038 25543044 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36039 25543044 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36040 28381160 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36041 : END DO
36042 2838116 : buffer1 = 0.0_dp
36043 2838116 : imax = 3*5*3
36044 2838116 : kmax = 1
36045 130553336 : DO i = 1, imax
36046 130553336 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
36047 : END DO
36048 5676232 : imax = 3*5*1
36049 5676232 : kmax = 3
36050 : i = 0
36051 5676232 : DO i1 = 1, 1
36052 19866812 : DO i2 = 1, 5
36053 59600436 : DO i3 = 1, 3
36054 42571740 : i = i + 1
36055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
36057 42571740 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
36058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
36060 42571740 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
36063 56762320 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
36064 : END DO
36065 : END DO
36066 : END DO
36067 4831710 : s_offset_d1 = s_offset_d1 + 3
36068 : END DO
36069 3181592 : s_offset_c1 = s_offset_c1 + 1
36070 : END DO
36071 2231730 : s_offset_b1 = s_offset_b1 + 5
36072 : END DO
36073 1846219 : s_offset_a1 = s_offset_a1 + 3
36074 : END DO
36075 802487 : END SUBROUTINE contract_pdsp
36076 : #endif
36077 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
36078 : ! **************************************************************************************************
36079 : !> \brief ...
36080 : !> \param work ...
36081 : !> \param nl_a ...
36082 : !> \param nl_b ...
36083 : !> \param nl_c ...
36084 : !> \param nl_d ...
36085 : !> \param sphi_a ...
36086 : !> \param sphi_b ...
36087 : !> \param sphi_c ...
36088 : !> \param sphi_d ...
36089 : !> \param primitives ...
36090 : !> \param buffer1 ...
36091 : !> \param buffer2 ...
36092 : ! **************************************************************************************************
36093 417900 : SUBROUTINE contract_pdsd(work, &
36094 : nl_a, nl_b, nl_c, nl_d, &
36095 417900 : sphi_a, sphi_b, sphi_c, sphi_d, &
36096 417900 : primitives, &
36097 : buffer1, buffer2)
36098 : REAL(dp), DIMENSION(3*6*1*6), INTENT(IN) :: work
36099 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36100 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36101 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36102 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
36103 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
36104 : REAL(dp), &
36105 : DIMENSION(3*nl_a, 5*nl_b, 1*nl_c, 5*nl_d) :: primitives
36106 : REAL(dp), DIMENSION(3*6*1*6) :: buffer1, buffer2
36107 :
36108 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36109 : kmax, s_offset_a1, s_offset_b1, &
36110 : s_offset_c1, s_offset_d1
36111 :
36112 417900 : s_offset_a1 = 0
36113 969425 : DO ia = 1, nl_a
36114 : s_offset_b1 = 0
36115 1197137 : DO ib = 1, nl_b
36116 : s_offset_c1 = 0
36117 1742363 : DO ic = 1, nl_c
36118 : s_offset_d1 = 0
36119 2361099 : DO id = 1, nl_d
36120 1264348 : buffer1 = 0.0_dp
36121 1264348 : imax = 6*1*6
36122 1264348 : kmax = 3
36123 46780876 : DO i = 1, imax
36124 45516528 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36125 45516528 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36126 46780876 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36127 : END DO
36128 1264348 : buffer2 = 0.0_dp
36129 1264348 : imax = 3*1*6
36130 1264348 : kmax = 6
36131 24022612 : DO i = 1, imax
36132 22758264 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36133 22758264 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36134 22758264 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36135 22758264 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36136 22758264 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36137 22758264 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36138 22758264 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36139 24022612 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36140 : END DO
36141 1264348 : buffer1 = 0.0_dp
36142 1264348 : imax = 3*5*6
36143 1264348 : kmax = 1
36144 115055668 : DO i = 1, imax
36145 115055668 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
36146 : END DO
36147 2528696 : imax = 3*5*1
36148 2528696 : kmax = 6
36149 : i = 0
36150 2528696 : DO i1 = 1, 1
36151 8850436 : DO i2 = 1, 5
36152 26551308 : DO i3 = 1, 3
36153 18965220 : i = i + 1
36154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36156 18965220 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
36157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36159 18965220 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
36160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36162 18965220 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36165 18965220 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
36166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36168 18965220 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
36169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36171 18965220 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
36172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36174 18965220 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
36175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36177 25286960 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
36178 : END DO
36179 : END DO
36180 : END DO
36181 2361099 : s_offset_d1 = s_offset_d1 + 5
36182 : END DO
36183 1742363 : s_offset_c1 = s_offset_c1 + 1
36184 : END DO
36185 1197137 : s_offset_b1 = s_offset_b1 + 5
36186 : END DO
36187 969425 : s_offset_a1 = s_offset_a1 + 3
36188 : END DO
36189 417900 : END SUBROUTINE contract_pdsd
36190 : #endif
36191 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
36192 : ! **************************************************************************************************
36193 : !> \brief ...
36194 : !> \param work ...
36195 : !> \param nl_a ...
36196 : !> \param nl_b ...
36197 : !> \param nl_c ...
36198 : !> \param nl_d ...
36199 : !> \param sphi_a ...
36200 : !> \param sphi_b ...
36201 : !> \param sphi_c ...
36202 : !> \param sphi_d ...
36203 : !> \param primitives ...
36204 : !> \param buffer1 ...
36205 : !> \param buffer2 ...
36206 : ! **************************************************************************************************
36207 : SUBROUTINE contract_pdsf(work, &
36208 : nl_a, nl_b, nl_c, nl_d, &
36209 : sphi_a, sphi_b, sphi_c, sphi_d, &
36210 : primitives, &
36211 : buffer1, buffer2)
36212 : REAL(dp), DIMENSION(3*6*1*10), INTENT(IN) :: work
36213 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36214 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36215 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36216 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
36217 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
36218 : REAL(dp), &
36219 : DIMENSION(3*nl_a, 5*nl_b, 1*nl_c, 7*nl_d) :: primitives
36220 : REAL(dp), DIMENSION(3*6*1*10) :: buffer1, buffer2
36221 :
36222 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36223 : kmax, s_offset_a1, s_offset_b1, &
36224 : s_offset_c1, s_offset_d1
36225 :
36226 : s_offset_a1 = 0
36227 : DO ia = 1, nl_a
36228 : s_offset_b1 = 0
36229 : DO ib = 1, nl_b
36230 : s_offset_c1 = 0
36231 : DO ic = 1, nl_c
36232 : s_offset_d1 = 0
36233 : DO id = 1, nl_d
36234 : buffer1 = 0.0_dp
36235 : imax = 6*1*10
36236 : kmax = 3
36237 : DO i = 1, imax
36238 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36239 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36240 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36241 : END DO
36242 : buffer2 = 0.0_dp
36243 : imax = 3*1*10
36244 : kmax = 6
36245 : DO i = 1, imax
36246 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36247 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36248 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36249 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36250 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36251 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36252 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36253 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36254 : END DO
36255 : buffer1 = 0.0_dp
36256 : imax = 3*5*10
36257 : kmax = 1
36258 : DO i = 1, imax
36259 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
36260 : END DO
36261 : imax = 3*5*1
36262 : kmax = 10
36263 : i = 0
36264 : DO i1 = 1, 1
36265 : DO i2 = 1, 5
36266 : DO i3 = 1, 3
36267 : i = i + 1
36268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36270 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
36271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36273 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
36274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36276 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36279 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
36280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36282 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
36283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36285 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
36286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36288 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
36289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36291 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
36292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36294 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
36295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36297 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
36298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36300 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
36301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36303 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
36304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36306 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
36307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36309 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
36310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36312 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
36313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36315 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
36316 : END DO
36317 : END DO
36318 : END DO
36319 : s_offset_d1 = s_offset_d1 + 7
36320 : END DO
36321 : s_offset_c1 = s_offset_c1 + 1
36322 : END DO
36323 : s_offset_b1 = s_offset_b1 + 5
36324 : END DO
36325 : s_offset_a1 = s_offset_a1 + 3
36326 : END DO
36327 : END SUBROUTINE contract_pdsf
36328 : #endif
36329 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
36330 : ! **************************************************************************************************
36331 : !> \brief ...
36332 : !> \param work ...
36333 : !> \param nl_a ...
36334 : !> \param nl_b ...
36335 : !> \param nl_c ...
36336 : !> \param nl_d ...
36337 : !> \param sphi_a ...
36338 : !> \param sphi_b ...
36339 : !> \param sphi_c ...
36340 : !> \param sphi_d ...
36341 : !> \param primitives ...
36342 : !> \param buffer1 ...
36343 : !> \param buffer2 ...
36344 : ! **************************************************************************************************
36345 : SUBROUTINE contract_pdsg(work, &
36346 : nl_a, nl_b, nl_c, nl_d, &
36347 : sphi_a, sphi_b, sphi_c, sphi_d, &
36348 : primitives, &
36349 : buffer1, buffer2)
36350 : REAL(dp), DIMENSION(3*6*1*15), INTENT(IN) :: work
36351 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36352 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36353 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36354 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
36355 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
36356 : REAL(dp), &
36357 : DIMENSION(3*nl_a, 5*nl_b, 1*nl_c, 9*nl_d) :: primitives
36358 : REAL(dp), DIMENSION(3*6*1*15) :: buffer1, buffer2
36359 :
36360 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36361 : kmax, s_offset_a1, s_offset_b1, &
36362 : s_offset_c1, s_offset_d1
36363 :
36364 : s_offset_a1 = 0
36365 : DO ia = 1, nl_a
36366 : s_offset_b1 = 0
36367 : DO ib = 1, nl_b
36368 : s_offset_c1 = 0
36369 : DO ic = 1, nl_c
36370 : s_offset_d1 = 0
36371 : DO id = 1, nl_d
36372 : buffer1 = 0.0_dp
36373 : imax = 6*1*15
36374 : kmax = 3
36375 : DO i = 1, imax
36376 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36377 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36378 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36379 : END DO
36380 : buffer2 = 0.0_dp
36381 : imax = 3*1*15
36382 : kmax = 6
36383 : DO i = 1, imax
36384 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36385 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36386 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36387 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36388 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36389 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36391 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36392 : END DO
36393 : buffer1 = 0.0_dp
36394 : imax = 3*5*15
36395 : kmax = 1
36396 : DO i = 1, imax
36397 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
36398 : END DO
36399 : imax = 3*5*1
36400 : kmax = 15
36401 : i = 0
36402 : DO i1 = 1, 1
36403 : DO i2 = 1, 5
36404 : DO i3 = 1, 3
36405 : i = i + 1
36406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36408 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
36409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36411 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
36412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
36413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
36414 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
36415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36417 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36420 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
36421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36423 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
36424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
36425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
36426 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
36427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36429 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
36430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
36431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
36432 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
36433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36435 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
36436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36438 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
36439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36441 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
36442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36444 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
36445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36447 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
36448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36450 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
36451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36453 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
36454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
36455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
36456 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
36457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36459 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
36460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36462 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
36463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36465 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
36466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36468 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
36469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
36470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
36471 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
36472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36474 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
36475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36477 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
36478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36480 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
36481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36483 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
36484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36486 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
36487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36489 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
36490 : END DO
36491 : END DO
36492 : END DO
36493 : s_offset_d1 = s_offset_d1 + 9
36494 : END DO
36495 : s_offset_c1 = s_offset_c1 + 1
36496 : END DO
36497 : s_offset_b1 = s_offset_b1 + 5
36498 : END DO
36499 : s_offset_a1 = s_offset_a1 + 3
36500 : END DO
36501 : END SUBROUTINE contract_pdsg
36502 : #endif
36503 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
36504 : ! **************************************************************************************************
36505 : !> \brief ...
36506 : !> \param work ...
36507 : !> \param nl_a ...
36508 : !> \param nl_b ...
36509 : !> \param nl_c ...
36510 : !> \param nl_d ...
36511 : !> \param sphi_a ...
36512 : !> \param sphi_b ...
36513 : !> \param sphi_c ...
36514 : !> \param sphi_d ...
36515 : !> \param primitives ...
36516 : !> \param buffer1 ...
36517 : !> \param buffer2 ...
36518 : ! **************************************************************************************************
36519 682948 : SUBROUTINE contract_pdps(work, &
36520 : nl_a, nl_b, nl_c, nl_d, &
36521 682948 : sphi_a, sphi_b, sphi_c, sphi_d, &
36522 682948 : primitives, &
36523 : buffer1, buffer2)
36524 : REAL(dp), DIMENSION(3*6*3*1), INTENT(IN) :: work
36525 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36526 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36527 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36528 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
36529 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
36530 : REAL(dp), &
36531 : DIMENSION(3*nl_a, 5*nl_b, 3*nl_c, 1*nl_d) :: primitives
36532 : REAL(dp), DIMENSION(3*6*3*1) :: buffer1, buffer2
36533 :
36534 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36535 : kmax, s_offset_a1, s_offset_b1, &
36536 : s_offset_c1, s_offset_d1
36537 :
36538 682948 : s_offset_a1 = 0
36539 1590459 : DO ia = 1, nl_a
36540 : s_offset_b1 = 0
36541 1925743 : DO ib = 1, nl_b
36542 : s_offset_c1 = 0
36543 2497895 : DO ic = 1, nl_c
36544 : s_offset_d1 = 0
36545 4104001 : DO id = 1, nl_d
36546 2624338 : buffer1 = 0.0_dp
36547 2624338 : imax = 6*3*1
36548 2624338 : kmax = 3
36549 49862422 : DO i = 1, imax
36550 47238084 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36551 47238084 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36552 49862422 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36553 : END DO
36554 2624338 : buffer2 = 0.0_dp
36555 2624338 : imax = 3*3*1
36556 2624338 : kmax = 6
36557 26243380 : DO i = 1, imax
36558 23619042 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36559 23619042 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36560 23619042 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36561 23619042 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36562 23619042 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36563 23619042 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36564 23619042 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36565 26243380 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36566 : END DO
36567 2624338 : buffer1 = 0.0_dp
36568 2624338 : imax = 3*5*1
36569 2624338 : kmax = 3
36570 41989408 : DO i = 1, imax
36571 39365070 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
36572 39365070 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
36573 41989408 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
36574 : END DO
36575 10497352 : imax = 3*5*3
36576 10497352 : kmax = 1
36577 : i = 0
36578 10497352 : DO i1 = 1, 3
36579 49862422 : DO i2 = 1, 5
36580 165333294 : DO i3 = 1, 3
36581 118095210 : i = i + 1
36582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
36584 157460280 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
36585 : END DO
36586 : END DO
36587 : END DO
36588 4104001 : s_offset_d1 = s_offset_d1 + 1
36589 : END DO
36590 2497895 : s_offset_c1 = s_offset_c1 + 3
36591 : END DO
36592 1925743 : s_offset_b1 = s_offset_b1 + 5
36593 : END DO
36594 1590459 : s_offset_a1 = s_offset_a1 + 3
36595 : END DO
36596 682948 : END SUBROUTINE contract_pdps
36597 : #endif
36598 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
36599 : ! **************************************************************************************************
36600 : !> \brief ...
36601 : !> \param work ...
36602 : !> \param nl_a ...
36603 : !> \param nl_b ...
36604 : !> \param nl_c ...
36605 : !> \param nl_d ...
36606 : !> \param sphi_a ...
36607 : !> \param sphi_b ...
36608 : !> \param sphi_c ...
36609 : !> \param sphi_d ...
36610 : !> \param primitives ...
36611 : !> \param buffer1 ...
36612 : !> \param buffer2 ...
36613 : ! **************************************************************************************************
36614 850731 : SUBROUTINE contract_pdpp(work, &
36615 : nl_a, nl_b, nl_c, nl_d, &
36616 850731 : sphi_a, sphi_b, sphi_c, sphi_d, &
36617 850731 : primitives, &
36618 : buffer1, buffer2)
36619 : REAL(dp), DIMENSION(3*6*3*3), INTENT(IN) :: work
36620 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36621 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36622 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36623 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
36624 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
36625 : REAL(dp), &
36626 : DIMENSION(3*nl_a, 5*nl_b, 3*nl_c, 3*nl_d) :: primitives
36627 : REAL(dp), DIMENSION(3*6*3*3) :: buffer1, buffer2
36628 :
36629 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36630 : kmax, s_offset_a1, s_offset_b1, &
36631 : s_offset_c1, s_offset_d1
36632 :
36633 850731 : s_offset_a1 = 0
36634 2109958 : DO ia = 1, nl_a
36635 : s_offset_b1 = 0
36636 2615308 : DO ib = 1, nl_b
36637 : s_offset_c1 = 0
36638 3541871 : DO ic = 1, nl_c
36639 : s_offset_d1 = 0
36640 5911118 : DO id = 1, nl_d
36641 3725328 : buffer1 = 0.0_dp
36642 3725328 : imax = 6*3*3
36643 3725328 : kmax = 3
36644 204893040 : DO i = 1, imax
36645 201167712 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36646 201167712 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36647 204893040 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36648 : END DO
36649 3725328 : buffer2 = 0.0_dp
36650 3725328 : imax = 3*3*3
36651 3725328 : kmax = 6
36652 104309184 : DO i = 1, imax
36653 100583856 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36654 100583856 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36655 100583856 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36656 100583856 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36657 100583856 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36658 100583856 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36659 100583856 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36660 104309184 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36661 : END DO
36662 3725328 : buffer1 = 0.0_dp
36663 3725328 : imax = 3*5*3
36664 3725328 : kmax = 3
36665 171365088 : DO i = 1, imax
36666 167639760 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
36667 167639760 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
36668 171365088 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
36669 : END DO
36670 14901312 : imax = 3*5*3
36671 14901312 : kmax = 3
36672 : i = 0
36673 14901312 : DO i1 = 1, 3
36674 70781232 : DO i2 = 1, 5
36675 234695664 : DO i3 = 1, 3
36676 167639760 : i = i + 1
36677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
36679 167639760 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
36680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
36682 167639760 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
36685 223519680 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
36686 : END DO
36687 : END DO
36688 : END DO
36689 5911118 : s_offset_d1 = s_offset_d1 + 3
36690 : END DO
36691 3541871 : s_offset_c1 = s_offset_c1 + 3
36692 : END DO
36693 2615308 : s_offset_b1 = s_offset_b1 + 5
36694 : END DO
36695 2109958 : s_offset_a1 = s_offset_a1 + 3
36696 : END DO
36697 850731 : END SUBROUTINE contract_pdpp
36698 : #endif
36699 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
36700 : ! **************************************************************************************************
36701 : !> \brief ...
36702 : !> \param work ...
36703 : !> \param nl_a ...
36704 : !> \param nl_b ...
36705 : !> \param nl_c ...
36706 : !> \param nl_d ...
36707 : !> \param sphi_a ...
36708 : !> \param sphi_b ...
36709 : !> \param sphi_c ...
36710 : !> \param sphi_d ...
36711 : !> \param primitives ...
36712 : !> \param buffer1 ...
36713 : !> \param buffer2 ...
36714 : ! **************************************************************************************************
36715 267819 : SUBROUTINE contract_pdpd(work, &
36716 : nl_a, nl_b, nl_c, nl_d, &
36717 267819 : sphi_a, sphi_b, sphi_c, sphi_d, &
36718 267819 : primitives, &
36719 : buffer1, buffer2)
36720 : REAL(dp), DIMENSION(3*6*3*6), INTENT(IN) :: work
36721 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36722 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36723 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36724 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
36725 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
36726 : REAL(dp), &
36727 : DIMENSION(3*nl_a, 5*nl_b, 3*nl_c, 5*nl_d) :: primitives
36728 : REAL(dp), DIMENSION(3*6*3*6) :: buffer1, buffer2
36729 :
36730 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36731 : kmax, s_offset_a1, s_offset_b1, &
36732 : s_offset_c1, s_offset_d1
36733 :
36734 267819 : s_offset_a1 = 0
36735 611410 : DO ia = 1, nl_a
36736 : s_offset_b1 = 0
36737 757548 : DO ib = 1, nl_b
36738 : s_offset_c1 = 0
36739 989421 : DO ic = 1, nl_c
36740 : s_offset_d1 = 0
36741 1236022 : DO id = 1, nl_d
36742 660558 : buffer1 = 0.0_dp
36743 660558 : imax = 6*3*6
36744 660558 : kmax = 3
36745 72000822 : DO i = 1, imax
36746 71340264 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36747 71340264 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36748 72000822 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36749 : END DO
36750 660558 : buffer2 = 0.0_dp
36751 660558 : imax = 3*3*6
36752 660558 : kmax = 6
36753 36330690 : DO i = 1, imax
36754 35670132 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36755 35670132 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36756 35670132 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36757 35670132 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36758 35670132 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36759 35670132 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36760 35670132 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36761 36330690 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36762 : END DO
36763 660558 : buffer1 = 0.0_dp
36764 660558 : imax = 3*5*6
36765 660558 : kmax = 3
36766 60110778 : DO i = 1, imax
36767 59450220 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
36768 59450220 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
36769 60110778 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
36770 : END DO
36771 2642232 : imax = 3*5*3
36772 2642232 : kmax = 6
36773 : i = 0
36774 2642232 : DO i1 = 1, 3
36775 12550602 : DO i2 = 1, 5
36776 41615154 : DO i3 = 1, 3
36777 29725110 : i = i + 1
36778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36780 29725110 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
36781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36783 29725110 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
36784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36786 29725110 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36789 29725110 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
36790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36792 29725110 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
36793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36795 29725110 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
36796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36798 29725110 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
36799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36801 39633480 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
36802 : END DO
36803 : END DO
36804 : END DO
36805 1236022 : s_offset_d1 = s_offset_d1 + 5
36806 : END DO
36807 989421 : s_offset_c1 = s_offset_c1 + 3
36808 : END DO
36809 757548 : s_offset_b1 = s_offset_b1 + 5
36810 : END DO
36811 611410 : s_offset_a1 = s_offset_a1 + 3
36812 : END DO
36813 267819 : END SUBROUTINE contract_pdpd
36814 : #endif
36815 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
36816 : ! **************************************************************************************************
36817 : !> \brief ...
36818 : !> \param work ...
36819 : !> \param nl_a ...
36820 : !> \param nl_b ...
36821 : !> \param nl_c ...
36822 : !> \param nl_d ...
36823 : !> \param sphi_a ...
36824 : !> \param sphi_b ...
36825 : !> \param sphi_c ...
36826 : !> \param sphi_d ...
36827 : !> \param primitives ...
36828 : !> \param buffer1 ...
36829 : !> \param buffer2 ...
36830 : ! **************************************************************************************************
36831 : SUBROUTINE contract_pdpf(work, &
36832 : nl_a, nl_b, nl_c, nl_d, &
36833 : sphi_a, sphi_b, sphi_c, sphi_d, &
36834 : primitives, &
36835 : buffer1, buffer2)
36836 : REAL(dp), DIMENSION(3*6*3*10), INTENT(IN) :: work
36837 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36838 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36839 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36840 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
36841 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
36842 : REAL(dp), &
36843 : DIMENSION(3*nl_a, 5*nl_b, 3*nl_c, 7*nl_d) :: primitives
36844 : REAL(dp), DIMENSION(3*6*3*10) :: buffer1, buffer2
36845 :
36846 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36847 : kmax, s_offset_a1, s_offset_b1, &
36848 : s_offset_c1, s_offset_d1
36849 :
36850 : s_offset_a1 = 0
36851 : DO ia = 1, nl_a
36852 : s_offset_b1 = 0
36853 : DO ib = 1, nl_b
36854 : s_offset_c1 = 0
36855 : DO ic = 1, nl_c
36856 : s_offset_d1 = 0
36857 : DO id = 1, nl_d
36858 : buffer1 = 0.0_dp
36859 : imax = 6*3*10
36860 : kmax = 3
36861 : DO i = 1, imax
36862 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
36863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
36864 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
36865 : END DO
36866 : buffer2 = 0.0_dp
36867 : imax = 3*3*10
36868 : kmax = 6
36869 : DO i = 1, imax
36870 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
36871 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
36872 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
36873 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
36874 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
36875 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
36876 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
36877 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
36878 : END DO
36879 : buffer1 = 0.0_dp
36880 : imax = 3*5*10
36881 : kmax = 3
36882 : DO i = 1, imax
36883 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
36884 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
36885 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
36886 : END DO
36887 : imax = 3*5*3
36888 : kmax = 10
36889 : i = 0
36890 : DO i1 = 1, 3
36891 : DO i2 = 1, 5
36892 : DO i3 = 1, 3
36893 : i = i + 1
36894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36896 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
36897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36899 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
36900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36902 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
36903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36905 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
36906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36908 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
36909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36911 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
36912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36914 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
36915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
36916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
36917 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
36918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
36919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
36920 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
36921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
36922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
36923 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
36924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
36925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
36926 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
36927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36929 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
36930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36932 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
36933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
36934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
36935 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
36936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
36937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
36938 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
36939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
36940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
36941 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
36942 : END DO
36943 : END DO
36944 : END DO
36945 : s_offset_d1 = s_offset_d1 + 7
36946 : END DO
36947 : s_offset_c1 = s_offset_c1 + 3
36948 : END DO
36949 : s_offset_b1 = s_offset_b1 + 5
36950 : END DO
36951 : s_offset_a1 = s_offset_a1 + 3
36952 : END DO
36953 : END SUBROUTINE contract_pdpf
36954 : #endif
36955 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
36956 : ! **************************************************************************************************
36957 : !> \brief ...
36958 : !> \param work ...
36959 : !> \param nl_a ...
36960 : !> \param nl_b ...
36961 : !> \param nl_c ...
36962 : !> \param nl_d ...
36963 : !> \param sphi_a ...
36964 : !> \param sphi_b ...
36965 : !> \param sphi_c ...
36966 : !> \param sphi_d ...
36967 : !> \param primitives ...
36968 : !> \param buffer1 ...
36969 : !> \param buffer2 ...
36970 : ! **************************************************************************************************
36971 : SUBROUTINE contract_pdpg(work, &
36972 : nl_a, nl_b, nl_c, nl_d, &
36973 : sphi_a, sphi_b, sphi_c, sphi_d, &
36974 : primitives, &
36975 : buffer1, buffer2)
36976 : REAL(dp), DIMENSION(3*6*3*15), INTENT(IN) :: work
36977 : INTEGER :: nl_a, nl_b, nl_c, nl_d
36978 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
36979 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
36980 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
36981 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
36982 : REAL(dp), &
36983 : DIMENSION(3*nl_a, 5*nl_b, 3*nl_c, 9*nl_d) :: primitives
36984 : REAL(dp), DIMENSION(3*6*3*15) :: buffer1, buffer2
36985 :
36986 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
36987 : kmax, s_offset_a1, s_offset_b1, &
36988 : s_offset_c1, s_offset_d1
36989 :
36990 : s_offset_a1 = 0
36991 : DO ia = 1, nl_a
36992 : s_offset_b1 = 0
36993 : DO ib = 1, nl_b
36994 : s_offset_c1 = 0
36995 : DO ic = 1, nl_c
36996 : s_offset_d1 = 0
36997 : DO id = 1, nl_d
36998 : buffer1 = 0.0_dp
36999 : imax = 6*3*15
37000 : kmax = 3
37001 : DO i = 1, imax
37002 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37003 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37004 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37005 : END DO
37006 : buffer2 = 0.0_dp
37007 : imax = 3*3*15
37008 : kmax = 6
37009 : DO i = 1, imax
37010 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37011 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37012 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37013 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37014 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37015 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37016 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37017 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37018 : END DO
37019 : buffer1 = 0.0_dp
37020 : imax = 3*5*15
37021 : kmax = 3
37022 : DO i = 1, imax
37023 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37024 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37025 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
37026 : END DO
37027 : imax = 3*5*3
37028 : kmax = 15
37029 : i = 0
37030 : DO i1 = 1, 3
37031 : DO i2 = 1, 5
37032 : DO i3 = 1, 3
37033 : i = i + 1
37034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37036 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
37037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37039 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
37040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37042 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
37043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37045 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37048 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
37049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37051 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
37052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
37053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
37054 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
37055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37057 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
37058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37060 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
37061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37063 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
37064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37066 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
37067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37069 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
37070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37072 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
37073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37075 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
37076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37078 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
37079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37081 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
37082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
37083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
37084 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
37085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37087 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
37088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37090 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
37091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37093 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
37094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37096 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
37097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37099 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
37100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37102 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
37103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37105 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
37106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37108 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
37109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37111 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
37112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37114 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
37115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37117 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
37118 : END DO
37119 : END DO
37120 : END DO
37121 : s_offset_d1 = s_offset_d1 + 9
37122 : END DO
37123 : s_offset_c1 = s_offset_c1 + 3
37124 : END DO
37125 : s_offset_b1 = s_offset_b1 + 5
37126 : END DO
37127 : s_offset_a1 = s_offset_a1 + 3
37128 : END DO
37129 : END SUBROUTINE contract_pdpg
37130 : #endif
37131 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
37132 : ! **************************************************************************************************
37133 : !> \brief ...
37134 : !> \param work ...
37135 : !> \param nl_a ...
37136 : !> \param nl_b ...
37137 : !> \param nl_c ...
37138 : !> \param nl_d ...
37139 : !> \param sphi_a ...
37140 : !> \param sphi_b ...
37141 : !> \param sphi_c ...
37142 : !> \param sphi_d ...
37143 : !> \param primitives ...
37144 : !> \param buffer1 ...
37145 : !> \param buffer2 ...
37146 : ! **************************************************************************************************
37147 288531 : SUBROUTINE contract_pdds(work, &
37148 : nl_a, nl_b, nl_c, nl_d, &
37149 288531 : sphi_a, sphi_b, sphi_c, sphi_d, &
37150 288531 : primitives, &
37151 : buffer1, buffer2)
37152 : REAL(dp), DIMENSION(3*6*6*1), INTENT(IN) :: work
37153 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37154 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37155 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37156 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
37157 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
37158 : REAL(dp), &
37159 : DIMENSION(3*nl_a, 5*nl_b, 5*nl_c, 1*nl_d) :: primitives
37160 : REAL(dp), DIMENSION(3*6*6*1) :: buffer1, buffer2
37161 :
37162 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37163 : kmax, s_offset_a1, s_offset_b1, &
37164 : s_offset_c1, s_offset_d1
37165 :
37166 288531 : s_offset_a1 = 0
37167 689866 : DO ia = 1, nl_a
37168 : s_offset_b1 = 0
37169 849937 : DO ib = 1, nl_b
37170 : s_offset_c1 = 0
37171 925474 : DO ic = 1, nl_c
37172 : s_offset_d1 = 0
37173 1307355 : DO id = 1, nl_d
37174 830483 : buffer1 = 0.0_dp
37175 830483 : imax = 6*6*1
37176 830483 : kmax = 3
37177 30727871 : DO i = 1, imax
37178 29897388 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37179 29897388 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37180 30727871 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37181 : END DO
37182 830483 : buffer2 = 0.0_dp
37183 830483 : imax = 3*6*1
37184 830483 : kmax = 6
37185 15779177 : DO i = 1, imax
37186 14948694 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37187 14948694 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37188 14948694 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37189 14948694 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37190 14948694 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37191 14948694 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37192 14948694 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37193 15779177 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37194 : END DO
37195 830483 : buffer1 = 0.0_dp
37196 830483 : imax = 3*5*1
37197 830483 : kmax = 6
37198 13287728 : DO i = 1, imax
37199 12457245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37200 12457245 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37201 12457245 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37202 12457245 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37203 12457245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
37204 12457245 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37205 12457245 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37206 13287728 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
37207 : END DO
37208 4982898 : imax = 3*5*5
37209 4982898 : kmax = 1
37210 : i = 0
37211 4982898 : DO i1 = 1, 5
37212 25744973 : DO i2 = 1, 5
37213 87200715 : DO i3 = 1, 3
37214 62286225 : i = i + 1
37215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
37217 83048300 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
37218 : END DO
37219 : END DO
37220 : END DO
37221 1307355 : s_offset_d1 = s_offset_d1 + 1
37222 : END DO
37223 925474 : s_offset_c1 = s_offset_c1 + 5
37224 : END DO
37225 849937 : s_offset_b1 = s_offset_b1 + 5
37226 : END DO
37227 689866 : s_offset_a1 = s_offset_a1 + 3
37228 : END DO
37229 288531 : END SUBROUTINE contract_pdds
37230 : #endif
37231 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
37232 : ! **************************************************************************************************
37233 : !> \brief ...
37234 : !> \param work ...
37235 : !> \param nl_a ...
37236 : !> \param nl_b ...
37237 : !> \param nl_c ...
37238 : !> \param nl_d ...
37239 : !> \param sphi_a ...
37240 : !> \param sphi_b ...
37241 : !> \param sphi_c ...
37242 : !> \param sphi_d ...
37243 : !> \param primitives ...
37244 : !> \param buffer1 ...
37245 : !> \param buffer2 ...
37246 : ! **************************************************************************************************
37247 186884 : SUBROUTINE contract_pddp(work, &
37248 : nl_a, nl_b, nl_c, nl_d, &
37249 186884 : sphi_a, sphi_b, sphi_c, sphi_d, &
37250 186884 : primitives, &
37251 : buffer1, buffer2)
37252 : REAL(dp), DIMENSION(3*6*6*3), INTENT(IN) :: work
37253 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37254 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37255 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37256 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
37257 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
37258 : REAL(dp), &
37259 : DIMENSION(3*nl_a, 5*nl_b, 5*nl_c, 3*nl_d) :: primitives
37260 : REAL(dp), DIMENSION(3*6*6*3) :: buffer1, buffer2
37261 :
37262 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37263 : kmax, s_offset_a1, s_offset_b1, &
37264 : s_offset_c1, s_offset_d1
37265 :
37266 186884 : s_offset_a1 = 0
37267 436736 : DO ia = 1, nl_a
37268 : s_offset_b1 = 0
37269 540424 : DO ib = 1, nl_b
37270 : s_offset_c1 = 0
37271 604293 : DO ic = 1, nl_c
37272 : s_offset_d1 = 0
37273 739608 : DO id = 1, nl_d
37274 425887 : buffer1 = 0.0_dp
37275 425887 : imax = 6*6*3
37276 425887 : kmax = 3
37277 46421683 : DO i = 1, imax
37278 45995796 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37279 45995796 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37280 46421683 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37281 : END DO
37282 425887 : buffer2 = 0.0_dp
37283 425887 : imax = 3*6*3
37284 425887 : kmax = 6
37285 23423785 : DO i = 1, imax
37286 22997898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37287 22997898 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37288 22997898 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37289 22997898 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37290 22997898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37291 22997898 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37292 22997898 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37293 23423785 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37294 : END DO
37295 425887 : buffer1 = 0.0_dp
37296 425887 : imax = 3*5*3
37297 425887 : kmax = 6
37298 19590802 : DO i = 1, imax
37299 19164915 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37300 19164915 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37301 19164915 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37302 19164915 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37303 19164915 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
37304 19164915 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37305 19164915 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37306 19590802 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
37307 : END DO
37308 2555322 : imax = 3*5*5
37309 2555322 : kmax = 3
37310 : i = 0
37311 2555322 : DO i1 = 1, 5
37312 13202497 : DO i2 = 1, 5
37313 44718135 : DO i3 = 1, 3
37314 31941525 : i = i + 1
37315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
37317 31941525 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
37318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
37320 31941525 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
37323 42588700 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
37324 : END DO
37325 : END DO
37326 : END DO
37327 739608 : s_offset_d1 = s_offset_d1 + 3
37328 : END DO
37329 604293 : s_offset_c1 = s_offset_c1 + 5
37330 : END DO
37331 540424 : s_offset_b1 = s_offset_b1 + 5
37332 : END DO
37333 436736 : s_offset_a1 = s_offset_a1 + 3
37334 : END DO
37335 186884 : END SUBROUTINE contract_pddp
37336 : #endif
37337 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
37338 : ! **************************************************************************************************
37339 : !> \brief ...
37340 : !> \param work ...
37341 : !> \param nl_a ...
37342 : !> \param nl_b ...
37343 : !> \param nl_c ...
37344 : !> \param nl_d ...
37345 : !> \param sphi_a ...
37346 : !> \param sphi_b ...
37347 : !> \param sphi_c ...
37348 : !> \param sphi_d ...
37349 : !> \param primitives ...
37350 : !> \param buffer1 ...
37351 : !> \param buffer2 ...
37352 : ! **************************************************************************************************
37353 126838 : SUBROUTINE contract_pddd(work, &
37354 : nl_a, nl_b, nl_c, nl_d, &
37355 126838 : sphi_a, sphi_b, sphi_c, sphi_d, &
37356 126838 : primitives, &
37357 : buffer1, buffer2)
37358 : REAL(dp), DIMENSION(3*6*6*6), INTENT(IN) :: work
37359 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37360 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37361 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37362 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
37363 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
37364 : REAL(dp), &
37365 : DIMENSION(3*nl_a, 5*nl_b, 5*nl_c, 5*nl_d) :: primitives
37366 : REAL(dp), DIMENSION(3*6*6*6) :: buffer1, buffer2
37367 :
37368 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37369 : kmax, s_offset_a1, s_offset_b1, &
37370 : s_offset_c1, s_offset_d1
37371 :
37372 126838 : s_offset_a1 = 0
37373 292309 : DO ia = 1, nl_a
37374 : s_offset_b1 = 0
37375 366339 : DO ib = 1, nl_b
37376 : s_offset_c1 = 0
37377 420225 : DO ic = 1, nl_c
37378 : s_offset_d1 = 0
37379 483068 : DO id = 1, nl_d
37380 263711 : buffer1 = 0.0_dp
37381 263711 : imax = 6*6*6
37382 263711 : kmax = 3
37383 57225287 : DO i = 1, imax
37384 56961576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37385 56961576 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37386 57225287 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37387 : END DO
37388 263711 : buffer2 = 0.0_dp
37389 263711 : imax = 3*6*6
37390 263711 : kmax = 6
37391 28744499 : DO i = 1, imax
37392 28480788 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37393 28480788 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37394 28480788 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37395 28480788 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37396 28480788 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37397 28480788 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37398 28480788 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37399 28744499 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37400 : END DO
37401 263711 : buffer1 = 0.0_dp
37402 263711 : imax = 3*5*6
37403 263711 : kmax = 6
37404 23997701 : DO i = 1, imax
37405 23733990 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37406 23733990 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37407 23733990 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37408 23733990 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37409 23733990 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
37410 23733990 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37411 23733990 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37412 23997701 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
37413 : END DO
37414 1582266 : imax = 3*5*5
37415 1582266 : kmax = 6
37416 : i = 0
37417 1582266 : DO i1 = 1, 5
37418 8175041 : DO i2 = 1, 5
37419 27689655 : DO i3 = 1, 3
37420 19778325 : i = i + 1
37421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37423 19778325 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
37424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37426 19778325 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
37427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37429 19778325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37432 19778325 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
37433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37435 19778325 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
37436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37438 19778325 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
37439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37441 19778325 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
37442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37444 26371100 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
37445 : END DO
37446 : END DO
37447 : END DO
37448 483068 : s_offset_d1 = s_offset_d1 + 5
37449 : END DO
37450 420225 : s_offset_c1 = s_offset_c1 + 5
37451 : END DO
37452 366339 : s_offset_b1 = s_offset_b1 + 5
37453 : END DO
37454 292309 : s_offset_a1 = s_offset_a1 + 3
37455 : END DO
37456 126838 : END SUBROUTINE contract_pddd
37457 : #endif
37458 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
37459 : ! **************************************************************************************************
37460 : !> \brief ...
37461 : !> \param work ...
37462 : !> \param nl_a ...
37463 : !> \param nl_b ...
37464 : !> \param nl_c ...
37465 : !> \param nl_d ...
37466 : !> \param sphi_a ...
37467 : !> \param sphi_b ...
37468 : !> \param sphi_c ...
37469 : !> \param sphi_d ...
37470 : !> \param primitives ...
37471 : !> \param buffer1 ...
37472 : !> \param buffer2 ...
37473 : ! **************************************************************************************************
37474 : SUBROUTINE contract_pddf(work, &
37475 : nl_a, nl_b, nl_c, nl_d, &
37476 : sphi_a, sphi_b, sphi_c, sphi_d, &
37477 : primitives, &
37478 : buffer1, buffer2)
37479 : REAL(dp), DIMENSION(3*6*6*10), INTENT(IN) :: work
37480 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37481 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37482 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37483 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
37484 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
37485 : REAL(dp), &
37486 : DIMENSION(3*nl_a, 5*nl_b, 5*nl_c, 7*nl_d) :: primitives
37487 : REAL(dp), DIMENSION(3*6*6*10) :: buffer1, buffer2
37488 :
37489 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37490 : kmax, s_offset_a1, s_offset_b1, &
37491 : s_offset_c1, s_offset_d1
37492 :
37493 : s_offset_a1 = 0
37494 : DO ia = 1, nl_a
37495 : s_offset_b1 = 0
37496 : DO ib = 1, nl_b
37497 : s_offset_c1 = 0
37498 : DO ic = 1, nl_c
37499 : s_offset_d1 = 0
37500 : DO id = 1, nl_d
37501 : buffer1 = 0.0_dp
37502 : imax = 6*6*10
37503 : kmax = 3
37504 : DO i = 1, imax
37505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37506 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37507 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37508 : END DO
37509 : buffer2 = 0.0_dp
37510 : imax = 3*6*10
37511 : kmax = 6
37512 : DO i = 1, imax
37513 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37514 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37515 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37516 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37517 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37518 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37519 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37520 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37521 : END DO
37522 : buffer1 = 0.0_dp
37523 : imax = 3*5*10
37524 : kmax = 6
37525 : DO i = 1, imax
37526 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37527 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37528 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37529 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37530 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
37531 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37532 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37533 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
37534 : END DO
37535 : imax = 3*5*5
37536 : kmax = 10
37537 : i = 0
37538 : DO i1 = 1, 5
37539 : DO i2 = 1, 5
37540 : DO i3 = 1, 3
37541 : i = i + 1
37542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37544 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
37545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37547 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
37548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37550 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37553 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
37554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37556 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
37557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37559 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
37560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37562 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
37563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37565 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
37566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37568 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
37569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37571 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
37572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37574 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
37575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37577 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
37578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37580 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
37581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37583 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
37584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37586 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
37587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37589 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
37590 : END DO
37591 : END DO
37592 : END DO
37593 : s_offset_d1 = s_offset_d1 + 7
37594 : END DO
37595 : s_offset_c1 = s_offset_c1 + 5
37596 : END DO
37597 : s_offset_b1 = s_offset_b1 + 5
37598 : END DO
37599 : s_offset_a1 = s_offset_a1 + 3
37600 : END DO
37601 : END SUBROUTINE contract_pddf
37602 : #endif
37603 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
37604 : ! **************************************************************************************************
37605 : !> \brief ...
37606 : !> \param work ...
37607 : !> \param nl_a ...
37608 : !> \param nl_b ...
37609 : !> \param nl_c ...
37610 : !> \param nl_d ...
37611 : !> \param sphi_a ...
37612 : !> \param sphi_b ...
37613 : !> \param sphi_c ...
37614 : !> \param sphi_d ...
37615 : !> \param primitives ...
37616 : !> \param buffer1 ...
37617 : !> \param buffer2 ...
37618 : ! **************************************************************************************************
37619 : SUBROUTINE contract_pddg(work, &
37620 : nl_a, nl_b, nl_c, nl_d, &
37621 : sphi_a, sphi_b, sphi_c, sphi_d, &
37622 : primitives, &
37623 : buffer1, buffer2)
37624 : REAL(dp), DIMENSION(3*6*6*15), INTENT(IN) :: work
37625 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37626 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37627 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37628 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
37629 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
37630 : REAL(dp), &
37631 : DIMENSION(3*nl_a, 5*nl_b, 5*nl_c, 9*nl_d) :: primitives
37632 : REAL(dp), DIMENSION(3*6*6*15) :: buffer1, buffer2
37633 :
37634 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37635 : kmax, s_offset_a1, s_offset_b1, &
37636 : s_offset_c1, s_offset_d1
37637 :
37638 : s_offset_a1 = 0
37639 : DO ia = 1, nl_a
37640 : s_offset_b1 = 0
37641 : DO ib = 1, nl_b
37642 : s_offset_c1 = 0
37643 : DO ic = 1, nl_c
37644 : s_offset_d1 = 0
37645 : DO id = 1, nl_d
37646 : buffer1 = 0.0_dp
37647 : imax = 6*6*15
37648 : kmax = 3
37649 : DO i = 1, imax
37650 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37651 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37652 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37653 : END DO
37654 : buffer2 = 0.0_dp
37655 : imax = 3*6*15
37656 : kmax = 6
37657 : DO i = 1, imax
37658 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37659 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37660 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37661 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37662 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37663 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37664 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37665 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37666 : END DO
37667 : buffer1 = 0.0_dp
37668 : imax = 3*5*15
37669 : kmax = 6
37670 : DO i = 1, imax
37671 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
37672 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37673 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37674 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
37676 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37677 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
37679 : END DO
37680 : imax = 3*5*5
37681 : kmax = 15
37682 : i = 0
37683 : DO i1 = 1, 5
37684 : DO i2 = 1, 5
37685 : DO i3 = 1, 3
37686 : i = i + 1
37687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37689 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
37690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37692 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
37693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37695 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
37696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37698 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37701 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
37702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37704 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
37705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
37706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
37707 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
37708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37710 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
37711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37713 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
37714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37716 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
37717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37719 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
37720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37722 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
37723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37725 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
37726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
37728 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
37729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37731 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
37732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37734 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
37735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
37736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
37737 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
37738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
37740 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
37741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
37742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
37743 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
37744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37746 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
37747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37749 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
37750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
37751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
37752 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
37753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
37755 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
37756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37758 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
37759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37761 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
37762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
37763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
37764 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
37765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
37766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
37767 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
37768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
37769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
37770 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
37771 : END DO
37772 : END DO
37773 : END DO
37774 : s_offset_d1 = s_offset_d1 + 9
37775 : END DO
37776 : s_offset_c1 = s_offset_c1 + 5
37777 : END DO
37778 : s_offset_b1 = s_offset_b1 + 5
37779 : END DO
37780 : s_offset_a1 = s_offset_a1 + 3
37781 : END DO
37782 : END SUBROUTINE contract_pddg
37783 : #endif
37784 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
37785 : ! **************************************************************************************************
37786 : !> \brief ...
37787 : !> \param work ...
37788 : !> \param nl_a ...
37789 : !> \param nl_b ...
37790 : !> \param nl_c ...
37791 : !> \param nl_d ...
37792 : !> \param sphi_a ...
37793 : !> \param sphi_b ...
37794 : !> \param sphi_c ...
37795 : !> \param sphi_d ...
37796 : !> \param primitives ...
37797 : !> \param buffer1 ...
37798 : !> \param buffer2 ...
37799 : ! **************************************************************************************************
37800 : SUBROUTINE contract_pdfs(work, &
37801 : nl_a, nl_b, nl_c, nl_d, &
37802 : sphi_a, sphi_b, sphi_c, sphi_d, &
37803 : primitives, &
37804 : buffer1, buffer2)
37805 : REAL(dp), DIMENSION(3*6*10*1), INTENT(IN) :: work
37806 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37807 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37808 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37809 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
37810 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
37811 : REAL(dp), &
37812 : DIMENSION(3*nl_a, 5*nl_b, 7*nl_c, 1*nl_d) :: primitives
37813 : REAL(dp), DIMENSION(3*6*10*1) :: buffer1, buffer2
37814 :
37815 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37816 : kmax, s_offset_a1, s_offset_b1, &
37817 : s_offset_c1, s_offset_d1
37818 :
37819 : s_offset_a1 = 0
37820 : DO ia = 1, nl_a
37821 : s_offset_b1 = 0
37822 : DO ib = 1, nl_b
37823 : s_offset_c1 = 0
37824 : DO ic = 1, nl_c
37825 : s_offset_d1 = 0
37826 : DO id = 1, nl_d
37827 : buffer1 = 0.0_dp
37828 : imax = 6*10*1
37829 : kmax = 3
37830 : DO i = 1, imax
37831 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37832 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37833 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37834 : END DO
37835 : buffer2 = 0.0_dp
37836 : imax = 3*10*1
37837 : kmax = 6
37838 : DO i = 1, imax
37839 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37840 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37841 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37842 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37843 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37844 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37845 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37846 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37847 : END DO
37848 : buffer1 = 0.0_dp
37849 : imax = 3*5*1
37850 : kmax = 10
37851 : DO i = 1, imax
37852 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37853 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
37854 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37855 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
37856 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37857 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
37858 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37859 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
37860 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37861 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
37862 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
37863 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
37864 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
37865 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
37866 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
37867 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
37868 : END DO
37869 : imax = 3*5*7
37870 : kmax = 1
37871 : i = 0
37872 : DO i1 = 1, 7
37873 : DO i2 = 1, 5
37874 : DO i3 = 1, 3
37875 : i = i + 1
37876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
37878 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
37879 : END DO
37880 : END DO
37881 : END DO
37882 : s_offset_d1 = s_offset_d1 + 1
37883 : END DO
37884 : s_offset_c1 = s_offset_c1 + 7
37885 : END DO
37886 : s_offset_b1 = s_offset_b1 + 5
37887 : END DO
37888 : s_offset_a1 = s_offset_a1 + 3
37889 : END DO
37890 : END SUBROUTINE contract_pdfs
37891 : #endif
37892 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
37893 : ! **************************************************************************************************
37894 : !> \brief ...
37895 : !> \param work ...
37896 : !> \param nl_a ...
37897 : !> \param nl_b ...
37898 : !> \param nl_c ...
37899 : !> \param nl_d ...
37900 : !> \param sphi_a ...
37901 : !> \param sphi_b ...
37902 : !> \param sphi_c ...
37903 : !> \param sphi_d ...
37904 : !> \param primitives ...
37905 : !> \param buffer1 ...
37906 : !> \param buffer2 ...
37907 : ! **************************************************************************************************
37908 : SUBROUTINE contract_pdfp(work, &
37909 : nl_a, nl_b, nl_c, nl_d, &
37910 : sphi_a, sphi_b, sphi_c, sphi_d, &
37911 : primitives, &
37912 : buffer1, buffer2)
37913 : REAL(dp), DIMENSION(3*6*10*3), INTENT(IN) :: work
37914 : INTEGER :: nl_a, nl_b, nl_c, nl_d
37915 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
37916 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
37917 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
37918 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
37919 : REAL(dp), &
37920 : DIMENSION(3*nl_a, 5*nl_b, 7*nl_c, 3*nl_d) :: primitives
37921 : REAL(dp), DIMENSION(3*6*10*3) :: buffer1, buffer2
37922 :
37923 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
37924 : kmax, s_offset_a1, s_offset_b1, &
37925 : s_offset_c1, s_offset_d1
37926 :
37927 : s_offset_a1 = 0
37928 : DO ia = 1, nl_a
37929 : s_offset_b1 = 0
37930 : DO ib = 1, nl_b
37931 : s_offset_c1 = 0
37932 : DO ic = 1, nl_c
37933 : s_offset_d1 = 0
37934 : DO id = 1, nl_d
37935 : buffer1 = 0.0_dp
37936 : imax = 6*10*3
37937 : kmax = 3
37938 : DO i = 1, imax
37939 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
37940 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
37941 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
37942 : END DO
37943 : buffer2 = 0.0_dp
37944 : imax = 3*10*3
37945 : kmax = 6
37946 : DO i = 1, imax
37947 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
37948 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
37949 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
37950 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
37951 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
37952 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
37953 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
37954 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
37955 : END DO
37956 : buffer1 = 0.0_dp
37957 : imax = 3*5*3
37958 : kmax = 10
37959 : DO i = 1, imax
37960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
37961 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
37962 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
37963 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
37964 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
37965 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
37966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
37967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
37968 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
37969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
37970 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
37971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
37972 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
37973 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
37974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
37975 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
37976 : END DO
37977 : imax = 3*5*7
37978 : kmax = 3
37979 : i = 0
37980 : DO i1 = 1, 7
37981 : DO i2 = 1, 5
37982 : DO i3 = 1, 3
37983 : i = i + 1
37984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
37985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
37986 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
37987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
37988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
37989 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
37990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
37991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
37992 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
37993 : END DO
37994 : END DO
37995 : END DO
37996 : s_offset_d1 = s_offset_d1 + 3
37997 : END DO
37998 : s_offset_c1 = s_offset_c1 + 7
37999 : END DO
38000 : s_offset_b1 = s_offset_b1 + 5
38001 : END DO
38002 : s_offset_a1 = s_offset_a1 + 3
38003 : END DO
38004 : END SUBROUTINE contract_pdfp
38005 : #endif
38006 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
38007 : ! **************************************************************************************************
38008 : !> \brief ...
38009 : !> \param work ...
38010 : !> \param nl_a ...
38011 : !> \param nl_b ...
38012 : !> \param nl_c ...
38013 : !> \param nl_d ...
38014 : !> \param sphi_a ...
38015 : !> \param sphi_b ...
38016 : !> \param sphi_c ...
38017 : !> \param sphi_d ...
38018 : !> \param primitives ...
38019 : !> \param buffer1 ...
38020 : !> \param buffer2 ...
38021 : ! **************************************************************************************************
38022 : SUBROUTINE contract_pdfd(work, &
38023 : nl_a, nl_b, nl_c, nl_d, &
38024 : sphi_a, sphi_b, sphi_c, sphi_d, &
38025 : primitives, &
38026 : buffer1, buffer2)
38027 : REAL(dp), DIMENSION(3*6*10*6), INTENT(IN) :: work
38028 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38029 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38030 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38031 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
38032 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
38033 : REAL(dp), &
38034 : DIMENSION(3*nl_a, 5*nl_b, 7*nl_c, 5*nl_d) :: primitives
38035 : REAL(dp), DIMENSION(3*6*10*6) :: buffer1, buffer2
38036 :
38037 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38038 : kmax, s_offset_a1, s_offset_b1, &
38039 : s_offset_c1, s_offset_d1
38040 :
38041 : s_offset_a1 = 0
38042 : DO ia = 1, nl_a
38043 : s_offset_b1 = 0
38044 : DO ib = 1, nl_b
38045 : s_offset_c1 = 0
38046 : DO ic = 1, nl_c
38047 : s_offset_d1 = 0
38048 : DO id = 1, nl_d
38049 : buffer1 = 0.0_dp
38050 : imax = 6*10*6
38051 : kmax = 3
38052 : DO i = 1, imax
38053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38054 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38055 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38056 : END DO
38057 : buffer2 = 0.0_dp
38058 : imax = 3*10*6
38059 : kmax = 6
38060 : DO i = 1, imax
38061 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38062 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38063 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38064 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38065 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38066 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38067 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38068 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38069 : END DO
38070 : buffer1 = 0.0_dp
38071 : imax = 3*5*6
38072 : kmax = 10
38073 : DO i = 1, imax
38074 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38075 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38076 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38077 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38078 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
38079 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38080 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38081 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
38082 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38083 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38084 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38086 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
38087 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38088 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38089 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
38090 : END DO
38091 : imax = 3*5*7
38092 : kmax = 6
38093 : i = 0
38094 : DO i1 = 1, 7
38095 : DO i2 = 1, 5
38096 : DO i3 = 1, 3
38097 : i = i + 1
38098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38100 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
38101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38103 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
38104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38106 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38109 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
38110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38112 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
38113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38115 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
38116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38118 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
38119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38121 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
38122 : END DO
38123 : END DO
38124 : END DO
38125 : s_offset_d1 = s_offset_d1 + 5
38126 : END DO
38127 : s_offset_c1 = s_offset_c1 + 7
38128 : END DO
38129 : s_offset_b1 = s_offset_b1 + 5
38130 : END DO
38131 : s_offset_a1 = s_offset_a1 + 3
38132 : END DO
38133 : END SUBROUTINE contract_pdfd
38134 : #endif
38135 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
38136 : ! **************************************************************************************************
38137 : !> \brief ...
38138 : !> \param work ...
38139 : !> \param nl_a ...
38140 : !> \param nl_b ...
38141 : !> \param nl_c ...
38142 : !> \param nl_d ...
38143 : !> \param sphi_a ...
38144 : !> \param sphi_b ...
38145 : !> \param sphi_c ...
38146 : !> \param sphi_d ...
38147 : !> \param primitives ...
38148 : !> \param buffer1 ...
38149 : !> \param buffer2 ...
38150 : ! **************************************************************************************************
38151 : SUBROUTINE contract_pdff(work, &
38152 : nl_a, nl_b, nl_c, nl_d, &
38153 : sphi_a, sphi_b, sphi_c, sphi_d, &
38154 : primitives, &
38155 : buffer1, buffer2)
38156 : REAL(dp), DIMENSION(3*6*10*10), INTENT(IN) :: work
38157 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38158 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38159 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38160 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
38161 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
38162 : REAL(dp), &
38163 : DIMENSION(3*nl_a, 5*nl_b, 7*nl_c, 7*nl_d) :: primitives
38164 : REAL(dp), DIMENSION(3*6*10*10) :: buffer1, buffer2
38165 :
38166 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38167 : kmax, s_offset_a1, s_offset_b1, &
38168 : s_offset_c1, s_offset_d1
38169 :
38170 : s_offset_a1 = 0
38171 : DO ia = 1, nl_a
38172 : s_offset_b1 = 0
38173 : DO ib = 1, nl_b
38174 : s_offset_c1 = 0
38175 : DO ic = 1, nl_c
38176 : s_offset_d1 = 0
38177 : DO id = 1, nl_d
38178 : buffer1 = 0.0_dp
38179 : imax = 6*10*10
38180 : kmax = 3
38181 : DO i = 1, imax
38182 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38183 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38184 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38185 : END DO
38186 : buffer2 = 0.0_dp
38187 : imax = 3*10*10
38188 : kmax = 6
38189 : DO i = 1, imax
38190 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38191 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38192 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38193 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38194 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38195 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38196 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38197 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38198 : END DO
38199 : buffer1 = 0.0_dp
38200 : imax = 3*5*10
38201 : kmax = 10
38202 : DO i = 1, imax
38203 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38204 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38205 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38206 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38207 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
38208 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38209 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38210 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
38211 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38212 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38213 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38214 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38215 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
38216 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38217 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38218 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
38219 : END DO
38220 : imax = 3*5*7
38221 : kmax = 10
38222 : i = 0
38223 : DO i1 = 1, 7
38224 : DO i2 = 1, 5
38225 : DO i3 = 1, 3
38226 : i = i + 1
38227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38229 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
38230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38232 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
38233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38235 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38238 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
38239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38241 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
38242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38244 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
38245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38247 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
38248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38250 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
38251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38253 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
38254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38256 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
38257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38259 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
38260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38262 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
38263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38265 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
38266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38268 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
38269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38271 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
38272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38274 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
38275 : END DO
38276 : END DO
38277 : END DO
38278 : s_offset_d1 = s_offset_d1 + 7
38279 : END DO
38280 : s_offset_c1 = s_offset_c1 + 7
38281 : END DO
38282 : s_offset_b1 = s_offset_b1 + 5
38283 : END DO
38284 : s_offset_a1 = s_offset_a1 + 3
38285 : END DO
38286 : END SUBROUTINE contract_pdff
38287 : #endif
38288 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
38289 : ! **************************************************************************************************
38290 : !> \brief ...
38291 : !> \param work ...
38292 : !> \param nl_a ...
38293 : !> \param nl_b ...
38294 : !> \param nl_c ...
38295 : !> \param nl_d ...
38296 : !> \param sphi_a ...
38297 : !> \param sphi_b ...
38298 : !> \param sphi_c ...
38299 : !> \param sphi_d ...
38300 : !> \param primitives ...
38301 : !> \param buffer1 ...
38302 : !> \param buffer2 ...
38303 : ! **************************************************************************************************
38304 : SUBROUTINE contract_pdfg(work, &
38305 : nl_a, nl_b, nl_c, nl_d, &
38306 : sphi_a, sphi_b, sphi_c, sphi_d, &
38307 : primitives, &
38308 : buffer1, buffer2)
38309 : REAL(dp), DIMENSION(3*6*10*15), INTENT(IN) :: work
38310 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38311 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38312 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38313 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
38314 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
38315 : REAL(dp), &
38316 : DIMENSION(3*nl_a, 5*nl_b, 7*nl_c, 9*nl_d) :: primitives
38317 : REAL(dp), DIMENSION(3*6*10*15) :: buffer1, buffer2
38318 :
38319 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38320 : kmax, s_offset_a1, s_offset_b1, &
38321 : s_offset_c1, s_offset_d1
38322 :
38323 : s_offset_a1 = 0
38324 : DO ia = 1, nl_a
38325 : s_offset_b1 = 0
38326 : DO ib = 1, nl_b
38327 : s_offset_c1 = 0
38328 : DO ic = 1, nl_c
38329 : s_offset_d1 = 0
38330 : DO id = 1, nl_d
38331 : buffer1 = 0.0_dp
38332 : imax = 6*10*15
38333 : kmax = 3
38334 : DO i = 1, imax
38335 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38336 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38337 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38338 : END DO
38339 : buffer2 = 0.0_dp
38340 : imax = 3*10*15
38341 : kmax = 6
38342 : DO i = 1, imax
38343 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38344 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38345 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38346 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38347 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38348 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38349 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38350 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38351 : END DO
38352 : buffer1 = 0.0_dp
38353 : imax = 3*5*15
38354 : kmax = 10
38355 : DO i = 1, imax
38356 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38357 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38358 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38359 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38360 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
38361 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38363 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
38364 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38365 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38366 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38367 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38368 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
38369 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38371 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
38372 : END DO
38373 : imax = 3*5*7
38374 : kmax = 15
38375 : i = 0
38376 : DO i1 = 1, 7
38377 : DO i2 = 1, 5
38378 : DO i3 = 1, 3
38379 : i = i + 1
38380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38382 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
38383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38385 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
38386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
38387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
38388 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
38389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38391 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38394 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
38395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38397 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
38398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
38399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
38400 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
38401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38403 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
38404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
38405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
38406 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
38407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38409 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
38410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38412 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
38413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38415 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
38416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38418 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
38419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38421 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
38422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38424 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
38425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38427 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
38428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
38429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
38430 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
38431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38433 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
38434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38436 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
38437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38439 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
38440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38442 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
38443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
38444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
38445 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
38446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38448 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
38449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38451 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
38452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38454 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
38455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38457 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
38458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38460 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
38461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38463 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
38464 : END DO
38465 : END DO
38466 : END DO
38467 : s_offset_d1 = s_offset_d1 + 9
38468 : END DO
38469 : s_offset_c1 = s_offset_c1 + 7
38470 : END DO
38471 : s_offset_b1 = s_offset_b1 + 5
38472 : END DO
38473 : s_offset_a1 = s_offset_a1 + 3
38474 : END DO
38475 : END SUBROUTINE contract_pdfg
38476 : #endif
38477 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
38478 : ! **************************************************************************************************
38479 : !> \brief ...
38480 : !> \param work ...
38481 : !> \param nl_a ...
38482 : !> \param nl_b ...
38483 : !> \param nl_c ...
38484 : !> \param nl_d ...
38485 : !> \param sphi_a ...
38486 : !> \param sphi_b ...
38487 : !> \param sphi_c ...
38488 : !> \param sphi_d ...
38489 : !> \param primitives ...
38490 : !> \param buffer1 ...
38491 : !> \param buffer2 ...
38492 : ! **************************************************************************************************
38493 : SUBROUTINE contract_pdgs(work, &
38494 : nl_a, nl_b, nl_c, nl_d, &
38495 : sphi_a, sphi_b, sphi_c, sphi_d, &
38496 : primitives, &
38497 : buffer1, buffer2)
38498 : REAL(dp), DIMENSION(3*6*15*1), INTENT(IN) :: work
38499 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38500 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38501 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38502 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
38503 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
38504 : REAL(dp), &
38505 : DIMENSION(3*nl_a, 5*nl_b, 9*nl_c, 1*nl_d) :: primitives
38506 : REAL(dp), DIMENSION(3*6*15*1) :: buffer1, buffer2
38507 :
38508 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38509 : kmax, s_offset_a1, s_offset_b1, &
38510 : s_offset_c1, s_offset_d1
38511 :
38512 : s_offset_a1 = 0
38513 : DO ia = 1, nl_a
38514 : s_offset_b1 = 0
38515 : DO ib = 1, nl_b
38516 : s_offset_c1 = 0
38517 : DO ic = 1, nl_c
38518 : s_offset_d1 = 0
38519 : DO id = 1, nl_d
38520 : buffer1 = 0.0_dp
38521 : imax = 6*15*1
38522 : kmax = 3
38523 : DO i = 1, imax
38524 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38525 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38526 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38527 : END DO
38528 : buffer2 = 0.0_dp
38529 : imax = 3*15*1
38530 : kmax = 6
38531 : DO i = 1, imax
38532 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38533 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38534 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38535 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38536 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38537 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38538 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38539 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38540 : END DO
38541 : buffer1 = 0.0_dp
38542 : imax = 3*5*1
38543 : kmax = 15
38544 : DO i = 1, imax
38545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38546 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38547 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
38548 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38549 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38550 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38551 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
38552 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38553 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
38554 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38555 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
38556 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38557 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
38558 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38559 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38560 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38561 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
38562 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38563 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
38564 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
38565 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
38566 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
38567 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
38568 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
38569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
38570 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
38571 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
38572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
38573 : END DO
38574 : imax = 3*5*9
38575 : kmax = 1
38576 : i = 0
38577 : DO i1 = 1, 9
38578 : DO i2 = 1, 5
38579 : DO i3 = 1, 3
38580 : i = i + 1
38581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
38583 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
38584 : END DO
38585 : END DO
38586 : END DO
38587 : s_offset_d1 = s_offset_d1 + 1
38588 : END DO
38589 : s_offset_c1 = s_offset_c1 + 9
38590 : END DO
38591 : s_offset_b1 = s_offset_b1 + 5
38592 : END DO
38593 : s_offset_a1 = s_offset_a1 + 3
38594 : END DO
38595 : END SUBROUTINE contract_pdgs
38596 : #endif
38597 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
38598 : ! **************************************************************************************************
38599 : !> \brief ...
38600 : !> \param work ...
38601 : !> \param nl_a ...
38602 : !> \param nl_b ...
38603 : !> \param nl_c ...
38604 : !> \param nl_d ...
38605 : !> \param sphi_a ...
38606 : !> \param sphi_b ...
38607 : !> \param sphi_c ...
38608 : !> \param sphi_d ...
38609 : !> \param primitives ...
38610 : !> \param buffer1 ...
38611 : !> \param buffer2 ...
38612 : ! **************************************************************************************************
38613 : SUBROUTINE contract_pdgp(work, &
38614 : nl_a, nl_b, nl_c, nl_d, &
38615 : sphi_a, sphi_b, sphi_c, sphi_d, &
38616 : primitives, &
38617 : buffer1, buffer2)
38618 : REAL(dp), DIMENSION(3*6*15*3), INTENT(IN) :: work
38619 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38620 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38621 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38622 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
38623 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
38624 : REAL(dp), &
38625 : DIMENSION(3*nl_a, 5*nl_b, 9*nl_c, 3*nl_d) :: primitives
38626 : REAL(dp), DIMENSION(3*6*15*3) :: buffer1, buffer2
38627 :
38628 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38629 : kmax, s_offset_a1, s_offset_b1, &
38630 : s_offset_c1, s_offset_d1
38631 :
38632 : s_offset_a1 = 0
38633 : DO ia = 1, nl_a
38634 : s_offset_b1 = 0
38635 : DO ib = 1, nl_b
38636 : s_offset_c1 = 0
38637 : DO ic = 1, nl_c
38638 : s_offset_d1 = 0
38639 : DO id = 1, nl_d
38640 : buffer1 = 0.0_dp
38641 : imax = 6*15*3
38642 : kmax = 3
38643 : DO i = 1, imax
38644 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38645 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38646 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38647 : END DO
38648 : buffer2 = 0.0_dp
38649 : imax = 3*15*3
38650 : kmax = 6
38651 : DO i = 1, imax
38652 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38653 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38654 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38655 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38656 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38657 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38658 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38659 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38660 : END DO
38661 : buffer1 = 0.0_dp
38662 : imax = 3*5*3
38663 : kmax = 15
38664 : DO i = 1, imax
38665 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38666 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38667 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
38668 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38669 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38670 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38671 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
38672 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38673 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
38674 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38675 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
38676 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38677 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
38678 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38679 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38680 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38681 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
38682 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38683 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
38684 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
38685 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
38686 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
38687 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
38688 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
38689 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
38690 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
38691 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
38692 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
38693 : END DO
38694 : imax = 3*5*9
38695 : kmax = 3
38696 : i = 0
38697 : DO i1 = 1, 9
38698 : DO i2 = 1, 5
38699 : DO i3 = 1, 3
38700 : i = i + 1
38701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
38703 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
38704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
38706 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
38709 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
38710 : END DO
38711 : END DO
38712 : END DO
38713 : s_offset_d1 = s_offset_d1 + 3
38714 : END DO
38715 : s_offset_c1 = s_offset_c1 + 9
38716 : END DO
38717 : s_offset_b1 = s_offset_b1 + 5
38718 : END DO
38719 : s_offset_a1 = s_offset_a1 + 3
38720 : END DO
38721 : END SUBROUTINE contract_pdgp
38722 : #endif
38723 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
38724 : ! **************************************************************************************************
38725 : !> \brief ...
38726 : !> \param work ...
38727 : !> \param nl_a ...
38728 : !> \param nl_b ...
38729 : !> \param nl_c ...
38730 : !> \param nl_d ...
38731 : !> \param sphi_a ...
38732 : !> \param sphi_b ...
38733 : !> \param sphi_c ...
38734 : !> \param sphi_d ...
38735 : !> \param primitives ...
38736 : !> \param buffer1 ...
38737 : !> \param buffer2 ...
38738 : ! **************************************************************************************************
38739 : SUBROUTINE contract_pdgd(work, &
38740 : nl_a, nl_b, nl_c, nl_d, &
38741 : sphi_a, sphi_b, sphi_c, sphi_d, &
38742 : primitives, &
38743 : buffer1, buffer2)
38744 : REAL(dp), DIMENSION(3*6*15*6), INTENT(IN) :: work
38745 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38746 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38747 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38748 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
38749 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
38750 : REAL(dp), &
38751 : DIMENSION(3*nl_a, 5*nl_b, 9*nl_c, 5*nl_d) :: primitives
38752 : REAL(dp), DIMENSION(3*6*15*6) :: buffer1, buffer2
38753 :
38754 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38755 : kmax, s_offset_a1, s_offset_b1, &
38756 : s_offset_c1, s_offset_d1
38757 :
38758 : s_offset_a1 = 0
38759 : DO ia = 1, nl_a
38760 : s_offset_b1 = 0
38761 : DO ib = 1, nl_b
38762 : s_offset_c1 = 0
38763 : DO ic = 1, nl_c
38764 : s_offset_d1 = 0
38765 : DO id = 1, nl_d
38766 : buffer1 = 0.0_dp
38767 : imax = 6*15*6
38768 : kmax = 3
38769 : DO i = 1, imax
38770 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38771 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38772 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38773 : END DO
38774 : buffer2 = 0.0_dp
38775 : imax = 3*15*6
38776 : kmax = 6
38777 : DO i = 1, imax
38778 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38779 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38780 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38781 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38782 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38783 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38784 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38785 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38786 : END DO
38787 : buffer1 = 0.0_dp
38788 : imax = 3*5*6
38789 : kmax = 15
38790 : DO i = 1, imax
38791 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38792 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38793 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
38794 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38795 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38796 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38797 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
38798 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38799 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
38800 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38801 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
38802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38803 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
38804 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38805 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38806 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38807 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
38808 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38809 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
38810 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
38811 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
38812 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
38813 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
38814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
38815 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
38816 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
38817 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
38818 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
38819 : END DO
38820 : imax = 3*5*9
38821 : kmax = 6
38822 : i = 0
38823 : DO i1 = 1, 9
38824 : DO i2 = 1, 5
38825 : DO i3 = 1, 3
38826 : i = i + 1
38827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38829 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
38830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38832 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
38833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38835 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38838 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
38839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38841 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
38842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38844 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
38845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38847 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
38848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38850 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
38851 : END DO
38852 : END DO
38853 : END DO
38854 : s_offset_d1 = s_offset_d1 + 5
38855 : END DO
38856 : s_offset_c1 = s_offset_c1 + 9
38857 : END DO
38858 : s_offset_b1 = s_offset_b1 + 5
38859 : END DO
38860 : s_offset_a1 = s_offset_a1 + 3
38861 : END DO
38862 : END SUBROUTINE contract_pdgd
38863 : #endif
38864 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
38865 : ! **************************************************************************************************
38866 : !> \brief ...
38867 : !> \param work ...
38868 : !> \param nl_a ...
38869 : !> \param nl_b ...
38870 : !> \param nl_c ...
38871 : !> \param nl_d ...
38872 : !> \param sphi_a ...
38873 : !> \param sphi_b ...
38874 : !> \param sphi_c ...
38875 : !> \param sphi_d ...
38876 : !> \param primitives ...
38877 : !> \param buffer1 ...
38878 : !> \param buffer2 ...
38879 : ! **************************************************************************************************
38880 : SUBROUTINE contract_pdgf(work, &
38881 : nl_a, nl_b, nl_c, nl_d, &
38882 : sphi_a, sphi_b, sphi_c, sphi_d, &
38883 : primitives, &
38884 : buffer1, buffer2)
38885 : REAL(dp), DIMENSION(3*6*15*10), INTENT(IN) :: work
38886 : INTEGER :: nl_a, nl_b, nl_c, nl_d
38887 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
38888 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
38889 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
38890 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
38891 : REAL(dp), &
38892 : DIMENSION(3*nl_a, 5*nl_b, 9*nl_c, 7*nl_d) :: primitives
38893 : REAL(dp), DIMENSION(3*6*15*10) :: buffer1, buffer2
38894 :
38895 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
38896 : kmax, s_offset_a1, s_offset_b1, &
38897 : s_offset_c1, s_offset_d1
38898 :
38899 : s_offset_a1 = 0
38900 : DO ia = 1, nl_a
38901 : s_offset_b1 = 0
38902 : DO ib = 1, nl_b
38903 : s_offset_c1 = 0
38904 : DO ic = 1, nl_c
38905 : s_offset_d1 = 0
38906 : DO id = 1, nl_d
38907 : buffer1 = 0.0_dp
38908 : imax = 6*15*10
38909 : kmax = 3
38910 : DO i = 1, imax
38911 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
38912 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
38913 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
38914 : END DO
38915 : buffer2 = 0.0_dp
38916 : imax = 3*15*10
38917 : kmax = 6
38918 : DO i = 1, imax
38919 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
38920 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
38921 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
38922 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
38923 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
38924 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
38925 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
38926 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
38927 : END DO
38928 : buffer1 = 0.0_dp
38929 : imax = 3*5*10
38930 : kmax = 15
38931 : DO i = 1, imax
38932 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
38933 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
38934 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
38935 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
38936 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
38937 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
38938 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
38939 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
38940 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
38941 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
38942 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
38943 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
38944 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
38945 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
38946 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
38947 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
38948 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
38949 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
38950 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
38951 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
38952 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
38953 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
38954 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
38955 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
38956 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
38957 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
38958 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
38959 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
38960 : END DO
38961 : imax = 3*5*9
38962 : kmax = 10
38963 : i = 0
38964 : DO i1 = 1, 9
38965 : DO i2 = 1, 5
38966 : DO i3 = 1, 3
38967 : i = i + 1
38968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38970 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
38971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38973 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
38974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
38976 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
38977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
38978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
38979 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
38980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
38981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
38982 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
38983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
38984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
38985 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
38986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38988 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
38989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
38990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
38991 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
38992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
38993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
38994 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
38995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
38996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
38997 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
38998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
38999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39000 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
39001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39003 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
39004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39006 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
39007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39009 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
39010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39012 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
39013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39015 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
39016 : END DO
39017 : END DO
39018 : END DO
39019 : s_offset_d1 = s_offset_d1 + 7
39020 : END DO
39021 : s_offset_c1 = s_offset_c1 + 9
39022 : END DO
39023 : s_offset_b1 = s_offset_b1 + 5
39024 : END DO
39025 : s_offset_a1 = s_offset_a1 + 3
39026 : END DO
39027 : END SUBROUTINE contract_pdgf
39028 : #endif
39029 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
39030 : ! **************************************************************************************************
39031 : !> \brief ...
39032 : !> \param work ...
39033 : !> \param nl_a ...
39034 : !> \param nl_b ...
39035 : !> \param nl_c ...
39036 : !> \param nl_d ...
39037 : !> \param sphi_a ...
39038 : !> \param sphi_b ...
39039 : !> \param sphi_c ...
39040 : !> \param sphi_d ...
39041 : !> \param primitives ...
39042 : !> \param buffer1 ...
39043 : !> \param buffer2 ...
39044 : ! **************************************************************************************************
39045 : SUBROUTINE contract_pdgg(work, &
39046 : nl_a, nl_b, nl_c, nl_d, &
39047 : sphi_a, sphi_b, sphi_c, sphi_d, &
39048 : primitives, &
39049 : buffer1, buffer2)
39050 : REAL(dp), DIMENSION(3*6*15*15), INTENT(IN) :: work
39051 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39052 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39053 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
39054 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
39055 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
39056 : REAL(dp), &
39057 : DIMENSION(3*nl_a, 5*nl_b, 9*nl_c, 9*nl_d) :: primitives
39058 : REAL(dp), DIMENSION(3*6*15*15) :: buffer1, buffer2
39059 :
39060 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39061 : kmax, s_offset_a1, s_offset_b1, &
39062 : s_offset_c1, s_offset_d1
39063 :
39064 : s_offset_a1 = 0
39065 : DO ia = 1, nl_a
39066 : s_offset_b1 = 0
39067 : DO ib = 1, nl_b
39068 : s_offset_c1 = 0
39069 : DO ic = 1, nl_c
39070 : s_offset_d1 = 0
39071 : DO id = 1, nl_d
39072 : buffer1 = 0.0_dp
39073 : imax = 6*15*15
39074 : kmax = 3
39075 : DO i = 1, imax
39076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39077 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39078 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39079 : END DO
39080 : buffer2 = 0.0_dp
39081 : imax = 3*15*15
39082 : kmax = 6
39083 : DO i = 1, imax
39084 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
39085 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39086 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39087 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39088 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
39089 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39090 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39091 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
39092 : END DO
39093 : buffer1 = 0.0_dp
39094 : imax = 3*5*15
39095 : kmax = 15
39096 : DO i = 1, imax
39097 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
39098 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
39099 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
39100 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
39101 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
39102 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
39103 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
39104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
39105 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
39106 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
39107 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
39108 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
39109 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
39110 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
39111 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
39112 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
39113 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
39114 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
39115 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
39116 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
39117 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
39118 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
39119 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
39120 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
39121 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
39122 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
39123 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
39124 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
39125 : END DO
39126 : imax = 3*5*9
39127 : kmax = 15
39128 : i = 0
39129 : DO i1 = 1, 9
39130 : DO i2 = 1, 5
39131 : DO i3 = 1, 3
39132 : i = i + 1
39133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39135 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
39136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39138 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
39139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39141 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
39142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39144 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
39145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39147 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
39148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39150 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
39151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
39152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
39153 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
39154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39156 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
39157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39159 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
39160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39162 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
39163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39165 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
39166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39168 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
39169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39171 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
39172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39174 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
39175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39177 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
39178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39180 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
39181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
39182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
39183 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
39184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39186 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
39187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39189 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
39190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39192 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
39193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39195 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
39196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39198 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
39199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39201 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
39202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39204 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
39205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39207 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
39208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39210 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
39211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39213 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
39214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39216 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
39217 : END DO
39218 : END DO
39219 : END DO
39220 : s_offset_d1 = s_offset_d1 + 9
39221 : END DO
39222 : s_offset_c1 = s_offset_c1 + 9
39223 : END DO
39224 : s_offset_b1 = s_offset_b1 + 5
39225 : END DO
39226 : s_offset_a1 = s_offset_a1 + 3
39227 : END DO
39228 : END SUBROUTINE contract_pdgg
39229 : #endif
39230 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39231 : ! **************************************************************************************************
39232 : !> \brief ...
39233 : !> \param work ...
39234 : !> \param nl_a ...
39235 : !> \param nl_b ...
39236 : !> \param nl_c ...
39237 : !> \param nl_d ...
39238 : !> \param sphi_a ...
39239 : !> \param sphi_b ...
39240 : !> \param sphi_c ...
39241 : !> \param sphi_d ...
39242 : !> \param primitives ...
39243 : !> \param buffer1 ...
39244 : !> \param buffer2 ...
39245 : ! **************************************************************************************************
39246 : SUBROUTINE contract_pfss(work, &
39247 : nl_a, nl_b, nl_c, nl_d, &
39248 : sphi_a, sphi_b, sphi_c, sphi_d, &
39249 : primitives, &
39250 : buffer1, buffer2)
39251 : REAL(dp), DIMENSION(3*10*1*1), INTENT(IN) :: work
39252 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39253 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39254 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39255 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
39256 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
39257 : REAL(dp), &
39258 : DIMENSION(3*nl_a, 7*nl_b, 1*nl_c, 1*nl_d) :: primitives
39259 : REAL(dp), DIMENSION(3*10*1*1) :: buffer1, buffer2
39260 :
39261 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39262 : kmax, s_offset_a1, s_offset_b1, &
39263 : s_offset_c1, s_offset_d1
39264 :
39265 : s_offset_a1 = 0
39266 : DO ia = 1, nl_a
39267 : s_offset_b1 = 0
39268 : DO ib = 1, nl_b
39269 : s_offset_c1 = 0
39270 : DO ic = 1, nl_c
39271 : s_offset_d1 = 0
39272 : DO id = 1, nl_d
39273 : buffer1 = 0.0_dp
39274 : imax = 10*1*1
39275 : kmax = 3
39276 : DO i = 1, imax
39277 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39278 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39279 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39280 : END DO
39281 : buffer2 = 0.0_dp
39282 : imax = 3*1*1
39283 : kmax = 10
39284 : DO i = 1, imax
39285 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39286 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39287 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39288 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39289 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39290 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39291 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39292 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39293 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39294 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39295 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39296 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39297 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39298 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39299 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39300 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39301 : END DO
39302 : buffer1 = 0.0_dp
39303 : imax = 3*7*1
39304 : kmax = 1
39305 : DO i = 1, imax
39306 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
39307 : END DO
39308 : imax = 3*7*1
39309 : kmax = 1
39310 : i = 0
39311 : DO i1 = 1, 1
39312 : DO i2 = 1, 7
39313 : DO i3 = 1, 3
39314 : i = i + 1
39315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
39317 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
39318 : END DO
39319 : END DO
39320 : END DO
39321 : s_offset_d1 = s_offset_d1 + 1
39322 : END DO
39323 : s_offset_c1 = s_offset_c1 + 1
39324 : END DO
39325 : s_offset_b1 = s_offset_b1 + 7
39326 : END DO
39327 : s_offset_a1 = s_offset_a1 + 3
39328 : END DO
39329 : END SUBROUTINE contract_pfss
39330 : #endif
39331 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39332 : ! **************************************************************************************************
39333 : !> \brief ...
39334 : !> \param work ...
39335 : !> \param nl_a ...
39336 : !> \param nl_b ...
39337 : !> \param nl_c ...
39338 : !> \param nl_d ...
39339 : !> \param sphi_a ...
39340 : !> \param sphi_b ...
39341 : !> \param sphi_c ...
39342 : !> \param sphi_d ...
39343 : !> \param primitives ...
39344 : !> \param buffer1 ...
39345 : !> \param buffer2 ...
39346 : ! **************************************************************************************************
39347 : SUBROUTINE contract_pfsp(work, &
39348 : nl_a, nl_b, nl_c, nl_d, &
39349 : sphi_a, sphi_b, sphi_c, sphi_d, &
39350 : primitives, &
39351 : buffer1, buffer2)
39352 : REAL(dp), DIMENSION(3*10*1*3), INTENT(IN) :: work
39353 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39354 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39355 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39356 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
39357 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
39358 : REAL(dp), &
39359 : DIMENSION(3*nl_a, 7*nl_b, 1*nl_c, 3*nl_d) :: primitives
39360 : REAL(dp), DIMENSION(3*10*1*3) :: buffer1, buffer2
39361 :
39362 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39363 : kmax, s_offset_a1, s_offset_b1, &
39364 : s_offset_c1, s_offset_d1
39365 :
39366 : s_offset_a1 = 0
39367 : DO ia = 1, nl_a
39368 : s_offset_b1 = 0
39369 : DO ib = 1, nl_b
39370 : s_offset_c1 = 0
39371 : DO ic = 1, nl_c
39372 : s_offset_d1 = 0
39373 : DO id = 1, nl_d
39374 : buffer1 = 0.0_dp
39375 : imax = 10*1*3
39376 : kmax = 3
39377 : DO i = 1, imax
39378 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39379 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39380 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39381 : END DO
39382 : buffer2 = 0.0_dp
39383 : imax = 3*1*3
39384 : kmax = 10
39385 : DO i = 1, imax
39386 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39387 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39388 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39389 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39390 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39391 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39392 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39393 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39394 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39395 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39396 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39397 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39398 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39399 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39400 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39401 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39402 : END DO
39403 : buffer1 = 0.0_dp
39404 : imax = 3*7*3
39405 : kmax = 1
39406 : DO i = 1, imax
39407 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
39408 : END DO
39409 : imax = 3*7*1
39410 : kmax = 3
39411 : i = 0
39412 : DO i1 = 1, 1
39413 : DO i2 = 1, 7
39414 : DO i3 = 1, 3
39415 : i = i + 1
39416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
39418 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
39419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
39421 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
39422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
39424 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
39425 : END DO
39426 : END DO
39427 : END DO
39428 : s_offset_d1 = s_offset_d1 + 3
39429 : END DO
39430 : s_offset_c1 = s_offset_c1 + 1
39431 : END DO
39432 : s_offset_b1 = s_offset_b1 + 7
39433 : END DO
39434 : s_offset_a1 = s_offset_a1 + 3
39435 : END DO
39436 : END SUBROUTINE contract_pfsp
39437 : #endif
39438 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39439 : ! **************************************************************************************************
39440 : !> \brief ...
39441 : !> \param work ...
39442 : !> \param nl_a ...
39443 : !> \param nl_b ...
39444 : !> \param nl_c ...
39445 : !> \param nl_d ...
39446 : !> \param sphi_a ...
39447 : !> \param sphi_b ...
39448 : !> \param sphi_c ...
39449 : !> \param sphi_d ...
39450 : !> \param primitives ...
39451 : !> \param buffer1 ...
39452 : !> \param buffer2 ...
39453 : ! **************************************************************************************************
39454 : SUBROUTINE contract_pfsd(work, &
39455 : nl_a, nl_b, nl_c, nl_d, &
39456 : sphi_a, sphi_b, sphi_c, sphi_d, &
39457 : primitives, &
39458 : buffer1, buffer2)
39459 : REAL(dp), DIMENSION(3*10*1*6), INTENT(IN) :: work
39460 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39461 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39462 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39463 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
39464 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
39465 : REAL(dp), &
39466 : DIMENSION(3*nl_a, 7*nl_b, 1*nl_c, 5*nl_d) :: primitives
39467 : REAL(dp), DIMENSION(3*10*1*6) :: buffer1, buffer2
39468 :
39469 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39470 : kmax, s_offset_a1, s_offset_b1, &
39471 : s_offset_c1, s_offset_d1
39472 :
39473 : s_offset_a1 = 0
39474 : DO ia = 1, nl_a
39475 : s_offset_b1 = 0
39476 : DO ib = 1, nl_b
39477 : s_offset_c1 = 0
39478 : DO ic = 1, nl_c
39479 : s_offset_d1 = 0
39480 : DO id = 1, nl_d
39481 : buffer1 = 0.0_dp
39482 : imax = 10*1*6
39483 : kmax = 3
39484 : DO i = 1, imax
39485 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39486 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39487 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39488 : END DO
39489 : buffer2 = 0.0_dp
39490 : imax = 3*1*6
39491 : kmax = 10
39492 : DO i = 1, imax
39493 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39494 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39495 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39496 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39497 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39498 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39499 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39500 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39501 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39502 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39503 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39504 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39505 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39506 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39507 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39508 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39509 : END DO
39510 : buffer1 = 0.0_dp
39511 : imax = 3*7*6
39512 : kmax = 1
39513 : DO i = 1, imax
39514 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
39515 : END DO
39516 : imax = 3*7*1
39517 : kmax = 6
39518 : i = 0
39519 : DO i1 = 1, 1
39520 : DO i2 = 1, 7
39521 : DO i3 = 1, 3
39522 : i = i + 1
39523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39525 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
39526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39528 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
39529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39531 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
39532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39534 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
39535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39537 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
39538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39540 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
39541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39543 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
39544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39546 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
39547 : END DO
39548 : END DO
39549 : END DO
39550 : s_offset_d1 = s_offset_d1 + 5
39551 : END DO
39552 : s_offset_c1 = s_offset_c1 + 1
39553 : END DO
39554 : s_offset_b1 = s_offset_b1 + 7
39555 : END DO
39556 : s_offset_a1 = s_offset_a1 + 3
39557 : END DO
39558 : END SUBROUTINE contract_pfsd
39559 : #endif
39560 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39561 : ! **************************************************************************************************
39562 : !> \brief ...
39563 : !> \param work ...
39564 : !> \param nl_a ...
39565 : !> \param nl_b ...
39566 : !> \param nl_c ...
39567 : !> \param nl_d ...
39568 : !> \param sphi_a ...
39569 : !> \param sphi_b ...
39570 : !> \param sphi_c ...
39571 : !> \param sphi_d ...
39572 : !> \param primitives ...
39573 : !> \param buffer1 ...
39574 : !> \param buffer2 ...
39575 : ! **************************************************************************************************
39576 : SUBROUTINE contract_pfsf(work, &
39577 : nl_a, nl_b, nl_c, nl_d, &
39578 : sphi_a, sphi_b, sphi_c, sphi_d, &
39579 : primitives, &
39580 : buffer1, buffer2)
39581 : REAL(dp), DIMENSION(3*10*1*10), INTENT(IN) :: work
39582 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39583 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39584 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39585 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
39586 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
39587 : REAL(dp), &
39588 : DIMENSION(3*nl_a, 7*nl_b, 1*nl_c, 7*nl_d) :: primitives
39589 : REAL(dp), DIMENSION(3*10*1*10) :: buffer1, buffer2
39590 :
39591 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39592 : kmax, s_offset_a1, s_offset_b1, &
39593 : s_offset_c1, s_offset_d1
39594 :
39595 : s_offset_a1 = 0
39596 : DO ia = 1, nl_a
39597 : s_offset_b1 = 0
39598 : DO ib = 1, nl_b
39599 : s_offset_c1 = 0
39600 : DO ic = 1, nl_c
39601 : s_offset_d1 = 0
39602 : DO id = 1, nl_d
39603 : buffer1 = 0.0_dp
39604 : imax = 10*1*10
39605 : kmax = 3
39606 : DO i = 1, imax
39607 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39608 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39609 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39610 : END DO
39611 : buffer2 = 0.0_dp
39612 : imax = 3*1*10
39613 : kmax = 10
39614 : DO i = 1, imax
39615 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39616 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39617 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39618 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39619 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39620 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39621 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39622 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39623 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39624 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39625 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39626 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39627 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39628 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39629 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39630 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39631 : END DO
39632 : buffer1 = 0.0_dp
39633 : imax = 3*7*10
39634 : kmax = 1
39635 : DO i = 1, imax
39636 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
39637 : END DO
39638 : imax = 3*7*1
39639 : kmax = 10
39640 : i = 0
39641 : DO i1 = 1, 1
39642 : DO i2 = 1, 7
39643 : DO i3 = 1, 3
39644 : i = i + 1
39645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39647 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
39648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39650 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
39651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39653 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
39654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39656 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
39657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39659 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
39660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39662 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
39663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39665 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
39666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39668 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
39669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39671 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
39672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39674 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
39675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39677 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
39678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39680 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
39681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39683 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
39684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39686 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
39687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39689 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
39690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39692 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
39693 : END DO
39694 : END DO
39695 : END DO
39696 : s_offset_d1 = s_offset_d1 + 7
39697 : END DO
39698 : s_offset_c1 = s_offset_c1 + 1
39699 : END DO
39700 : s_offset_b1 = s_offset_b1 + 7
39701 : END DO
39702 : s_offset_a1 = s_offset_a1 + 3
39703 : END DO
39704 : END SUBROUTINE contract_pfsf
39705 : #endif
39706 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
39707 : ! **************************************************************************************************
39708 : !> \brief ...
39709 : !> \param work ...
39710 : !> \param nl_a ...
39711 : !> \param nl_b ...
39712 : !> \param nl_c ...
39713 : !> \param nl_d ...
39714 : !> \param sphi_a ...
39715 : !> \param sphi_b ...
39716 : !> \param sphi_c ...
39717 : !> \param sphi_d ...
39718 : !> \param primitives ...
39719 : !> \param buffer1 ...
39720 : !> \param buffer2 ...
39721 : ! **************************************************************************************************
39722 : SUBROUTINE contract_pfsg(work, &
39723 : nl_a, nl_b, nl_c, nl_d, &
39724 : sphi_a, sphi_b, sphi_c, sphi_d, &
39725 : primitives, &
39726 : buffer1, buffer2)
39727 : REAL(dp), DIMENSION(3*10*1*15), INTENT(IN) :: work
39728 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39729 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39730 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39731 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
39732 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
39733 : REAL(dp), &
39734 : DIMENSION(3*nl_a, 7*nl_b, 1*nl_c, 9*nl_d) :: primitives
39735 : REAL(dp), DIMENSION(3*10*1*15) :: buffer1, buffer2
39736 :
39737 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39738 : kmax, s_offset_a1, s_offset_b1, &
39739 : s_offset_c1, s_offset_d1
39740 :
39741 : s_offset_a1 = 0
39742 : DO ia = 1, nl_a
39743 : s_offset_b1 = 0
39744 : DO ib = 1, nl_b
39745 : s_offset_c1 = 0
39746 : DO ic = 1, nl_c
39747 : s_offset_d1 = 0
39748 : DO id = 1, nl_d
39749 : buffer1 = 0.0_dp
39750 : imax = 10*1*15
39751 : kmax = 3
39752 : DO i = 1, imax
39753 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39754 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39755 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39756 : END DO
39757 : buffer2 = 0.0_dp
39758 : imax = 3*1*15
39759 : kmax = 10
39760 : DO i = 1, imax
39761 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39762 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39763 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39764 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39765 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39766 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39767 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39768 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39769 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39770 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39771 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39772 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39773 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39774 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39775 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39776 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39777 : END DO
39778 : buffer1 = 0.0_dp
39779 : imax = 3*7*15
39780 : kmax = 1
39781 : DO i = 1, imax
39782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
39783 : END DO
39784 : imax = 3*7*1
39785 : kmax = 15
39786 : i = 0
39787 : DO i1 = 1, 1
39788 : DO i2 = 1, 7
39789 : DO i3 = 1, 3
39790 : i = i + 1
39791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39793 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
39794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39796 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
39797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39799 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
39800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39802 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
39803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39805 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
39806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39808 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
39809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
39810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
39811 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
39812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39814 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
39815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39817 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
39818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39820 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
39821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39823 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
39824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39826 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
39827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39829 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
39830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
39832 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
39833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39835 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
39836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39838 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
39839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
39840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
39841 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
39842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
39843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
39844 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
39845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
39846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
39847 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
39848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39850 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
39851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39853 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
39854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
39855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
39856 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
39857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
39858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
39859 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
39860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39862 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
39863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39865 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
39866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
39867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
39868 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
39869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
39870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
39871 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
39872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
39873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
39874 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
39875 : END DO
39876 : END DO
39877 : END DO
39878 : s_offset_d1 = s_offset_d1 + 9
39879 : END DO
39880 : s_offset_c1 = s_offset_c1 + 1
39881 : END DO
39882 : s_offset_b1 = s_offset_b1 + 7
39883 : END DO
39884 : s_offset_a1 = s_offset_a1 + 3
39885 : END DO
39886 : END SUBROUTINE contract_pfsg
39887 : #endif
39888 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39889 : ! **************************************************************************************************
39890 : !> \brief ...
39891 : !> \param work ...
39892 : !> \param nl_a ...
39893 : !> \param nl_b ...
39894 : !> \param nl_c ...
39895 : !> \param nl_d ...
39896 : !> \param sphi_a ...
39897 : !> \param sphi_b ...
39898 : !> \param sphi_c ...
39899 : !> \param sphi_d ...
39900 : !> \param primitives ...
39901 : !> \param buffer1 ...
39902 : !> \param buffer2 ...
39903 : ! **************************************************************************************************
39904 : SUBROUTINE contract_pfps(work, &
39905 : nl_a, nl_b, nl_c, nl_d, &
39906 : sphi_a, sphi_b, sphi_c, sphi_d, &
39907 : primitives, &
39908 : buffer1, buffer2)
39909 : REAL(dp), DIMENSION(3*10*3*1), INTENT(IN) :: work
39910 : INTEGER :: nl_a, nl_b, nl_c, nl_d
39911 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
39912 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
39913 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
39914 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
39915 : REAL(dp), &
39916 : DIMENSION(3*nl_a, 7*nl_b, 3*nl_c, 1*nl_d) :: primitives
39917 : REAL(dp), DIMENSION(3*10*3*1) :: buffer1, buffer2
39918 :
39919 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
39920 : kmax, s_offset_a1, s_offset_b1, &
39921 : s_offset_c1, s_offset_d1
39922 :
39923 : s_offset_a1 = 0
39924 : DO ia = 1, nl_a
39925 : s_offset_b1 = 0
39926 : DO ib = 1, nl_b
39927 : s_offset_c1 = 0
39928 : DO ic = 1, nl_c
39929 : s_offset_d1 = 0
39930 : DO id = 1, nl_d
39931 : buffer1 = 0.0_dp
39932 : imax = 10*3*1
39933 : kmax = 3
39934 : DO i = 1, imax
39935 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
39936 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
39937 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
39938 : END DO
39939 : buffer2 = 0.0_dp
39940 : imax = 3*3*1
39941 : kmax = 10
39942 : DO i = 1, imax
39943 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
39944 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
39945 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
39946 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
39947 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
39948 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
39949 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
39950 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
39951 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
39952 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
39953 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
39954 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
39955 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
39956 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
39957 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
39958 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
39959 : END DO
39960 : buffer1 = 0.0_dp
39961 : imax = 3*7*1
39962 : kmax = 3
39963 : DO i = 1, imax
39964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
39965 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
39966 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
39967 : END DO
39968 : imax = 3*7*3
39969 : kmax = 1
39970 : i = 0
39971 : DO i1 = 1, 3
39972 : DO i2 = 1, 7
39973 : DO i3 = 1, 3
39974 : i = i + 1
39975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
39976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
39977 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
39978 : END DO
39979 : END DO
39980 : END DO
39981 : s_offset_d1 = s_offset_d1 + 1
39982 : END DO
39983 : s_offset_c1 = s_offset_c1 + 3
39984 : END DO
39985 : s_offset_b1 = s_offset_b1 + 7
39986 : END DO
39987 : s_offset_a1 = s_offset_a1 + 3
39988 : END DO
39989 : END SUBROUTINE contract_pfps
39990 : #endif
39991 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
39992 : ! **************************************************************************************************
39993 : !> \brief ...
39994 : !> \param work ...
39995 : !> \param nl_a ...
39996 : !> \param nl_b ...
39997 : !> \param nl_c ...
39998 : !> \param nl_d ...
39999 : !> \param sphi_a ...
40000 : !> \param sphi_b ...
40001 : !> \param sphi_c ...
40002 : !> \param sphi_d ...
40003 : !> \param primitives ...
40004 : !> \param buffer1 ...
40005 : !> \param buffer2 ...
40006 : ! **************************************************************************************************
40007 : SUBROUTINE contract_pfpp(work, &
40008 : nl_a, nl_b, nl_c, nl_d, &
40009 : sphi_a, sphi_b, sphi_c, sphi_d, &
40010 : primitives, &
40011 : buffer1, buffer2)
40012 : REAL(dp), DIMENSION(3*10*3*3), INTENT(IN) :: work
40013 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40014 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40015 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40016 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
40017 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
40018 : REAL(dp), &
40019 : DIMENSION(3*nl_a, 7*nl_b, 3*nl_c, 3*nl_d) :: primitives
40020 : REAL(dp), DIMENSION(3*10*3*3) :: buffer1, buffer2
40021 :
40022 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40023 : kmax, s_offset_a1, s_offset_b1, &
40024 : s_offset_c1, s_offset_d1
40025 :
40026 : s_offset_a1 = 0
40027 : DO ia = 1, nl_a
40028 : s_offset_b1 = 0
40029 : DO ib = 1, nl_b
40030 : s_offset_c1 = 0
40031 : DO ic = 1, nl_c
40032 : s_offset_d1 = 0
40033 : DO id = 1, nl_d
40034 : buffer1 = 0.0_dp
40035 : imax = 10*3*3
40036 : kmax = 3
40037 : DO i = 1, imax
40038 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40039 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40040 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40041 : END DO
40042 : buffer2 = 0.0_dp
40043 : imax = 3*3*3
40044 : kmax = 10
40045 : DO i = 1, imax
40046 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40047 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40048 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40049 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40050 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40051 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40052 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40053 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40054 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40055 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40056 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40057 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40058 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40059 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40060 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40061 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40062 : END DO
40063 : buffer1 = 0.0_dp
40064 : imax = 3*7*3
40065 : kmax = 3
40066 : DO i = 1, imax
40067 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40068 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40069 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
40070 : END DO
40071 : imax = 3*7*3
40072 : kmax = 3
40073 : i = 0
40074 : DO i1 = 1, 3
40075 : DO i2 = 1, 7
40076 : DO i3 = 1, 3
40077 : i = i + 1
40078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
40080 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
40081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
40083 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
40086 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
40087 : END DO
40088 : END DO
40089 : END DO
40090 : s_offset_d1 = s_offset_d1 + 3
40091 : END DO
40092 : s_offset_c1 = s_offset_c1 + 3
40093 : END DO
40094 : s_offset_b1 = s_offset_b1 + 7
40095 : END DO
40096 : s_offset_a1 = s_offset_a1 + 3
40097 : END DO
40098 : END SUBROUTINE contract_pfpp
40099 : #endif
40100 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40101 : ! **************************************************************************************************
40102 : !> \brief ...
40103 : !> \param work ...
40104 : !> \param nl_a ...
40105 : !> \param nl_b ...
40106 : !> \param nl_c ...
40107 : !> \param nl_d ...
40108 : !> \param sphi_a ...
40109 : !> \param sphi_b ...
40110 : !> \param sphi_c ...
40111 : !> \param sphi_d ...
40112 : !> \param primitives ...
40113 : !> \param buffer1 ...
40114 : !> \param buffer2 ...
40115 : ! **************************************************************************************************
40116 : SUBROUTINE contract_pfpd(work, &
40117 : nl_a, nl_b, nl_c, nl_d, &
40118 : sphi_a, sphi_b, sphi_c, sphi_d, &
40119 : primitives, &
40120 : buffer1, buffer2)
40121 : REAL(dp), DIMENSION(3*10*3*6), INTENT(IN) :: work
40122 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40123 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40124 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40125 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
40126 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
40127 : REAL(dp), &
40128 : DIMENSION(3*nl_a, 7*nl_b, 3*nl_c, 5*nl_d) :: primitives
40129 : REAL(dp), DIMENSION(3*10*3*6) :: buffer1, buffer2
40130 :
40131 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40132 : kmax, s_offset_a1, s_offset_b1, &
40133 : s_offset_c1, s_offset_d1
40134 :
40135 : s_offset_a1 = 0
40136 : DO ia = 1, nl_a
40137 : s_offset_b1 = 0
40138 : DO ib = 1, nl_b
40139 : s_offset_c1 = 0
40140 : DO ic = 1, nl_c
40141 : s_offset_d1 = 0
40142 : DO id = 1, nl_d
40143 : buffer1 = 0.0_dp
40144 : imax = 10*3*6
40145 : kmax = 3
40146 : DO i = 1, imax
40147 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40148 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40149 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40150 : END DO
40151 : buffer2 = 0.0_dp
40152 : imax = 3*3*6
40153 : kmax = 10
40154 : DO i = 1, imax
40155 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40156 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40157 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40158 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40159 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40160 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40161 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40162 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40163 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40164 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40165 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40166 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40167 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40168 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40169 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40170 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40171 : END DO
40172 : buffer1 = 0.0_dp
40173 : imax = 3*7*6
40174 : kmax = 3
40175 : DO i = 1, imax
40176 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40177 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40178 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
40179 : END DO
40180 : imax = 3*7*3
40181 : kmax = 6
40182 : i = 0
40183 : DO i1 = 1, 3
40184 : DO i2 = 1, 7
40185 : DO i3 = 1, 3
40186 : i = i + 1
40187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40189 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
40190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40192 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
40193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40195 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40198 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
40199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40201 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
40202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40204 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
40205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
40207 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
40208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40210 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
40211 : END DO
40212 : END DO
40213 : END DO
40214 : s_offset_d1 = s_offset_d1 + 5
40215 : END DO
40216 : s_offset_c1 = s_offset_c1 + 3
40217 : END DO
40218 : s_offset_b1 = s_offset_b1 + 7
40219 : END DO
40220 : s_offset_a1 = s_offset_a1 + 3
40221 : END DO
40222 : END SUBROUTINE contract_pfpd
40223 : #endif
40224 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40225 : ! **************************************************************************************************
40226 : !> \brief ...
40227 : !> \param work ...
40228 : !> \param nl_a ...
40229 : !> \param nl_b ...
40230 : !> \param nl_c ...
40231 : !> \param nl_d ...
40232 : !> \param sphi_a ...
40233 : !> \param sphi_b ...
40234 : !> \param sphi_c ...
40235 : !> \param sphi_d ...
40236 : !> \param primitives ...
40237 : !> \param buffer1 ...
40238 : !> \param buffer2 ...
40239 : ! **************************************************************************************************
40240 : SUBROUTINE contract_pfpf(work, &
40241 : nl_a, nl_b, nl_c, nl_d, &
40242 : sphi_a, sphi_b, sphi_c, sphi_d, &
40243 : primitives, &
40244 : buffer1, buffer2)
40245 : REAL(dp), DIMENSION(3*10*3*10), INTENT(IN) :: work
40246 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40247 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40248 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40249 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
40250 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
40251 : REAL(dp), &
40252 : DIMENSION(3*nl_a, 7*nl_b, 3*nl_c, 7*nl_d) :: primitives
40253 : REAL(dp), DIMENSION(3*10*3*10) :: buffer1, buffer2
40254 :
40255 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40256 : kmax, s_offset_a1, s_offset_b1, &
40257 : s_offset_c1, s_offset_d1
40258 :
40259 : s_offset_a1 = 0
40260 : DO ia = 1, nl_a
40261 : s_offset_b1 = 0
40262 : DO ib = 1, nl_b
40263 : s_offset_c1 = 0
40264 : DO ic = 1, nl_c
40265 : s_offset_d1 = 0
40266 : DO id = 1, nl_d
40267 : buffer1 = 0.0_dp
40268 : imax = 10*3*10
40269 : kmax = 3
40270 : DO i = 1, imax
40271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40272 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40273 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40274 : END DO
40275 : buffer2 = 0.0_dp
40276 : imax = 3*3*10
40277 : kmax = 10
40278 : DO i = 1, imax
40279 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40280 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40281 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40282 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40283 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40284 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40285 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40286 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40287 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40288 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40289 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40290 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40291 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40292 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40293 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40294 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40295 : END DO
40296 : buffer1 = 0.0_dp
40297 : imax = 3*7*10
40298 : kmax = 3
40299 : DO i = 1, imax
40300 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40301 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40302 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
40303 : END DO
40304 : imax = 3*7*3
40305 : kmax = 10
40306 : i = 0
40307 : DO i1 = 1, 3
40308 : DO i2 = 1, 7
40309 : DO i3 = 1, 3
40310 : i = i + 1
40311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40313 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
40314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40316 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
40317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40319 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40322 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
40323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40325 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
40326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
40327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
40328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
40329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40331 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
40332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
40335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
40337 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
40338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40340 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
40341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40343 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
40344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40346 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
40347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40349 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
40350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
40351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
40352 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
40353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40355 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
40356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40358 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
40359 : END DO
40360 : END DO
40361 : END DO
40362 : s_offset_d1 = s_offset_d1 + 7
40363 : END DO
40364 : s_offset_c1 = s_offset_c1 + 3
40365 : END DO
40366 : s_offset_b1 = s_offset_b1 + 7
40367 : END DO
40368 : s_offset_a1 = s_offset_a1 + 3
40369 : END DO
40370 : END SUBROUTINE contract_pfpf
40371 : #endif
40372 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
40373 : ! **************************************************************************************************
40374 : !> \brief ...
40375 : !> \param work ...
40376 : !> \param nl_a ...
40377 : !> \param nl_b ...
40378 : !> \param nl_c ...
40379 : !> \param nl_d ...
40380 : !> \param sphi_a ...
40381 : !> \param sphi_b ...
40382 : !> \param sphi_c ...
40383 : !> \param sphi_d ...
40384 : !> \param primitives ...
40385 : !> \param buffer1 ...
40386 : !> \param buffer2 ...
40387 : ! **************************************************************************************************
40388 : SUBROUTINE contract_pfpg(work, &
40389 : nl_a, nl_b, nl_c, nl_d, &
40390 : sphi_a, sphi_b, sphi_c, sphi_d, &
40391 : primitives, &
40392 : buffer1, buffer2)
40393 : REAL(dp), DIMENSION(3*10*3*15), INTENT(IN) :: work
40394 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40395 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40396 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40397 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
40398 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
40399 : REAL(dp), &
40400 : DIMENSION(3*nl_a, 7*nl_b, 3*nl_c, 9*nl_d) :: primitives
40401 : REAL(dp), DIMENSION(3*10*3*15) :: buffer1, buffer2
40402 :
40403 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40404 : kmax, s_offset_a1, s_offset_b1, &
40405 : s_offset_c1, s_offset_d1
40406 :
40407 : s_offset_a1 = 0
40408 : DO ia = 1, nl_a
40409 : s_offset_b1 = 0
40410 : DO ib = 1, nl_b
40411 : s_offset_c1 = 0
40412 : DO ic = 1, nl_c
40413 : s_offset_d1 = 0
40414 : DO id = 1, nl_d
40415 : buffer1 = 0.0_dp
40416 : imax = 10*3*15
40417 : kmax = 3
40418 : DO i = 1, imax
40419 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40420 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40421 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40422 : END DO
40423 : buffer2 = 0.0_dp
40424 : imax = 3*3*15
40425 : kmax = 10
40426 : DO i = 1, imax
40427 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40428 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40429 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40430 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40431 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40432 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40433 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40434 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40435 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40436 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40437 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40438 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40439 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40440 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40441 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40442 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40443 : END DO
40444 : buffer1 = 0.0_dp
40445 : imax = 3*7*15
40446 : kmax = 3
40447 : DO i = 1, imax
40448 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40449 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40450 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
40451 : END DO
40452 : imax = 3*7*3
40453 : kmax = 15
40454 : i = 0
40455 : DO i1 = 1, 3
40456 : DO i2 = 1, 7
40457 : DO i3 = 1, 3
40458 : i = i + 1
40459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40461 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
40462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40464 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
40465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
40466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
40467 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
40468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40470 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40473 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
40474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
40475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
40476 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
40477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
40478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
40479 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
40480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40482 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
40483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
40484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
40485 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
40486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
40488 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
40489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40491 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
40492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40494 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
40495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40497 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
40498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40500 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
40501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40503 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
40504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
40505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
40506 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
40507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
40508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
40509 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
40510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40512 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
40513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
40514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
40515 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
40516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40518 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
40519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40521 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
40522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
40523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
40524 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
40525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
40527 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
40528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40530 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
40531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40533 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
40534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
40535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
40536 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
40537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40539 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
40540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40542 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
40543 : END DO
40544 : END DO
40545 : END DO
40546 : s_offset_d1 = s_offset_d1 + 9
40547 : END DO
40548 : s_offset_c1 = s_offset_c1 + 3
40549 : END DO
40550 : s_offset_b1 = s_offset_b1 + 7
40551 : END DO
40552 : s_offset_a1 = s_offset_a1 + 3
40553 : END DO
40554 : END SUBROUTINE contract_pfpg
40555 : #endif
40556 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40557 : ! **************************************************************************************************
40558 : !> \brief ...
40559 : !> \param work ...
40560 : !> \param nl_a ...
40561 : !> \param nl_b ...
40562 : !> \param nl_c ...
40563 : !> \param nl_d ...
40564 : !> \param sphi_a ...
40565 : !> \param sphi_b ...
40566 : !> \param sphi_c ...
40567 : !> \param sphi_d ...
40568 : !> \param primitives ...
40569 : !> \param buffer1 ...
40570 : !> \param buffer2 ...
40571 : ! **************************************************************************************************
40572 : SUBROUTINE contract_pfds(work, &
40573 : nl_a, nl_b, nl_c, nl_d, &
40574 : sphi_a, sphi_b, sphi_c, sphi_d, &
40575 : primitives, &
40576 : buffer1, buffer2)
40577 : REAL(dp), DIMENSION(3*10*6*1), INTENT(IN) :: work
40578 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40579 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40580 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40581 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
40582 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
40583 : REAL(dp), &
40584 : DIMENSION(3*nl_a, 7*nl_b, 5*nl_c, 1*nl_d) :: primitives
40585 : REAL(dp), DIMENSION(3*10*6*1) :: buffer1, buffer2
40586 :
40587 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40588 : kmax, s_offset_a1, s_offset_b1, &
40589 : s_offset_c1, s_offset_d1
40590 :
40591 : s_offset_a1 = 0
40592 : DO ia = 1, nl_a
40593 : s_offset_b1 = 0
40594 : DO ib = 1, nl_b
40595 : s_offset_c1 = 0
40596 : DO ic = 1, nl_c
40597 : s_offset_d1 = 0
40598 : DO id = 1, nl_d
40599 : buffer1 = 0.0_dp
40600 : imax = 10*6*1
40601 : kmax = 3
40602 : DO i = 1, imax
40603 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40604 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40605 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40606 : END DO
40607 : buffer2 = 0.0_dp
40608 : imax = 3*6*1
40609 : kmax = 10
40610 : DO i = 1, imax
40611 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40612 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40613 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40614 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40615 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40616 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40617 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40618 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40619 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40620 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40621 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40622 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40623 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40624 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40625 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40626 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40627 : END DO
40628 : buffer1 = 0.0_dp
40629 : imax = 3*7*1
40630 : kmax = 6
40631 : DO i = 1, imax
40632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40633 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
40634 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40635 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
40636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
40637 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
40638 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
40639 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
40640 : END DO
40641 : imax = 3*7*5
40642 : kmax = 1
40643 : i = 0
40644 : DO i1 = 1, 5
40645 : DO i2 = 1, 7
40646 : DO i3 = 1, 3
40647 : i = i + 1
40648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
40650 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
40651 : END DO
40652 : END DO
40653 : END DO
40654 : s_offset_d1 = s_offset_d1 + 1
40655 : END DO
40656 : s_offset_c1 = s_offset_c1 + 5
40657 : END DO
40658 : s_offset_b1 = s_offset_b1 + 7
40659 : END DO
40660 : s_offset_a1 = s_offset_a1 + 3
40661 : END DO
40662 : END SUBROUTINE contract_pfds
40663 : #endif
40664 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40665 : ! **************************************************************************************************
40666 : !> \brief ...
40667 : !> \param work ...
40668 : !> \param nl_a ...
40669 : !> \param nl_b ...
40670 : !> \param nl_c ...
40671 : !> \param nl_d ...
40672 : !> \param sphi_a ...
40673 : !> \param sphi_b ...
40674 : !> \param sphi_c ...
40675 : !> \param sphi_d ...
40676 : !> \param primitives ...
40677 : !> \param buffer1 ...
40678 : !> \param buffer2 ...
40679 : ! **************************************************************************************************
40680 : SUBROUTINE contract_pfdp(work, &
40681 : nl_a, nl_b, nl_c, nl_d, &
40682 : sphi_a, sphi_b, sphi_c, sphi_d, &
40683 : primitives, &
40684 : buffer1, buffer2)
40685 : REAL(dp), DIMENSION(3*10*6*3), INTENT(IN) :: work
40686 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40687 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40688 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40689 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
40690 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
40691 : REAL(dp), &
40692 : DIMENSION(3*nl_a, 7*nl_b, 5*nl_c, 3*nl_d) :: primitives
40693 : REAL(dp), DIMENSION(3*10*6*3) :: buffer1, buffer2
40694 :
40695 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40696 : kmax, s_offset_a1, s_offset_b1, &
40697 : s_offset_c1, s_offset_d1
40698 :
40699 : s_offset_a1 = 0
40700 : DO ia = 1, nl_a
40701 : s_offset_b1 = 0
40702 : DO ib = 1, nl_b
40703 : s_offset_c1 = 0
40704 : DO ic = 1, nl_c
40705 : s_offset_d1 = 0
40706 : DO id = 1, nl_d
40707 : buffer1 = 0.0_dp
40708 : imax = 10*6*3
40709 : kmax = 3
40710 : DO i = 1, imax
40711 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40712 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40713 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40714 : END DO
40715 : buffer2 = 0.0_dp
40716 : imax = 3*6*3
40717 : kmax = 10
40718 : DO i = 1, imax
40719 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40720 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40721 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40722 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40723 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40724 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40725 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40726 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40727 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40728 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40729 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40730 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40731 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40732 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40733 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40734 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40735 : END DO
40736 : buffer1 = 0.0_dp
40737 : imax = 3*7*3
40738 : kmax = 6
40739 : DO i = 1, imax
40740 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
40742 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40743 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
40744 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
40745 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
40746 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
40747 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
40748 : END DO
40749 : imax = 3*7*5
40750 : kmax = 3
40751 : i = 0
40752 : DO i1 = 1, 5
40753 : DO i2 = 1, 7
40754 : DO i3 = 1, 3
40755 : i = i + 1
40756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
40758 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
40759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
40761 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
40764 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
40765 : END DO
40766 : END DO
40767 : END DO
40768 : s_offset_d1 = s_offset_d1 + 3
40769 : END DO
40770 : s_offset_c1 = s_offset_c1 + 5
40771 : END DO
40772 : s_offset_b1 = s_offset_b1 + 7
40773 : END DO
40774 : s_offset_a1 = s_offset_a1 + 3
40775 : END DO
40776 : END SUBROUTINE contract_pfdp
40777 : #endif
40778 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40779 : ! **************************************************************************************************
40780 : !> \brief ...
40781 : !> \param work ...
40782 : !> \param nl_a ...
40783 : !> \param nl_b ...
40784 : !> \param nl_c ...
40785 : !> \param nl_d ...
40786 : !> \param sphi_a ...
40787 : !> \param sphi_b ...
40788 : !> \param sphi_c ...
40789 : !> \param sphi_d ...
40790 : !> \param primitives ...
40791 : !> \param buffer1 ...
40792 : !> \param buffer2 ...
40793 : ! **************************************************************************************************
40794 : SUBROUTINE contract_pfdd(work, &
40795 : nl_a, nl_b, nl_c, nl_d, &
40796 : sphi_a, sphi_b, sphi_c, sphi_d, &
40797 : primitives, &
40798 : buffer1, buffer2)
40799 : REAL(dp), DIMENSION(3*10*6*6), INTENT(IN) :: work
40800 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40801 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40802 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40803 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
40804 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
40805 : REAL(dp), &
40806 : DIMENSION(3*nl_a, 7*nl_b, 5*nl_c, 5*nl_d) :: primitives
40807 : REAL(dp), DIMENSION(3*10*6*6) :: buffer1, buffer2
40808 :
40809 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40810 : kmax, s_offset_a1, s_offset_b1, &
40811 : s_offset_c1, s_offset_d1
40812 :
40813 : s_offset_a1 = 0
40814 : DO ia = 1, nl_a
40815 : s_offset_b1 = 0
40816 : DO ib = 1, nl_b
40817 : s_offset_c1 = 0
40818 : DO ic = 1, nl_c
40819 : s_offset_d1 = 0
40820 : DO id = 1, nl_d
40821 : buffer1 = 0.0_dp
40822 : imax = 10*6*6
40823 : kmax = 3
40824 : DO i = 1, imax
40825 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40826 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40827 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40828 : END DO
40829 : buffer2 = 0.0_dp
40830 : imax = 3*6*6
40831 : kmax = 10
40832 : DO i = 1, imax
40833 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40834 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40835 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40836 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40837 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40838 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40839 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40840 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40841 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40842 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40843 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40844 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40845 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40846 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40847 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40848 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40849 : END DO
40850 : buffer1 = 0.0_dp
40851 : imax = 3*7*6
40852 : kmax = 6
40853 : DO i = 1, imax
40854 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40855 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
40856 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40857 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
40858 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
40859 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
40860 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
40861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
40862 : END DO
40863 : imax = 3*7*5
40864 : kmax = 6
40865 : i = 0
40866 : DO i1 = 1, 5
40867 : DO i2 = 1, 7
40868 : DO i3 = 1, 3
40869 : i = i + 1
40870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40872 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
40873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40875 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
40876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
40877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
40878 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
40879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
40880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
40881 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
40882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40884 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
40885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
40886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
40887 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
40888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
40889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
40890 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
40891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
40892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
40893 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
40894 : END DO
40895 : END DO
40896 : END DO
40897 : s_offset_d1 = s_offset_d1 + 5
40898 : END DO
40899 : s_offset_c1 = s_offset_c1 + 5
40900 : END DO
40901 : s_offset_b1 = s_offset_b1 + 7
40902 : END DO
40903 : s_offset_a1 = s_offset_a1 + 3
40904 : END DO
40905 : END SUBROUTINE contract_pfdd
40906 : #endif
40907 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
40908 : ! **************************************************************************************************
40909 : !> \brief ...
40910 : !> \param work ...
40911 : !> \param nl_a ...
40912 : !> \param nl_b ...
40913 : !> \param nl_c ...
40914 : !> \param nl_d ...
40915 : !> \param sphi_a ...
40916 : !> \param sphi_b ...
40917 : !> \param sphi_c ...
40918 : !> \param sphi_d ...
40919 : !> \param primitives ...
40920 : !> \param buffer1 ...
40921 : !> \param buffer2 ...
40922 : ! **************************************************************************************************
40923 : SUBROUTINE contract_pfdf(work, &
40924 : nl_a, nl_b, nl_c, nl_d, &
40925 : sphi_a, sphi_b, sphi_c, sphi_d, &
40926 : primitives, &
40927 : buffer1, buffer2)
40928 : REAL(dp), DIMENSION(3*10*6*10), INTENT(IN) :: work
40929 : INTEGER :: nl_a, nl_b, nl_c, nl_d
40930 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
40931 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
40932 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
40933 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
40934 : REAL(dp), &
40935 : DIMENSION(3*nl_a, 7*nl_b, 5*nl_c, 7*nl_d) :: primitives
40936 : REAL(dp), DIMENSION(3*10*6*10) :: buffer1, buffer2
40937 :
40938 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
40939 : kmax, s_offset_a1, s_offset_b1, &
40940 : s_offset_c1, s_offset_d1
40941 :
40942 : s_offset_a1 = 0
40943 : DO ia = 1, nl_a
40944 : s_offset_b1 = 0
40945 : DO ib = 1, nl_b
40946 : s_offset_c1 = 0
40947 : DO ic = 1, nl_c
40948 : s_offset_d1 = 0
40949 : DO id = 1, nl_d
40950 : buffer1 = 0.0_dp
40951 : imax = 10*6*10
40952 : kmax = 3
40953 : DO i = 1, imax
40954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
40955 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
40956 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
40957 : END DO
40958 : buffer2 = 0.0_dp
40959 : imax = 3*6*10
40960 : kmax = 10
40961 : DO i = 1, imax
40962 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
40963 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
40964 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
40965 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
40966 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
40967 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
40968 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
40969 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
40970 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
40971 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
40972 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
40973 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
40974 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
40975 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
40976 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
40977 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
40978 : END DO
40979 : buffer1 = 0.0_dp
40980 : imax = 3*7*10
40981 : kmax = 6
40982 : DO i = 1, imax
40983 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
40984 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
40985 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
40986 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
40987 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
40988 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
40989 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
40990 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
40991 : END DO
40992 : imax = 3*7*5
40993 : kmax = 10
40994 : i = 0
40995 : DO i1 = 1, 5
40996 : DO i2 = 1, 7
40997 : DO i3 = 1, 3
40998 : i = i + 1
40999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41001 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
41002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41004 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
41005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41007 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41010 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
41011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41013 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
41014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41016 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
41017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41019 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
41020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41022 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
41023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41025 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
41026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41028 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
41029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41031 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
41032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41034 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
41035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41037 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
41038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41040 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
41041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41043 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
41044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41046 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
41047 : END DO
41048 : END DO
41049 : END DO
41050 : s_offset_d1 = s_offset_d1 + 7
41051 : END DO
41052 : s_offset_c1 = s_offset_c1 + 5
41053 : END DO
41054 : s_offset_b1 = s_offset_b1 + 7
41055 : END DO
41056 : s_offset_a1 = s_offset_a1 + 3
41057 : END DO
41058 : END SUBROUTINE contract_pfdf
41059 : #endif
41060 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
41061 : ! **************************************************************************************************
41062 : !> \brief ...
41063 : !> \param work ...
41064 : !> \param nl_a ...
41065 : !> \param nl_b ...
41066 : !> \param nl_c ...
41067 : !> \param nl_d ...
41068 : !> \param sphi_a ...
41069 : !> \param sphi_b ...
41070 : !> \param sphi_c ...
41071 : !> \param sphi_d ...
41072 : !> \param primitives ...
41073 : !> \param buffer1 ...
41074 : !> \param buffer2 ...
41075 : ! **************************************************************************************************
41076 : SUBROUTINE contract_pfdg(work, &
41077 : nl_a, nl_b, nl_c, nl_d, &
41078 : sphi_a, sphi_b, sphi_c, sphi_d, &
41079 : primitives, &
41080 : buffer1, buffer2)
41081 : REAL(dp), DIMENSION(3*10*6*15), INTENT(IN) :: work
41082 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41083 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41084 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41085 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
41086 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
41087 : REAL(dp), &
41088 : DIMENSION(3*nl_a, 7*nl_b, 5*nl_c, 9*nl_d) :: primitives
41089 : REAL(dp), DIMENSION(3*10*6*15) :: buffer1, buffer2
41090 :
41091 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41092 : kmax, s_offset_a1, s_offset_b1, &
41093 : s_offset_c1, s_offset_d1
41094 :
41095 : s_offset_a1 = 0
41096 : DO ia = 1, nl_a
41097 : s_offset_b1 = 0
41098 : DO ib = 1, nl_b
41099 : s_offset_c1 = 0
41100 : DO ic = 1, nl_c
41101 : s_offset_d1 = 0
41102 : DO id = 1, nl_d
41103 : buffer1 = 0.0_dp
41104 : imax = 10*6*15
41105 : kmax = 3
41106 : DO i = 1, imax
41107 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41108 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41109 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41110 : END DO
41111 : buffer2 = 0.0_dp
41112 : imax = 3*6*15
41113 : kmax = 10
41114 : DO i = 1, imax
41115 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41116 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41117 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41118 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41119 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41120 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41121 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41122 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41123 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41124 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41125 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41126 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41127 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41128 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41129 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41130 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41131 : END DO
41132 : buffer1 = 0.0_dp
41133 : imax = 3*7*15
41134 : kmax = 6
41135 : DO i = 1, imax
41136 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
41137 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41138 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41139 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41140 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
41141 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41142 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41143 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
41144 : END DO
41145 : imax = 3*7*5
41146 : kmax = 15
41147 : i = 0
41148 : DO i1 = 1, 5
41149 : DO i2 = 1, 7
41150 : DO i3 = 1, 3
41151 : i = i + 1
41152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41154 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
41155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41157 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
41158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41160 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
41161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41163 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41166 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
41167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41169 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
41170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
41171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
41172 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
41173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41175 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
41176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41178 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
41179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41181 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
41182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41184 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
41185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41187 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
41188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41190 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
41191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41193 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
41194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41196 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
41197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41199 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
41200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
41201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
41202 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
41203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41205 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
41206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41208 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
41209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41211 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
41212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41214 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
41215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41217 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
41218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41220 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
41221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41223 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
41224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41226 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
41227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41229 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
41230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41232 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
41233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41235 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
41236 : END DO
41237 : END DO
41238 : END DO
41239 : s_offset_d1 = s_offset_d1 + 9
41240 : END DO
41241 : s_offset_c1 = s_offset_c1 + 5
41242 : END DO
41243 : s_offset_b1 = s_offset_b1 + 7
41244 : END DO
41245 : s_offset_a1 = s_offset_a1 + 3
41246 : END DO
41247 : END SUBROUTINE contract_pfdg
41248 : #endif
41249 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
41250 : ! **************************************************************************************************
41251 : !> \brief ...
41252 : !> \param work ...
41253 : !> \param nl_a ...
41254 : !> \param nl_b ...
41255 : !> \param nl_c ...
41256 : !> \param nl_d ...
41257 : !> \param sphi_a ...
41258 : !> \param sphi_b ...
41259 : !> \param sphi_c ...
41260 : !> \param sphi_d ...
41261 : !> \param primitives ...
41262 : !> \param buffer1 ...
41263 : !> \param buffer2 ...
41264 : ! **************************************************************************************************
41265 : SUBROUTINE contract_pffs(work, &
41266 : nl_a, nl_b, nl_c, nl_d, &
41267 : sphi_a, sphi_b, sphi_c, sphi_d, &
41268 : primitives, &
41269 : buffer1, buffer2)
41270 : REAL(dp), DIMENSION(3*10*10*1), INTENT(IN) :: work
41271 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41272 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41273 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41274 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
41275 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
41276 : REAL(dp), &
41277 : DIMENSION(3*nl_a, 7*nl_b, 7*nl_c, 1*nl_d) :: primitives
41278 : REAL(dp), DIMENSION(3*10*10*1) :: buffer1, buffer2
41279 :
41280 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41281 : kmax, s_offset_a1, s_offset_b1, &
41282 : s_offset_c1, s_offset_d1
41283 :
41284 : s_offset_a1 = 0
41285 : DO ia = 1, nl_a
41286 : s_offset_b1 = 0
41287 : DO ib = 1, nl_b
41288 : s_offset_c1 = 0
41289 : DO ic = 1, nl_c
41290 : s_offset_d1 = 0
41291 : DO id = 1, nl_d
41292 : buffer1 = 0.0_dp
41293 : imax = 10*10*1
41294 : kmax = 3
41295 : DO i = 1, imax
41296 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41297 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41298 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41299 : END DO
41300 : buffer2 = 0.0_dp
41301 : imax = 3*10*1
41302 : kmax = 10
41303 : DO i = 1, imax
41304 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41305 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41306 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41307 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41308 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41309 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41310 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41311 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41312 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41313 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41314 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41315 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41316 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41317 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41318 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41319 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41320 : END DO
41321 : buffer1 = 0.0_dp
41322 : imax = 3*7*1
41323 : kmax = 10
41324 : DO i = 1, imax
41325 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41326 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
41327 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41328 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
41329 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41330 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
41331 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41332 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
41333 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41334 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
41335 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
41336 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
41337 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
41338 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
41339 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
41340 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
41341 : END DO
41342 : imax = 3*7*7
41343 : kmax = 1
41344 : i = 0
41345 : DO i1 = 1, 7
41346 : DO i2 = 1, 7
41347 : DO i3 = 1, 3
41348 : i = i + 1
41349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
41351 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
41352 : END DO
41353 : END DO
41354 : END DO
41355 : s_offset_d1 = s_offset_d1 + 1
41356 : END DO
41357 : s_offset_c1 = s_offset_c1 + 7
41358 : END DO
41359 : s_offset_b1 = s_offset_b1 + 7
41360 : END DO
41361 : s_offset_a1 = s_offset_a1 + 3
41362 : END DO
41363 : END SUBROUTINE contract_pffs
41364 : #endif
41365 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
41366 : ! **************************************************************************************************
41367 : !> \brief ...
41368 : !> \param work ...
41369 : !> \param nl_a ...
41370 : !> \param nl_b ...
41371 : !> \param nl_c ...
41372 : !> \param nl_d ...
41373 : !> \param sphi_a ...
41374 : !> \param sphi_b ...
41375 : !> \param sphi_c ...
41376 : !> \param sphi_d ...
41377 : !> \param primitives ...
41378 : !> \param buffer1 ...
41379 : !> \param buffer2 ...
41380 : ! **************************************************************************************************
41381 : SUBROUTINE contract_pffp(work, &
41382 : nl_a, nl_b, nl_c, nl_d, &
41383 : sphi_a, sphi_b, sphi_c, sphi_d, &
41384 : primitives, &
41385 : buffer1, buffer2)
41386 : REAL(dp), DIMENSION(3*10*10*3), INTENT(IN) :: work
41387 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41388 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41389 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41390 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
41391 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
41392 : REAL(dp), &
41393 : DIMENSION(3*nl_a, 7*nl_b, 7*nl_c, 3*nl_d) :: primitives
41394 : REAL(dp), DIMENSION(3*10*10*3) :: buffer1, buffer2
41395 :
41396 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41397 : kmax, s_offset_a1, s_offset_b1, &
41398 : s_offset_c1, s_offset_d1
41399 :
41400 : s_offset_a1 = 0
41401 : DO ia = 1, nl_a
41402 : s_offset_b1 = 0
41403 : DO ib = 1, nl_b
41404 : s_offset_c1 = 0
41405 : DO ic = 1, nl_c
41406 : s_offset_d1 = 0
41407 : DO id = 1, nl_d
41408 : buffer1 = 0.0_dp
41409 : imax = 10*10*3
41410 : kmax = 3
41411 : DO i = 1, imax
41412 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41413 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41414 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41415 : END DO
41416 : buffer2 = 0.0_dp
41417 : imax = 3*10*3
41418 : kmax = 10
41419 : DO i = 1, imax
41420 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41421 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41422 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41423 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41424 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41425 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41426 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41427 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41428 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41429 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41430 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41431 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41432 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41433 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41434 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41435 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41436 : END DO
41437 : buffer1 = 0.0_dp
41438 : imax = 3*7*3
41439 : kmax = 10
41440 : DO i = 1, imax
41441 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41442 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
41443 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41444 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
41445 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41446 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
41447 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41448 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
41449 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41450 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
41451 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
41452 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
41453 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
41454 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
41455 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
41456 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
41457 : END DO
41458 : imax = 3*7*7
41459 : kmax = 3
41460 : i = 0
41461 : DO i1 = 1, 7
41462 : DO i2 = 1, 7
41463 : DO i3 = 1, 3
41464 : i = i + 1
41465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
41467 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
41468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
41470 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
41473 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
41474 : END DO
41475 : END DO
41476 : END DO
41477 : s_offset_d1 = s_offset_d1 + 3
41478 : END DO
41479 : s_offset_c1 = s_offset_c1 + 7
41480 : END DO
41481 : s_offset_b1 = s_offset_b1 + 7
41482 : END DO
41483 : s_offset_a1 = s_offset_a1 + 3
41484 : END DO
41485 : END SUBROUTINE contract_pffp
41486 : #endif
41487 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
41488 : ! **************************************************************************************************
41489 : !> \brief ...
41490 : !> \param work ...
41491 : !> \param nl_a ...
41492 : !> \param nl_b ...
41493 : !> \param nl_c ...
41494 : !> \param nl_d ...
41495 : !> \param sphi_a ...
41496 : !> \param sphi_b ...
41497 : !> \param sphi_c ...
41498 : !> \param sphi_d ...
41499 : !> \param primitives ...
41500 : !> \param buffer1 ...
41501 : !> \param buffer2 ...
41502 : ! **************************************************************************************************
41503 : SUBROUTINE contract_pffd(work, &
41504 : nl_a, nl_b, nl_c, nl_d, &
41505 : sphi_a, sphi_b, sphi_c, sphi_d, &
41506 : primitives, &
41507 : buffer1, buffer2)
41508 : REAL(dp), DIMENSION(3*10*10*6), INTENT(IN) :: work
41509 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41510 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41511 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41512 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
41513 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
41514 : REAL(dp), &
41515 : DIMENSION(3*nl_a, 7*nl_b, 7*nl_c, 5*nl_d) :: primitives
41516 : REAL(dp), DIMENSION(3*10*10*6) :: buffer1, buffer2
41517 :
41518 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41519 : kmax, s_offset_a1, s_offset_b1, &
41520 : s_offset_c1, s_offset_d1
41521 :
41522 : s_offset_a1 = 0
41523 : DO ia = 1, nl_a
41524 : s_offset_b1 = 0
41525 : DO ib = 1, nl_b
41526 : s_offset_c1 = 0
41527 : DO ic = 1, nl_c
41528 : s_offset_d1 = 0
41529 : DO id = 1, nl_d
41530 : buffer1 = 0.0_dp
41531 : imax = 10*10*6
41532 : kmax = 3
41533 : DO i = 1, imax
41534 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41535 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41536 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41537 : END DO
41538 : buffer2 = 0.0_dp
41539 : imax = 3*10*6
41540 : kmax = 10
41541 : DO i = 1, imax
41542 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41543 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41544 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41545 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41546 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41547 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41548 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41549 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41550 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41551 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41552 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41553 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41554 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41555 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41556 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41557 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41558 : END DO
41559 : buffer1 = 0.0_dp
41560 : imax = 3*7*6
41561 : kmax = 10
41562 : DO i = 1, imax
41563 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41564 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
41565 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41566 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
41567 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41568 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
41569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41570 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
41571 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
41573 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
41574 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
41575 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
41576 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
41577 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
41578 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
41579 : END DO
41580 : imax = 3*7*7
41581 : kmax = 6
41582 : i = 0
41583 : DO i1 = 1, 7
41584 : DO i2 = 1, 7
41585 : DO i3 = 1, 3
41586 : i = i + 1
41587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41589 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
41590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41592 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
41593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41595 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41598 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
41599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41601 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
41602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41604 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
41605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41607 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
41608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41610 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
41611 : END DO
41612 : END DO
41613 : END DO
41614 : s_offset_d1 = s_offset_d1 + 5
41615 : END DO
41616 : s_offset_c1 = s_offset_c1 + 7
41617 : END DO
41618 : s_offset_b1 = s_offset_b1 + 7
41619 : END DO
41620 : s_offset_a1 = s_offset_a1 + 3
41621 : END DO
41622 : END SUBROUTINE contract_pffd
41623 : #endif
41624 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
41625 : ! **************************************************************************************************
41626 : !> \brief ...
41627 : !> \param work ...
41628 : !> \param nl_a ...
41629 : !> \param nl_b ...
41630 : !> \param nl_c ...
41631 : !> \param nl_d ...
41632 : !> \param sphi_a ...
41633 : !> \param sphi_b ...
41634 : !> \param sphi_c ...
41635 : !> \param sphi_d ...
41636 : !> \param primitives ...
41637 : !> \param buffer1 ...
41638 : !> \param buffer2 ...
41639 : ! **************************************************************************************************
41640 : SUBROUTINE contract_pfff(work, &
41641 : nl_a, nl_b, nl_c, nl_d, &
41642 : sphi_a, sphi_b, sphi_c, sphi_d, &
41643 : primitives, &
41644 : buffer1, buffer2)
41645 : REAL(dp), DIMENSION(3*10*10*10), INTENT(IN) :: work
41646 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41647 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41648 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41649 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
41650 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
41651 : REAL(dp), &
41652 : DIMENSION(3*nl_a, 7*nl_b, 7*nl_c, 7*nl_d) :: primitives
41653 : REAL(dp), DIMENSION(3*10*10*10) :: buffer1, buffer2
41654 :
41655 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41656 : kmax, s_offset_a1, s_offset_b1, &
41657 : s_offset_c1, s_offset_d1
41658 :
41659 : s_offset_a1 = 0
41660 : DO ia = 1, nl_a
41661 : s_offset_b1 = 0
41662 : DO ib = 1, nl_b
41663 : s_offset_c1 = 0
41664 : DO ic = 1, nl_c
41665 : s_offset_d1 = 0
41666 : DO id = 1, nl_d
41667 : buffer1 = 0.0_dp
41668 : imax = 10*10*10
41669 : kmax = 3
41670 : DO i = 1, imax
41671 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41672 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41673 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41674 : END DO
41675 : buffer2 = 0.0_dp
41676 : imax = 3*10*10
41677 : kmax = 10
41678 : DO i = 1, imax
41679 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41680 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41681 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41682 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41683 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41684 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41685 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41686 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41687 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41688 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41689 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41690 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41691 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41692 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41693 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41694 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41695 : END DO
41696 : buffer1 = 0.0_dp
41697 : imax = 3*7*10
41698 : kmax = 10
41699 : DO i = 1, imax
41700 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41701 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
41702 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41703 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
41704 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41705 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
41706 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41707 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
41708 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41709 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
41710 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
41711 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
41712 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
41713 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
41714 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
41715 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
41716 : END DO
41717 : imax = 3*7*7
41718 : kmax = 10
41719 : i = 0
41720 : DO i1 = 1, 7
41721 : DO i2 = 1, 7
41722 : DO i3 = 1, 3
41723 : i = i + 1
41724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41726 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
41727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41729 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
41730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41732 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41735 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
41736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41738 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
41739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41741 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
41742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41744 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
41745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41747 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
41748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41750 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
41751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41753 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
41754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41756 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
41757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41759 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
41760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41762 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
41763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41765 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
41766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41768 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
41769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41771 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
41772 : END DO
41773 : END DO
41774 : END DO
41775 : s_offset_d1 = s_offset_d1 + 7
41776 : END DO
41777 : s_offset_c1 = s_offset_c1 + 7
41778 : END DO
41779 : s_offset_b1 = s_offset_b1 + 7
41780 : END DO
41781 : s_offset_a1 = s_offset_a1 + 3
41782 : END DO
41783 : END SUBROUTINE contract_pfff
41784 : #endif
41785 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
41786 : ! **************************************************************************************************
41787 : !> \brief ...
41788 : !> \param work ...
41789 : !> \param nl_a ...
41790 : !> \param nl_b ...
41791 : !> \param nl_c ...
41792 : !> \param nl_d ...
41793 : !> \param sphi_a ...
41794 : !> \param sphi_b ...
41795 : !> \param sphi_c ...
41796 : !> \param sphi_d ...
41797 : !> \param primitives ...
41798 : !> \param buffer1 ...
41799 : !> \param buffer2 ...
41800 : ! **************************************************************************************************
41801 : SUBROUTINE contract_pffg(work, &
41802 : nl_a, nl_b, nl_c, nl_d, &
41803 : sphi_a, sphi_b, sphi_c, sphi_d, &
41804 : primitives, &
41805 : buffer1, buffer2)
41806 : REAL(dp), DIMENSION(3*10*10*15), INTENT(IN) :: work
41807 : INTEGER :: nl_a, nl_b, nl_c, nl_d
41808 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
41809 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
41810 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
41811 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
41812 : REAL(dp), &
41813 : DIMENSION(3*nl_a, 7*nl_b, 7*nl_c, 9*nl_d) :: primitives
41814 : REAL(dp), DIMENSION(3*10*10*15) :: buffer1, buffer2
41815 :
41816 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
41817 : kmax, s_offset_a1, s_offset_b1, &
41818 : s_offset_c1, s_offset_d1
41819 :
41820 : s_offset_a1 = 0
41821 : DO ia = 1, nl_a
41822 : s_offset_b1 = 0
41823 : DO ib = 1, nl_b
41824 : s_offset_c1 = 0
41825 : DO ic = 1, nl_c
41826 : s_offset_d1 = 0
41827 : DO id = 1, nl_d
41828 : buffer1 = 0.0_dp
41829 : imax = 10*10*15
41830 : kmax = 3
41831 : DO i = 1, imax
41832 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
41833 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
41834 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
41835 : END DO
41836 : buffer2 = 0.0_dp
41837 : imax = 3*10*15
41838 : kmax = 10
41839 : DO i = 1, imax
41840 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
41841 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
41842 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
41843 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
41844 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
41845 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
41846 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
41847 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
41848 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
41849 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
41850 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
41851 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
41852 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
41853 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
41854 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
41855 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
41856 : END DO
41857 : buffer1 = 0.0_dp
41858 : imax = 3*7*15
41859 : kmax = 10
41860 : DO i = 1, imax
41861 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
41862 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
41863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
41864 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
41865 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
41866 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
41867 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
41868 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
41869 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
41870 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
41871 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
41872 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
41873 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
41874 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
41875 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
41876 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
41877 : END DO
41878 : imax = 3*7*7
41879 : kmax = 15
41880 : i = 0
41881 : DO i1 = 1, 7
41882 : DO i2 = 1, 7
41883 : DO i3 = 1, 3
41884 : i = i + 1
41885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41887 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
41888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41890 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
41891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41893 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
41894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41896 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
41897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41899 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
41900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41902 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
41903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
41904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
41905 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
41906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41908 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
41909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41911 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
41912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41914 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
41915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41917 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
41918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41920 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
41921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41923 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
41924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
41925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
41926 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
41927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41929 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
41930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41932 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
41933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
41934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
41935 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
41936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
41937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
41938 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
41939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
41940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
41941 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
41942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41944 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
41945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41947 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
41948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
41949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
41950 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
41951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
41952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
41953 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
41954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41956 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
41957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41959 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
41960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
41961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
41962 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
41963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
41964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
41965 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
41966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
41967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
41968 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
41969 : END DO
41970 : END DO
41971 : END DO
41972 : s_offset_d1 = s_offset_d1 + 9
41973 : END DO
41974 : s_offset_c1 = s_offset_c1 + 7
41975 : END DO
41976 : s_offset_b1 = s_offset_b1 + 7
41977 : END DO
41978 : s_offset_a1 = s_offset_a1 + 3
41979 : END DO
41980 : END SUBROUTINE contract_pffg
41981 : #endif
41982 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
41983 : ! **************************************************************************************************
41984 : !> \brief ...
41985 : !> \param work ...
41986 : !> \param nl_a ...
41987 : !> \param nl_b ...
41988 : !> \param nl_c ...
41989 : !> \param nl_d ...
41990 : !> \param sphi_a ...
41991 : !> \param sphi_b ...
41992 : !> \param sphi_c ...
41993 : !> \param sphi_d ...
41994 : !> \param primitives ...
41995 : !> \param buffer1 ...
41996 : !> \param buffer2 ...
41997 : ! **************************************************************************************************
41998 : SUBROUTINE contract_pfgs(work, &
41999 : nl_a, nl_b, nl_c, nl_d, &
42000 : sphi_a, sphi_b, sphi_c, sphi_d, &
42001 : primitives, &
42002 : buffer1, buffer2)
42003 : REAL(dp), DIMENSION(3*10*15*1), INTENT(IN) :: work
42004 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42005 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42006 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
42007 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
42008 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
42009 : REAL(dp), &
42010 : DIMENSION(3*nl_a, 7*nl_b, 9*nl_c, 1*nl_d) :: primitives
42011 : REAL(dp), DIMENSION(3*10*15*1) :: buffer1, buffer2
42012 :
42013 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42014 : kmax, s_offset_a1, s_offset_b1, &
42015 : s_offset_c1, s_offset_d1
42016 :
42017 : s_offset_a1 = 0
42018 : DO ia = 1, nl_a
42019 : s_offset_b1 = 0
42020 : DO ib = 1, nl_b
42021 : s_offset_c1 = 0
42022 : DO ic = 1, nl_c
42023 : s_offset_d1 = 0
42024 : DO id = 1, nl_d
42025 : buffer1 = 0.0_dp
42026 : imax = 10*15*1
42027 : kmax = 3
42028 : DO i = 1, imax
42029 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42030 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42031 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42032 : END DO
42033 : buffer2 = 0.0_dp
42034 : imax = 3*15*1
42035 : kmax = 10
42036 : DO i = 1, imax
42037 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42038 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42039 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42040 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42041 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
42042 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42043 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42044 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
42045 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42046 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42047 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42048 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42049 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
42050 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42051 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42052 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
42053 : END DO
42054 : buffer1 = 0.0_dp
42055 : imax = 3*7*1
42056 : kmax = 15
42057 : DO i = 1, imax
42058 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
42059 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
42060 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
42061 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
42062 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
42063 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
42064 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
42065 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
42066 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
42067 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
42068 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
42069 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
42070 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
42071 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
42072 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
42073 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
42074 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
42075 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
42076 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
42077 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
42078 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
42079 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
42080 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
42081 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
42082 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
42083 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
42084 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
42085 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
42086 : END DO
42087 : imax = 3*7*9
42088 : kmax = 1
42089 : i = 0
42090 : DO i1 = 1, 9
42091 : DO i2 = 1, 7
42092 : DO i3 = 1, 3
42093 : i = i + 1
42094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
42096 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
42097 : END DO
42098 : END DO
42099 : END DO
42100 : s_offset_d1 = s_offset_d1 + 1
42101 : END DO
42102 : s_offset_c1 = s_offset_c1 + 9
42103 : END DO
42104 : s_offset_b1 = s_offset_b1 + 7
42105 : END DO
42106 : s_offset_a1 = s_offset_a1 + 3
42107 : END DO
42108 : END SUBROUTINE contract_pfgs
42109 : #endif
42110 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42111 : ! **************************************************************************************************
42112 : !> \brief ...
42113 : !> \param work ...
42114 : !> \param nl_a ...
42115 : !> \param nl_b ...
42116 : !> \param nl_c ...
42117 : !> \param nl_d ...
42118 : !> \param sphi_a ...
42119 : !> \param sphi_b ...
42120 : !> \param sphi_c ...
42121 : !> \param sphi_d ...
42122 : !> \param primitives ...
42123 : !> \param buffer1 ...
42124 : !> \param buffer2 ...
42125 : ! **************************************************************************************************
42126 : SUBROUTINE contract_pfgp(work, &
42127 : nl_a, nl_b, nl_c, nl_d, &
42128 : sphi_a, sphi_b, sphi_c, sphi_d, &
42129 : primitives, &
42130 : buffer1, buffer2)
42131 : REAL(dp), DIMENSION(3*10*15*3), INTENT(IN) :: work
42132 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42133 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42134 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
42135 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
42136 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
42137 : REAL(dp), &
42138 : DIMENSION(3*nl_a, 7*nl_b, 9*nl_c, 3*nl_d) :: primitives
42139 : REAL(dp), DIMENSION(3*10*15*3) :: buffer1, buffer2
42140 :
42141 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42142 : kmax, s_offset_a1, s_offset_b1, &
42143 : s_offset_c1, s_offset_d1
42144 :
42145 : s_offset_a1 = 0
42146 : DO ia = 1, nl_a
42147 : s_offset_b1 = 0
42148 : DO ib = 1, nl_b
42149 : s_offset_c1 = 0
42150 : DO ic = 1, nl_c
42151 : s_offset_d1 = 0
42152 : DO id = 1, nl_d
42153 : buffer1 = 0.0_dp
42154 : imax = 10*15*3
42155 : kmax = 3
42156 : DO i = 1, imax
42157 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42158 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42159 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42160 : END DO
42161 : buffer2 = 0.0_dp
42162 : imax = 3*15*3
42163 : kmax = 10
42164 : DO i = 1, imax
42165 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42166 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42167 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42168 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42169 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
42170 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42171 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42172 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
42173 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42174 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42175 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42176 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42177 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
42178 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42179 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42180 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
42181 : END DO
42182 : buffer1 = 0.0_dp
42183 : imax = 3*7*3
42184 : kmax = 15
42185 : DO i = 1, imax
42186 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
42187 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
42188 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
42189 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
42190 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
42191 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
42192 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
42193 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
42194 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
42195 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
42196 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
42197 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
42198 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
42199 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
42200 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
42201 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
42202 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
42203 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
42204 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
42205 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
42206 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
42207 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
42208 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
42209 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
42210 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
42211 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
42212 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
42213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
42214 : END DO
42215 : imax = 3*7*9
42216 : kmax = 3
42217 : i = 0
42218 : DO i1 = 1, 9
42219 : DO i2 = 1, 7
42220 : DO i3 = 1, 3
42221 : i = i + 1
42222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
42224 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
42225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
42227 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
42228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
42230 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
42231 : END DO
42232 : END DO
42233 : END DO
42234 : s_offset_d1 = s_offset_d1 + 3
42235 : END DO
42236 : s_offset_c1 = s_offset_c1 + 9
42237 : END DO
42238 : s_offset_b1 = s_offset_b1 + 7
42239 : END DO
42240 : s_offset_a1 = s_offset_a1 + 3
42241 : END DO
42242 : END SUBROUTINE contract_pfgp
42243 : #endif
42244 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42245 : ! **************************************************************************************************
42246 : !> \brief ...
42247 : !> \param work ...
42248 : !> \param nl_a ...
42249 : !> \param nl_b ...
42250 : !> \param nl_c ...
42251 : !> \param nl_d ...
42252 : !> \param sphi_a ...
42253 : !> \param sphi_b ...
42254 : !> \param sphi_c ...
42255 : !> \param sphi_d ...
42256 : !> \param primitives ...
42257 : !> \param buffer1 ...
42258 : !> \param buffer2 ...
42259 : ! **************************************************************************************************
42260 : SUBROUTINE contract_pfgd(work, &
42261 : nl_a, nl_b, nl_c, nl_d, &
42262 : sphi_a, sphi_b, sphi_c, sphi_d, &
42263 : primitives, &
42264 : buffer1, buffer2)
42265 : REAL(dp), DIMENSION(3*10*15*6), INTENT(IN) :: work
42266 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42267 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42268 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
42269 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
42270 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
42271 : REAL(dp), &
42272 : DIMENSION(3*nl_a, 7*nl_b, 9*nl_c, 5*nl_d) :: primitives
42273 : REAL(dp), DIMENSION(3*10*15*6) :: buffer1, buffer2
42274 :
42275 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42276 : kmax, s_offset_a1, s_offset_b1, &
42277 : s_offset_c1, s_offset_d1
42278 :
42279 : s_offset_a1 = 0
42280 : DO ia = 1, nl_a
42281 : s_offset_b1 = 0
42282 : DO ib = 1, nl_b
42283 : s_offset_c1 = 0
42284 : DO ic = 1, nl_c
42285 : s_offset_d1 = 0
42286 : DO id = 1, nl_d
42287 : buffer1 = 0.0_dp
42288 : imax = 10*15*6
42289 : kmax = 3
42290 : DO i = 1, imax
42291 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42292 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42293 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42294 : END DO
42295 : buffer2 = 0.0_dp
42296 : imax = 3*15*6
42297 : kmax = 10
42298 : DO i = 1, imax
42299 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42300 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42301 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42302 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42303 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
42304 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42305 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42306 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
42307 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42308 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42309 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42310 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42311 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
42312 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42313 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42314 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
42315 : END DO
42316 : buffer1 = 0.0_dp
42317 : imax = 3*7*6
42318 : kmax = 15
42319 : DO i = 1, imax
42320 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
42321 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
42322 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
42323 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
42324 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
42325 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
42326 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
42327 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
42328 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
42329 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
42330 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
42331 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
42332 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
42333 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
42334 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
42335 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
42336 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
42337 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
42338 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
42339 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
42340 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
42341 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
42342 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
42343 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
42344 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
42345 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
42346 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
42347 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
42348 : END DO
42349 : imax = 3*7*9
42350 : kmax = 6
42351 : i = 0
42352 : DO i1 = 1, 9
42353 : DO i2 = 1, 7
42354 : DO i3 = 1, 3
42355 : i = i + 1
42356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42358 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
42359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42361 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
42362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
42364 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
42365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42367 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
42368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42370 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
42371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42373 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
42374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
42376 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
42377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42379 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
42380 : END DO
42381 : END DO
42382 : END DO
42383 : s_offset_d1 = s_offset_d1 + 5
42384 : END DO
42385 : s_offset_c1 = s_offset_c1 + 9
42386 : END DO
42387 : s_offset_b1 = s_offset_b1 + 7
42388 : END DO
42389 : s_offset_a1 = s_offset_a1 + 3
42390 : END DO
42391 : END SUBROUTINE contract_pfgd
42392 : #endif
42393 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42394 : ! **************************************************************************************************
42395 : !> \brief ...
42396 : !> \param work ...
42397 : !> \param nl_a ...
42398 : !> \param nl_b ...
42399 : !> \param nl_c ...
42400 : !> \param nl_d ...
42401 : !> \param sphi_a ...
42402 : !> \param sphi_b ...
42403 : !> \param sphi_c ...
42404 : !> \param sphi_d ...
42405 : !> \param primitives ...
42406 : !> \param buffer1 ...
42407 : !> \param buffer2 ...
42408 : ! **************************************************************************************************
42409 : SUBROUTINE contract_pfgf(work, &
42410 : nl_a, nl_b, nl_c, nl_d, &
42411 : sphi_a, sphi_b, sphi_c, sphi_d, &
42412 : primitives, &
42413 : buffer1, buffer2)
42414 : REAL(dp), DIMENSION(3*10*15*10), INTENT(IN) :: work
42415 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42416 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42417 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
42418 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
42419 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
42420 : REAL(dp), &
42421 : DIMENSION(3*nl_a, 7*nl_b, 9*nl_c, 7*nl_d) :: primitives
42422 : REAL(dp), DIMENSION(3*10*15*10) :: buffer1, buffer2
42423 :
42424 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42425 : kmax, s_offset_a1, s_offset_b1, &
42426 : s_offset_c1, s_offset_d1
42427 :
42428 : s_offset_a1 = 0
42429 : DO ia = 1, nl_a
42430 : s_offset_b1 = 0
42431 : DO ib = 1, nl_b
42432 : s_offset_c1 = 0
42433 : DO ic = 1, nl_c
42434 : s_offset_d1 = 0
42435 : DO id = 1, nl_d
42436 : buffer1 = 0.0_dp
42437 : imax = 10*15*10
42438 : kmax = 3
42439 : DO i = 1, imax
42440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42441 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42442 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42443 : END DO
42444 : buffer2 = 0.0_dp
42445 : imax = 3*15*10
42446 : kmax = 10
42447 : DO i = 1, imax
42448 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42449 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42450 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42451 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42452 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
42453 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42454 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42455 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
42456 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42457 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42458 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42459 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42460 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
42461 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42462 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42463 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
42464 : END DO
42465 : buffer1 = 0.0_dp
42466 : imax = 3*7*10
42467 : kmax = 15
42468 : DO i = 1, imax
42469 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
42470 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
42471 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
42472 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
42473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
42474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
42475 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
42476 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
42477 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
42478 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
42479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
42480 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
42481 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
42482 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
42483 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
42484 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
42485 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
42486 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
42487 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
42488 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
42489 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
42490 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
42491 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
42492 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
42493 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
42494 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
42495 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
42496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
42497 : END DO
42498 : imax = 3*7*9
42499 : kmax = 10
42500 : i = 0
42501 : DO i1 = 1, 9
42502 : DO i2 = 1, 7
42503 : DO i3 = 1, 3
42504 : i = i + 1
42505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42507 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
42508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42510 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
42511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
42513 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
42514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42516 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
42517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42519 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
42520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
42521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
42522 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
42523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42525 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
42526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42528 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
42529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
42531 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
42532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42534 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
42535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
42537 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
42538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42540 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
42541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42543 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
42544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
42545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
42546 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
42547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42549 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
42550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42552 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
42553 : END DO
42554 : END DO
42555 : END DO
42556 : s_offset_d1 = s_offset_d1 + 7
42557 : END DO
42558 : s_offset_c1 = s_offset_c1 + 9
42559 : END DO
42560 : s_offset_b1 = s_offset_b1 + 7
42561 : END DO
42562 : s_offset_a1 = s_offset_a1 + 3
42563 : END DO
42564 : END SUBROUTINE contract_pfgf
42565 : #endif
42566 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42567 : ! **************************************************************************************************
42568 : !> \brief ...
42569 : !> \param work ...
42570 : !> \param nl_a ...
42571 : !> \param nl_b ...
42572 : !> \param nl_c ...
42573 : !> \param nl_d ...
42574 : !> \param sphi_a ...
42575 : !> \param sphi_b ...
42576 : !> \param sphi_c ...
42577 : !> \param sphi_d ...
42578 : !> \param primitives ...
42579 : !> \param buffer1 ...
42580 : !> \param buffer2 ...
42581 : ! **************************************************************************************************
42582 : SUBROUTINE contract_pfgg(work, &
42583 : nl_a, nl_b, nl_c, nl_d, &
42584 : sphi_a, sphi_b, sphi_c, sphi_d, &
42585 : primitives, &
42586 : buffer1, buffer2)
42587 : REAL(dp), DIMENSION(3*10*15*15), INTENT(IN) :: work
42588 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42589 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42590 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
42591 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
42592 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
42593 : REAL(dp), &
42594 : DIMENSION(3*nl_a, 7*nl_b, 9*nl_c, 9*nl_d) :: primitives
42595 : REAL(dp), DIMENSION(3*10*15*15) :: buffer1, buffer2
42596 :
42597 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42598 : kmax, s_offset_a1, s_offset_b1, &
42599 : s_offset_c1, s_offset_d1
42600 :
42601 : s_offset_a1 = 0
42602 : DO ia = 1, nl_a
42603 : s_offset_b1 = 0
42604 : DO ib = 1, nl_b
42605 : s_offset_c1 = 0
42606 : DO ic = 1, nl_c
42607 : s_offset_d1 = 0
42608 : DO id = 1, nl_d
42609 : buffer1 = 0.0_dp
42610 : imax = 10*15*15
42611 : kmax = 3
42612 : DO i = 1, imax
42613 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42614 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42615 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42616 : END DO
42617 : buffer2 = 0.0_dp
42618 : imax = 3*15*15
42619 : kmax = 10
42620 : DO i = 1, imax
42621 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42622 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42623 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42624 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42625 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
42626 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42627 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42628 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
42629 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42630 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42631 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42632 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42633 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
42634 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42635 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42636 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
42637 : END DO
42638 : buffer1 = 0.0_dp
42639 : imax = 3*7*15
42640 : kmax = 15
42641 : DO i = 1, imax
42642 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
42643 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
42644 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
42645 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
42646 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
42647 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
42648 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
42649 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
42650 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
42651 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
42652 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
42653 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
42654 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
42655 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
42656 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
42657 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
42658 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
42659 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
42660 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
42661 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
42662 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
42663 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
42664 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
42665 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
42666 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
42667 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
42668 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
42669 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
42670 : END DO
42671 : imax = 3*7*9
42672 : kmax = 15
42673 : i = 0
42674 : DO i1 = 1, 9
42675 : DO i2 = 1, 7
42676 : DO i3 = 1, 3
42677 : i = i + 1
42678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42680 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
42681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42683 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
42684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
42685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
42686 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
42687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
42689 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
42690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42692 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
42693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
42694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
42695 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
42696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
42697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
42698 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
42699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42701 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
42702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
42703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
42704 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
42705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
42707 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
42708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42710 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
42711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42713 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
42714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42716 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
42717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
42719 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
42720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42722 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
42723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
42724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
42725 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
42726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
42727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
42728 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
42729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
42731 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
42732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
42733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
42734 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
42735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42737 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
42738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42740 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
42741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
42742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
42743 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
42744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
42746 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
42747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42749 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
42750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42752 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
42753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
42754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
42755 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
42756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
42757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
42758 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
42759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
42760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
42761 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
42762 : END DO
42763 : END DO
42764 : END DO
42765 : s_offset_d1 = s_offset_d1 + 9
42766 : END DO
42767 : s_offset_c1 = s_offset_c1 + 9
42768 : END DO
42769 : s_offset_b1 = s_offset_b1 + 7
42770 : END DO
42771 : s_offset_a1 = s_offset_a1 + 3
42772 : END DO
42773 : END SUBROUTINE contract_pfgg
42774 : #endif
42775 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42776 : ! **************************************************************************************************
42777 : !> \brief ...
42778 : !> \param work ...
42779 : !> \param nl_a ...
42780 : !> \param nl_b ...
42781 : !> \param nl_c ...
42782 : !> \param nl_d ...
42783 : !> \param sphi_a ...
42784 : !> \param sphi_b ...
42785 : !> \param sphi_c ...
42786 : !> \param sphi_d ...
42787 : !> \param primitives ...
42788 : !> \param buffer1 ...
42789 : !> \param buffer2 ...
42790 : ! **************************************************************************************************
42791 : SUBROUTINE contract_pgss(work, &
42792 : nl_a, nl_b, nl_c, nl_d, &
42793 : sphi_a, sphi_b, sphi_c, sphi_d, &
42794 : primitives, &
42795 : buffer1, buffer2)
42796 : REAL(dp), DIMENSION(3*15*1*1), INTENT(IN) :: work
42797 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42798 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42799 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
42800 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
42801 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
42802 : REAL(dp), &
42803 : DIMENSION(3*nl_a, 9*nl_b, 1*nl_c, 1*nl_d) :: primitives
42804 : REAL(dp), DIMENSION(3*15*1*1) :: buffer1, buffer2
42805 :
42806 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42807 : kmax, s_offset_a1, s_offset_b1, &
42808 : s_offset_c1, s_offset_d1
42809 :
42810 : s_offset_a1 = 0
42811 : DO ia = 1, nl_a
42812 : s_offset_b1 = 0
42813 : DO ib = 1, nl_b
42814 : s_offset_c1 = 0
42815 : DO ic = 1, nl_c
42816 : s_offset_d1 = 0
42817 : DO id = 1, nl_d
42818 : buffer1 = 0.0_dp
42819 : imax = 15*1*1
42820 : kmax = 3
42821 : DO i = 1, imax
42822 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42823 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42824 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42825 : END DO
42826 : buffer2 = 0.0_dp
42827 : imax = 3*1*1
42828 : kmax = 15
42829 : DO i = 1, imax
42830 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42831 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42832 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
42833 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42834 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42835 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42836 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
42837 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42838 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
42839 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42840 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
42841 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42842 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
42843 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42844 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42845 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42846 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
42847 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42848 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
42849 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
42850 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
42851 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
42852 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
42853 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
42854 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
42855 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
42856 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
42857 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
42858 : END DO
42859 : buffer1 = 0.0_dp
42860 : imax = 3*9*1
42861 : kmax = 1
42862 : DO i = 1, imax
42863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
42864 : END DO
42865 : imax = 3*9*1
42866 : kmax = 1
42867 : i = 0
42868 : DO i1 = 1, 1
42869 : DO i2 = 1, 9
42870 : DO i3 = 1, 3
42871 : i = i + 1
42872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
42874 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
42875 : END DO
42876 : END DO
42877 : END DO
42878 : s_offset_d1 = s_offset_d1 + 1
42879 : END DO
42880 : s_offset_c1 = s_offset_c1 + 1
42881 : END DO
42882 : s_offset_b1 = s_offset_b1 + 9
42883 : END DO
42884 : s_offset_a1 = s_offset_a1 + 3
42885 : END DO
42886 : END SUBROUTINE contract_pgss
42887 : #endif
42888 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
42889 : ! **************************************************************************************************
42890 : !> \brief ...
42891 : !> \param work ...
42892 : !> \param nl_a ...
42893 : !> \param nl_b ...
42894 : !> \param nl_c ...
42895 : !> \param nl_d ...
42896 : !> \param sphi_a ...
42897 : !> \param sphi_b ...
42898 : !> \param sphi_c ...
42899 : !> \param sphi_d ...
42900 : !> \param primitives ...
42901 : !> \param buffer1 ...
42902 : !> \param buffer2 ...
42903 : ! **************************************************************************************************
42904 : SUBROUTINE contract_pgsp(work, &
42905 : nl_a, nl_b, nl_c, nl_d, &
42906 : sphi_a, sphi_b, sphi_c, sphi_d, &
42907 : primitives, &
42908 : buffer1, buffer2)
42909 : REAL(dp), DIMENSION(3*15*1*3), INTENT(IN) :: work
42910 : INTEGER :: nl_a, nl_b, nl_c, nl_d
42911 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
42912 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
42913 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
42914 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
42915 : REAL(dp), &
42916 : DIMENSION(3*nl_a, 9*nl_b, 1*nl_c, 3*nl_d) :: primitives
42917 : REAL(dp), DIMENSION(3*15*1*3) :: buffer1, buffer2
42918 :
42919 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
42920 : kmax, s_offset_a1, s_offset_b1, &
42921 : s_offset_c1, s_offset_d1
42922 :
42923 : s_offset_a1 = 0
42924 : DO ia = 1, nl_a
42925 : s_offset_b1 = 0
42926 : DO ib = 1, nl_b
42927 : s_offset_c1 = 0
42928 : DO ic = 1, nl_c
42929 : s_offset_d1 = 0
42930 : DO id = 1, nl_d
42931 : buffer1 = 0.0_dp
42932 : imax = 15*1*3
42933 : kmax = 3
42934 : DO i = 1, imax
42935 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
42936 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
42937 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
42938 : END DO
42939 : buffer2 = 0.0_dp
42940 : imax = 3*1*3
42941 : kmax = 15
42942 : DO i = 1, imax
42943 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
42944 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
42945 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
42946 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
42947 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
42948 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
42949 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
42950 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
42951 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
42952 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
42953 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
42954 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
42955 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
42956 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
42957 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
42958 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
42959 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
42960 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
42961 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
42962 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
42963 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
42964 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
42965 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
42966 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
42967 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
42968 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
42969 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
42970 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
42971 : END DO
42972 : buffer1 = 0.0_dp
42973 : imax = 3*9*3
42974 : kmax = 1
42975 : DO i = 1, imax
42976 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
42977 : END DO
42978 : imax = 3*9*1
42979 : kmax = 3
42980 : i = 0
42981 : DO i1 = 1, 1
42982 : DO i2 = 1, 9
42983 : DO i3 = 1, 3
42984 : i = i + 1
42985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
42986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
42987 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
42988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
42989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
42990 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
42991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
42992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
42993 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
42994 : END DO
42995 : END DO
42996 : END DO
42997 : s_offset_d1 = s_offset_d1 + 3
42998 : END DO
42999 : s_offset_c1 = s_offset_c1 + 1
43000 : END DO
43001 : s_offset_b1 = s_offset_b1 + 9
43002 : END DO
43003 : s_offset_a1 = s_offset_a1 + 3
43004 : END DO
43005 : END SUBROUTINE contract_pgsp
43006 : #endif
43007 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43008 : ! **************************************************************************************************
43009 : !> \brief ...
43010 : !> \param work ...
43011 : !> \param nl_a ...
43012 : !> \param nl_b ...
43013 : !> \param nl_c ...
43014 : !> \param nl_d ...
43015 : !> \param sphi_a ...
43016 : !> \param sphi_b ...
43017 : !> \param sphi_c ...
43018 : !> \param sphi_d ...
43019 : !> \param primitives ...
43020 : !> \param buffer1 ...
43021 : !> \param buffer2 ...
43022 : ! **************************************************************************************************
43023 : SUBROUTINE contract_pgsd(work, &
43024 : nl_a, nl_b, nl_c, nl_d, &
43025 : sphi_a, sphi_b, sphi_c, sphi_d, &
43026 : primitives, &
43027 : buffer1, buffer2)
43028 : REAL(dp), DIMENSION(3*15*1*6), INTENT(IN) :: work
43029 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43030 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43031 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43032 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
43033 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
43034 : REAL(dp), &
43035 : DIMENSION(3*nl_a, 9*nl_b, 1*nl_c, 5*nl_d) :: primitives
43036 : REAL(dp), DIMENSION(3*15*1*6) :: buffer1, buffer2
43037 :
43038 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43039 : kmax, s_offset_a1, s_offset_b1, &
43040 : s_offset_c1, s_offset_d1
43041 :
43042 : s_offset_a1 = 0
43043 : DO ia = 1, nl_a
43044 : s_offset_b1 = 0
43045 : DO ib = 1, nl_b
43046 : s_offset_c1 = 0
43047 : DO ic = 1, nl_c
43048 : s_offset_d1 = 0
43049 : DO id = 1, nl_d
43050 : buffer1 = 0.0_dp
43051 : imax = 15*1*6
43052 : kmax = 3
43053 : DO i = 1, imax
43054 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43055 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43056 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43057 : END DO
43058 : buffer2 = 0.0_dp
43059 : imax = 3*1*6
43060 : kmax = 15
43061 : DO i = 1, imax
43062 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43063 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43064 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43065 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43066 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43067 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43068 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43069 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43070 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43071 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43072 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43073 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43074 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43075 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43076 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43077 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43078 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43079 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43080 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43081 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43082 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43083 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43084 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43085 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43086 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43087 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43088 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43089 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43090 : END DO
43091 : buffer1 = 0.0_dp
43092 : imax = 3*9*6
43093 : kmax = 1
43094 : DO i = 1, imax
43095 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
43096 : END DO
43097 : imax = 3*9*1
43098 : kmax = 6
43099 : i = 0
43100 : DO i1 = 1, 1
43101 : DO i2 = 1, 9
43102 : DO i3 = 1, 3
43103 : i = i + 1
43104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43106 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
43107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43109 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
43110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43112 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43115 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
43116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43118 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
43119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43121 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
43122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43124 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
43125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43127 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
43128 : END DO
43129 : END DO
43130 : END DO
43131 : s_offset_d1 = s_offset_d1 + 5
43132 : END DO
43133 : s_offset_c1 = s_offset_c1 + 1
43134 : END DO
43135 : s_offset_b1 = s_offset_b1 + 9
43136 : END DO
43137 : s_offset_a1 = s_offset_a1 + 3
43138 : END DO
43139 : END SUBROUTINE contract_pgsd
43140 : #endif
43141 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43142 : ! **************************************************************************************************
43143 : !> \brief ...
43144 : !> \param work ...
43145 : !> \param nl_a ...
43146 : !> \param nl_b ...
43147 : !> \param nl_c ...
43148 : !> \param nl_d ...
43149 : !> \param sphi_a ...
43150 : !> \param sphi_b ...
43151 : !> \param sphi_c ...
43152 : !> \param sphi_d ...
43153 : !> \param primitives ...
43154 : !> \param buffer1 ...
43155 : !> \param buffer2 ...
43156 : ! **************************************************************************************************
43157 : SUBROUTINE contract_pgsf(work, &
43158 : nl_a, nl_b, nl_c, nl_d, &
43159 : sphi_a, sphi_b, sphi_c, sphi_d, &
43160 : primitives, &
43161 : buffer1, buffer2)
43162 : REAL(dp), DIMENSION(3*15*1*10), INTENT(IN) :: work
43163 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43164 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43165 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43166 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
43167 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
43168 : REAL(dp), &
43169 : DIMENSION(3*nl_a, 9*nl_b, 1*nl_c, 7*nl_d) :: primitives
43170 : REAL(dp), DIMENSION(3*15*1*10) :: buffer1, buffer2
43171 :
43172 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43173 : kmax, s_offset_a1, s_offset_b1, &
43174 : s_offset_c1, s_offset_d1
43175 :
43176 : s_offset_a1 = 0
43177 : DO ia = 1, nl_a
43178 : s_offset_b1 = 0
43179 : DO ib = 1, nl_b
43180 : s_offset_c1 = 0
43181 : DO ic = 1, nl_c
43182 : s_offset_d1 = 0
43183 : DO id = 1, nl_d
43184 : buffer1 = 0.0_dp
43185 : imax = 15*1*10
43186 : kmax = 3
43187 : DO i = 1, imax
43188 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43189 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43190 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43191 : END DO
43192 : buffer2 = 0.0_dp
43193 : imax = 3*1*10
43194 : kmax = 15
43195 : DO i = 1, imax
43196 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43197 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43198 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43199 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43200 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43201 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43202 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43203 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43204 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43205 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43206 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43207 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43208 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43209 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43210 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43211 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43212 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43213 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43214 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43215 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43216 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43217 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43218 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43219 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43220 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43221 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43222 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43223 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43224 : END DO
43225 : buffer1 = 0.0_dp
43226 : imax = 3*9*10
43227 : kmax = 1
43228 : DO i = 1, imax
43229 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
43230 : END DO
43231 : imax = 3*9*1
43232 : kmax = 10
43233 : i = 0
43234 : DO i1 = 1, 1
43235 : DO i2 = 1, 9
43236 : DO i3 = 1, 3
43237 : i = i + 1
43238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43240 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
43241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43243 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
43244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43246 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43249 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
43250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43252 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
43253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43255 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
43256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43258 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
43259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43261 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
43262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43264 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
43265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43267 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
43268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43270 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
43271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43273 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
43274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43276 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
43277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43279 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
43280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43282 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
43283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43285 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
43286 : END DO
43287 : END DO
43288 : END DO
43289 : s_offset_d1 = s_offset_d1 + 7
43290 : END DO
43291 : s_offset_c1 = s_offset_c1 + 1
43292 : END DO
43293 : s_offset_b1 = s_offset_b1 + 9
43294 : END DO
43295 : s_offset_a1 = s_offset_a1 + 3
43296 : END DO
43297 : END SUBROUTINE contract_pgsf
43298 : #endif
43299 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43300 : ! **************************************************************************************************
43301 : !> \brief ...
43302 : !> \param work ...
43303 : !> \param nl_a ...
43304 : !> \param nl_b ...
43305 : !> \param nl_c ...
43306 : !> \param nl_d ...
43307 : !> \param sphi_a ...
43308 : !> \param sphi_b ...
43309 : !> \param sphi_c ...
43310 : !> \param sphi_d ...
43311 : !> \param primitives ...
43312 : !> \param buffer1 ...
43313 : !> \param buffer2 ...
43314 : ! **************************************************************************************************
43315 : SUBROUTINE contract_pgsg(work, &
43316 : nl_a, nl_b, nl_c, nl_d, &
43317 : sphi_a, sphi_b, sphi_c, sphi_d, &
43318 : primitives, &
43319 : buffer1, buffer2)
43320 : REAL(dp), DIMENSION(3*15*1*15), INTENT(IN) :: work
43321 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43322 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43323 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43324 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
43325 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
43326 : REAL(dp), &
43327 : DIMENSION(3*nl_a, 9*nl_b, 1*nl_c, 9*nl_d) :: primitives
43328 : REAL(dp), DIMENSION(3*15*1*15) :: buffer1, buffer2
43329 :
43330 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43331 : kmax, s_offset_a1, s_offset_b1, &
43332 : s_offset_c1, s_offset_d1
43333 :
43334 : s_offset_a1 = 0
43335 : DO ia = 1, nl_a
43336 : s_offset_b1 = 0
43337 : DO ib = 1, nl_b
43338 : s_offset_c1 = 0
43339 : DO ic = 1, nl_c
43340 : s_offset_d1 = 0
43341 : DO id = 1, nl_d
43342 : buffer1 = 0.0_dp
43343 : imax = 15*1*15
43344 : kmax = 3
43345 : DO i = 1, imax
43346 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43347 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43348 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43349 : END DO
43350 : buffer2 = 0.0_dp
43351 : imax = 3*1*15
43352 : kmax = 15
43353 : DO i = 1, imax
43354 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43355 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43356 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43357 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43358 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43359 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43360 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43361 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43362 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43363 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43364 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43365 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43366 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43367 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43368 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43369 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43370 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43371 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43372 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43373 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43374 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43375 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43376 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43377 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43378 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43379 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43380 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43381 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43382 : END DO
43383 : buffer1 = 0.0_dp
43384 : imax = 3*9*15
43385 : kmax = 1
43386 : DO i = 1, imax
43387 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
43388 : END DO
43389 : imax = 3*9*1
43390 : kmax = 15
43391 : i = 0
43392 : DO i1 = 1, 1
43393 : DO i2 = 1, 9
43394 : DO i3 = 1, 3
43395 : i = i + 1
43396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43398 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
43399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43400 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43401 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
43402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
43403 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
43404 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
43405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43407 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43410 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
43411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43413 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
43414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
43415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
43416 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
43417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43419 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
43420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
43421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
43422 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
43423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43425 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
43426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43428 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
43429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43431 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
43432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43434 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
43435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43437 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
43438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43440 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
43441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43443 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
43444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
43445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
43446 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
43447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43449 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
43450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43452 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
43453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43455 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
43456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43458 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
43459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
43460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
43461 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
43462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43464 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
43465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43467 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
43468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43470 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
43471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43473 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
43474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43476 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
43477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43479 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
43480 : END DO
43481 : END DO
43482 : END DO
43483 : s_offset_d1 = s_offset_d1 + 9
43484 : END DO
43485 : s_offset_c1 = s_offset_c1 + 1
43486 : END DO
43487 : s_offset_b1 = s_offset_b1 + 9
43488 : END DO
43489 : s_offset_a1 = s_offset_a1 + 3
43490 : END DO
43491 : END SUBROUTINE contract_pgsg
43492 : #endif
43493 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43494 : ! **************************************************************************************************
43495 : !> \brief ...
43496 : !> \param work ...
43497 : !> \param nl_a ...
43498 : !> \param nl_b ...
43499 : !> \param nl_c ...
43500 : !> \param nl_d ...
43501 : !> \param sphi_a ...
43502 : !> \param sphi_b ...
43503 : !> \param sphi_c ...
43504 : !> \param sphi_d ...
43505 : !> \param primitives ...
43506 : !> \param buffer1 ...
43507 : !> \param buffer2 ...
43508 : ! **************************************************************************************************
43509 : SUBROUTINE contract_pgps(work, &
43510 : nl_a, nl_b, nl_c, nl_d, &
43511 : sphi_a, sphi_b, sphi_c, sphi_d, &
43512 : primitives, &
43513 : buffer1, buffer2)
43514 : REAL(dp), DIMENSION(3*15*3*1), INTENT(IN) :: work
43515 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43516 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43517 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43518 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
43519 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
43520 : REAL(dp), &
43521 : DIMENSION(3*nl_a, 9*nl_b, 3*nl_c, 1*nl_d) :: primitives
43522 : REAL(dp), DIMENSION(3*15*3*1) :: buffer1, buffer2
43523 :
43524 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43525 : kmax, s_offset_a1, s_offset_b1, &
43526 : s_offset_c1, s_offset_d1
43527 :
43528 : s_offset_a1 = 0
43529 : DO ia = 1, nl_a
43530 : s_offset_b1 = 0
43531 : DO ib = 1, nl_b
43532 : s_offset_c1 = 0
43533 : DO ic = 1, nl_c
43534 : s_offset_d1 = 0
43535 : DO id = 1, nl_d
43536 : buffer1 = 0.0_dp
43537 : imax = 15*3*1
43538 : kmax = 3
43539 : DO i = 1, imax
43540 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43542 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43543 : END DO
43544 : buffer2 = 0.0_dp
43545 : imax = 3*3*1
43546 : kmax = 15
43547 : DO i = 1, imax
43548 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43549 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43550 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43551 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43552 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43553 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43554 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43555 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43556 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43557 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43558 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43559 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43560 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43561 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43562 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43563 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43564 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43565 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43566 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43567 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43568 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43569 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43570 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43571 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43572 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43573 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43574 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43575 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43576 : END DO
43577 : buffer1 = 0.0_dp
43578 : imax = 3*9*1
43579 : kmax = 3
43580 : DO i = 1, imax
43581 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
43582 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
43583 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
43584 : END DO
43585 : imax = 3*9*3
43586 : kmax = 1
43587 : i = 0
43588 : DO i1 = 1, 3
43589 : DO i2 = 1, 9
43590 : DO i3 = 1, 3
43591 : i = i + 1
43592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
43594 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
43595 : END DO
43596 : END DO
43597 : END DO
43598 : s_offset_d1 = s_offset_d1 + 1
43599 : END DO
43600 : s_offset_c1 = s_offset_c1 + 3
43601 : END DO
43602 : s_offset_b1 = s_offset_b1 + 9
43603 : END DO
43604 : s_offset_a1 = s_offset_a1 + 3
43605 : END DO
43606 : END SUBROUTINE contract_pgps
43607 : #endif
43608 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43609 : ! **************************************************************************************************
43610 : !> \brief ...
43611 : !> \param work ...
43612 : !> \param nl_a ...
43613 : !> \param nl_b ...
43614 : !> \param nl_c ...
43615 : !> \param nl_d ...
43616 : !> \param sphi_a ...
43617 : !> \param sphi_b ...
43618 : !> \param sphi_c ...
43619 : !> \param sphi_d ...
43620 : !> \param primitives ...
43621 : !> \param buffer1 ...
43622 : !> \param buffer2 ...
43623 : ! **************************************************************************************************
43624 : SUBROUTINE contract_pgpp(work, &
43625 : nl_a, nl_b, nl_c, nl_d, &
43626 : sphi_a, sphi_b, sphi_c, sphi_d, &
43627 : primitives, &
43628 : buffer1, buffer2)
43629 : REAL(dp), DIMENSION(3*15*3*3), INTENT(IN) :: work
43630 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43631 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43632 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43633 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
43634 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
43635 : REAL(dp), &
43636 : DIMENSION(3*nl_a, 9*nl_b, 3*nl_c, 3*nl_d) :: primitives
43637 : REAL(dp), DIMENSION(3*15*3*3) :: buffer1, buffer2
43638 :
43639 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43640 : kmax, s_offset_a1, s_offset_b1, &
43641 : s_offset_c1, s_offset_d1
43642 :
43643 : s_offset_a1 = 0
43644 : DO ia = 1, nl_a
43645 : s_offset_b1 = 0
43646 : DO ib = 1, nl_b
43647 : s_offset_c1 = 0
43648 : DO ic = 1, nl_c
43649 : s_offset_d1 = 0
43650 : DO id = 1, nl_d
43651 : buffer1 = 0.0_dp
43652 : imax = 15*3*3
43653 : kmax = 3
43654 : DO i = 1, imax
43655 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43656 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43657 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43658 : END DO
43659 : buffer2 = 0.0_dp
43660 : imax = 3*3*3
43661 : kmax = 15
43662 : DO i = 1, imax
43663 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43664 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43665 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43666 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43667 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43668 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43669 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43670 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43671 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43672 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43673 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43674 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43675 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43676 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43677 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43678 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43679 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43680 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43681 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43682 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43683 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43684 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43685 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43686 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43687 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43688 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43689 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43690 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43691 : END DO
43692 : buffer1 = 0.0_dp
43693 : imax = 3*9*3
43694 : kmax = 3
43695 : DO i = 1, imax
43696 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
43697 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
43698 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
43699 : END DO
43700 : imax = 3*9*3
43701 : kmax = 3
43702 : i = 0
43703 : DO i1 = 1, 3
43704 : DO i2 = 1, 9
43705 : DO i3 = 1, 3
43706 : i = i + 1
43707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
43709 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
43710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
43712 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
43715 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
43716 : END DO
43717 : END DO
43718 : END DO
43719 : s_offset_d1 = s_offset_d1 + 3
43720 : END DO
43721 : s_offset_c1 = s_offset_c1 + 3
43722 : END DO
43723 : s_offset_b1 = s_offset_b1 + 9
43724 : END DO
43725 : s_offset_a1 = s_offset_a1 + 3
43726 : END DO
43727 : END SUBROUTINE contract_pgpp
43728 : #endif
43729 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43730 : ! **************************************************************************************************
43731 : !> \brief ...
43732 : !> \param work ...
43733 : !> \param nl_a ...
43734 : !> \param nl_b ...
43735 : !> \param nl_c ...
43736 : !> \param nl_d ...
43737 : !> \param sphi_a ...
43738 : !> \param sphi_b ...
43739 : !> \param sphi_c ...
43740 : !> \param sphi_d ...
43741 : !> \param primitives ...
43742 : !> \param buffer1 ...
43743 : !> \param buffer2 ...
43744 : ! **************************************************************************************************
43745 : SUBROUTINE contract_pgpd(work, &
43746 : nl_a, nl_b, nl_c, nl_d, &
43747 : sphi_a, sphi_b, sphi_c, sphi_d, &
43748 : primitives, &
43749 : buffer1, buffer2)
43750 : REAL(dp), DIMENSION(3*15*3*6), INTENT(IN) :: work
43751 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43752 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43753 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43754 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
43755 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
43756 : REAL(dp), &
43757 : DIMENSION(3*nl_a, 9*nl_b, 3*nl_c, 5*nl_d) :: primitives
43758 : REAL(dp), DIMENSION(3*15*3*6) :: buffer1, buffer2
43759 :
43760 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43761 : kmax, s_offset_a1, s_offset_b1, &
43762 : s_offset_c1, s_offset_d1
43763 :
43764 : s_offset_a1 = 0
43765 : DO ia = 1, nl_a
43766 : s_offset_b1 = 0
43767 : DO ib = 1, nl_b
43768 : s_offset_c1 = 0
43769 : DO ic = 1, nl_c
43770 : s_offset_d1 = 0
43771 : DO id = 1, nl_d
43772 : buffer1 = 0.0_dp
43773 : imax = 15*3*6
43774 : kmax = 3
43775 : DO i = 1, imax
43776 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43777 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43778 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43779 : END DO
43780 : buffer2 = 0.0_dp
43781 : imax = 3*3*6
43782 : kmax = 15
43783 : DO i = 1, imax
43784 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43785 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43786 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43787 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43788 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43789 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43790 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43791 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43792 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43793 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43794 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43795 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43796 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43797 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43798 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43799 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43800 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43801 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43802 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43803 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43804 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43805 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43806 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43807 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43808 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43809 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43810 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43811 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43812 : END DO
43813 : buffer1 = 0.0_dp
43814 : imax = 3*9*6
43815 : kmax = 3
43816 : DO i = 1, imax
43817 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
43818 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
43819 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
43820 : END DO
43821 : imax = 3*9*3
43822 : kmax = 6
43823 : i = 0
43824 : DO i1 = 1, 3
43825 : DO i2 = 1, 9
43826 : DO i3 = 1, 3
43827 : i = i + 1
43828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43830 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
43831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43833 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
43834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43836 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43839 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
43840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43842 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
43843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43845 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
43846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43848 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
43849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43851 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
43852 : END DO
43853 : END DO
43854 : END DO
43855 : s_offset_d1 = s_offset_d1 + 5
43856 : END DO
43857 : s_offset_c1 = s_offset_c1 + 3
43858 : END DO
43859 : s_offset_b1 = s_offset_b1 + 9
43860 : END DO
43861 : s_offset_a1 = s_offset_a1 + 3
43862 : END DO
43863 : END SUBROUTINE contract_pgpd
43864 : #endif
43865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
43866 : ! **************************************************************************************************
43867 : !> \brief ...
43868 : !> \param work ...
43869 : !> \param nl_a ...
43870 : !> \param nl_b ...
43871 : !> \param nl_c ...
43872 : !> \param nl_d ...
43873 : !> \param sphi_a ...
43874 : !> \param sphi_b ...
43875 : !> \param sphi_c ...
43876 : !> \param sphi_d ...
43877 : !> \param primitives ...
43878 : !> \param buffer1 ...
43879 : !> \param buffer2 ...
43880 : ! **************************************************************************************************
43881 : SUBROUTINE contract_pgpf(work, &
43882 : nl_a, nl_b, nl_c, nl_d, &
43883 : sphi_a, sphi_b, sphi_c, sphi_d, &
43884 : primitives, &
43885 : buffer1, buffer2)
43886 : REAL(dp), DIMENSION(3*15*3*10), INTENT(IN) :: work
43887 : INTEGER :: nl_a, nl_b, nl_c, nl_d
43888 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
43889 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
43890 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
43891 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
43892 : REAL(dp), &
43893 : DIMENSION(3*nl_a, 9*nl_b, 3*nl_c, 7*nl_d) :: primitives
43894 : REAL(dp), DIMENSION(3*15*3*10) :: buffer1, buffer2
43895 :
43896 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
43897 : kmax, s_offset_a1, s_offset_b1, &
43898 : s_offset_c1, s_offset_d1
43899 :
43900 : s_offset_a1 = 0
43901 : DO ia = 1, nl_a
43902 : s_offset_b1 = 0
43903 : DO ib = 1, nl_b
43904 : s_offset_c1 = 0
43905 : DO ic = 1, nl_c
43906 : s_offset_d1 = 0
43907 : DO id = 1, nl_d
43908 : buffer1 = 0.0_dp
43909 : imax = 15*3*10
43910 : kmax = 3
43911 : DO i = 1, imax
43912 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
43913 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
43914 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
43915 : END DO
43916 : buffer2 = 0.0_dp
43917 : imax = 3*3*10
43918 : kmax = 15
43919 : DO i = 1, imax
43920 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
43921 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
43922 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
43923 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
43924 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
43925 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
43926 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
43927 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
43928 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
43929 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
43930 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
43931 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
43932 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
43933 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
43934 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
43935 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
43936 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
43937 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
43938 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
43939 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
43940 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
43941 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
43942 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
43943 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
43944 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
43945 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
43946 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
43947 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
43948 : END DO
43949 : buffer1 = 0.0_dp
43950 : imax = 3*9*10
43951 : kmax = 3
43952 : DO i = 1, imax
43953 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
43954 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
43955 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
43956 : END DO
43957 : imax = 3*9*3
43958 : kmax = 10
43959 : i = 0
43960 : DO i1 = 1, 3
43961 : DO i2 = 1, 9
43962 : DO i3 = 1, 3
43963 : i = i + 1
43964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43966 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
43967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43969 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
43970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43972 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
43973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43975 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
43976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
43977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
43978 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
43979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
43980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
43981 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
43982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43984 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
43985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
43986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
43987 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
43988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
43989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
43990 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
43991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
43992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
43993 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
43994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
43995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
43996 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
43997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
43998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
43999 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
44000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44002 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
44003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44005 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
44006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44008 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
44009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44011 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
44012 : END DO
44013 : END DO
44014 : END DO
44015 : s_offset_d1 = s_offset_d1 + 7
44016 : END DO
44017 : s_offset_c1 = s_offset_c1 + 3
44018 : END DO
44019 : s_offset_b1 = s_offset_b1 + 9
44020 : END DO
44021 : s_offset_a1 = s_offset_a1 + 3
44022 : END DO
44023 : END SUBROUTINE contract_pgpf
44024 : #endif
44025 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44026 : ! **************************************************************************************************
44027 : !> \brief ...
44028 : !> \param work ...
44029 : !> \param nl_a ...
44030 : !> \param nl_b ...
44031 : !> \param nl_c ...
44032 : !> \param nl_d ...
44033 : !> \param sphi_a ...
44034 : !> \param sphi_b ...
44035 : !> \param sphi_c ...
44036 : !> \param sphi_d ...
44037 : !> \param primitives ...
44038 : !> \param buffer1 ...
44039 : !> \param buffer2 ...
44040 : ! **************************************************************************************************
44041 : SUBROUTINE contract_pgpg(work, &
44042 : nl_a, nl_b, nl_c, nl_d, &
44043 : sphi_a, sphi_b, sphi_c, sphi_d, &
44044 : primitives, &
44045 : buffer1, buffer2)
44046 : REAL(dp), DIMENSION(3*15*3*15), INTENT(IN) :: work
44047 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44048 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44049 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44050 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
44051 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
44052 : REAL(dp), &
44053 : DIMENSION(3*nl_a, 9*nl_b, 3*nl_c, 9*nl_d) :: primitives
44054 : REAL(dp), DIMENSION(3*15*3*15) :: buffer1, buffer2
44055 :
44056 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44057 : kmax, s_offset_a1, s_offset_b1, &
44058 : s_offset_c1, s_offset_d1
44059 :
44060 : s_offset_a1 = 0
44061 : DO ia = 1, nl_a
44062 : s_offset_b1 = 0
44063 : DO ib = 1, nl_b
44064 : s_offset_c1 = 0
44065 : DO ic = 1, nl_c
44066 : s_offset_d1 = 0
44067 : DO id = 1, nl_d
44068 : buffer1 = 0.0_dp
44069 : imax = 15*3*15
44070 : kmax = 3
44071 : DO i = 1, imax
44072 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44073 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44074 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44075 : END DO
44076 : buffer2 = 0.0_dp
44077 : imax = 3*3*15
44078 : kmax = 15
44079 : DO i = 1, imax
44080 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44081 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44082 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44083 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44084 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44085 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44086 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44087 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44088 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44089 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44090 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44091 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44092 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44093 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44094 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44095 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44096 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44097 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44098 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44099 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44100 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44101 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44102 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44103 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44104 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44105 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44106 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44107 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44108 : END DO
44109 : buffer1 = 0.0_dp
44110 : imax = 3*9*15
44111 : kmax = 3
44112 : DO i = 1, imax
44113 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44114 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44115 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
44116 : END DO
44117 : imax = 3*9*3
44118 : kmax = 15
44119 : i = 0
44120 : DO i1 = 1, 3
44121 : DO i2 = 1, 9
44122 : DO i3 = 1, 3
44123 : i = i + 1
44124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44126 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
44127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44129 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
44130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44132 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
44133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44135 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
44136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44138 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
44139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44141 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
44142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
44143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
44144 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
44145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44147 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
44148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44150 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
44151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44153 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
44154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44156 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
44157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44159 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
44160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44162 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
44163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44165 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
44166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44168 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
44169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44171 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
44172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
44173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
44174 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
44175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44177 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
44178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44180 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
44181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44183 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
44184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44186 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
44187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44189 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
44190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44192 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
44193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44195 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
44196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44198 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
44199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44201 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
44202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44204 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
44205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44207 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
44208 : END DO
44209 : END DO
44210 : END DO
44211 : s_offset_d1 = s_offset_d1 + 9
44212 : END DO
44213 : s_offset_c1 = s_offset_c1 + 3
44214 : END DO
44215 : s_offset_b1 = s_offset_b1 + 9
44216 : END DO
44217 : s_offset_a1 = s_offset_a1 + 3
44218 : END DO
44219 : END SUBROUTINE contract_pgpg
44220 : #endif
44221 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44222 : ! **************************************************************************************************
44223 : !> \brief ...
44224 : !> \param work ...
44225 : !> \param nl_a ...
44226 : !> \param nl_b ...
44227 : !> \param nl_c ...
44228 : !> \param nl_d ...
44229 : !> \param sphi_a ...
44230 : !> \param sphi_b ...
44231 : !> \param sphi_c ...
44232 : !> \param sphi_d ...
44233 : !> \param primitives ...
44234 : !> \param buffer1 ...
44235 : !> \param buffer2 ...
44236 : ! **************************************************************************************************
44237 : SUBROUTINE contract_pgds(work, &
44238 : nl_a, nl_b, nl_c, nl_d, &
44239 : sphi_a, sphi_b, sphi_c, sphi_d, &
44240 : primitives, &
44241 : buffer1, buffer2)
44242 : REAL(dp), DIMENSION(3*15*6*1), INTENT(IN) :: work
44243 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44244 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44245 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44246 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
44247 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
44248 : REAL(dp), &
44249 : DIMENSION(3*nl_a, 9*nl_b, 5*nl_c, 1*nl_d) :: primitives
44250 : REAL(dp), DIMENSION(3*15*6*1) :: buffer1, buffer2
44251 :
44252 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44253 : kmax, s_offset_a1, s_offset_b1, &
44254 : s_offset_c1, s_offset_d1
44255 :
44256 : s_offset_a1 = 0
44257 : DO ia = 1, nl_a
44258 : s_offset_b1 = 0
44259 : DO ib = 1, nl_b
44260 : s_offset_c1 = 0
44261 : DO ic = 1, nl_c
44262 : s_offset_d1 = 0
44263 : DO id = 1, nl_d
44264 : buffer1 = 0.0_dp
44265 : imax = 15*6*1
44266 : kmax = 3
44267 : DO i = 1, imax
44268 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44269 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44270 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44271 : END DO
44272 : buffer2 = 0.0_dp
44273 : imax = 3*6*1
44274 : kmax = 15
44275 : DO i = 1, imax
44276 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44277 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44278 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44279 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44280 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44281 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44282 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44283 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44284 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44285 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44286 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44287 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44288 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44289 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44290 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44291 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44292 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44293 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44294 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44296 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44297 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44298 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44299 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44300 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44301 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44302 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44303 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44304 : END DO
44305 : buffer1 = 0.0_dp
44306 : imax = 3*9*1
44307 : kmax = 6
44308 : DO i = 1, imax
44309 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44310 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
44311 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44312 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
44313 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
44314 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
44315 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
44316 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
44317 : END DO
44318 : imax = 3*9*5
44319 : kmax = 1
44320 : i = 0
44321 : DO i1 = 1, 5
44322 : DO i2 = 1, 9
44323 : DO i3 = 1, 3
44324 : i = i + 1
44325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
44327 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
44328 : END DO
44329 : END DO
44330 : END DO
44331 : s_offset_d1 = s_offset_d1 + 1
44332 : END DO
44333 : s_offset_c1 = s_offset_c1 + 5
44334 : END DO
44335 : s_offset_b1 = s_offset_b1 + 9
44336 : END DO
44337 : s_offset_a1 = s_offset_a1 + 3
44338 : END DO
44339 : END SUBROUTINE contract_pgds
44340 : #endif
44341 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44342 : ! **************************************************************************************************
44343 : !> \brief ...
44344 : !> \param work ...
44345 : !> \param nl_a ...
44346 : !> \param nl_b ...
44347 : !> \param nl_c ...
44348 : !> \param nl_d ...
44349 : !> \param sphi_a ...
44350 : !> \param sphi_b ...
44351 : !> \param sphi_c ...
44352 : !> \param sphi_d ...
44353 : !> \param primitives ...
44354 : !> \param buffer1 ...
44355 : !> \param buffer2 ...
44356 : ! **************************************************************************************************
44357 : SUBROUTINE contract_pgdp(work, &
44358 : nl_a, nl_b, nl_c, nl_d, &
44359 : sphi_a, sphi_b, sphi_c, sphi_d, &
44360 : primitives, &
44361 : buffer1, buffer2)
44362 : REAL(dp), DIMENSION(3*15*6*3), INTENT(IN) :: work
44363 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44364 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44365 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44366 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
44367 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
44368 : REAL(dp), &
44369 : DIMENSION(3*nl_a, 9*nl_b, 5*nl_c, 3*nl_d) :: primitives
44370 : REAL(dp), DIMENSION(3*15*6*3) :: buffer1, buffer2
44371 :
44372 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44373 : kmax, s_offset_a1, s_offset_b1, &
44374 : s_offset_c1, s_offset_d1
44375 :
44376 : s_offset_a1 = 0
44377 : DO ia = 1, nl_a
44378 : s_offset_b1 = 0
44379 : DO ib = 1, nl_b
44380 : s_offset_c1 = 0
44381 : DO ic = 1, nl_c
44382 : s_offset_d1 = 0
44383 : DO id = 1, nl_d
44384 : buffer1 = 0.0_dp
44385 : imax = 15*6*3
44386 : kmax = 3
44387 : DO i = 1, imax
44388 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44389 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44390 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44391 : END DO
44392 : buffer2 = 0.0_dp
44393 : imax = 3*6*3
44394 : kmax = 15
44395 : DO i = 1, imax
44396 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44397 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44398 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44399 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44400 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44401 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44402 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44403 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44404 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44405 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44406 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44407 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44408 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44409 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44410 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44411 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44412 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44413 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44414 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44415 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44416 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44417 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44418 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44419 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44420 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44421 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44422 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44423 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44424 : END DO
44425 : buffer1 = 0.0_dp
44426 : imax = 3*9*3
44427 : kmax = 6
44428 : DO i = 1, imax
44429 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44430 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
44431 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44432 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
44433 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
44434 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
44435 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
44436 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
44437 : END DO
44438 : imax = 3*9*5
44439 : kmax = 3
44440 : i = 0
44441 : DO i1 = 1, 5
44442 : DO i2 = 1, 9
44443 : DO i3 = 1, 3
44444 : i = i + 1
44445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
44447 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
44448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
44450 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
44451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
44453 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
44454 : END DO
44455 : END DO
44456 : END DO
44457 : s_offset_d1 = s_offset_d1 + 3
44458 : END DO
44459 : s_offset_c1 = s_offset_c1 + 5
44460 : END DO
44461 : s_offset_b1 = s_offset_b1 + 9
44462 : END DO
44463 : s_offset_a1 = s_offset_a1 + 3
44464 : END DO
44465 : END SUBROUTINE contract_pgdp
44466 : #endif
44467 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44468 : ! **************************************************************************************************
44469 : !> \brief ...
44470 : !> \param work ...
44471 : !> \param nl_a ...
44472 : !> \param nl_b ...
44473 : !> \param nl_c ...
44474 : !> \param nl_d ...
44475 : !> \param sphi_a ...
44476 : !> \param sphi_b ...
44477 : !> \param sphi_c ...
44478 : !> \param sphi_d ...
44479 : !> \param primitives ...
44480 : !> \param buffer1 ...
44481 : !> \param buffer2 ...
44482 : ! **************************************************************************************************
44483 : SUBROUTINE contract_pgdd(work, &
44484 : nl_a, nl_b, nl_c, nl_d, &
44485 : sphi_a, sphi_b, sphi_c, sphi_d, &
44486 : primitives, &
44487 : buffer1, buffer2)
44488 : REAL(dp), DIMENSION(3*15*6*6), INTENT(IN) :: work
44489 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44490 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44491 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44492 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
44493 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
44494 : REAL(dp), &
44495 : DIMENSION(3*nl_a, 9*nl_b, 5*nl_c, 5*nl_d) :: primitives
44496 : REAL(dp), DIMENSION(3*15*6*6) :: buffer1, buffer2
44497 :
44498 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44499 : kmax, s_offset_a1, s_offset_b1, &
44500 : s_offset_c1, s_offset_d1
44501 :
44502 : s_offset_a1 = 0
44503 : DO ia = 1, nl_a
44504 : s_offset_b1 = 0
44505 : DO ib = 1, nl_b
44506 : s_offset_c1 = 0
44507 : DO ic = 1, nl_c
44508 : s_offset_d1 = 0
44509 : DO id = 1, nl_d
44510 : buffer1 = 0.0_dp
44511 : imax = 15*6*6
44512 : kmax = 3
44513 : DO i = 1, imax
44514 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44515 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44516 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44517 : END DO
44518 : buffer2 = 0.0_dp
44519 : imax = 3*6*6
44520 : kmax = 15
44521 : DO i = 1, imax
44522 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44523 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44524 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44525 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44526 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44527 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44528 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44529 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44530 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44531 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44532 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44533 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44534 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44535 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44536 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44537 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44538 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44539 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44540 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44541 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44542 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44543 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44544 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44545 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44546 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44547 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44548 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44549 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44550 : END DO
44551 : buffer1 = 0.0_dp
44552 : imax = 3*9*6
44553 : kmax = 6
44554 : DO i = 1, imax
44555 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44556 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
44557 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44558 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
44559 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
44560 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
44561 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
44562 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
44563 : END DO
44564 : imax = 3*9*5
44565 : kmax = 6
44566 : i = 0
44567 : DO i1 = 1, 5
44568 : DO i2 = 1, 9
44569 : DO i3 = 1, 3
44570 : i = i + 1
44571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44573 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
44574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44576 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
44577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44579 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
44580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44582 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
44583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44585 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
44586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44588 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
44589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44591 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
44592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44594 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
44595 : END DO
44596 : END DO
44597 : END DO
44598 : s_offset_d1 = s_offset_d1 + 5
44599 : END DO
44600 : s_offset_c1 = s_offset_c1 + 5
44601 : END DO
44602 : s_offset_b1 = s_offset_b1 + 9
44603 : END DO
44604 : s_offset_a1 = s_offset_a1 + 3
44605 : END DO
44606 : END SUBROUTINE contract_pgdd
44607 : #endif
44608 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44609 : ! **************************************************************************************************
44610 : !> \brief ...
44611 : !> \param work ...
44612 : !> \param nl_a ...
44613 : !> \param nl_b ...
44614 : !> \param nl_c ...
44615 : !> \param nl_d ...
44616 : !> \param sphi_a ...
44617 : !> \param sphi_b ...
44618 : !> \param sphi_c ...
44619 : !> \param sphi_d ...
44620 : !> \param primitives ...
44621 : !> \param buffer1 ...
44622 : !> \param buffer2 ...
44623 : ! **************************************************************************************************
44624 : SUBROUTINE contract_pgdf(work, &
44625 : nl_a, nl_b, nl_c, nl_d, &
44626 : sphi_a, sphi_b, sphi_c, sphi_d, &
44627 : primitives, &
44628 : buffer1, buffer2)
44629 : REAL(dp), DIMENSION(3*15*6*10), INTENT(IN) :: work
44630 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44631 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44632 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44633 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
44634 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
44635 : REAL(dp), &
44636 : DIMENSION(3*nl_a, 9*nl_b, 5*nl_c, 7*nl_d) :: primitives
44637 : REAL(dp), DIMENSION(3*15*6*10) :: buffer1, buffer2
44638 :
44639 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44640 : kmax, s_offset_a1, s_offset_b1, &
44641 : s_offset_c1, s_offset_d1
44642 :
44643 : s_offset_a1 = 0
44644 : DO ia = 1, nl_a
44645 : s_offset_b1 = 0
44646 : DO ib = 1, nl_b
44647 : s_offset_c1 = 0
44648 : DO ic = 1, nl_c
44649 : s_offset_d1 = 0
44650 : DO id = 1, nl_d
44651 : buffer1 = 0.0_dp
44652 : imax = 15*6*10
44653 : kmax = 3
44654 : DO i = 1, imax
44655 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44656 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44657 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44658 : END DO
44659 : buffer2 = 0.0_dp
44660 : imax = 3*6*10
44661 : kmax = 15
44662 : DO i = 1, imax
44663 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44664 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44665 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44666 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44667 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44668 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44669 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44670 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44671 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44672 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44673 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44674 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44675 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44676 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44677 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44678 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44679 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44680 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44681 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44682 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44683 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44684 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44685 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44686 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44687 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44688 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44689 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44690 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44691 : END DO
44692 : buffer1 = 0.0_dp
44693 : imax = 3*9*10
44694 : kmax = 6
44695 : DO i = 1, imax
44696 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44697 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
44698 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44699 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
44700 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
44701 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
44702 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
44703 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
44704 : END DO
44705 : imax = 3*9*5
44706 : kmax = 10
44707 : i = 0
44708 : DO i1 = 1, 5
44709 : DO i2 = 1, 9
44710 : DO i3 = 1, 3
44711 : i = i + 1
44712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44714 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
44715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44717 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
44718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44720 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
44721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44723 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
44724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44726 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
44727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44729 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
44730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44732 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
44733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44735 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
44736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44738 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
44739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44741 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
44742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44744 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
44745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44747 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
44748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44750 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
44751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44753 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
44754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44756 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
44757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44759 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
44760 : END DO
44761 : END DO
44762 : END DO
44763 : s_offset_d1 = s_offset_d1 + 7
44764 : END DO
44765 : s_offset_c1 = s_offset_c1 + 5
44766 : END DO
44767 : s_offset_b1 = s_offset_b1 + 9
44768 : END DO
44769 : s_offset_a1 = s_offset_a1 + 3
44770 : END DO
44771 : END SUBROUTINE contract_pgdf
44772 : #endif
44773 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44774 : ! **************************************************************************************************
44775 : !> \brief ...
44776 : !> \param work ...
44777 : !> \param nl_a ...
44778 : !> \param nl_b ...
44779 : !> \param nl_c ...
44780 : !> \param nl_d ...
44781 : !> \param sphi_a ...
44782 : !> \param sphi_b ...
44783 : !> \param sphi_c ...
44784 : !> \param sphi_d ...
44785 : !> \param primitives ...
44786 : !> \param buffer1 ...
44787 : !> \param buffer2 ...
44788 : ! **************************************************************************************************
44789 : SUBROUTINE contract_pgdg(work, &
44790 : nl_a, nl_b, nl_c, nl_d, &
44791 : sphi_a, sphi_b, sphi_c, sphi_d, &
44792 : primitives, &
44793 : buffer1, buffer2)
44794 : REAL(dp), DIMENSION(3*15*6*15), INTENT(IN) :: work
44795 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44796 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44797 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44798 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
44799 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
44800 : REAL(dp), &
44801 : DIMENSION(3*nl_a, 9*nl_b, 5*nl_c, 9*nl_d) :: primitives
44802 : REAL(dp), DIMENSION(3*15*6*15) :: buffer1, buffer2
44803 :
44804 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
44805 : kmax, s_offset_a1, s_offset_b1, &
44806 : s_offset_c1, s_offset_d1
44807 :
44808 : s_offset_a1 = 0
44809 : DO ia = 1, nl_a
44810 : s_offset_b1 = 0
44811 : DO ib = 1, nl_b
44812 : s_offset_c1 = 0
44813 : DO ic = 1, nl_c
44814 : s_offset_d1 = 0
44815 : DO id = 1, nl_d
44816 : buffer1 = 0.0_dp
44817 : imax = 15*6*15
44818 : kmax = 3
44819 : DO i = 1, imax
44820 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
44821 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
44822 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
44823 : END DO
44824 : buffer2 = 0.0_dp
44825 : imax = 3*6*15
44826 : kmax = 15
44827 : DO i = 1, imax
44828 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
44829 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
44830 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
44831 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
44832 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
44833 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
44834 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
44835 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
44836 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
44837 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
44838 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
44839 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
44840 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
44841 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
44842 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
44843 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
44844 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
44845 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
44846 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
44847 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
44848 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
44849 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
44850 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
44851 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
44852 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
44853 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
44854 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
44855 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
44856 : END DO
44857 : buffer1 = 0.0_dp
44858 : imax = 3*9*15
44859 : kmax = 6
44860 : DO i = 1, imax
44861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
44862 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
44863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
44864 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
44865 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
44866 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
44867 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
44868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
44869 : END DO
44870 : imax = 3*9*5
44871 : kmax = 15
44872 : i = 0
44873 : DO i1 = 1, 5
44874 : DO i2 = 1, 9
44875 : DO i3 = 1, 3
44876 : i = i + 1
44877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44879 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
44880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44882 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
44883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44885 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
44886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44888 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
44889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44891 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
44892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44894 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
44895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
44896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
44897 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
44898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44900 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
44901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44903 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
44904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44906 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
44907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44909 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
44910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44912 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
44913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44915 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
44916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
44917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
44918 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
44919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44921 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
44922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44924 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
44925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
44926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
44927 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
44928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
44929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
44930 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
44931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
44932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
44933 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
44934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44936 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
44937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44939 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
44940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
44941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
44942 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
44943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
44944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
44945 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
44946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44948 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
44949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44951 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
44952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
44953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
44954 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
44955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
44956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
44957 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
44958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
44959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
44960 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
44961 : END DO
44962 : END DO
44963 : END DO
44964 : s_offset_d1 = s_offset_d1 + 9
44965 : END DO
44966 : s_offset_c1 = s_offset_c1 + 5
44967 : END DO
44968 : s_offset_b1 = s_offset_b1 + 9
44969 : END DO
44970 : s_offset_a1 = s_offset_a1 + 3
44971 : END DO
44972 : END SUBROUTINE contract_pgdg
44973 : #endif
44974 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
44975 : ! **************************************************************************************************
44976 : !> \brief ...
44977 : !> \param work ...
44978 : !> \param nl_a ...
44979 : !> \param nl_b ...
44980 : !> \param nl_c ...
44981 : !> \param nl_d ...
44982 : !> \param sphi_a ...
44983 : !> \param sphi_b ...
44984 : !> \param sphi_c ...
44985 : !> \param sphi_d ...
44986 : !> \param primitives ...
44987 : !> \param buffer1 ...
44988 : !> \param buffer2 ...
44989 : ! **************************************************************************************************
44990 : SUBROUTINE contract_pgfs(work, &
44991 : nl_a, nl_b, nl_c, nl_d, &
44992 : sphi_a, sphi_b, sphi_c, sphi_d, &
44993 : primitives, &
44994 : buffer1, buffer2)
44995 : REAL(dp), DIMENSION(3*15*10*1), INTENT(IN) :: work
44996 : INTEGER :: nl_a, nl_b, nl_c, nl_d
44997 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
44998 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
44999 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
45000 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
45001 : REAL(dp), &
45002 : DIMENSION(3*nl_a, 9*nl_b, 7*nl_c, 1*nl_d) :: primitives
45003 : REAL(dp), DIMENSION(3*15*10*1) :: buffer1, buffer2
45004 :
45005 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45006 : kmax, s_offset_a1, s_offset_b1, &
45007 : s_offset_c1, s_offset_d1
45008 :
45009 : s_offset_a1 = 0
45010 : DO ia = 1, nl_a
45011 : s_offset_b1 = 0
45012 : DO ib = 1, nl_b
45013 : s_offset_c1 = 0
45014 : DO ic = 1, nl_c
45015 : s_offset_d1 = 0
45016 : DO id = 1, nl_d
45017 : buffer1 = 0.0_dp
45018 : imax = 15*10*1
45019 : kmax = 3
45020 : DO i = 1, imax
45021 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45022 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45023 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45024 : END DO
45025 : buffer2 = 0.0_dp
45026 : imax = 3*10*1
45027 : kmax = 15
45028 : DO i = 1, imax
45029 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45030 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45031 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45032 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45033 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45034 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45035 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45036 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45037 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45038 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45039 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45040 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45041 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45042 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45043 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45044 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45045 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45046 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45047 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45048 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45049 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45050 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45051 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45052 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45053 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45054 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45055 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45056 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45057 : END DO
45058 : buffer1 = 0.0_dp
45059 : imax = 3*9*1
45060 : kmax = 10
45061 : DO i = 1, imax
45062 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45063 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45064 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45065 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45066 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
45067 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45068 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45069 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
45070 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45072 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45073 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45074 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
45075 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45077 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
45078 : END DO
45079 : imax = 3*9*7
45080 : kmax = 1
45081 : i = 0
45082 : DO i1 = 1, 7
45083 : DO i2 = 1, 9
45084 : DO i3 = 1, 3
45085 : i = i + 1
45086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
45088 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
45089 : END DO
45090 : END DO
45091 : END DO
45092 : s_offset_d1 = s_offset_d1 + 1
45093 : END DO
45094 : s_offset_c1 = s_offset_c1 + 7
45095 : END DO
45096 : s_offset_b1 = s_offset_b1 + 9
45097 : END DO
45098 : s_offset_a1 = s_offset_a1 + 3
45099 : END DO
45100 : END SUBROUTINE contract_pgfs
45101 : #endif
45102 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45103 : ! **************************************************************************************************
45104 : !> \brief ...
45105 : !> \param work ...
45106 : !> \param nl_a ...
45107 : !> \param nl_b ...
45108 : !> \param nl_c ...
45109 : !> \param nl_d ...
45110 : !> \param sphi_a ...
45111 : !> \param sphi_b ...
45112 : !> \param sphi_c ...
45113 : !> \param sphi_d ...
45114 : !> \param primitives ...
45115 : !> \param buffer1 ...
45116 : !> \param buffer2 ...
45117 : ! **************************************************************************************************
45118 : SUBROUTINE contract_pgfp(work, &
45119 : nl_a, nl_b, nl_c, nl_d, &
45120 : sphi_a, sphi_b, sphi_c, sphi_d, &
45121 : primitives, &
45122 : buffer1, buffer2)
45123 : REAL(dp), DIMENSION(3*15*10*3), INTENT(IN) :: work
45124 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45125 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45126 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45127 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
45128 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
45129 : REAL(dp), &
45130 : DIMENSION(3*nl_a, 9*nl_b, 7*nl_c, 3*nl_d) :: primitives
45131 : REAL(dp), DIMENSION(3*15*10*3) :: buffer1, buffer2
45132 :
45133 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45134 : kmax, s_offset_a1, s_offset_b1, &
45135 : s_offset_c1, s_offset_d1
45136 :
45137 : s_offset_a1 = 0
45138 : DO ia = 1, nl_a
45139 : s_offset_b1 = 0
45140 : DO ib = 1, nl_b
45141 : s_offset_c1 = 0
45142 : DO ic = 1, nl_c
45143 : s_offset_d1 = 0
45144 : DO id = 1, nl_d
45145 : buffer1 = 0.0_dp
45146 : imax = 15*10*3
45147 : kmax = 3
45148 : DO i = 1, imax
45149 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45150 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45151 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45152 : END DO
45153 : buffer2 = 0.0_dp
45154 : imax = 3*10*3
45155 : kmax = 15
45156 : DO i = 1, imax
45157 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45158 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45159 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45160 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45161 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45162 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45163 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45164 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45165 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45166 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45167 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45168 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45169 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45170 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45171 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45172 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45173 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45174 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45175 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45176 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45177 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45178 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45179 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45180 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45181 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45182 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45183 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45184 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45185 : END DO
45186 : buffer1 = 0.0_dp
45187 : imax = 3*9*3
45188 : kmax = 10
45189 : DO i = 1, imax
45190 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45191 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45192 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45193 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45194 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
45195 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45196 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45197 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
45198 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45199 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45200 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45201 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45202 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
45203 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45204 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
45206 : END DO
45207 : imax = 3*9*7
45208 : kmax = 3
45209 : i = 0
45210 : DO i1 = 1, 7
45211 : DO i2 = 1, 9
45212 : DO i3 = 1, 3
45213 : i = i + 1
45214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
45216 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
45217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
45219 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
45220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
45221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
45222 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
45223 : END DO
45224 : END DO
45225 : END DO
45226 : s_offset_d1 = s_offset_d1 + 3
45227 : END DO
45228 : s_offset_c1 = s_offset_c1 + 7
45229 : END DO
45230 : s_offset_b1 = s_offset_b1 + 9
45231 : END DO
45232 : s_offset_a1 = s_offset_a1 + 3
45233 : END DO
45234 : END SUBROUTINE contract_pgfp
45235 : #endif
45236 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45237 : ! **************************************************************************************************
45238 : !> \brief ...
45239 : !> \param work ...
45240 : !> \param nl_a ...
45241 : !> \param nl_b ...
45242 : !> \param nl_c ...
45243 : !> \param nl_d ...
45244 : !> \param sphi_a ...
45245 : !> \param sphi_b ...
45246 : !> \param sphi_c ...
45247 : !> \param sphi_d ...
45248 : !> \param primitives ...
45249 : !> \param buffer1 ...
45250 : !> \param buffer2 ...
45251 : ! **************************************************************************************************
45252 : SUBROUTINE contract_pgfd(work, &
45253 : nl_a, nl_b, nl_c, nl_d, &
45254 : sphi_a, sphi_b, sphi_c, sphi_d, &
45255 : primitives, &
45256 : buffer1, buffer2)
45257 : REAL(dp), DIMENSION(3*15*10*6), INTENT(IN) :: work
45258 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45259 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45260 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45261 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
45262 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
45263 : REAL(dp), &
45264 : DIMENSION(3*nl_a, 9*nl_b, 7*nl_c, 5*nl_d) :: primitives
45265 : REAL(dp), DIMENSION(3*15*10*6) :: buffer1, buffer2
45266 :
45267 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45268 : kmax, s_offset_a1, s_offset_b1, &
45269 : s_offset_c1, s_offset_d1
45270 :
45271 : s_offset_a1 = 0
45272 : DO ia = 1, nl_a
45273 : s_offset_b1 = 0
45274 : DO ib = 1, nl_b
45275 : s_offset_c1 = 0
45276 : DO ic = 1, nl_c
45277 : s_offset_d1 = 0
45278 : DO id = 1, nl_d
45279 : buffer1 = 0.0_dp
45280 : imax = 15*10*6
45281 : kmax = 3
45282 : DO i = 1, imax
45283 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45284 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45285 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45286 : END DO
45287 : buffer2 = 0.0_dp
45288 : imax = 3*10*6
45289 : kmax = 15
45290 : DO i = 1, imax
45291 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45292 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45293 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45294 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45295 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45296 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45297 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45298 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45299 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45300 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45301 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45302 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45303 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45304 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45305 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45306 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45307 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45308 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45309 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45310 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45311 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45312 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45313 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45314 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45315 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45316 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45317 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45318 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45319 : END DO
45320 : buffer1 = 0.0_dp
45321 : imax = 3*9*6
45322 : kmax = 10
45323 : DO i = 1, imax
45324 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45325 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45326 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45327 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45328 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
45329 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45331 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
45332 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45333 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45334 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45335 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45336 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
45337 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45338 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45339 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
45340 : END DO
45341 : imax = 3*9*7
45342 : kmax = 6
45343 : i = 0
45344 : DO i1 = 1, 7
45345 : DO i2 = 1, 9
45346 : DO i3 = 1, 3
45347 : i = i + 1
45348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45350 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
45351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45353 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
45354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
45356 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
45357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45359 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
45360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45362 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
45363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45365 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
45366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
45367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
45368 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
45369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45371 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
45372 : END DO
45373 : END DO
45374 : END DO
45375 : s_offset_d1 = s_offset_d1 + 5
45376 : END DO
45377 : s_offset_c1 = s_offset_c1 + 7
45378 : END DO
45379 : s_offset_b1 = s_offset_b1 + 9
45380 : END DO
45381 : s_offset_a1 = s_offset_a1 + 3
45382 : END DO
45383 : END SUBROUTINE contract_pgfd
45384 : #endif
45385 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45386 : ! **************************************************************************************************
45387 : !> \brief ...
45388 : !> \param work ...
45389 : !> \param nl_a ...
45390 : !> \param nl_b ...
45391 : !> \param nl_c ...
45392 : !> \param nl_d ...
45393 : !> \param sphi_a ...
45394 : !> \param sphi_b ...
45395 : !> \param sphi_c ...
45396 : !> \param sphi_d ...
45397 : !> \param primitives ...
45398 : !> \param buffer1 ...
45399 : !> \param buffer2 ...
45400 : ! **************************************************************************************************
45401 : SUBROUTINE contract_pgff(work, &
45402 : nl_a, nl_b, nl_c, nl_d, &
45403 : sphi_a, sphi_b, sphi_c, sphi_d, &
45404 : primitives, &
45405 : buffer1, buffer2)
45406 : REAL(dp), DIMENSION(3*15*10*10), INTENT(IN) :: work
45407 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45408 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45409 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45410 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
45411 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
45412 : REAL(dp), &
45413 : DIMENSION(3*nl_a, 9*nl_b, 7*nl_c, 7*nl_d) :: primitives
45414 : REAL(dp), DIMENSION(3*15*10*10) :: buffer1, buffer2
45415 :
45416 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45417 : kmax, s_offset_a1, s_offset_b1, &
45418 : s_offset_c1, s_offset_d1
45419 :
45420 : s_offset_a1 = 0
45421 : DO ia = 1, nl_a
45422 : s_offset_b1 = 0
45423 : DO ib = 1, nl_b
45424 : s_offset_c1 = 0
45425 : DO ic = 1, nl_c
45426 : s_offset_d1 = 0
45427 : DO id = 1, nl_d
45428 : buffer1 = 0.0_dp
45429 : imax = 15*10*10
45430 : kmax = 3
45431 : DO i = 1, imax
45432 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45433 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45434 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45435 : END DO
45436 : buffer2 = 0.0_dp
45437 : imax = 3*10*10
45438 : kmax = 15
45439 : DO i = 1, imax
45440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45441 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45442 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45443 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45444 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45445 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45446 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45447 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45448 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45449 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45450 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45451 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45452 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45453 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45454 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45455 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45456 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45457 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45458 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45459 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45460 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45461 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45462 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45463 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45464 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45465 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45466 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45467 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45468 : END DO
45469 : buffer1 = 0.0_dp
45470 : imax = 3*9*10
45471 : kmax = 10
45472 : DO i = 1, imax
45473 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45474 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45475 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45476 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45477 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
45478 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45479 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45480 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
45481 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45482 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45483 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45484 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45485 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
45486 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45487 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45488 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
45489 : END DO
45490 : imax = 3*9*7
45491 : kmax = 10
45492 : i = 0
45493 : DO i1 = 1, 7
45494 : DO i2 = 1, 9
45495 : DO i3 = 1, 3
45496 : i = i + 1
45497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45499 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
45500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45502 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
45503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
45505 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
45506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45508 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
45509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45511 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
45512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
45513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
45514 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
45515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45517 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
45518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45520 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
45521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
45522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
45523 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
45524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45526 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
45527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
45529 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
45530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45532 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
45533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45535 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
45536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
45537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
45538 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
45539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45541 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
45542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45544 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
45545 : END DO
45546 : END DO
45547 : END DO
45548 : s_offset_d1 = s_offset_d1 + 7
45549 : END DO
45550 : s_offset_c1 = s_offset_c1 + 7
45551 : END DO
45552 : s_offset_b1 = s_offset_b1 + 9
45553 : END DO
45554 : s_offset_a1 = s_offset_a1 + 3
45555 : END DO
45556 : END SUBROUTINE contract_pgff
45557 : #endif
45558 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45559 : ! **************************************************************************************************
45560 : !> \brief ...
45561 : !> \param work ...
45562 : !> \param nl_a ...
45563 : !> \param nl_b ...
45564 : !> \param nl_c ...
45565 : !> \param nl_d ...
45566 : !> \param sphi_a ...
45567 : !> \param sphi_b ...
45568 : !> \param sphi_c ...
45569 : !> \param sphi_d ...
45570 : !> \param primitives ...
45571 : !> \param buffer1 ...
45572 : !> \param buffer2 ...
45573 : ! **************************************************************************************************
45574 : SUBROUTINE contract_pgfg(work, &
45575 : nl_a, nl_b, nl_c, nl_d, &
45576 : sphi_a, sphi_b, sphi_c, sphi_d, &
45577 : primitives, &
45578 : buffer1, buffer2)
45579 : REAL(dp), DIMENSION(3*15*10*15), INTENT(IN) :: work
45580 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45581 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45582 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45583 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
45584 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
45585 : REAL(dp), &
45586 : DIMENSION(3*nl_a, 9*nl_b, 7*nl_c, 9*nl_d) :: primitives
45587 : REAL(dp), DIMENSION(3*15*10*15) :: buffer1, buffer2
45588 :
45589 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45590 : kmax, s_offset_a1, s_offset_b1, &
45591 : s_offset_c1, s_offset_d1
45592 :
45593 : s_offset_a1 = 0
45594 : DO ia = 1, nl_a
45595 : s_offset_b1 = 0
45596 : DO ib = 1, nl_b
45597 : s_offset_c1 = 0
45598 : DO ic = 1, nl_c
45599 : s_offset_d1 = 0
45600 : DO id = 1, nl_d
45601 : buffer1 = 0.0_dp
45602 : imax = 15*10*15
45603 : kmax = 3
45604 : DO i = 1, imax
45605 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45606 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45607 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45608 : END DO
45609 : buffer2 = 0.0_dp
45610 : imax = 3*10*15
45611 : kmax = 15
45612 : DO i = 1, imax
45613 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45614 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45615 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45616 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45617 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45618 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45619 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45620 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45621 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45622 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45623 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45624 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45625 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45626 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45627 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45628 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45629 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45630 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45631 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45632 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45633 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45634 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45635 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45636 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45637 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45638 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45639 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45640 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45641 : END DO
45642 : buffer1 = 0.0_dp
45643 : imax = 3*9*15
45644 : kmax = 10
45645 : DO i = 1, imax
45646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45647 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45648 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45649 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45650 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
45651 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45652 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45653 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
45654 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45655 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45656 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45657 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45658 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
45659 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45660 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45661 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
45662 : END DO
45663 : imax = 3*9*7
45664 : kmax = 15
45665 : i = 0
45666 : DO i1 = 1, 7
45667 : DO i2 = 1, 9
45668 : DO i3 = 1, 3
45669 : i = i + 1
45670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45672 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
45673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45675 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
45676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
45677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
45678 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
45679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
45681 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
45682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45684 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
45685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
45686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
45687 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
45688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
45689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
45690 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
45691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45693 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
45694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
45695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
45696 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
45697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
45698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
45699 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
45700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45702 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
45703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45705 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
45706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45708 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
45709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
45711 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
45712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45714 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
45715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
45716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
45717 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
45718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
45719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
45720 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
45721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
45722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
45723 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
45724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
45725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
45726 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
45727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45729 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
45730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45732 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
45733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
45734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
45735 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
45736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
45737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
45738 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
45739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45741 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
45742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45744 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
45745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
45746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
45747 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
45748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
45749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
45750 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
45751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
45752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
45753 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
45754 : END DO
45755 : END DO
45756 : END DO
45757 : s_offset_d1 = s_offset_d1 + 9
45758 : END DO
45759 : s_offset_c1 = s_offset_c1 + 7
45760 : END DO
45761 : s_offset_b1 = s_offset_b1 + 9
45762 : END DO
45763 : s_offset_a1 = s_offset_a1 + 3
45764 : END DO
45765 : END SUBROUTINE contract_pgfg
45766 : #endif
45767 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45768 : ! **************************************************************************************************
45769 : !> \brief ...
45770 : !> \param work ...
45771 : !> \param nl_a ...
45772 : !> \param nl_b ...
45773 : !> \param nl_c ...
45774 : !> \param nl_d ...
45775 : !> \param sphi_a ...
45776 : !> \param sphi_b ...
45777 : !> \param sphi_c ...
45778 : !> \param sphi_d ...
45779 : !> \param primitives ...
45780 : !> \param buffer1 ...
45781 : !> \param buffer2 ...
45782 : ! **************************************************************************************************
45783 : SUBROUTINE contract_pggs(work, &
45784 : nl_a, nl_b, nl_c, nl_d, &
45785 : sphi_a, sphi_b, sphi_c, sphi_d, &
45786 : primitives, &
45787 : buffer1, buffer2)
45788 : REAL(dp), DIMENSION(3*15*15*1), INTENT(IN) :: work
45789 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45790 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45791 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45792 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
45793 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
45794 : REAL(dp), &
45795 : DIMENSION(3*nl_a, 9*nl_b, 9*nl_c, 1*nl_d) :: primitives
45796 : REAL(dp), DIMENSION(3*15*15*1) :: buffer1, buffer2
45797 :
45798 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45799 : kmax, s_offset_a1, s_offset_b1, &
45800 : s_offset_c1, s_offset_d1
45801 :
45802 : s_offset_a1 = 0
45803 : DO ia = 1, nl_a
45804 : s_offset_b1 = 0
45805 : DO ib = 1, nl_b
45806 : s_offset_c1 = 0
45807 : DO ic = 1, nl_c
45808 : s_offset_d1 = 0
45809 : DO id = 1, nl_d
45810 : buffer1 = 0.0_dp
45811 : imax = 15*15*1
45812 : kmax = 3
45813 : DO i = 1, imax
45814 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45815 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45816 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45817 : END DO
45818 : buffer2 = 0.0_dp
45819 : imax = 3*15*1
45820 : kmax = 15
45821 : DO i = 1, imax
45822 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45823 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45824 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45825 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45826 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45827 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45828 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45829 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45830 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45831 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45832 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45833 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45834 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45835 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45836 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45837 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45838 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45839 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45840 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45841 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45842 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45843 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45844 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45845 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45846 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45847 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45848 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45849 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45850 : END DO
45851 : buffer1 = 0.0_dp
45852 : imax = 3*9*1
45853 : kmax = 15
45854 : DO i = 1, imax
45855 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45856 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45857 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
45858 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45859 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
45860 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
45861 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
45862 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
45863 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
45864 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
45865 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
45866 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
45867 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
45868 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
45869 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
45870 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
45871 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
45872 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
45873 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
45874 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
45875 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
45876 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
45877 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
45878 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
45879 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
45880 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
45881 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
45882 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
45883 : END DO
45884 : imax = 3*9*9
45885 : kmax = 1
45886 : i = 0
45887 : DO i1 = 1, 9
45888 : DO i2 = 1, 9
45889 : DO i3 = 1, 3
45890 : i = i + 1
45891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
45892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
45893 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
45894 : END DO
45895 : END DO
45896 : END DO
45897 : s_offset_d1 = s_offset_d1 + 1
45898 : END DO
45899 : s_offset_c1 = s_offset_c1 + 9
45900 : END DO
45901 : s_offset_b1 = s_offset_b1 + 9
45902 : END DO
45903 : s_offset_a1 = s_offset_a1 + 3
45904 : END DO
45905 : END SUBROUTINE contract_pggs
45906 : #endif
45907 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
45908 : ! **************************************************************************************************
45909 : !> \brief ...
45910 : !> \param work ...
45911 : !> \param nl_a ...
45912 : !> \param nl_b ...
45913 : !> \param nl_c ...
45914 : !> \param nl_d ...
45915 : !> \param sphi_a ...
45916 : !> \param sphi_b ...
45917 : !> \param sphi_c ...
45918 : !> \param sphi_d ...
45919 : !> \param primitives ...
45920 : !> \param buffer1 ...
45921 : !> \param buffer2 ...
45922 : ! **************************************************************************************************
45923 : SUBROUTINE contract_pggp(work, &
45924 : nl_a, nl_b, nl_c, nl_d, &
45925 : sphi_a, sphi_b, sphi_c, sphi_d, &
45926 : primitives, &
45927 : buffer1, buffer2)
45928 : REAL(dp), DIMENSION(3*15*15*3), INTENT(IN) :: work
45929 : INTEGER :: nl_a, nl_b, nl_c, nl_d
45930 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
45931 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
45932 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
45933 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
45934 : REAL(dp), &
45935 : DIMENSION(3*nl_a, 9*nl_b, 9*nl_c, 3*nl_d) :: primitives
45936 : REAL(dp), DIMENSION(3*15*15*3) :: buffer1, buffer2
45937 :
45938 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
45939 : kmax, s_offset_a1, s_offset_b1, &
45940 : s_offset_c1, s_offset_d1
45941 :
45942 : s_offset_a1 = 0
45943 : DO ia = 1, nl_a
45944 : s_offset_b1 = 0
45945 : DO ib = 1, nl_b
45946 : s_offset_c1 = 0
45947 : DO ic = 1, nl_c
45948 : s_offset_d1 = 0
45949 : DO id = 1, nl_d
45950 : buffer1 = 0.0_dp
45951 : imax = 15*15*3
45952 : kmax = 3
45953 : DO i = 1, imax
45954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
45955 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
45956 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
45957 : END DO
45958 : buffer2 = 0.0_dp
45959 : imax = 3*15*3
45960 : kmax = 15
45961 : DO i = 1, imax
45962 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
45963 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
45964 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
45965 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
45966 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
45967 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
45968 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
45969 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
45970 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
45971 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
45972 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
45973 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
45974 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
45975 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
45976 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
45977 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
45978 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
45979 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
45980 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
45981 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
45982 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
45983 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
45984 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
45985 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
45986 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
45987 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
45988 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
45989 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
45990 : END DO
45991 : buffer1 = 0.0_dp
45992 : imax = 3*9*3
45993 : kmax = 15
45994 : DO i = 1, imax
45995 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
45996 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
45997 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
45998 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
45999 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
46000 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
46001 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
46002 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
46003 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
46004 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
46005 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
46006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
46007 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
46008 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
46009 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
46010 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
46011 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
46012 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
46013 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
46014 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
46015 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
46016 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
46017 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
46018 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
46019 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
46020 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
46021 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
46022 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
46023 : END DO
46024 : imax = 3*9*9
46025 : kmax = 3
46026 : i = 0
46027 : DO i1 = 1, 9
46028 : DO i2 = 1, 9
46029 : DO i3 = 1, 3
46030 : i = i + 1
46031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
46033 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
46034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
46036 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
46039 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
46040 : END DO
46041 : END DO
46042 : END DO
46043 : s_offset_d1 = s_offset_d1 + 3
46044 : END DO
46045 : s_offset_c1 = s_offset_c1 + 9
46046 : END DO
46047 : s_offset_b1 = s_offset_b1 + 9
46048 : END DO
46049 : s_offset_a1 = s_offset_a1 + 3
46050 : END DO
46051 : END SUBROUTINE contract_pggp
46052 : #endif
46053 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
46054 : ! **************************************************************************************************
46055 : !> \brief ...
46056 : !> \param work ...
46057 : !> \param nl_a ...
46058 : !> \param nl_b ...
46059 : !> \param nl_c ...
46060 : !> \param nl_d ...
46061 : !> \param sphi_a ...
46062 : !> \param sphi_b ...
46063 : !> \param sphi_c ...
46064 : !> \param sphi_d ...
46065 : !> \param primitives ...
46066 : !> \param buffer1 ...
46067 : !> \param buffer2 ...
46068 : ! **************************************************************************************************
46069 : SUBROUTINE contract_pggd(work, &
46070 : nl_a, nl_b, nl_c, nl_d, &
46071 : sphi_a, sphi_b, sphi_c, sphi_d, &
46072 : primitives, &
46073 : buffer1, buffer2)
46074 : REAL(dp), DIMENSION(3*15*15*6), INTENT(IN) :: work
46075 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46076 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
46077 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
46078 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
46079 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
46080 : REAL(dp), &
46081 : DIMENSION(3*nl_a, 9*nl_b, 9*nl_c, 5*nl_d) :: primitives
46082 : REAL(dp), DIMENSION(3*15*15*6) :: buffer1, buffer2
46083 :
46084 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46085 : kmax, s_offset_a1, s_offset_b1, &
46086 : s_offset_c1, s_offset_d1
46087 :
46088 : s_offset_a1 = 0
46089 : DO ia = 1, nl_a
46090 : s_offset_b1 = 0
46091 : DO ib = 1, nl_b
46092 : s_offset_c1 = 0
46093 : DO ic = 1, nl_c
46094 : s_offset_d1 = 0
46095 : DO id = 1, nl_d
46096 : buffer1 = 0.0_dp
46097 : imax = 15*15*6
46098 : kmax = 3
46099 : DO i = 1, imax
46100 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46101 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46102 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
46103 : END DO
46104 : buffer2 = 0.0_dp
46105 : imax = 3*15*6
46106 : kmax = 15
46107 : DO i = 1, imax
46108 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
46109 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
46110 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
46111 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
46112 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
46113 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
46114 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
46115 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
46116 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
46117 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
46118 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
46119 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
46120 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
46121 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
46122 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
46123 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
46124 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
46125 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
46126 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
46127 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
46128 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
46129 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
46130 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
46131 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
46132 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
46133 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
46134 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
46135 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
46136 : END DO
46137 : buffer1 = 0.0_dp
46138 : imax = 3*9*6
46139 : kmax = 15
46140 : DO i = 1, imax
46141 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
46142 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
46143 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
46144 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
46145 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
46146 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
46147 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
46148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
46149 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
46150 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
46151 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
46152 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
46153 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
46154 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
46155 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
46156 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
46157 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
46158 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
46159 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
46160 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
46161 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
46162 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
46163 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
46164 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
46165 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
46166 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
46167 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
46168 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
46169 : END DO
46170 : imax = 3*9*9
46171 : kmax = 6
46172 : i = 0
46173 : DO i1 = 1, 9
46174 : DO i2 = 1, 9
46175 : DO i3 = 1, 3
46176 : i = i + 1
46177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46179 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
46180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46182 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
46183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46185 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46188 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
46189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46191 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
46192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46194 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
46195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
46197 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
46198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46200 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
46201 : END DO
46202 : END DO
46203 : END DO
46204 : s_offset_d1 = s_offset_d1 + 5
46205 : END DO
46206 : s_offset_c1 = s_offset_c1 + 9
46207 : END DO
46208 : s_offset_b1 = s_offset_b1 + 9
46209 : END DO
46210 : s_offset_a1 = s_offset_a1 + 3
46211 : END DO
46212 : END SUBROUTINE contract_pggd
46213 : #endif
46214 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
46215 : ! **************************************************************************************************
46216 : !> \brief ...
46217 : !> \param work ...
46218 : !> \param nl_a ...
46219 : !> \param nl_b ...
46220 : !> \param nl_c ...
46221 : !> \param nl_d ...
46222 : !> \param sphi_a ...
46223 : !> \param sphi_b ...
46224 : !> \param sphi_c ...
46225 : !> \param sphi_d ...
46226 : !> \param primitives ...
46227 : !> \param buffer1 ...
46228 : !> \param buffer2 ...
46229 : ! **************************************************************************************************
46230 : SUBROUTINE contract_pggf(work, &
46231 : nl_a, nl_b, nl_c, nl_d, &
46232 : sphi_a, sphi_b, sphi_c, sphi_d, &
46233 : primitives, &
46234 : buffer1, buffer2)
46235 : REAL(dp), DIMENSION(3*15*15*10), INTENT(IN) :: work
46236 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46237 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
46238 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
46239 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
46240 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
46241 : REAL(dp), &
46242 : DIMENSION(3*nl_a, 9*nl_b, 9*nl_c, 7*nl_d) :: primitives
46243 : REAL(dp), DIMENSION(3*15*15*10) :: buffer1, buffer2
46244 :
46245 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46246 : kmax, s_offset_a1, s_offset_b1, &
46247 : s_offset_c1, s_offset_d1
46248 :
46249 : s_offset_a1 = 0
46250 : DO ia = 1, nl_a
46251 : s_offset_b1 = 0
46252 : DO ib = 1, nl_b
46253 : s_offset_c1 = 0
46254 : DO ic = 1, nl_c
46255 : s_offset_d1 = 0
46256 : DO id = 1, nl_d
46257 : buffer1 = 0.0_dp
46258 : imax = 15*15*10
46259 : kmax = 3
46260 : DO i = 1, imax
46261 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46262 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46263 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
46264 : END DO
46265 : buffer2 = 0.0_dp
46266 : imax = 3*15*10
46267 : kmax = 15
46268 : DO i = 1, imax
46269 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
46270 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
46271 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
46272 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
46273 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
46274 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
46275 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
46276 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
46277 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
46278 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
46279 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
46280 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
46281 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
46282 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
46283 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
46284 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
46285 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
46286 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
46287 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
46288 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
46289 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
46290 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
46291 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
46292 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
46293 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
46294 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
46295 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
46296 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
46297 : END DO
46298 : buffer1 = 0.0_dp
46299 : imax = 3*9*10
46300 : kmax = 15
46301 : DO i = 1, imax
46302 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
46303 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
46304 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
46305 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
46306 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
46307 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
46308 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
46309 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
46310 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
46311 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
46312 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
46313 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
46314 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
46315 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
46316 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
46317 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
46318 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
46319 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
46320 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
46321 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
46322 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
46323 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
46324 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
46325 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
46326 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
46327 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
46328 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
46329 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
46330 : END DO
46331 : imax = 3*9*9
46332 : kmax = 10
46333 : i = 0
46334 : DO i1 = 1, 9
46335 : DO i2 = 1, 9
46336 : DO i3 = 1, 3
46337 : i = i + 1
46338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46340 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
46341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46343 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
46344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46346 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46349 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
46350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46352 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
46353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
46354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
46355 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
46356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46358 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
46359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46361 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
46362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
46364 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
46365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46367 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
46368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46370 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
46371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46373 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
46374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46376 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
46377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
46378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
46379 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
46380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46382 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
46383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46385 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
46386 : END DO
46387 : END DO
46388 : END DO
46389 : s_offset_d1 = s_offset_d1 + 7
46390 : END DO
46391 : s_offset_c1 = s_offset_c1 + 9
46392 : END DO
46393 : s_offset_b1 = s_offset_b1 + 9
46394 : END DO
46395 : s_offset_a1 = s_offset_a1 + 3
46396 : END DO
46397 : END SUBROUTINE contract_pggf
46398 : #endif
46399 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
46400 : ! **************************************************************************************************
46401 : !> \brief ...
46402 : !> \param work ...
46403 : !> \param nl_a ...
46404 : !> \param nl_b ...
46405 : !> \param nl_c ...
46406 : !> \param nl_d ...
46407 : !> \param sphi_a ...
46408 : !> \param sphi_b ...
46409 : !> \param sphi_c ...
46410 : !> \param sphi_d ...
46411 : !> \param primitives ...
46412 : !> \param buffer1 ...
46413 : !> \param buffer2 ...
46414 : ! **************************************************************************************************
46415 : SUBROUTINE contract_pggg(work, &
46416 : nl_a, nl_b, nl_c, nl_d, &
46417 : sphi_a, sphi_b, sphi_c, sphi_d, &
46418 : primitives, &
46419 : buffer1, buffer2)
46420 : REAL(dp), DIMENSION(3*15*15*15), INTENT(IN) :: work
46421 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46422 : REAL(dp), DIMENSION(3, 3*nl_a), INTENT(IN) :: sphi_a
46423 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
46424 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
46425 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
46426 : REAL(dp), &
46427 : DIMENSION(3*nl_a, 9*nl_b, 9*nl_c, 9*nl_d) :: primitives
46428 : REAL(dp), DIMENSION(3*15*15*15) :: buffer1, buffer2
46429 :
46430 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46431 : kmax, s_offset_a1, s_offset_b1, &
46432 : s_offset_c1, s_offset_d1
46433 :
46434 : s_offset_a1 = 0
46435 : DO ia = 1, nl_a
46436 : s_offset_b1 = 0
46437 : DO ib = 1, nl_b
46438 : s_offset_c1 = 0
46439 : DO ic = 1, nl_c
46440 : s_offset_d1 = 0
46441 : DO id = 1, nl_d
46442 : buffer1 = 0.0_dp
46443 : imax = 15*15*15
46444 : kmax = 3
46445 : DO i = 1, imax
46446 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46447 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46448 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
46449 : END DO
46450 : buffer2 = 0.0_dp
46451 : imax = 3*15*15
46452 : kmax = 15
46453 : DO i = 1, imax
46454 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
46455 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
46456 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
46457 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
46458 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
46459 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
46460 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
46461 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
46462 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
46463 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
46464 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
46465 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
46466 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
46467 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
46468 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
46469 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
46470 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
46471 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
46472 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
46473 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
46474 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
46475 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
46476 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
46477 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
46478 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
46479 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
46480 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
46481 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
46482 : END DO
46483 : buffer1 = 0.0_dp
46484 : imax = 3*9*15
46485 : kmax = 15
46486 : DO i = 1, imax
46487 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
46488 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
46489 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
46490 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
46491 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
46492 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
46493 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
46494 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
46495 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
46496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
46497 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
46498 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
46499 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
46500 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
46501 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
46502 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
46503 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
46504 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
46505 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
46506 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
46507 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
46508 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
46509 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
46510 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
46511 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
46512 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
46513 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
46514 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
46515 : END DO
46516 : imax = 3*9*9
46517 : kmax = 15
46518 : i = 0
46519 : DO i1 = 1, 9
46520 : DO i2 = 1, 9
46521 : DO i3 = 1, 3
46522 : i = i + 1
46523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46525 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
46526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46528 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
46529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
46530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
46531 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
46532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46534 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46537 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
46538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
46539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
46540 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
46541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
46542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
46543 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
46544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46546 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
46547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
46548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
46549 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
46550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
46552 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
46553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46555 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
46556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46558 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
46559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46561 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
46562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46564 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
46565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46567 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
46568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
46569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
46570 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
46571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
46572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
46573 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
46574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46576 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
46577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
46578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
46579 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
46580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46582 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
46583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46585 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
46586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
46587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
46588 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
46589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
46591 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
46592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46594 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
46595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46597 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
46598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
46600 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
46601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46603 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
46604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46606 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
46607 : END DO
46608 : END DO
46609 : END DO
46610 : s_offset_d1 = s_offset_d1 + 9
46611 : END DO
46612 : s_offset_c1 = s_offset_c1 + 9
46613 : END DO
46614 : s_offset_b1 = s_offset_b1 + 9
46615 : END DO
46616 : s_offset_a1 = s_offset_a1 + 3
46617 : END DO
46618 : END SUBROUTINE contract_pggg
46619 : #endif
46620 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
46621 : ! **************************************************************************************************
46622 : !> \brief ...
46623 : !> \param work ...
46624 : !> \param nl_a ...
46625 : !> \param nl_b ...
46626 : !> \param nl_c ...
46627 : !> \param nl_d ...
46628 : !> \param sphi_a ...
46629 : !> \param sphi_b ...
46630 : !> \param sphi_c ...
46631 : !> \param sphi_d ...
46632 : !> \param primitives ...
46633 : !> \param buffer1 ...
46634 : !> \param buffer2 ...
46635 : ! **************************************************************************************************
46636 3803618 : SUBROUTINE contract_dsss(work, &
46637 : nl_a, nl_b, nl_c, nl_d, &
46638 3803618 : sphi_a, sphi_b, sphi_c, sphi_d, &
46639 3803618 : primitives, &
46640 : buffer1, buffer2)
46641 : REAL(dp), DIMENSION(6*1*1*1), INTENT(IN) :: work
46642 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46643 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
46644 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
46645 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
46646 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
46647 : REAL(dp), &
46648 : DIMENSION(5*nl_a, 1*nl_b, 1*nl_c, 1*nl_d) :: primitives
46649 : REAL(dp), DIMENSION(6*1*1*1) :: buffer1, buffer2
46650 :
46651 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46652 : kmax, s_offset_a1, s_offset_b1, &
46653 : s_offset_c1, s_offset_d1
46654 :
46655 3803618 : s_offset_a1 = 0
46656 7717940 : DO ia = 1, nl_a
46657 : s_offset_b1 = 0
46658 9459568 : DO ib = 1, nl_b
46659 : s_offset_c1 = 0
46660 14203263 : DO ic = 1, nl_c
46661 : s_offset_d1 = 0
46662 23473773 : DO id = 1, nl_d
46663 14815756 : buffer1 = 0.0_dp
46664 14815756 : imax = 1*1*1
46665 14815756 : kmax = 6
46666 29631512 : DO i = 1, imax
46667 14815756 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46668 14815756 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
46669 14815756 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46670 14815756 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
46671 14815756 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
46672 14815756 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
46673 14815756 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
46674 29631512 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
46675 : END DO
46676 14815756 : buffer2 = 0.0_dp
46677 14815756 : imax = 5*1*1
46678 14815756 : kmax = 1
46679 88894536 : DO i = 1, imax
46680 88894536 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
46681 : END DO
46682 14815756 : buffer1 = 0.0_dp
46683 14815756 : imax = 5*1*1
46684 14815756 : kmax = 1
46685 88894536 : DO i = 1, imax
46686 88894536 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
46687 : END DO
46688 29631512 : imax = 5*1*1
46689 29631512 : kmax = 1
46690 : i = 0
46691 29631512 : DO i1 = 1, 1
46692 44447268 : DO i2 = 1, 1
46693 103710292 : DO i3 = 1, 5
46694 74078780 : i = i + 1
46695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
46697 88894536 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
46698 : END DO
46699 : END DO
46700 : END DO
46701 23473773 : s_offset_d1 = s_offset_d1 + 1
46702 : END DO
46703 14203263 : s_offset_c1 = s_offset_c1 + 1
46704 : END DO
46705 9459568 : s_offset_b1 = s_offset_b1 + 1
46706 : END DO
46707 7717940 : s_offset_a1 = s_offset_a1 + 5
46708 : END DO
46709 3803618 : END SUBROUTINE contract_dsss
46710 : #endif
46711 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
46712 : ! **************************************************************************************************
46713 : !> \brief ...
46714 : !> \param work ...
46715 : !> \param nl_a ...
46716 : !> \param nl_b ...
46717 : !> \param nl_c ...
46718 : !> \param nl_d ...
46719 : !> \param sphi_a ...
46720 : !> \param sphi_b ...
46721 : !> \param sphi_c ...
46722 : !> \param sphi_d ...
46723 : !> \param primitives ...
46724 : !> \param buffer1 ...
46725 : !> \param buffer2 ...
46726 : ! **************************************************************************************************
46727 2204602 : SUBROUTINE contract_dssp(work, &
46728 : nl_a, nl_b, nl_c, nl_d, &
46729 2204602 : sphi_a, sphi_b, sphi_c, sphi_d, &
46730 2204602 : primitives, &
46731 : buffer1, buffer2)
46732 : REAL(dp), DIMENSION(6*1*1*3), INTENT(IN) :: work
46733 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46734 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
46735 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
46736 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
46737 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
46738 : REAL(dp), &
46739 : DIMENSION(5*nl_a, 1*nl_b, 1*nl_c, 3*nl_d) :: primitives
46740 : REAL(dp), DIMENSION(6*1*1*3) :: buffer1, buffer2
46741 :
46742 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46743 : kmax, s_offset_a1, s_offset_b1, &
46744 : s_offset_c1, s_offset_d1
46745 :
46746 2204602 : s_offset_a1 = 0
46747 4498748 : DO ia = 1, nl_a
46748 : s_offset_b1 = 0
46749 5761486 : DO ib = 1, nl_b
46750 : s_offset_c1 = 0
46751 9121239 : DO ic = 1, nl_c
46752 : s_offset_d1 = 0
46753 14409734 : DO id = 1, nl_d
46754 8755835 : buffer1 = 0.0_dp
46755 8755835 : imax = 1*1*3
46756 8755835 : kmax = 6
46757 35023340 : DO i = 1, imax
46758 26267505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46759 26267505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
46760 26267505 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46761 26267505 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
46762 26267505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
46763 26267505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
46764 26267505 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
46765 35023340 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
46766 : END DO
46767 8755835 : buffer2 = 0.0_dp
46768 8755835 : imax = 5*1*3
46769 8755835 : kmax = 1
46770 140093360 : DO i = 1, imax
46771 140093360 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
46772 : END DO
46773 8755835 : buffer1 = 0.0_dp
46774 8755835 : imax = 5*1*3
46775 8755835 : kmax = 1
46776 140093360 : DO i = 1, imax
46777 140093360 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
46778 : END DO
46779 17511670 : imax = 5*1*1
46780 17511670 : kmax = 3
46781 : i = 0
46782 17511670 : DO i1 = 1, 1
46783 26267505 : DO i2 = 1, 1
46784 61290845 : DO i3 = 1, 5
46785 43779175 : i = i + 1
46786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
46788 43779175 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
46789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
46791 43779175 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
46794 52535010 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
46795 : END DO
46796 : END DO
46797 : END DO
46798 14409734 : s_offset_d1 = s_offset_d1 + 3
46799 : END DO
46800 9121239 : s_offset_c1 = s_offset_c1 + 1
46801 : END DO
46802 5761486 : s_offset_b1 = s_offset_b1 + 1
46803 : END DO
46804 4498748 : s_offset_a1 = s_offset_a1 + 5
46805 : END DO
46806 2204602 : END SUBROUTINE contract_dssp
46807 : #endif
46808 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
46809 : ! **************************************************************************************************
46810 : !> \brief ...
46811 : !> \param work ...
46812 : !> \param nl_a ...
46813 : !> \param nl_b ...
46814 : !> \param nl_c ...
46815 : !> \param nl_d ...
46816 : !> \param sphi_a ...
46817 : !> \param sphi_b ...
46818 : !> \param sphi_c ...
46819 : !> \param sphi_d ...
46820 : !> \param primitives ...
46821 : !> \param buffer1 ...
46822 : !> \param buffer2 ...
46823 : ! **************************************************************************************************
46824 598925 : SUBROUTINE contract_dssd(work, &
46825 : nl_a, nl_b, nl_c, nl_d, &
46826 598925 : sphi_a, sphi_b, sphi_c, sphi_d, &
46827 598925 : primitives, &
46828 : buffer1, buffer2)
46829 : REAL(dp), DIMENSION(6*1*1*6), INTENT(IN) :: work
46830 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46831 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
46832 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
46833 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
46834 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
46835 : REAL(dp), &
46836 : DIMENSION(5*nl_a, 1*nl_b, 1*nl_c, 5*nl_d) :: primitives
46837 : REAL(dp), DIMENSION(6*1*1*6) :: buffer1, buffer2
46838 :
46839 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46840 : kmax, s_offset_a1, s_offset_b1, &
46841 : s_offset_c1, s_offset_d1
46842 :
46843 598925 : s_offset_a1 = 0
46844 1258731 : DO ia = 1, nl_a
46845 : s_offset_b1 = 0
46846 1730841 : DO ib = 1, nl_b
46847 : s_offset_c1 = 0
46848 2838528 : DO ic = 1, nl_c
46849 : s_offset_d1 = 0
46850 3788197 : DO id = 1, nl_d
46851 2020704 : buffer1 = 0.0_dp
46852 2020704 : imax = 1*1*6
46853 2020704 : kmax = 6
46854 14144928 : DO i = 1, imax
46855 12124224 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46856 12124224 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
46857 12124224 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46858 12124224 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
46859 12124224 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
46860 12124224 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
46861 12124224 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
46862 14144928 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
46863 : END DO
46864 2020704 : buffer2 = 0.0_dp
46865 2020704 : imax = 5*1*6
46866 2020704 : kmax = 1
46867 62641824 : DO i = 1, imax
46868 62641824 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
46869 : END DO
46870 2020704 : buffer1 = 0.0_dp
46871 2020704 : imax = 5*1*6
46872 2020704 : kmax = 1
46873 62641824 : DO i = 1, imax
46874 62641824 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
46875 : END DO
46876 4041408 : imax = 5*1*1
46877 4041408 : kmax = 6
46878 : i = 0
46879 4041408 : DO i1 = 1, 1
46880 6062112 : DO i2 = 1, 1
46881 14144928 : DO i3 = 1, 5
46882 10103520 : i = i + 1
46883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46885 10103520 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
46886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46888 10103520 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
46889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
46890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
46891 10103520 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
46892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
46893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
46894 10103520 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
46895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46897 10103520 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
46898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46900 10103520 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
46901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
46902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
46903 10103520 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
46904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
46905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
46906 12124224 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
46907 : END DO
46908 : END DO
46909 : END DO
46910 3788197 : s_offset_d1 = s_offset_d1 + 5
46911 : END DO
46912 2838528 : s_offset_c1 = s_offset_c1 + 1
46913 : END DO
46914 1730841 : s_offset_b1 = s_offset_b1 + 1
46915 : END DO
46916 1258731 : s_offset_a1 = s_offset_a1 + 5
46917 : END DO
46918 598925 : END SUBROUTINE contract_dssd
46919 : #endif
46920 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
46921 : ! **************************************************************************************************
46922 : !> \brief ...
46923 : !> \param work ...
46924 : !> \param nl_a ...
46925 : !> \param nl_b ...
46926 : !> \param nl_c ...
46927 : !> \param nl_d ...
46928 : !> \param sphi_a ...
46929 : !> \param sphi_b ...
46930 : !> \param sphi_c ...
46931 : !> \param sphi_d ...
46932 : !> \param primitives ...
46933 : !> \param buffer1 ...
46934 : !> \param buffer2 ...
46935 : ! **************************************************************************************************
46936 : SUBROUTINE contract_dssf(work, &
46937 : nl_a, nl_b, nl_c, nl_d, &
46938 : sphi_a, sphi_b, sphi_c, sphi_d, &
46939 : primitives, &
46940 : buffer1, buffer2)
46941 : REAL(dp), DIMENSION(6*1*1*10), INTENT(IN) :: work
46942 : INTEGER :: nl_a, nl_b, nl_c, nl_d
46943 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
46944 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
46945 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
46946 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
46947 : REAL(dp), &
46948 : DIMENSION(5*nl_a, 1*nl_b, 1*nl_c, 7*nl_d) :: primitives
46949 : REAL(dp), DIMENSION(6*1*1*10) :: buffer1, buffer2
46950 :
46951 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
46952 : kmax, s_offset_a1, s_offset_b1, &
46953 : s_offset_c1, s_offset_d1
46954 :
46955 : s_offset_a1 = 0
46956 : DO ia = 1, nl_a
46957 : s_offset_b1 = 0
46958 : DO ib = 1, nl_b
46959 : s_offset_c1 = 0
46960 : DO ic = 1, nl_c
46961 : s_offset_d1 = 0
46962 : DO id = 1, nl_d
46963 : buffer1 = 0.0_dp
46964 : imax = 1*1*10
46965 : kmax = 6
46966 : DO i = 1, imax
46967 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
46968 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
46969 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
46970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
46971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
46972 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
46973 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
46974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
46975 : END DO
46976 : buffer2 = 0.0_dp
46977 : imax = 5*1*10
46978 : kmax = 1
46979 : DO i = 1, imax
46980 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
46981 : END DO
46982 : buffer1 = 0.0_dp
46983 : imax = 5*1*10
46984 : kmax = 1
46985 : DO i = 1, imax
46986 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
46987 : END DO
46988 : imax = 5*1*1
46989 : kmax = 10
46990 : i = 0
46991 : DO i1 = 1, 1
46992 : DO i2 = 1, 1
46993 : DO i3 = 1, 5
46994 : i = i + 1
46995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
46996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
46997 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
46998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
46999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47000 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
47001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47003 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47006 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
47007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47009 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
47010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47012 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
47013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47015 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
47016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47018 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
47019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47021 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
47022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47024 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
47025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47027 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
47028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47030 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
47031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47033 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
47034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47036 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
47037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47039 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
47040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47042 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
47043 : END DO
47044 : END DO
47045 : END DO
47046 : s_offset_d1 = s_offset_d1 + 7
47047 : END DO
47048 : s_offset_c1 = s_offset_c1 + 1
47049 : END DO
47050 : s_offset_b1 = s_offset_b1 + 1
47051 : END DO
47052 : s_offset_a1 = s_offset_a1 + 5
47053 : END DO
47054 : END SUBROUTINE contract_dssf
47055 : #endif
47056 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
47057 : ! **************************************************************************************************
47058 : !> \brief ...
47059 : !> \param work ...
47060 : !> \param nl_a ...
47061 : !> \param nl_b ...
47062 : !> \param nl_c ...
47063 : !> \param nl_d ...
47064 : !> \param sphi_a ...
47065 : !> \param sphi_b ...
47066 : !> \param sphi_c ...
47067 : !> \param sphi_d ...
47068 : !> \param primitives ...
47069 : !> \param buffer1 ...
47070 : !> \param buffer2 ...
47071 : ! **************************************************************************************************
47072 : SUBROUTINE contract_dssg(work, &
47073 : nl_a, nl_b, nl_c, nl_d, &
47074 : sphi_a, sphi_b, sphi_c, sphi_d, &
47075 : primitives, &
47076 : buffer1, buffer2)
47077 : REAL(dp), DIMENSION(6*1*1*15), INTENT(IN) :: work
47078 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47079 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47080 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47081 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
47082 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
47083 : REAL(dp), &
47084 : DIMENSION(5*nl_a, 1*nl_b, 1*nl_c, 9*nl_d) :: primitives
47085 : REAL(dp), DIMENSION(6*1*1*15) :: buffer1, buffer2
47086 :
47087 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47088 : kmax, s_offset_a1, s_offset_b1, &
47089 : s_offset_c1, s_offset_d1
47090 :
47091 : s_offset_a1 = 0
47092 : DO ia = 1, nl_a
47093 : s_offset_b1 = 0
47094 : DO ib = 1, nl_b
47095 : s_offset_c1 = 0
47096 : DO ic = 1, nl_c
47097 : s_offset_d1 = 0
47098 : DO id = 1, nl_d
47099 : buffer1 = 0.0_dp
47100 : imax = 1*1*15
47101 : kmax = 6
47102 : DO i = 1, imax
47103 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47105 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47106 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47107 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47108 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47109 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47110 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47111 : END DO
47112 : buffer2 = 0.0_dp
47113 : imax = 5*1*15
47114 : kmax = 1
47115 : DO i = 1, imax
47116 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47117 : END DO
47118 : buffer1 = 0.0_dp
47119 : imax = 5*1*15
47120 : kmax = 1
47121 : DO i = 1, imax
47122 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
47123 : END DO
47124 : imax = 5*1*1
47125 : kmax = 15
47126 : i = 0
47127 : DO i1 = 1, 1
47128 : DO i2 = 1, 1
47129 : DO i3 = 1, 5
47130 : i = i + 1
47131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47133 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
47134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47136 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
47137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47139 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
47140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47142 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47145 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
47146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47148 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
47149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
47150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
47151 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
47152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47154 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
47155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47157 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
47158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47160 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
47161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47163 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
47164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47166 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
47167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47169 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
47170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47172 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
47173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47175 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
47176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47178 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
47179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
47180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
47181 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
47182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47184 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
47185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47187 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
47188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47190 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
47191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47193 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
47194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47196 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
47197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47199 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
47200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47202 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
47203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47205 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
47206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47208 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
47209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47211 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
47212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47214 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
47215 : END DO
47216 : END DO
47217 : END DO
47218 : s_offset_d1 = s_offset_d1 + 9
47219 : END DO
47220 : s_offset_c1 = s_offset_c1 + 1
47221 : END DO
47222 : s_offset_b1 = s_offset_b1 + 1
47223 : END DO
47224 : s_offset_a1 = s_offset_a1 + 5
47225 : END DO
47226 : END SUBROUTINE contract_dssg
47227 : #endif
47228 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
47229 : ! **************************************************************************************************
47230 : !> \brief ...
47231 : !> \param work ...
47232 : !> \param nl_a ...
47233 : !> \param nl_b ...
47234 : !> \param nl_c ...
47235 : !> \param nl_d ...
47236 : !> \param sphi_a ...
47237 : !> \param sphi_b ...
47238 : !> \param sphi_c ...
47239 : !> \param sphi_d ...
47240 : !> \param primitives ...
47241 : !> \param buffer1 ...
47242 : !> \param buffer2 ...
47243 : ! **************************************************************************************************
47244 2796090 : SUBROUTINE contract_dsps(work, &
47245 : nl_a, nl_b, nl_c, nl_d, &
47246 2796090 : sphi_a, sphi_b, sphi_c, sphi_d, &
47247 2796090 : primitives, &
47248 : buffer1, buffer2)
47249 : REAL(dp), DIMENSION(6*1*3*1), INTENT(IN) :: work
47250 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47251 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47252 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47253 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
47254 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
47255 : REAL(dp), &
47256 : DIMENSION(5*nl_a, 1*nl_b, 3*nl_c, 1*nl_d) :: primitives
47257 : REAL(dp), DIMENSION(6*1*3*1) :: buffer1, buffer2
47258 :
47259 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47260 : kmax, s_offset_a1, s_offset_b1, &
47261 : s_offset_c1, s_offset_d1
47262 :
47263 2796090 : s_offset_a1 = 0
47264 5669809 : DO ia = 1, nl_a
47265 : s_offset_b1 = 0
47266 7277431 : DO ib = 1, nl_b
47267 : s_offset_c1 = 0
47268 11326607 : DO ic = 1, nl_c
47269 : s_offset_d1 = 0
47270 19313136 : DO id = 1, nl_d
47271 12390241 : buffer1 = 0.0_dp
47272 12390241 : imax = 1*3*1
47273 12390241 : kmax = 6
47274 49560964 : DO i = 1, imax
47275 37170723 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47276 37170723 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47277 37170723 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47278 37170723 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47279 37170723 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47280 37170723 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47281 37170723 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47282 49560964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47283 : END DO
47284 12390241 : buffer2 = 0.0_dp
47285 12390241 : imax = 5*3*1
47286 12390241 : kmax = 1
47287 198243856 : DO i = 1, imax
47288 198243856 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47289 : END DO
47290 12390241 : buffer1 = 0.0_dp
47291 12390241 : imax = 5*1*1
47292 12390241 : kmax = 3
47293 74341446 : DO i = 1, imax
47294 61951205 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47295 61951205 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47296 74341446 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
47297 : END DO
47298 49560964 : imax = 5*1*3
47299 49560964 : kmax = 1
47300 : i = 0
47301 49560964 : DO i1 = 1, 3
47302 86731687 : DO i2 = 1, 1
47303 260195061 : DO i3 = 1, 5
47304 185853615 : i = i + 1
47305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
47307 223024338 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
47308 : END DO
47309 : END DO
47310 : END DO
47311 19313136 : s_offset_d1 = s_offset_d1 + 1
47312 : END DO
47313 11326607 : s_offset_c1 = s_offset_c1 + 3
47314 : END DO
47315 7277431 : s_offset_b1 = s_offset_b1 + 1
47316 : END DO
47317 5669809 : s_offset_a1 = s_offset_a1 + 5
47318 : END DO
47319 2796090 : END SUBROUTINE contract_dsps
47320 : #endif
47321 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
47322 : ! **************************************************************************************************
47323 : !> \brief ...
47324 : !> \param work ...
47325 : !> \param nl_a ...
47326 : !> \param nl_b ...
47327 : !> \param nl_c ...
47328 : !> \param nl_d ...
47329 : !> \param sphi_a ...
47330 : !> \param sphi_b ...
47331 : !> \param sphi_c ...
47332 : !> \param sphi_d ...
47333 : !> \param primitives ...
47334 : !> \param buffer1 ...
47335 : !> \param buffer2 ...
47336 : ! **************************************************************************************************
47337 1541341 : SUBROUTINE contract_dspp(work, &
47338 : nl_a, nl_b, nl_c, nl_d, &
47339 1541341 : sphi_a, sphi_b, sphi_c, sphi_d, &
47340 1541341 : primitives, &
47341 : buffer1, buffer2)
47342 : REAL(dp), DIMENSION(6*1*3*3), INTENT(IN) :: work
47343 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47344 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47345 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47346 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
47347 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
47348 : REAL(dp), &
47349 : DIMENSION(5*nl_a, 1*nl_b, 3*nl_c, 3*nl_d) :: primitives
47350 : REAL(dp), DIMENSION(6*1*3*3) :: buffer1, buffer2
47351 :
47352 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47353 : kmax, s_offset_a1, s_offset_b1, &
47354 : s_offset_c1, s_offset_d1
47355 :
47356 1541341 : s_offset_a1 = 0
47357 3148828 : DO ia = 1, nl_a
47358 : s_offset_b1 = 0
47359 4080587 : DO ib = 1, nl_b
47360 : s_offset_c1 = 0
47361 6206034 : DO ic = 1, nl_c
47362 : s_offset_d1 = 0
47363 9727526 : DO id = 1, nl_d
47364 5994592 : buffer1 = 0.0_dp
47365 5994592 : imax = 1*3*3
47366 5994592 : kmax = 6
47367 59945920 : DO i = 1, imax
47368 53951328 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47369 53951328 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47370 53951328 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47371 53951328 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47372 53951328 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47373 53951328 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47374 53951328 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47375 59945920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47376 : END DO
47377 5994592 : buffer2 = 0.0_dp
47378 5994592 : imax = 5*3*3
47379 5994592 : kmax = 1
47380 275751232 : DO i = 1, imax
47381 275751232 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47382 : END DO
47383 5994592 : buffer1 = 0.0_dp
47384 5994592 : imax = 5*1*3
47385 5994592 : kmax = 3
47386 95913472 : DO i = 1, imax
47387 89918880 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47388 89918880 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47389 95913472 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
47390 : END DO
47391 23978368 : imax = 5*1*3
47392 23978368 : kmax = 3
47393 : i = 0
47394 23978368 : DO i1 = 1, 3
47395 41962144 : DO i2 = 1, 1
47396 125886432 : DO i3 = 1, 5
47397 89918880 : i = i + 1
47398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
47400 89918880 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
47401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
47403 89918880 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
47406 107902656 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
47407 : END DO
47408 : END DO
47409 : END DO
47410 9727526 : s_offset_d1 = s_offset_d1 + 3
47411 : END DO
47412 6206034 : s_offset_c1 = s_offset_c1 + 3
47413 : END DO
47414 4080587 : s_offset_b1 = s_offset_b1 + 1
47415 : END DO
47416 3148828 : s_offset_a1 = s_offset_a1 + 5
47417 : END DO
47418 1541341 : END SUBROUTINE contract_dspp
47419 : #endif
47420 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
47421 : ! **************************************************************************************************
47422 : !> \brief ...
47423 : !> \param work ...
47424 : !> \param nl_a ...
47425 : !> \param nl_b ...
47426 : !> \param nl_c ...
47427 : !> \param nl_d ...
47428 : !> \param sphi_a ...
47429 : !> \param sphi_b ...
47430 : !> \param sphi_c ...
47431 : !> \param sphi_d ...
47432 : !> \param primitives ...
47433 : !> \param buffer1 ...
47434 : !> \param buffer2 ...
47435 : ! **************************************************************************************************
47436 524506 : SUBROUTINE contract_dspd(work, &
47437 : nl_a, nl_b, nl_c, nl_d, &
47438 524506 : sphi_a, sphi_b, sphi_c, sphi_d, &
47439 524506 : primitives, &
47440 : buffer1, buffer2)
47441 : REAL(dp), DIMENSION(6*1*3*6), INTENT(IN) :: work
47442 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47443 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47444 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47445 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
47446 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
47447 : REAL(dp), &
47448 : DIMENSION(5*nl_a, 1*nl_b, 3*nl_c, 5*nl_d) :: primitives
47449 : REAL(dp), DIMENSION(6*1*3*6) :: buffer1, buffer2
47450 :
47451 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47452 : kmax, s_offset_a1, s_offset_b1, &
47453 : s_offset_c1, s_offset_d1
47454 :
47455 524506 : s_offset_a1 = 0
47456 1096153 : DO ia = 1, nl_a
47457 : s_offset_b1 = 0
47458 1531846 : DO ib = 1, nl_b
47459 : s_offset_c1 = 0
47460 2381124 : DO ic = 1, nl_c
47461 : s_offset_d1 = 0
47462 2975593 : DO id = 1, nl_d
47463 1554668 : buffer1 = 0.0_dp
47464 1554668 : imax = 1*3*6
47465 1554668 : kmax = 6
47466 29538692 : DO i = 1, imax
47467 27984024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47468 27984024 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47469 27984024 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47470 27984024 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47471 27984024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47472 27984024 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47473 27984024 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47474 29538692 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47475 : END DO
47476 1554668 : buffer2 = 0.0_dp
47477 1554668 : imax = 5*3*6
47478 1554668 : kmax = 1
47479 141474788 : DO i = 1, imax
47480 141474788 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47481 : END DO
47482 1554668 : buffer1 = 0.0_dp
47483 1554668 : imax = 5*1*6
47484 1554668 : kmax = 3
47485 48194708 : DO i = 1, imax
47486 46640040 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47487 46640040 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47488 48194708 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
47489 : END DO
47490 6218672 : imax = 5*1*3
47491 6218672 : kmax = 6
47492 : i = 0
47493 6218672 : DO i1 = 1, 3
47494 10882676 : DO i2 = 1, 1
47495 32648028 : DO i3 = 1, 5
47496 23320020 : i = i + 1
47497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47499 23320020 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
47500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47502 23320020 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
47503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47505 23320020 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47508 23320020 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
47509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47511 23320020 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
47512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47514 23320020 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
47515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47517 23320020 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
47518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47520 27984024 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
47521 : END DO
47522 : END DO
47523 : END DO
47524 2975593 : s_offset_d1 = s_offset_d1 + 5
47525 : END DO
47526 2381124 : s_offset_c1 = s_offset_c1 + 3
47527 : END DO
47528 1531846 : s_offset_b1 = s_offset_b1 + 1
47529 : END DO
47530 1096153 : s_offset_a1 = s_offset_a1 + 5
47531 : END DO
47532 524506 : END SUBROUTINE contract_dspd
47533 : #endif
47534 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
47535 : ! **************************************************************************************************
47536 : !> \brief ...
47537 : !> \param work ...
47538 : !> \param nl_a ...
47539 : !> \param nl_b ...
47540 : !> \param nl_c ...
47541 : !> \param nl_d ...
47542 : !> \param sphi_a ...
47543 : !> \param sphi_b ...
47544 : !> \param sphi_c ...
47545 : !> \param sphi_d ...
47546 : !> \param primitives ...
47547 : !> \param buffer1 ...
47548 : !> \param buffer2 ...
47549 : ! **************************************************************************************************
47550 : SUBROUTINE contract_dspf(work, &
47551 : nl_a, nl_b, nl_c, nl_d, &
47552 : sphi_a, sphi_b, sphi_c, sphi_d, &
47553 : primitives, &
47554 : buffer1, buffer2)
47555 : REAL(dp), DIMENSION(6*1*3*10), INTENT(IN) :: work
47556 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47557 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47558 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47559 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
47560 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
47561 : REAL(dp), &
47562 : DIMENSION(5*nl_a, 1*nl_b, 3*nl_c, 7*nl_d) :: primitives
47563 : REAL(dp), DIMENSION(6*1*3*10) :: buffer1, buffer2
47564 :
47565 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47566 : kmax, s_offset_a1, s_offset_b1, &
47567 : s_offset_c1, s_offset_d1
47568 :
47569 : s_offset_a1 = 0
47570 : DO ia = 1, nl_a
47571 : s_offset_b1 = 0
47572 : DO ib = 1, nl_b
47573 : s_offset_c1 = 0
47574 : DO ic = 1, nl_c
47575 : s_offset_d1 = 0
47576 : DO id = 1, nl_d
47577 : buffer1 = 0.0_dp
47578 : imax = 1*3*10
47579 : kmax = 6
47580 : DO i = 1, imax
47581 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47583 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47584 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47585 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47587 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47588 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47589 : END DO
47590 : buffer2 = 0.0_dp
47591 : imax = 5*3*10
47592 : kmax = 1
47593 : DO i = 1, imax
47594 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47595 : END DO
47596 : buffer1 = 0.0_dp
47597 : imax = 5*1*10
47598 : kmax = 3
47599 : DO i = 1, imax
47600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47601 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47602 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
47603 : END DO
47604 : imax = 5*1*3
47605 : kmax = 10
47606 : i = 0
47607 : DO i1 = 1, 3
47608 : DO i2 = 1, 1
47609 : DO i3 = 1, 5
47610 : i = i + 1
47611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47613 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
47614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47616 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
47617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47619 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47622 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
47623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47625 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
47626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47628 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
47629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47631 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
47632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47634 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
47635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47637 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
47638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47640 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
47641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47643 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
47644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47646 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
47647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47649 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
47650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47652 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
47653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47655 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
47656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47658 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
47659 : END DO
47660 : END DO
47661 : END DO
47662 : s_offset_d1 = s_offset_d1 + 7
47663 : END DO
47664 : s_offset_c1 = s_offset_c1 + 3
47665 : END DO
47666 : s_offset_b1 = s_offset_b1 + 1
47667 : END DO
47668 : s_offset_a1 = s_offset_a1 + 5
47669 : END DO
47670 : END SUBROUTINE contract_dspf
47671 : #endif
47672 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
47673 : ! **************************************************************************************************
47674 : !> \brief ...
47675 : !> \param work ...
47676 : !> \param nl_a ...
47677 : !> \param nl_b ...
47678 : !> \param nl_c ...
47679 : !> \param nl_d ...
47680 : !> \param sphi_a ...
47681 : !> \param sphi_b ...
47682 : !> \param sphi_c ...
47683 : !> \param sphi_d ...
47684 : !> \param primitives ...
47685 : !> \param buffer1 ...
47686 : !> \param buffer2 ...
47687 : ! **************************************************************************************************
47688 : SUBROUTINE contract_dspg(work, &
47689 : nl_a, nl_b, nl_c, nl_d, &
47690 : sphi_a, sphi_b, sphi_c, sphi_d, &
47691 : primitives, &
47692 : buffer1, buffer2)
47693 : REAL(dp), DIMENSION(6*1*3*15), INTENT(IN) :: work
47694 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47695 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47696 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47697 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
47698 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
47699 : REAL(dp), &
47700 : DIMENSION(5*nl_a, 1*nl_b, 3*nl_c, 9*nl_d) :: primitives
47701 : REAL(dp), DIMENSION(6*1*3*15) :: buffer1, buffer2
47702 :
47703 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47704 : kmax, s_offset_a1, s_offset_b1, &
47705 : s_offset_c1, s_offset_d1
47706 :
47707 : s_offset_a1 = 0
47708 : DO ia = 1, nl_a
47709 : s_offset_b1 = 0
47710 : DO ib = 1, nl_b
47711 : s_offset_c1 = 0
47712 : DO ic = 1, nl_c
47713 : s_offset_d1 = 0
47714 : DO id = 1, nl_d
47715 : buffer1 = 0.0_dp
47716 : imax = 1*3*15
47717 : kmax = 6
47718 : DO i = 1, imax
47719 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47720 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47721 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47722 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47723 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47724 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47725 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47726 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47727 : END DO
47728 : buffer2 = 0.0_dp
47729 : imax = 5*3*15
47730 : kmax = 1
47731 : DO i = 1, imax
47732 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47733 : END DO
47734 : buffer1 = 0.0_dp
47735 : imax = 5*1*15
47736 : kmax = 3
47737 : DO i = 1, imax
47738 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47739 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47740 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
47741 : END DO
47742 : imax = 5*1*3
47743 : kmax = 15
47744 : i = 0
47745 : DO i1 = 1, 3
47746 : DO i2 = 1, 1
47747 : DO i3 = 1, 5
47748 : i = i + 1
47749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47751 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
47752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47754 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
47755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47757 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
47758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47760 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
47761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47763 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
47764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47766 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
47767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
47768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
47769 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
47770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47772 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
47773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47775 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
47776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47778 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
47779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47781 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
47782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47784 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
47785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47787 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
47788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
47790 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
47791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47793 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
47794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47796 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
47797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
47798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
47799 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
47800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
47801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
47802 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
47803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
47804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
47805 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
47806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47808 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
47809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47811 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
47812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
47813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
47814 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
47815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
47816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
47817 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
47818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47820 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
47821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47823 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
47824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
47825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
47826 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
47827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
47828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
47829 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
47830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
47831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
47832 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
47833 : END DO
47834 : END DO
47835 : END DO
47836 : s_offset_d1 = s_offset_d1 + 9
47837 : END DO
47838 : s_offset_c1 = s_offset_c1 + 3
47839 : END DO
47840 : s_offset_b1 = s_offset_b1 + 1
47841 : END DO
47842 : s_offset_a1 = s_offset_a1 + 5
47843 : END DO
47844 : END SUBROUTINE contract_dspg
47845 : #endif
47846 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
47847 : ! **************************************************************************************************
47848 : !> \brief ...
47849 : !> \param work ...
47850 : !> \param nl_a ...
47851 : !> \param nl_b ...
47852 : !> \param nl_c ...
47853 : !> \param nl_d ...
47854 : !> \param sphi_a ...
47855 : !> \param sphi_b ...
47856 : !> \param sphi_c ...
47857 : !> \param sphi_d ...
47858 : !> \param primitives ...
47859 : !> \param buffer1 ...
47860 : !> \param buffer2 ...
47861 : ! **************************************************************************************************
47862 742538 : SUBROUTINE contract_dsds(work, &
47863 : nl_a, nl_b, nl_c, nl_d, &
47864 742538 : sphi_a, sphi_b, sphi_c, sphi_d, &
47865 742538 : primitives, &
47866 : buffer1, buffer2)
47867 : REAL(dp), DIMENSION(6*1*6*1), INTENT(IN) :: work
47868 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47869 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47870 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47871 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
47872 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
47873 : REAL(dp), &
47874 : DIMENSION(5*nl_a, 1*nl_b, 5*nl_c, 1*nl_d) :: primitives
47875 : REAL(dp), DIMENSION(6*1*6*1) :: buffer1, buffer2
47876 :
47877 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47878 : kmax, s_offset_a1, s_offset_b1, &
47879 : s_offset_c1, s_offset_d1
47880 :
47881 742538 : s_offset_a1 = 0
47882 1530719 : DO ia = 1, nl_a
47883 : s_offset_b1 = 0
47884 2022465 : DO ib = 1, nl_b
47885 : s_offset_c1 = 0
47886 2566931 : DO ic = 1, nl_c
47887 : s_offset_d1 = 0
47888 3621694 : DO id = 1, nl_d
47889 2289047 : buffer1 = 0.0_dp
47890 2289047 : imax = 1*6*1
47891 2289047 : kmax = 6
47892 16023329 : DO i = 1, imax
47893 13734282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47894 13734282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47895 13734282 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47896 13734282 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47897 13734282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47898 13734282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47899 13734282 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47900 16023329 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47901 : END DO
47902 2289047 : buffer2 = 0.0_dp
47903 2289047 : imax = 5*6*1
47904 2289047 : kmax = 1
47905 70960457 : DO i = 1, imax
47906 70960457 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
47907 : END DO
47908 2289047 : buffer1 = 0.0_dp
47909 2289047 : imax = 5*1*1
47910 2289047 : kmax = 6
47911 13734282 : DO i = 1, imax
47912 11445235 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
47913 11445235 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
47914 11445235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
47915 11445235 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
47916 11445235 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
47917 11445235 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
47918 11445235 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
47919 13734282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
47920 : END DO
47921 13734282 : imax = 5*1*5
47922 13734282 : kmax = 1
47923 : i = 0
47924 13734282 : DO i1 = 1, 5
47925 25179517 : DO i2 = 1, 1
47926 80116645 : DO i3 = 1, 5
47927 57226175 : i = i + 1
47928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
47929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
47930 68671410 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
47931 : END DO
47932 : END DO
47933 : END DO
47934 3621694 : s_offset_d1 = s_offset_d1 + 1
47935 : END DO
47936 2566931 : s_offset_c1 = s_offset_c1 + 5
47937 : END DO
47938 2022465 : s_offset_b1 = s_offset_b1 + 1
47939 : END DO
47940 1530719 : s_offset_a1 = s_offset_a1 + 5
47941 : END DO
47942 742538 : END SUBROUTINE contract_dsds
47943 : #endif
47944 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
47945 : ! **************************************************************************************************
47946 : !> \brief ...
47947 : !> \param work ...
47948 : !> \param nl_a ...
47949 : !> \param nl_b ...
47950 : !> \param nl_c ...
47951 : !> \param nl_d ...
47952 : !> \param sphi_a ...
47953 : !> \param sphi_b ...
47954 : !> \param sphi_c ...
47955 : !> \param sphi_d ...
47956 : !> \param primitives ...
47957 : !> \param buffer1 ...
47958 : !> \param buffer2 ...
47959 : ! **************************************************************************************************
47960 517324 : SUBROUTINE contract_dsdp(work, &
47961 : nl_a, nl_b, nl_c, nl_d, &
47962 517324 : sphi_a, sphi_b, sphi_c, sphi_d, &
47963 517324 : primitives, &
47964 : buffer1, buffer2)
47965 : REAL(dp), DIMENSION(6*1*6*3), INTENT(IN) :: work
47966 : INTEGER :: nl_a, nl_b, nl_c, nl_d
47967 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
47968 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
47969 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
47970 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
47971 : REAL(dp), &
47972 : DIMENSION(5*nl_a, 1*nl_b, 5*nl_c, 3*nl_d) :: primitives
47973 : REAL(dp), DIMENSION(6*1*6*3) :: buffer1, buffer2
47974 :
47975 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
47976 : kmax, s_offset_a1, s_offset_b1, &
47977 : s_offset_c1, s_offset_d1
47978 :
47979 517324 : s_offset_a1 = 0
47980 1072958 : DO ia = 1, nl_a
47981 : s_offset_b1 = 0
47982 1463800 : DO ib = 1, nl_b
47983 : s_offset_c1 = 0
47984 1896894 : DO ic = 1, nl_c
47985 : s_offset_d1 = 0
47986 2396506 : DO id = 1, nl_d
47987 1407778 : buffer1 = 0.0_dp
47988 1407778 : imax = 1*6*3
47989 1407778 : kmax = 6
47990 26747782 : DO i = 1, imax
47991 25340004 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
47992 25340004 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
47993 25340004 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
47994 25340004 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
47995 25340004 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
47996 25340004 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
47997 25340004 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
47998 26747782 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
47999 : END DO
48000 1407778 : buffer2 = 0.0_dp
48001 1407778 : imax = 5*6*3
48002 1407778 : kmax = 1
48003 128107798 : DO i = 1, imax
48004 128107798 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48005 : END DO
48006 1407778 : buffer1 = 0.0_dp
48007 1407778 : imax = 5*1*3
48008 1407778 : kmax = 6
48009 22524448 : DO i = 1, imax
48010 21116670 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
48011 21116670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48012 21116670 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48013 21116670 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48014 21116670 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
48015 21116670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48016 21116670 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48017 22524448 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
48018 : END DO
48019 8446668 : imax = 5*1*5
48020 8446668 : kmax = 3
48021 : i = 0
48022 8446668 : DO i1 = 1, 5
48023 15485558 : DO i2 = 1, 1
48024 49272230 : DO i3 = 1, 5
48025 35194450 : i = i + 1
48026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
48028 35194450 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
48029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
48031 35194450 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
48034 42233340 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
48035 : END DO
48036 : END DO
48037 : END DO
48038 2396506 : s_offset_d1 = s_offset_d1 + 3
48039 : END DO
48040 1896894 : s_offset_c1 = s_offset_c1 + 5
48041 : END DO
48042 1463800 : s_offset_b1 = s_offset_b1 + 1
48043 : END DO
48044 1072958 : s_offset_a1 = s_offset_a1 + 5
48045 : END DO
48046 517324 : END SUBROUTINE contract_dsdp
48047 : #endif
48048 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
48049 : ! **************************************************************************************************
48050 : !> \brief ...
48051 : !> \param work ...
48052 : !> \param nl_a ...
48053 : !> \param nl_b ...
48054 : !> \param nl_c ...
48055 : !> \param nl_d ...
48056 : !> \param sphi_a ...
48057 : !> \param sphi_b ...
48058 : !> \param sphi_c ...
48059 : !> \param sphi_d ...
48060 : !> \param primitives ...
48061 : !> \param buffer1 ...
48062 : !> \param buffer2 ...
48063 : ! **************************************************************************************************
48064 204130 : SUBROUTINE contract_dsdd(work, &
48065 : nl_a, nl_b, nl_c, nl_d, &
48066 204130 : sphi_a, sphi_b, sphi_c, sphi_d, &
48067 204130 : primitives, &
48068 : buffer1, buffer2)
48069 : REAL(dp), DIMENSION(6*1*6*6), INTENT(IN) :: work
48070 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48071 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48072 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48073 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
48074 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
48075 : REAL(dp), &
48076 : DIMENSION(5*nl_a, 1*nl_b, 5*nl_c, 5*nl_d) :: primitives
48077 : REAL(dp), DIMENSION(6*1*6*6) :: buffer1, buffer2
48078 :
48079 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48080 : kmax, s_offset_a1, s_offset_b1, &
48081 : s_offset_c1, s_offset_d1
48082 :
48083 204130 : s_offset_a1 = 0
48084 438302 : DO ia = 1, nl_a
48085 : s_offset_b1 = 0
48086 630574 : DO ib = 1, nl_b
48087 : s_offset_c1 = 0
48088 850983 : DO ic = 1, nl_c
48089 : s_offset_d1 = 0
48090 1001080 : DO id = 1, nl_d
48091 546499 : buffer1 = 0.0_dp
48092 546499 : imax = 1*6*6
48093 546499 : kmax = 6
48094 20220463 : DO i = 1, imax
48095 19673964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48096 19673964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48097 19673964 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48098 19673964 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48099 19673964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48100 19673964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48101 19673964 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48102 20220463 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48103 : END DO
48104 546499 : buffer2 = 0.0_dp
48105 546499 : imax = 5*6*6
48106 546499 : kmax = 1
48107 98916319 : DO i = 1, imax
48108 98916319 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48109 : END DO
48110 546499 : buffer1 = 0.0_dp
48111 546499 : imax = 5*1*6
48112 546499 : kmax = 6
48113 16941469 : DO i = 1, imax
48114 16394970 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
48115 16394970 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48116 16394970 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48117 16394970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48118 16394970 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
48119 16394970 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48120 16394970 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48121 16941469 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
48122 : END DO
48123 3278994 : imax = 5*1*5
48124 3278994 : kmax = 6
48125 : i = 0
48126 3278994 : DO i1 = 1, 5
48127 6011489 : DO i2 = 1, 1
48128 19127465 : DO i3 = 1, 5
48129 13662475 : i = i + 1
48130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48132 13662475 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
48133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48135 13662475 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
48136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48138 13662475 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48141 13662475 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
48142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48144 13662475 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
48145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48147 13662475 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
48148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48150 13662475 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
48151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48153 16394970 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
48154 : END DO
48155 : END DO
48156 : END DO
48157 1001080 : s_offset_d1 = s_offset_d1 + 5
48158 : END DO
48159 850983 : s_offset_c1 = s_offset_c1 + 5
48160 : END DO
48161 630574 : s_offset_b1 = s_offset_b1 + 1
48162 : END DO
48163 438302 : s_offset_a1 = s_offset_a1 + 5
48164 : END DO
48165 204130 : END SUBROUTINE contract_dsdd
48166 : #endif
48167 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
48168 : ! **************************************************************************************************
48169 : !> \brief ...
48170 : !> \param work ...
48171 : !> \param nl_a ...
48172 : !> \param nl_b ...
48173 : !> \param nl_c ...
48174 : !> \param nl_d ...
48175 : !> \param sphi_a ...
48176 : !> \param sphi_b ...
48177 : !> \param sphi_c ...
48178 : !> \param sphi_d ...
48179 : !> \param primitives ...
48180 : !> \param buffer1 ...
48181 : !> \param buffer2 ...
48182 : ! **************************************************************************************************
48183 : SUBROUTINE contract_dsdf(work, &
48184 : nl_a, nl_b, nl_c, nl_d, &
48185 : sphi_a, sphi_b, sphi_c, sphi_d, &
48186 : primitives, &
48187 : buffer1, buffer2)
48188 : REAL(dp), DIMENSION(6*1*6*10), INTENT(IN) :: work
48189 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48190 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48191 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48192 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
48193 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
48194 : REAL(dp), &
48195 : DIMENSION(5*nl_a, 1*nl_b, 5*nl_c, 7*nl_d) :: primitives
48196 : REAL(dp), DIMENSION(6*1*6*10) :: buffer1, buffer2
48197 :
48198 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48199 : kmax, s_offset_a1, s_offset_b1, &
48200 : s_offset_c1, s_offset_d1
48201 :
48202 : s_offset_a1 = 0
48203 : DO ia = 1, nl_a
48204 : s_offset_b1 = 0
48205 : DO ib = 1, nl_b
48206 : s_offset_c1 = 0
48207 : DO ic = 1, nl_c
48208 : s_offset_d1 = 0
48209 : DO id = 1, nl_d
48210 : buffer1 = 0.0_dp
48211 : imax = 1*6*10
48212 : kmax = 6
48213 : DO i = 1, imax
48214 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48215 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48216 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48217 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48218 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48219 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48220 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48221 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48222 : END DO
48223 : buffer2 = 0.0_dp
48224 : imax = 5*6*10
48225 : kmax = 1
48226 : DO i = 1, imax
48227 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48228 : END DO
48229 : buffer1 = 0.0_dp
48230 : imax = 5*1*10
48231 : kmax = 6
48232 : DO i = 1, imax
48233 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
48234 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48236 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48237 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
48238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48239 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48240 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
48241 : END DO
48242 : imax = 5*1*5
48243 : kmax = 10
48244 : i = 0
48245 : DO i1 = 1, 5
48246 : DO i2 = 1, 1
48247 : DO i3 = 1, 5
48248 : i = i + 1
48249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48251 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
48252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48254 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
48255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48257 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48260 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
48261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48263 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
48264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48266 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
48267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48269 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
48270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48272 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
48273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48275 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
48276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48278 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
48279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48281 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
48282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48284 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
48285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48287 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
48288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48290 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
48291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48293 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
48294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48296 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
48297 : END DO
48298 : END DO
48299 : END DO
48300 : s_offset_d1 = s_offset_d1 + 7
48301 : END DO
48302 : s_offset_c1 = s_offset_c1 + 5
48303 : END DO
48304 : s_offset_b1 = s_offset_b1 + 1
48305 : END DO
48306 : s_offset_a1 = s_offset_a1 + 5
48307 : END DO
48308 : END SUBROUTINE contract_dsdf
48309 : #endif
48310 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
48311 : ! **************************************************************************************************
48312 : !> \brief ...
48313 : !> \param work ...
48314 : !> \param nl_a ...
48315 : !> \param nl_b ...
48316 : !> \param nl_c ...
48317 : !> \param nl_d ...
48318 : !> \param sphi_a ...
48319 : !> \param sphi_b ...
48320 : !> \param sphi_c ...
48321 : !> \param sphi_d ...
48322 : !> \param primitives ...
48323 : !> \param buffer1 ...
48324 : !> \param buffer2 ...
48325 : ! **************************************************************************************************
48326 : SUBROUTINE contract_dsdg(work, &
48327 : nl_a, nl_b, nl_c, nl_d, &
48328 : sphi_a, sphi_b, sphi_c, sphi_d, &
48329 : primitives, &
48330 : buffer1, buffer2)
48331 : REAL(dp), DIMENSION(6*1*6*15), INTENT(IN) :: work
48332 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48333 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48334 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48335 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
48336 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
48337 : REAL(dp), &
48338 : DIMENSION(5*nl_a, 1*nl_b, 5*nl_c, 9*nl_d) :: primitives
48339 : REAL(dp), DIMENSION(6*1*6*15) :: buffer1, buffer2
48340 :
48341 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48342 : kmax, s_offset_a1, s_offset_b1, &
48343 : s_offset_c1, s_offset_d1
48344 :
48345 : s_offset_a1 = 0
48346 : DO ia = 1, nl_a
48347 : s_offset_b1 = 0
48348 : DO ib = 1, nl_b
48349 : s_offset_c1 = 0
48350 : DO ic = 1, nl_c
48351 : s_offset_d1 = 0
48352 : DO id = 1, nl_d
48353 : buffer1 = 0.0_dp
48354 : imax = 1*6*15
48355 : kmax = 6
48356 : DO i = 1, imax
48357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48358 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48359 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48360 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48361 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48363 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48364 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48365 : END DO
48366 : buffer2 = 0.0_dp
48367 : imax = 5*6*15
48368 : kmax = 1
48369 : DO i = 1, imax
48370 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48371 : END DO
48372 : buffer1 = 0.0_dp
48373 : imax = 5*1*15
48374 : kmax = 6
48375 : DO i = 1, imax
48376 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
48377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48378 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48380 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
48381 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48382 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48383 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
48384 : END DO
48385 : imax = 5*1*5
48386 : kmax = 15
48387 : i = 0
48388 : DO i1 = 1, 5
48389 : DO i2 = 1, 1
48390 : DO i3 = 1, 5
48391 : i = i + 1
48392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48394 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
48395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48397 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
48398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
48399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
48400 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
48401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48403 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48406 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
48407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48409 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
48410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
48411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
48412 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
48413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48415 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
48416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
48417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
48418 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
48419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48421 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
48422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48424 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
48425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48427 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
48428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48430 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
48431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48433 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
48434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48436 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
48437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48439 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
48440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
48441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
48442 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
48443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48445 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
48446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48448 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
48449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48451 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
48452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48454 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
48455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
48456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
48457 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
48458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48460 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
48461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48463 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
48464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48466 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
48467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48469 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
48470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48472 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
48473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48475 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
48476 : END DO
48477 : END DO
48478 : END DO
48479 : s_offset_d1 = s_offset_d1 + 9
48480 : END DO
48481 : s_offset_c1 = s_offset_c1 + 5
48482 : END DO
48483 : s_offset_b1 = s_offset_b1 + 1
48484 : END DO
48485 : s_offset_a1 = s_offset_a1 + 5
48486 : END DO
48487 : END SUBROUTINE contract_dsdg
48488 : #endif
48489 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
48490 : ! **************************************************************************************************
48491 : !> \brief ...
48492 : !> \param work ...
48493 : !> \param nl_a ...
48494 : !> \param nl_b ...
48495 : !> \param nl_c ...
48496 : !> \param nl_d ...
48497 : !> \param sphi_a ...
48498 : !> \param sphi_b ...
48499 : !> \param sphi_c ...
48500 : !> \param sphi_d ...
48501 : !> \param primitives ...
48502 : !> \param buffer1 ...
48503 : !> \param buffer2 ...
48504 : ! **************************************************************************************************
48505 : SUBROUTINE contract_dsfs(work, &
48506 : nl_a, nl_b, nl_c, nl_d, &
48507 : sphi_a, sphi_b, sphi_c, sphi_d, &
48508 : primitives, &
48509 : buffer1, buffer2)
48510 : REAL(dp), DIMENSION(6*1*10*1), INTENT(IN) :: work
48511 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48512 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48513 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48514 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
48515 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
48516 : REAL(dp), &
48517 : DIMENSION(5*nl_a, 1*nl_b, 7*nl_c, 1*nl_d) :: primitives
48518 : REAL(dp), DIMENSION(6*1*10*1) :: buffer1, buffer2
48519 :
48520 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48521 : kmax, s_offset_a1, s_offset_b1, &
48522 : s_offset_c1, s_offset_d1
48523 :
48524 : s_offset_a1 = 0
48525 : DO ia = 1, nl_a
48526 : s_offset_b1 = 0
48527 : DO ib = 1, nl_b
48528 : s_offset_c1 = 0
48529 : DO ic = 1, nl_c
48530 : s_offset_d1 = 0
48531 : DO id = 1, nl_d
48532 : buffer1 = 0.0_dp
48533 : imax = 1*10*1
48534 : kmax = 6
48535 : DO i = 1, imax
48536 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48537 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48538 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48539 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48540 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48541 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48542 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48543 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48544 : END DO
48545 : buffer2 = 0.0_dp
48546 : imax = 5*10*1
48547 : kmax = 1
48548 : DO i = 1, imax
48549 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48550 : END DO
48551 : buffer1 = 0.0_dp
48552 : imax = 5*1*1
48553 : kmax = 10
48554 : DO i = 1, imax
48555 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48556 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
48557 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48558 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
48559 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48560 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
48561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48562 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
48563 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48564 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
48565 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
48566 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
48567 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
48568 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
48569 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
48570 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
48571 : END DO
48572 : imax = 5*1*7
48573 : kmax = 1
48574 : i = 0
48575 : DO i1 = 1, 7
48576 : DO i2 = 1, 1
48577 : DO i3 = 1, 5
48578 : i = i + 1
48579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
48581 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
48582 : END DO
48583 : END DO
48584 : END DO
48585 : s_offset_d1 = s_offset_d1 + 1
48586 : END DO
48587 : s_offset_c1 = s_offset_c1 + 7
48588 : END DO
48589 : s_offset_b1 = s_offset_b1 + 1
48590 : END DO
48591 : s_offset_a1 = s_offset_a1 + 5
48592 : END DO
48593 : END SUBROUTINE contract_dsfs
48594 : #endif
48595 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
48596 : ! **************************************************************************************************
48597 : !> \brief ...
48598 : !> \param work ...
48599 : !> \param nl_a ...
48600 : !> \param nl_b ...
48601 : !> \param nl_c ...
48602 : !> \param nl_d ...
48603 : !> \param sphi_a ...
48604 : !> \param sphi_b ...
48605 : !> \param sphi_c ...
48606 : !> \param sphi_d ...
48607 : !> \param primitives ...
48608 : !> \param buffer1 ...
48609 : !> \param buffer2 ...
48610 : ! **************************************************************************************************
48611 : SUBROUTINE contract_dsfp(work, &
48612 : nl_a, nl_b, nl_c, nl_d, &
48613 : sphi_a, sphi_b, sphi_c, sphi_d, &
48614 : primitives, &
48615 : buffer1, buffer2)
48616 : REAL(dp), DIMENSION(6*1*10*3), INTENT(IN) :: work
48617 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48618 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48619 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48620 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
48621 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
48622 : REAL(dp), &
48623 : DIMENSION(5*nl_a, 1*nl_b, 7*nl_c, 3*nl_d) :: primitives
48624 : REAL(dp), DIMENSION(6*1*10*3) :: buffer1, buffer2
48625 :
48626 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48627 : kmax, s_offset_a1, s_offset_b1, &
48628 : s_offset_c1, s_offset_d1
48629 :
48630 : s_offset_a1 = 0
48631 : DO ia = 1, nl_a
48632 : s_offset_b1 = 0
48633 : DO ib = 1, nl_b
48634 : s_offset_c1 = 0
48635 : DO ic = 1, nl_c
48636 : s_offset_d1 = 0
48637 : DO id = 1, nl_d
48638 : buffer1 = 0.0_dp
48639 : imax = 1*10*3
48640 : kmax = 6
48641 : DO i = 1, imax
48642 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48643 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48644 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48645 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48646 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48647 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48648 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48649 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48650 : END DO
48651 : buffer2 = 0.0_dp
48652 : imax = 5*10*3
48653 : kmax = 1
48654 : DO i = 1, imax
48655 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48656 : END DO
48657 : buffer1 = 0.0_dp
48658 : imax = 5*1*3
48659 : kmax = 10
48660 : DO i = 1, imax
48661 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48662 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
48663 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48664 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
48665 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48666 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
48667 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48668 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
48669 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
48671 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
48672 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
48673 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
48674 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
48675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
48676 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
48677 : END DO
48678 : imax = 5*1*7
48679 : kmax = 3
48680 : i = 0
48681 : DO i1 = 1, 7
48682 : DO i2 = 1, 1
48683 : DO i3 = 1, 5
48684 : i = i + 1
48685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
48687 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
48688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
48690 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
48693 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
48694 : END DO
48695 : END DO
48696 : END DO
48697 : s_offset_d1 = s_offset_d1 + 3
48698 : END DO
48699 : s_offset_c1 = s_offset_c1 + 7
48700 : END DO
48701 : s_offset_b1 = s_offset_b1 + 1
48702 : END DO
48703 : s_offset_a1 = s_offset_a1 + 5
48704 : END DO
48705 : END SUBROUTINE contract_dsfp
48706 : #endif
48707 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
48708 : ! **************************************************************************************************
48709 : !> \brief ...
48710 : !> \param work ...
48711 : !> \param nl_a ...
48712 : !> \param nl_b ...
48713 : !> \param nl_c ...
48714 : !> \param nl_d ...
48715 : !> \param sphi_a ...
48716 : !> \param sphi_b ...
48717 : !> \param sphi_c ...
48718 : !> \param sphi_d ...
48719 : !> \param primitives ...
48720 : !> \param buffer1 ...
48721 : !> \param buffer2 ...
48722 : ! **************************************************************************************************
48723 : SUBROUTINE contract_dsfd(work, &
48724 : nl_a, nl_b, nl_c, nl_d, &
48725 : sphi_a, sphi_b, sphi_c, sphi_d, &
48726 : primitives, &
48727 : buffer1, buffer2)
48728 : REAL(dp), DIMENSION(6*1*10*6), INTENT(IN) :: work
48729 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48730 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48731 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48732 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
48733 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
48734 : REAL(dp), &
48735 : DIMENSION(5*nl_a, 1*nl_b, 7*nl_c, 5*nl_d) :: primitives
48736 : REAL(dp), DIMENSION(6*1*10*6) :: buffer1, buffer2
48737 :
48738 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48739 : kmax, s_offset_a1, s_offset_b1, &
48740 : s_offset_c1, s_offset_d1
48741 :
48742 : s_offset_a1 = 0
48743 : DO ia = 1, nl_a
48744 : s_offset_b1 = 0
48745 : DO ib = 1, nl_b
48746 : s_offset_c1 = 0
48747 : DO ic = 1, nl_c
48748 : s_offset_d1 = 0
48749 : DO id = 1, nl_d
48750 : buffer1 = 0.0_dp
48751 : imax = 1*10*6
48752 : kmax = 6
48753 : DO i = 1, imax
48754 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48755 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48756 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48757 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48758 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48759 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48760 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48761 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48762 : END DO
48763 : buffer2 = 0.0_dp
48764 : imax = 5*10*6
48765 : kmax = 1
48766 : DO i = 1, imax
48767 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48768 : END DO
48769 : buffer1 = 0.0_dp
48770 : imax = 5*1*6
48771 : kmax = 10
48772 : DO i = 1, imax
48773 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48774 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
48775 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48776 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
48777 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48778 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
48779 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48780 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
48781 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
48783 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
48784 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
48785 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
48786 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
48787 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
48788 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
48789 : END DO
48790 : imax = 5*1*7
48791 : kmax = 6
48792 : i = 0
48793 : DO i1 = 1, 7
48794 : DO i2 = 1, 1
48795 : DO i3 = 1, 5
48796 : i = i + 1
48797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48799 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
48800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48802 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
48803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48805 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48808 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
48809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48811 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
48812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48814 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
48815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48817 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
48818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48820 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
48821 : END DO
48822 : END DO
48823 : END DO
48824 : s_offset_d1 = s_offset_d1 + 5
48825 : END DO
48826 : s_offset_c1 = s_offset_c1 + 7
48827 : END DO
48828 : s_offset_b1 = s_offset_b1 + 1
48829 : END DO
48830 : s_offset_a1 = s_offset_a1 + 5
48831 : END DO
48832 : END SUBROUTINE contract_dsfd
48833 : #endif
48834 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
48835 : ! **************************************************************************************************
48836 : !> \brief ...
48837 : !> \param work ...
48838 : !> \param nl_a ...
48839 : !> \param nl_b ...
48840 : !> \param nl_c ...
48841 : !> \param nl_d ...
48842 : !> \param sphi_a ...
48843 : !> \param sphi_b ...
48844 : !> \param sphi_c ...
48845 : !> \param sphi_d ...
48846 : !> \param primitives ...
48847 : !> \param buffer1 ...
48848 : !> \param buffer2 ...
48849 : ! **************************************************************************************************
48850 : SUBROUTINE contract_dsff(work, &
48851 : nl_a, nl_b, nl_c, nl_d, &
48852 : sphi_a, sphi_b, sphi_c, sphi_d, &
48853 : primitives, &
48854 : buffer1, buffer2)
48855 : REAL(dp), DIMENSION(6*1*10*10), INTENT(IN) :: work
48856 : INTEGER :: nl_a, nl_b, nl_c, nl_d
48857 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
48858 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
48859 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
48860 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
48861 : REAL(dp), &
48862 : DIMENSION(5*nl_a, 1*nl_b, 7*nl_c, 7*nl_d) :: primitives
48863 : REAL(dp), DIMENSION(6*1*10*10) :: buffer1, buffer2
48864 :
48865 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
48866 : kmax, s_offset_a1, s_offset_b1, &
48867 : s_offset_c1, s_offset_d1
48868 :
48869 : s_offset_a1 = 0
48870 : DO ia = 1, nl_a
48871 : s_offset_b1 = 0
48872 : DO ib = 1, nl_b
48873 : s_offset_c1 = 0
48874 : DO ic = 1, nl_c
48875 : s_offset_d1 = 0
48876 : DO id = 1, nl_d
48877 : buffer1 = 0.0_dp
48878 : imax = 1*10*10
48879 : kmax = 6
48880 : DO i = 1, imax
48881 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
48882 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
48883 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
48884 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
48885 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
48886 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
48887 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
48888 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
48889 : END DO
48890 : buffer2 = 0.0_dp
48891 : imax = 5*10*10
48892 : kmax = 1
48893 : DO i = 1, imax
48894 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
48895 : END DO
48896 : buffer1 = 0.0_dp
48897 : imax = 5*1*10
48898 : kmax = 10
48899 : DO i = 1, imax
48900 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
48901 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
48902 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
48903 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
48904 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
48905 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
48906 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
48907 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
48908 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
48909 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
48910 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
48911 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
48912 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
48913 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
48914 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
48915 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
48916 : END DO
48917 : imax = 5*1*7
48918 : kmax = 10
48919 : i = 0
48920 : DO i1 = 1, 7
48921 : DO i2 = 1, 1
48922 : DO i3 = 1, 5
48923 : i = i + 1
48924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48926 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
48927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48929 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
48930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48932 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
48933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48935 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
48936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48938 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
48939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48941 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
48942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48944 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
48945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
48946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
48947 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
48948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
48949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
48950 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
48951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
48952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
48953 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
48954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
48955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
48956 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
48957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48959 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
48960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48962 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
48963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
48964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
48965 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
48966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
48967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
48968 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
48969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
48970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
48971 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
48972 : END DO
48973 : END DO
48974 : END DO
48975 : s_offset_d1 = s_offset_d1 + 7
48976 : END DO
48977 : s_offset_c1 = s_offset_c1 + 7
48978 : END DO
48979 : s_offset_b1 = s_offset_b1 + 1
48980 : END DO
48981 : s_offset_a1 = s_offset_a1 + 5
48982 : END DO
48983 : END SUBROUTINE contract_dsff
48984 : #endif
48985 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
48986 : ! **************************************************************************************************
48987 : !> \brief ...
48988 : !> \param work ...
48989 : !> \param nl_a ...
48990 : !> \param nl_b ...
48991 : !> \param nl_c ...
48992 : !> \param nl_d ...
48993 : !> \param sphi_a ...
48994 : !> \param sphi_b ...
48995 : !> \param sphi_c ...
48996 : !> \param sphi_d ...
48997 : !> \param primitives ...
48998 : !> \param buffer1 ...
48999 : !> \param buffer2 ...
49000 : ! **************************************************************************************************
49001 : SUBROUTINE contract_dsfg(work, &
49002 : nl_a, nl_b, nl_c, nl_d, &
49003 : sphi_a, sphi_b, sphi_c, sphi_d, &
49004 : primitives, &
49005 : buffer1, buffer2)
49006 : REAL(dp), DIMENSION(6*1*10*15), INTENT(IN) :: work
49007 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49008 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49009 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49010 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
49011 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
49012 : REAL(dp), &
49013 : DIMENSION(5*nl_a, 1*nl_b, 7*nl_c, 9*nl_d) :: primitives
49014 : REAL(dp), DIMENSION(6*1*10*15) :: buffer1, buffer2
49015 :
49016 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49017 : kmax, s_offset_a1, s_offset_b1, &
49018 : s_offset_c1, s_offset_d1
49019 :
49020 : s_offset_a1 = 0
49021 : DO ia = 1, nl_a
49022 : s_offset_b1 = 0
49023 : DO ib = 1, nl_b
49024 : s_offset_c1 = 0
49025 : DO ic = 1, nl_c
49026 : s_offset_d1 = 0
49027 : DO id = 1, nl_d
49028 : buffer1 = 0.0_dp
49029 : imax = 1*10*15
49030 : kmax = 6
49031 : DO i = 1, imax
49032 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49033 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49034 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49035 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49036 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49037 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49038 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49039 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49040 : END DO
49041 : buffer2 = 0.0_dp
49042 : imax = 5*10*15
49043 : kmax = 1
49044 : DO i = 1, imax
49045 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49046 : END DO
49047 : buffer1 = 0.0_dp
49048 : imax = 5*1*15
49049 : kmax = 10
49050 : DO i = 1, imax
49051 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49052 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49053 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49054 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49055 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
49056 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49057 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49058 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
49059 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49060 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49061 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49062 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49063 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
49064 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49065 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49066 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
49067 : END DO
49068 : imax = 5*1*7
49069 : kmax = 15
49070 : i = 0
49071 : DO i1 = 1, 7
49072 : DO i2 = 1, 1
49073 : DO i3 = 1, 5
49074 : i = i + 1
49075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49077 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
49078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49080 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
49081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49083 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
49084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49086 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
49087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49089 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
49090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49092 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
49093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
49094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
49095 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
49096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49098 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
49099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49101 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
49102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49104 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
49105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49107 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
49108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49110 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
49111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49113 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
49114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49116 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
49117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49119 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
49120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49122 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
49123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
49124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
49125 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
49126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49128 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
49129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49131 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
49132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49134 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
49135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49137 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
49138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49140 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
49141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49143 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
49144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49146 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
49147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49149 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
49150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49152 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
49153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49155 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
49156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49158 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
49159 : END DO
49160 : END DO
49161 : END DO
49162 : s_offset_d1 = s_offset_d1 + 9
49163 : END DO
49164 : s_offset_c1 = s_offset_c1 + 7
49165 : END DO
49166 : s_offset_b1 = s_offset_b1 + 1
49167 : END DO
49168 : s_offset_a1 = s_offset_a1 + 5
49169 : END DO
49170 : END SUBROUTINE contract_dsfg
49171 : #endif
49172 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
49173 : ! **************************************************************************************************
49174 : !> \brief ...
49175 : !> \param work ...
49176 : !> \param nl_a ...
49177 : !> \param nl_b ...
49178 : !> \param nl_c ...
49179 : !> \param nl_d ...
49180 : !> \param sphi_a ...
49181 : !> \param sphi_b ...
49182 : !> \param sphi_c ...
49183 : !> \param sphi_d ...
49184 : !> \param primitives ...
49185 : !> \param buffer1 ...
49186 : !> \param buffer2 ...
49187 : ! **************************************************************************************************
49188 : SUBROUTINE contract_dsgs(work, &
49189 : nl_a, nl_b, nl_c, nl_d, &
49190 : sphi_a, sphi_b, sphi_c, sphi_d, &
49191 : primitives, &
49192 : buffer1, buffer2)
49193 : REAL(dp), DIMENSION(6*1*15*1), INTENT(IN) :: work
49194 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49195 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49196 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49197 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
49198 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
49199 : REAL(dp), &
49200 : DIMENSION(5*nl_a, 1*nl_b, 9*nl_c, 1*nl_d) :: primitives
49201 : REAL(dp), DIMENSION(6*1*15*1) :: buffer1, buffer2
49202 :
49203 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49204 : kmax, s_offset_a1, s_offset_b1, &
49205 : s_offset_c1, s_offset_d1
49206 :
49207 : s_offset_a1 = 0
49208 : DO ia = 1, nl_a
49209 : s_offset_b1 = 0
49210 : DO ib = 1, nl_b
49211 : s_offset_c1 = 0
49212 : DO ic = 1, nl_c
49213 : s_offset_d1 = 0
49214 : DO id = 1, nl_d
49215 : buffer1 = 0.0_dp
49216 : imax = 1*15*1
49217 : kmax = 6
49218 : DO i = 1, imax
49219 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49220 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49221 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49222 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49223 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49224 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49225 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49226 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49227 : END DO
49228 : buffer2 = 0.0_dp
49229 : imax = 5*15*1
49230 : kmax = 1
49231 : DO i = 1, imax
49232 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49233 : END DO
49234 : buffer1 = 0.0_dp
49235 : imax = 5*1*1
49236 : kmax = 15
49237 : DO i = 1, imax
49238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49239 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49240 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
49241 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49242 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49243 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49244 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
49245 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49246 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
49247 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49248 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
49249 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49250 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
49251 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49252 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49253 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49254 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
49255 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49256 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
49257 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
49258 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
49259 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
49260 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
49261 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
49262 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
49263 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
49264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
49265 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
49266 : END DO
49267 : imax = 5*1*9
49268 : kmax = 1
49269 : i = 0
49270 : DO i1 = 1, 9
49271 : DO i2 = 1, 1
49272 : DO i3 = 1, 5
49273 : i = i + 1
49274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
49276 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
49277 : END DO
49278 : END DO
49279 : END DO
49280 : s_offset_d1 = s_offset_d1 + 1
49281 : END DO
49282 : s_offset_c1 = s_offset_c1 + 9
49283 : END DO
49284 : s_offset_b1 = s_offset_b1 + 1
49285 : END DO
49286 : s_offset_a1 = s_offset_a1 + 5
49287 : END DO
49288 : END SUBROUTINE contract_dsgs
49289 : #endif
49290 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
49291 : ! **************************************************************************************************
49292 : !> \brief ...
49293 : !> \param work ...
49294 : !> \param nl_a ...
49295 : !> \param nl_b ...
49296 : !> \param nl_c ...
49297 : !> \param nl_d ...
49298 : !> \param sphi_a ...
49299 : !> \param sphi_b ...
49300 : !> \param sphi_c ...
49301 : !> \param sphi_d ...
49302 : !> \param primitives ...
49303 : !> \param buffer1 ...
49304 : !> \param buffer2 ...
49305 : ! **************************************************************************************************
49306 : SUBROUTINE contract_dsgp(work, &
49307 : nl_a, nl_b, nl_c, nl_d, &
49308 : sphi_a, sphi_b, sphi_c, sphi_d, &
49309 : primitives, &
49310 : buffer1, buffer2)
49311 : REAL(dp), DIMENSION(6*1*15*3), INTENT(IN) :: work
49312 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49313 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49314 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49315 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
49316 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
49317 : REAL(dp), &
49318 : DIMENSION(5*nl_a, 1*nl_b, 9*nl_c, 3*nl_d) :: primitives
49319 : REAL(dp), DIMENSION(6*1*15*3) :: buffer1, buffer2
49320 :
49321 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49322 : kmax, s_offset_a1, s_offset_b1, &
49323 : s_offset_c1, s_offset_d1
49324 :
49325 : s_offset_a1 = 0
49326 : DO ia = 1, nl_a
49327 : s_offset_b1 = 0
49328 : DO ib = 1, nl_b
49329 : s_offset_c1 = 0
49330 : DO ic = 1, nl_c
49331 : s_offset_d1 = 0
49332 : DO id = 1, nl_d
49333 : buffer1 = 0.0_dp
49334 : imax = 1*15*3
49335 : kmax = 6
49336 : DO i = 1, imax
49337 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49338 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49339 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49340 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49341 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49342 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49343 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49344 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49345 : END DO
49346 : buffer2 = 0.0_dp
49347 : imax = 5*15*3
49348 : kmax = 1
49349 : DO i = 1, imax
49350 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49351 : END DO
49352 : buffer1 = 0.0_dp
49353 : imax = 5*1*3
49354 : kmax = 15
49355 : DO i = 1, imax
49356 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49357 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49358 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
49359 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49361 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49362 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
49363 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49364 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
49365 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49366 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
49367 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49368 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
49369 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49372 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
49373 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49374 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
49375 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
49376 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
49377 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
49378 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
49379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
49380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
49381 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
49382 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
49383 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
49384 : END DO
49385 : imax = 5*1*9
49386 : kmax = 3
49387 : i = 0
49388 : DO i1 = 1, 9
49389 : DO i2 = 1, 1
49390 : DO i3 = 1, 5
49391 : i = i + 1
49392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
49394 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
49395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
49397 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
49398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
49400 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
49401 : END DO
49402 : END DO
49403 : END DO
49404 : s_offset_d1 = s_offset_d1 + 3
49405 : END DO
49406 : s_offset_c1 = s_offset_c1 + 9
49407 : END DO
49408 : s_offset_b1 = s_offset_b1 + 1
49409 : END DO
49410 : s_offset_a1 = s_offset_a1 + 5
49411 : END DO
49412 : END SUBROUTINE contract_dsgp
49413 : #endif
49414 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
49415 : ! **************************************************************************************************
49416 : !> \brief ...
49417 : !> \param work ...
49418 : !> \param nl_a ...
49419 : !> \param nl_b ...
49420 : !> \param nl_c ...
49421 : !> \param nl_d ...
49422 : !> \param sphi_a ...
49423 : !> \param sphi_b ...
49424 : !> \param sphi_c ...
49425 : !> \param sphi_d ...
49426 : !> \param primitives ...
49427 : !> \param buffer1 ...
49428 : !> \param buffer2 ...
49429 : ! **************************************************************************************************
49430 : SUBROUTINE contract_dsgd(work, &
49431 : nl_a, nl_b, nl_c, nl_d, &
49432 : sphi_a, sphi_b, sphi_c, sphi_d, &
49433 : primitives, &
49434 : buffer1, buffer2)
49435 : REAL(dp), DIMENSION(6*1*15*6), INTENT(IN) :: work
49436 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49437 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49438 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49439 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
49440 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
49441 : REAL(dp), &
49442 : DIMENSION(5*nl_a, 1*nl_b, 9*nl_c, 5*nl_d) :: primitives
49443 : REAL(dp), DIMENSION(6*1*15*6) :: buffer1, buffer2
49444 :
49445 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49446 : kmax, s_offset_a1, s_offset_b1, &
49447 : s_offset_c1, s_offset_d1
49448 :
49449 : s_offset_a1 = 0
49450 : DO ia = 1, nl_a
49451 : s_offset_b1 = 0
49452 : DO ib = 1, nl_b
49453 : s_offset_c1 = 0
49454 : DO ic = 1, nl_c
49455 : s_offset_d1 = 0
49456 : DO id = 1, nl_d
49457 : buffer1 = 0.0_dp
49458 : imax = 1*15*6
49459 : kmax = 6
49460 : DO i = 1, imax
49461 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49462 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49463 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49464 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49465 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49467 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49468 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49469 : END DO
49470 : buffer2 = 0.0_dp
49471 : imax = 5*15*6
49472 : kmax = 1
49473 : DO i = 1, imax
49474 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49475 : END DO
49476 : buffer1 = 0.0_dp
49477 : imax = 5*1*6
49478 : kmax = 15
49479 : DO i = 1, imax
49480 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49481 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49482 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
49483 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49484 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49485 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49486 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
49487 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49488 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
49489 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49490 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
49491 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49492 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
49493 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49494 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49495 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49496 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
49497 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49498 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
49499 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
49500 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
49501 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
49502 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
49503 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
49504 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
49505 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
49506 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
49507 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
49508 : END DO
49509 : imax = 5*1*9
49510 : kmax = 6
49511 : i = 0
49512 : DO i1 = 1, 9
49513 : DO i2 = 1, 1
49514 : DO i3 = 1, 5
49515 : i = i + 1
49516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49518 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
49519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49521 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
49522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49524 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
49525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49527 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
49528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49530 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
49531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49533 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
49534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49536 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
49537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49539 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
49540 : END DO
49541 : END DO
49542 : END DO
49543 : s_offset_d1 = s_offset_d1 + 5
49544 : END DO
49545 : s_offset_c1 = s_offset_c1 + 9
49546 : END DO
49547 : s_offset_b1 = s_offset_b1 + 1
49548 : END DO
49549 : s_offset_a1 = s_offset_a1 + 5
49550 : END DO
49551 : END SUBROUTINE contract_dsgd
49552 : #endif
49553 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
49554 : ! **************************************************************************************************
49555 : !> \brief ...
49556 : !> \param work ...
49557 : !> \param nl_a ...
49558 : !> \param nl_b ...
49559 : !> \param nl_c ...
49560 : !> \param nl_d ...
49561 : !> \param sphi_a ...
49562 : !> \param sphi_b ...
49563 : !> \param sphi_c ...
49564 : !> \param sphi_d ...
49565 : !> \param primitives ...
49566 : !> \param buffer1 ...
49567 : !> \param buffer2 ...
49568 : ! **************************************************************************************************
49569 : SUBROUTINE contract_dsgf(work, &
49570 : nl_a, nl_b, nl_c, nl_d, &
49571 : sphi_a, sphi_b, sphi_c, sphi_d, &
49572 : primitives, &
49573 : buffer1, buffer2)
49574 : REAL(dp), DIMENSION(6*1*15*10), INTENT(IN) :: work
49575 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49576 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49577 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49578 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
49579 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
49580 : REAL(dp), &
49581 : DIMENSION(5*nl_a, 1*nl_b, 9*nl_c, 7*nl_d) :: primitives
49582 : REAL(dp), DIMENSION(6*1*15*10) :: buffer1, buffer2
49583 :
49584 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49585 : kmax, s_offset_a1, s_offset_b1, &
49586 : s_offset_c1, s_offset_d1
49587 :
49588 : s_offset_a1 = 0
49589 : DO ia = 1, nl_a
49590 : s_offset_b1 = 0
49591 : DO ib = 1, nl_b
49592 : s_offset_c1 = 0
49593 : DO ic = 1, nl_c
49594 : s_offset_d1 = 0
49595 : DO id = 1, nl_d
49596 : buffer1 = 0.0_dp
49597 : imax = 1*15*10
49598 : kmax = 6
49599 : DO i = 1, imax
49600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49601 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49602 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49603 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49604 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49605 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49606 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49607 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49608 : END DO
49609 : buffer2 = 0.0_dp
49610 : imax = 5*15*10
49611 : kmax = 1
49612 : DO i = 1, imax
49613 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49614 : END DO
49615 : buffer1 = 0.0_dp
49616 : imax = 5*1*10
49617 : kmax = 15
49618 : DO i = 1, imax
49619 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49620 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49621 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
49622 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49623 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49624 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49625 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
49626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49627 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
49628 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49629 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
49630 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49631 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
49632 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49633 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49634 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49635 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
49636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49637 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
49638 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
49639 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
49640 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
49641 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
49642 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
49643 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
49644 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
49645 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
49646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
49647 : END DO
49648 : imax = 5*1*9
49649 : kmax = 10
49650 : i = 0
49651 : DO i1 = 1, 9
49652 : DO i2 = 1, 1
49653 : DO i3 = 1, 5
49654 : i = i + 1
49655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49657 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
49658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49660 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
49661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49663 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
49664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49666 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
49667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49669 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
49670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49672 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
49673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49675 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
49676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49678 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
49679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49681 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
49682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49684 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
49685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49687 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
49688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49690 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
49691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49693 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
49694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49696 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
49697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49699 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
49700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49702 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
49703 : END DO
49704 : END DO
49705 : END DO
49706 : s_offset_d1 = s_offset_d1 + 7
49707 : END DO
49708 : s_offset_c1 = s_offset_c1 + 9
49709 : END DO
49710 : s_offset_b1 = s_offset_b1 + 1
49711 : END DO
49712 : s_offset_a1 = s_offset_a1 + 5
49713 : END DO
49714 : END SUBROUTINE contract_dsgf
49715 : #endif
49716 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
49717 : ! **************************************************************************************************
49718 : !> \brief ...
49719 : !> \param work ...
49720 : !> \param nl_a ...
49721 : !> \param nl_b ...
49722 : !> \param nl_c ...
49723 : !> \param nl_d ...
49724 : !> \param sphi_a ...
49725 : !> \param sphi_b ...
49726 : !> \param sphi_c ...
49727 : !> \param sphi_d ...
49728 : !> \param primitives ...
49729 : !> \param buffer1 ...
49730 : !> \param buffer2 ...
49731 : ! **************************************************************************************************
49732 : SUBROUTINE contract_dsgg(work, &
49733 : nl_a, nl_b, nl_c, nl_d, &
49734 : sphi_a, sphi_b, sphi_c, sphi_d, &
49735 : primitives, &
49736 : buffer1, buffer2)
49737 : REAL(dp), DIMENSION(6*1*15*15), INTENT(IN) :: work
49738 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49739 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49740 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
49741 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
49742 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
49743 : REAL(dp), &
49744 : DIMENSION(5*nl_a, 1*nl_b, 9*nl_c, 9*nl_d) :: primitives
49745 : REAL(dp), DIMENSION(6*1*15*15) :: buffer1, buffer2
49746 :
49747 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49748 : kmax, s_offset_a1, s_offset_b1, &
49749 : s_offset_c1, s_offset_d1
49750 :
49751 : s_offset_a1 = 0
49752 : DO ia = 1, nl_a
49753 : s_offset_b1 = 0
49754 : DO ib = 1, nl_b
49755 : s_offset_c1 = 0
49756 : DO ic = 1, nl_c
49757 : s_offset_d1 = 0
49758 : DO id = 1, nl_d
49759 : buffer1 = 0.0_dp
49760 : imax = 1*15*15
49761 : kmax = 6
49762 : DO i = 1, imax
49763 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49764 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49765 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49766 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49767 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49768 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49769 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49770 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49771 : END DO
49772 : buffer2 = 0.0_dp
49773 : imax = 5*15*15
49774 : kmax = 1
49775 : DO i = 1, imax
49776 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
49777 : END DO
49778 : buffer1 = 0.0_dp
49779 : imax = 5*1*15
49780 : kmax = 15
49781 : DO i = 1, imax
49782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
49783 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
49784 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
49785 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
49786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
49787 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
49788 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
49789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
49790 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
49791 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
49792 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
49793 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
49794 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
49795 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
49796 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
49797 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
49798 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
49799 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
49800 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
49801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
49802 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
49803 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
49804 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
49805 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
49806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
49807 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
49808 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
49809 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
49810 : END DO
49811 : imax = 5*1*9
49812 : kmax = 15
49813 : i = 0
49814 : DO i1 = 1, 9
49815 : DO i2 = 1, 1
49816 : DO i3 = 1, 5
49817 : i = i + 1
49818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49820 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
49821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49823 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
49824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49826 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
49827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49829 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
49830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49832 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
49833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49835 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
49836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
49837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
49838 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
49839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49841 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
49842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49844 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
49845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49847 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
49848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49850 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
49851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49853 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
49854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49856 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
49857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
49859 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
49860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49862 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
49863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49865 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
49866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
49867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
49868 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
49869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
49870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
49871 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
49872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
49873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
49874 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
49875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49877 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
49878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49880 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
49881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
49882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
49883 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
49884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
49885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
49886 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
49887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49889 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
49890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49892 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
49893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
49894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
49895 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
49896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
49897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
49898 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
49899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
49900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
49901 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
49902 : END DO
49903 : END DO
49904 : END DO
49905 : s_offset_d1 = s_offset_d1 + 9
49906 : END DO
49907 : s_offset_c1 = s_offset_c1 + 9
49908 : END DO
49909 : s_offset_b1 = s_offset_b1 + 1
49910 : END DO
49911 : s_offset_a1 = s_offset_a1 + 5
49912 : END DO
49913 : END SUBROUTINE contract_dsgg
49914 : #endif
49915 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
49916 : ! **************************************************************************************************
49917 : !> \brief ...
49918 : !> \param work ...
49919 : !> \param nl_a ...
49920 : !> \param nl_b ...
49921 : !> \param nl_c ...
49922 : !> \param nl_d ...
49923 : !> \param sphi_a ...
49924 : !> \param sphi_b ...
49925 : !> \param sphi_c ...
49926 : !> \param sphi_d ...
49927 : !> \param primitives ...
49928 : !> \param buffer1 ...
49929 : !> \param buffer2 ...
49930 : ! **************************************************************************************************
49931 1640240 : SUBROUTINE contract_dpss(work, &
49932 : nl_a, nl_b, nl_c, nl_d, &
49933 1640240 : sphi_a, sphi_b, sphi_c, sphi_d, &
49934 1640240 : primitives, &
49935 : buffer1, buffer2)
49936 : REAL(dp), DIMENSION(6*3*1*1), INTENT(IN) :: work
49937 : INTEGER :: nl_a, nl_b, nl_c, nl_d
49938 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
49939 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
49940 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
49941 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
49942 : REAL(dp), &
49943 : DIMENSION(5*nl_a, 3*nl_b, 1*nl_c, 1*nl_d) :: primitives
49944 : REAL(dp), DIMENSION(6*3*1*1) :: buffer1, buffer2
49945 :
49946 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
49947 : kmax, s_offset_a1, s_offset_b1, &
49948 : s_offset_c1, s_offset_d1
49949 :
49950 1640240 : s_offset_a1 = 0
49951 3349607 : DO ia = 1, nl_a
49952 : s_offset_b1 = 0
49953 3802199 : DO ib = 1, nl_b
49954 : s_offset_c1 = 0
49955 5298245 : DO ic = 1, nl_c
49956 : s_offset_d1 = 0
49957 8601308 : DO id = 1, nl_d
49958 5395895 : buffer1 = 0.0_dp
49959 5395895 : imax = 3*1*1
49960 5395895 : kmax = 6
49961 21583580 : DO i = 1, imax
49962 16187685 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
49963 16187685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
49964 16187685 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
49965 16187685 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
49966 16187685 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
49967 16187685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
49968 16187685 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
49969 21583580 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
49970 : END DO
49971 5395895 : buffer2 = 0.0_dp
49972 5395895 : imax = 5*1*1
49973 5395895 : kmax = 3
49974 32375370 : DO i = 1, imax
49975 26979475 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
49976 26979475 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
49977 32375370 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
49978 : END DO
49979 5395895 : buffer1 = 0.0_dp
49980 5395895 : imax = 5*3*1
49981 5395895 : kmax = 1
49982 86334320 : DO i = 1, imax
49983 86334320 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
49984 : END DO
49985 10791790 : imax = 5*3*1
49986 10791790 : kmax = 1
49987 : i = 0
49988 10791790 : DO i1 = 1, 1
49989 26979475 : DO i2 = 1, 3
49990 102522005 : DO i3 = 1, 5
49991 80938425 : i = i + 1
49992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
49993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
49994 97126110 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
49995 : END DO
49996 : END DO
49997 : END DO
49998 8601308 : s_offset_d1 = s_offset_d1 + 1
49999 : END DO
50000 5298245 : s_offset_c1 = s_offset_c1 + 1
50001 : END DO
50002 3802199 : s_offset_b1 = s_offset_b1 + 3
50003 : END DO
50004 3349607 : s_offset_a1 = s_offset_a1 + 5
50005 : END DO
50006 1640240 : END SUBROUTINE contract_dpss
50007 : #endif
50008 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
50009 : ! **************************************************************************************************
50010 : !> \brief ...
50011 : !> \param work ...
50012 : !> \param nl_a ...
50013 : !> \param nl_b ...
50014 : !> \param nl_c ...
50015 : !> \param nl_d ...
50016 : !> \param sphi_a ...
50017 : !> \param sphi_b ...
50018 : !> \param sphi_c ...
50019 : !> \param sphi_d ...
50020 : !> \param primitives ...
50021 : !> \param buffer1 ...
50022 : !> \param buffer2 ...
50023 : ! **************************************************************************************************
50024 826957 : SUBROUTINE contract_dpsp(work, &
50025 : nl_a, nl_b, nl_c, nl_d, &
50026 826957 : sphi_a, sphi_b, sphi_c, sphi_d, &
50027 826957 : primitives, &
50028 : buffer1, buffer2)
50029 : REAL(dp), DIMENSION(6*3*1*3), INTENT(IN) :: work
50030 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50031 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50032 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50033 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
50034 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
50035 : REAL(dp), &
50036 : DIMENSION(5*nl_a, 3*nl_b, 1*nl_c, 3*nl_d) :: primitives
50037 : REAL(dp), DIMENSION(6*3*1*3) :: buffer1, buffer2
50038 :
50039 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50040 : kmax, s_offset_a1, s_offset_b1, &
50041 : s_offset_c1, s_offset_d1
50042 :
50043 826957 : s_offset_a1 = 0
50044 1710900 : DO ia = 1, nl_a
50045 : s_offset_b1 = 0
50046 1959282 : DO ib = 1, nl_b
50047 : s_offset_c1 = 0
50048 2796071 : DO ic = 1, nl_c
50049 : s_offset_d1 = 0
50050 4269443 : DO id = 1, nl_d
50051 2548711 : buffer1 = 0.0_dp
50052 2548711 : imax = 3*1*3
50053 2548711 : kmax = 6
50054 25487110 : DO i = 1, imax
50055 22938399 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50056 22938399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50057 22938399 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50058 22938399 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50059 22938399 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50060 22938399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50061 22938399 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50062 25487110 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50063 : END DO
50064 2548711 : buffer2 = 0.0_dp
50065 2548711 : imax = 5*1*3
50066 2548711 : kmax = 3
50067 40779376 : DO i = 1, imax
50068 38230665 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50069 38230665 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50070 40779376 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50071 : END DO
50072 2548711 : buffer1 = 0.0_dp
50073 2548711 : imax = 5*3*3
50074 2548711 : kmax = 1
50075 117240706 : DO i = 1, imax
50076 117240706 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
50077 : END DO
50078 5097422 : imax = 5*3*1
50079 5097422 : kmax = 3
50080 : i = 0
50081 5097422 : DO i1 = 1, 1
50082 12743555 : DO i2 = 1, 3
50083 48425509 : DO i3 = 1, 5
50084 38230665 : i = i + 1
50085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
50087 38230665 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
50088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
50090 38230665 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
50093 45876798 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
50094 : END DO
50095 : END DO
50096 : END DO
50097 4269443 : s_offset_d1 = s_offset_d1 + 3
50098 : END DO
50099 2796071 : s_offset_c1 = s_offset_c1 + 1
50100 : END DO
50101 1959282 : s_offset_b1 = s_offset_b1 + 3
50102 : END DO
50103 1710900 : s_offset_a1 = s_offset_a1 + 5
50104 : END DO
50105 826957 : END SUBROUTINE contract_dpsp
50106 : #endif
50107 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
50108 : ! **************************************************************************************************
50109 : !> \brief ...
50110 : !> \param work ...
50111 : !> \param nl_a ...
50112 : !> \param nl_b ...
50113 : !> \param nl_c ...
50114 : !> \param nl_d ...
50115 : !> \param sphi_a ...
50116 : !> \param sphi_b ...
50117 : !> \param sphi_c ...
50118 : !> \param sphi_d ...
50119 : !> \param primitives ...
50120 : !> \param buffer1 ...
50121 : !> \param buffer2 ...
50122 : ! **************************************************************************************************
50123 375556 : SUBROUTINE contract_dpsd(work, &
50124 : nl_a, nl_b, nl_c, nl_d, &
50125 375556 : sphi_a, sphi_b, sphi_c, sphi_d, &
50126 375556 : primitives, &
50127 : buffer1, buffer2)
50128 : REAL(dp), DIMENSION(6*3*1*6), INTENT(IN) :: work
50129 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50130 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50131 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50132 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
50133 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
50134 : REAL(dp), &
50135 : DIMENSION(5*nl_a, 3*nl_b, 1*nl_c, 5*nl_d) :: primitives
50136 : REAL(dp), DIMENSION(6*3*1*6) :: buffer1, buffer2
50137 :
50138 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50139 : kmax, s_offset_a1, s_offset_b1, &
50140 : s_offset_c1, s_offset_d1
50141 :
50142 375556 : s_offset_a1 = 0
50143 790717 : DO ia = 1, nl_a
50144 : s_offset_b1 = 0
50145 934881 : DO ib = 1, nl_b
50146 : s_offset_c1 = 0
50147 1394777 : DO ic = 1, nl_c
50148 : s_offset_d1 = 0
50149 1849637 : DO id = 1, nl_d
50150 974580 : buffer1 = 0.0_dp
50151 974580 : imax = 3*1*6
50152 974580 : kmax = 6
50153 18517020 : DO i = 1, imax
50154 17542440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50155 17542440 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50156 17542440 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50157 17542440 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50158 17542440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50159 17542440 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50160 17542440 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50161 18517020 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50162 : END DO
50163 974580 : buffer2 = 0.0_dp
50164 974580 : imax = 5*1*6
50165 974580 : kmax = 3
50166 30211980 : DO i = 1, imax
50167 29237400 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50168 29237400 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50169 30211980 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50170 : END DO
50171 974580 : buffer1 = 0.0_dp
50172 974580 : imax = 5*3*6
50173 974580 : kmax = 1
50174 88686780 : DO i = 1, imax
50175 88686780 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
50176 : END DO
50177 1949160 : imax = 5*3*1
50178 1949160 : kmax = 6
50179 : i = 0
50180 1949160 : DO i1 = 1, 1
50181 4872900 : DO i2 = 1, 3
50182 18517020 : DO i3 = 1, 5
50183 14618700 : i = i + 1
50184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50186 14618700 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
50187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50189 14618700 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
50190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50192 14618700 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50195 14618700 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
50196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50198 14618700 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
50199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50201 14618700 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
50202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50204 14618700 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
50205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50207 17542440 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
50208 : END DO
50209 : END DO
50210 : END DO
50211 1849637 : s_offset_d1 = s_offset_d1 + 5
50212 : END DO
50213 1394777 : s_offset_c1 = s_offset_c1 + 1
50214 : END DO
50215 934881 : s_offset_b1 = s_offset_b1 + 3
50216 : END DO
50217 790717 : s_offset_a1 = s_offset_a1 + 5
50218 : END DO
50219 375556 : END SUBROUTINE contract_dpsd
50220 : #endif
50221 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
50222 : ! **************************************************************************************************
50223 : !> \brief ...
50224 : !> \param work ...
50225 : !> \param nl_a ...
50226 : !> \param nl_b ...
50227 : !> \param nl_c ...
50228 : !> \param nl_d ...
50229 : !> \param sphi_a ...
50230 : !> \param sphi_b ...
50231 : !> \param sphi_c ...
50232 : !> \param sphi_d ...
50233 : !> \param primitives ...
50234 : !> \param buffer1 ...
50235 : !> \param buffer2 ...
50236 : ! **************************************************************************************************
50237 : SUBROUTINE contract_dpsf(work, &
50238 : nl_a, nl_b, nl_c, nl_d, &
50239 : sphi_a, sphi_b, sphi_c, sphi_d, &
50240 : primitives, &
50241 : buffer1, buffer2)
50242 : REAL(dp), DIMENSION(6*3*1*10), INTENT(IN) :: work
50243 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50244 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50245 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50246 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
50247 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
50248 : REAL(dp), &
50249 : DIMENSION(5*nl_a, 3*nl_b, 1*nl_c, 7*nl_d) :: primitives
50250 : REAL(dp), DIMENSION(6*3*1*10) :: buffer1, buffer2
50251 :
50252 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50253 : kmax, s_offset_a1, s_offset_b1, &
50254 : s_offset_c1, s_offset_d1
50255 :
50256 : s_offset_a1 = 0
50257 : DO ia = 1, nl_a
50258 : s_offset_b1 = 0
50259 : DO ib = 1, nl_b
50260 : s_offset_c1 = 0
50261 : DO ic = 1, nl_c
50262 : s_offset_d1 = 0
50263 : DO id = 1, nl_d
50264 : buffer1 = 0.0_dp
50265 : imax = 3*1*10
50266 : kmax = 6
50267 : DO i = 1, imax
50268 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50269 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50271 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50272 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50273 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50274 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50275 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50276 : END DO
50277 : buffer2 = 0.0_dp
50278 : imax = 5*1*10
50279 : kmax = 3
50280 : DO i = 1, imax
50281 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50282 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50283 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50284 : END DO
50285 : buffer1 = 0.0_dp
50286 : imax = 5*3*10
50287 : kmax = 1
50288 : DO i = 1, imax
50289 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
50290 : END DO
50291 : imax = 5*3*1
50292 : kmax = 10
50293 : i = 0
50294 : DO i1 = 1, 1
50295 : DO i2 = 1, 3
50296 : DO i3 = 1, 5
50297 : i = i + 1
50298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50300 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
50301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50303 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
50304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50306 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50309 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
50310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50312 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
50313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50315 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
50316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50318 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
50319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50321 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
50322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50324 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
50325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50327 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
50328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50330 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
50331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50333 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
50334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50336 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
50337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50339 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
50340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50342 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
50343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50345 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
50346 : END DO
50347 : END DO
50348 : END DO
50349 : s_offset_d1 = s_offset_d1 + 7
50350 : END DO
50351 : s_offset_c1 = s_offset_c1 + 1
50352 : END DO
50353 : s_offset_b1 = s_offset_b1 + 3
50354 : END DO
50355 : s_offset_a1 = s_offset_a1 + 5
50356 : END DO
50357 : END SUBROUTINE contract_dpsf
50358 : #endif
50359 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
50360 : ! **************************************************************************************************
50361 : !> \brief ...
50362 : !> \param work ...
50363 : !> \param nl_a ...
50364 : !> \param nl_b ...
50365 : !> \param nl_c ...
50366 : !> \param nl_d ...
50367 : !> \param sphi_a ...
50368 : !> \param sphi_b ...
50369 : !> \param sphi_c ...
50370 : !> \param sphi_d ...
50371 : !> \param primitives ...
50372 : !> \param buffer1 ...
50373 : !> \param buffer2 ...
50374 : ! **************************************************************************************************
50375 : SUBROUTINE contract_dpsg(work, &
50376 : nl_a, nl_b, nl_c, nl_d, &
50377 : sphi_a, sphi_b, sphi_c, sphi_d, &
50378 : primitives, &
50379 : buffer1, buffer2)
50380 : REAL(dp), DIMENSION(6*3*1*15), INTENT(IN) :: work
50381 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50382 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50383 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50384 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
50385 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
50386 : REAL(dp), &
50387 : DIMENSION(5*nl_a, 3*nl_b, 1*nl_c, 9*nl_d) :: primitives
50388 : REAL(dp), DIMENSION(6*3*1*15) :: buffer1, buffer2
50389 :
50390 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50391 : kmax, s_offset_a1, s_offset_b1, &
50392 : s_offset_c1, s_offset_d1
50393 :
50394 : s_offset_a1 = 0
50395 : DO ia = 1, nl_a
50396 : s_offset_b1 = 0
50397 : DO ib = 1, nl_b
50398 : s_offset_c1 = 0
50399 : DO ic = 1, nl_c
50400 : s_offset_d1 = 0
50401 : DO id = 1, nl_d
50402 : buffer1 = 0.0_dp
50403 : imax = 3*1*15
50404 : kmax = 6
50405 : DO i = 1, imax
50406 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50407 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50408 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50409 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50410 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50411 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50412 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50414 : END DO
50415 : buffer2 = 0.0_dp
50416 : imax = 5*1*15
50417 : kmax = 3
50418 : DO i = 1, imax
50419 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50420 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50421 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50422 : END DO
50423 : buffer1 = 0.0_dp
50424 : imax = 5*3*15
50425 : kmax = 1
50426 : DO i = 1, imax
50427 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
50428 : END DO
50429 : imax = 5*3*1
50430 : kmax = 15
50431 : i = 0
50432 : DO i1 = 1, 1
50433 : DO i2 = 1, 3
50434 : DO i3 = 1, 5
50435 : i = i + 1
50436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50438 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
50439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50441 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
50442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
50443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
50444 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
50445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50447 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50450 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
50451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50453 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
50454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
50455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
50456 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
50457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50459 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
50460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
50461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
50462 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
50463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50465 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
50466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50468 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
50469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50471 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
50472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50474 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
50475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50477 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
50478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50480 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
50481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50483 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
50484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
50485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
50486 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
50487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50489 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
50490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50492 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
50493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50495 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
50496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50498 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
50499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
50500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
50501 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
50502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50504 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
50505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50507 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
50508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50510 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
50511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50513 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
50514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50516 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
50517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50519 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
50520 : END DO
50521 : END DO
50522 : END DO
50523 : s_offset_d1 = s_offset_d1 + 9
50524 : END DO
50525 : s_offset_c1 = s_offset_c1 + 1
50526 : END DO
50527 : s_offset_b1 = s_offset_b1 + 3
50528 : END DO
50529 : s_offset_a1 = s_offset_a1 + 5
50530 : END DO
50531 : END SUBROUTINE contract_dpsg
50532 : #endif
50533 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
50534 : ! **************************************************************************************************
50535 : !> \brief ...
50536 : !> \param work ...
50537 : !> \param nl_a ...
50538 : !> \param nl_b ...
50539 : !> \param nl_c ...
50540 : !> \param nl_d ...
50541 : !> \param sphi_a ...
50542 : !> \param sphi_b ...
50543 : !> \param sphi_c ...
50544 : !> \param sphi_d ...
50545 : !> \param primitives ...
50546 : !> \param buffer1 ...
50547 : !> \param buffer2 ...
50548 : ! **************************************************************************************************
50549 845768 : SUBROUTINE contract_dpps(work, &
50550 : nl_a, nl_b, nl_c, nl_d, &
50551 845768 : sphi_a, sphi_b, sphi_c, sphi_d, &
50552 845768 : primitives, &
50553 : buffer1, buffer2)
50554 : REAL(dp), DIMENSION(6*3*3*1), INTENT(IN) :: work
50555 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50556 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50557 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50558 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
50559 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
50560 : REAL(dp), &
50561 : DIMENSION(5*nl_a, 3*nl_b, 3*nl_c, 1*nl_d) :: primitives
50562 : REAL(dp), DIMENSION(6*3*3*1) :: buffer1, buffer2
50563 :
50564 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50565 : kmax, s_offset_a1, s_offset_b1, &
50566 : s_offset_c1, s_offset_d1
50567 :
50568 845768 : s_offset_a1 = 0
50569 1739932 : DO ia = 1, nl_a
50570 : s_offset_b1 = 0
50571 1978987 : DO ib = 1, nl_b
50572 : s_offset_c1 = 0
50573 2630965 : DO ic = 1, nl_c
50574 : s_offset_d1 = 0
50575 4168863 : DO id = 1, nl_d
50576 2622721 : buffer1 = 0.0_dp
50577 2622721 : imax = 3*3*1
50578 2622721 : kmax = 6
50579 26227210 : DO i = 1, imax
50580 23604489 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50581 23604489 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50582 23604489 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50583 23604489 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50584 23604489 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50585 23604489 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50586 23604489 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50587 26227210 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50588 : END DO
50589 2622721 : buffer2 = 0.0_dp
50590 2622721 : imax = 5*3*1
50591 2622721 : kmax = 3
50592 41963536 : DO i = 1, imax
50593 39340815 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50594 39340815 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50595 41963536 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50596 : END DO
50597 2622721 : buffer1 = 0.0_dp
50598 2622721 : imax = 5*3*1
50599 2622721 : kmax = 3
50600 41963536 : DO i = 1, imax
50601 39340815 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
50602 39340815 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
50603 41963536 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
50604 : END DO
50605 10490884 : imax = 5*3*3
50606 10490884 : kmax = 1
50607 : i = 0
50608 10490884 : DO i1 = 1, 3
50609 34095373 : DO i2 = 1, 3
50610 149495097 : DO i3 = 1, 5
50611 118022445 : i = i + 1
50612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
50614 141626934 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
50615 : END DO
50616 : END DO
50617 : END DO
50618 4168863 : s_offset_d1 = s_offset_d1 + 1
50619 : END DO
50620 2630965 : s_offset_c1 = s_offset_c1 + 3
50621 : END DO
50622 1978987 : s_offset_b1 = s_offset_b1 + 3
50623 : END DO
50624 1739932 : s_offset_a1 = s_offset_a1 + 5
50625 : END DO
50626 845768 : END SUBROUTINE contract_dpps
50627 : #endif
50628 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
50629 : ! **************************************************************************************************
50630 : !> \brief ...
50631 : !> \param work ...
50632 : !> \param nl_a ...
50633 : !> \param nl_b ...
50634 : !> \param nl_c ...
50635 : !> \param nl_d ...
50636 : !> \param sphi_a ...
50637 : !> \param sphi_b ...
50638 : !> \param sphi_c ...
50639 : !> \param sphi_d ...
50640 : !> \param primitives ...
50641 : !> \param buffer1 ...
50642 : !> \param buffer2 ...
50643 : ! **************************************************************************************************
50644 906289 : SUBROUTINE contract_dppp(work, &
50645 : nl_a, nl_b, nl_c, nl_d, &
50646 906289 : sphi_a, sphi_b, sphi_c, sphi_d, &
50647 906289 : primitives, &
50648 : buffer1, buffer2)
50649 : REAL(dp), DIMENSION(6*3*3*3), INTENT(IN) :: work
50650 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50651 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50652 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50653 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
50654 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
50655 : REAL(dp), &
50656 : DIMENSION(5*nl_a, 3*nl_b, 3*nl_c, 3*nl_d) :: primitives
50657 : REAL(dp), DIMENSION(6*3*3*3) :: buffer1, buffer2
50658 :
50659 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50660 : kmax, s_offset_a1, s_offset_b1, &
50661 : s_offset_c1, s_offset_d1
50662 :
50663 906289 : s_offset_a1 = 0
50664 1853808 : DO ia = 1, nl_a
50665 : s_offset_b1 = 0
50666 2273606 : DO ib = 1, nl_b
50667 : s_offset_c1 = 0
50668 3468028 : DO ic = 1, nl_c
50669 : s_offset_d1 = 0
50670 5838322 : DO id = 1, nl_d
50671 3696381 : buffer1 = 0.0_dp
50672 3696381 : imax = 3*3*3
50673 3696381 : kmax = 6
50674 103498668 : DO i = 1, imax
50675 99802287 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50676 99802287 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50677 99802287 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50678 99802287 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50679 99802287 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50680 99802287 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50681 99802287 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50682 103498668 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50683 : END DO
50684 3696381 : buffer2 = 0.0_dp
50685 3696381 : imax = 5*3*3
50686 3696381 : kmax = 3
50687 170033526 : DO i = 1, imax
50688 166337145 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50689 166337145 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50690 170033526 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50691 : END DO
50692 3696381 : buffer1 = 0.0_dp
50693 3696381 : imax = 5*3*3
50694 3696381 : kmax = 3
50695 170033526 : DO i = 1, imax
50696 166337145 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
50697 166337145 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
50698 170033526 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
50699 : END DO
50700 14785524 : imax = 5*3*3
50701 14785524 : kmax = 3
50702 : i = 0
50703 14785524 : DO i1 = 1, 3
50704 48052953 : DO i2 = 1, 3
50705 210693717 : DO i3 = 1, 5
50706 166337145 : i = i + 1
50707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
50709 166337145 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
50710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
50712 166337145 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
50715 199604574 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
50716 : END DO
50717 : END DO
50718 : END DO
50719 5838322 : s_offset_d1 = s_offset_d1 + 3
50720 : END DO
50721 3468028 : s_offset_c1 = s_offset_c1 + 3
50722 : END DO
50723 2273606 : s_offset_b1 = s_offset_b1 + 3
50724 : END DO
50725 1853808 : s_offset_a1 = s_offset_a1 + 5
50726 : END DO
50727 906289 : END SUBROUTINE contract_dppp
50728 : #endif
50729 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
50730 : ! **************************************************************************************************
50731 : !> \brief ...
50732 : !> \param work ...
50733 : !> \param nl_a ...
50734 : !> \param nl_b ...
50735 : !> \param nl_c ...
50736 : !> \param nl_d ...
50737 : !> \param sphi_a ...
50738 : !> \param sphi_b ...
50739 : !> \param sphi_c ...
50740 : !> \param sphi_d ...
50741 : !> \param primitives ...
50742 : !> \param buffer1 ...
50743 : !> \param buffer2 ...
50744 : ! **************************************************************************************************
50745 249570 : SUBROUTINE contract_dppd(work, &
50746 : nl_a, nl_b, nl_c, nl_d, &
50747 249570 : sphi_a, sphi_b, sphi_c, sphi_d, &
50748 249570 : primitives, &
50749 : buffer1, buffer2)
50750 : REAL(dp), DIMENSION(6*3*3*6), INTENT(IN) :: work
50751 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50752 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50753 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50754 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
50755 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
50756 : REAL(dp), &
50757 : DIMENSION(5*nl_a, 3*nl_b, 3*nl_c, 5*nl_d) :: primitives
50758 : REAL(dp), DIMENSION(6*3*3*6) :: buffer1, buffer2
50759 :
50760 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50761 : kmax, s_offset_a1, s_offset_b1, &
50762 : s_offset_c1, s_offset_d1
50763 :
50764 249570 : s_offset_a1 = 0
50765 530317 : DO ia = 1, nl_a
50766 : s_offset_b1 = 0
50767 617913 : DO ib = 1, nl_b
50768 : s_offset_c1 = 0
50769 812963 : DO ic = 1, nl_c
50770 : s_offset_d1 = 0
50771 1006324 : DO id = 1, nl_d
50772 530527 : buffer1 = 0.0_dp
50773 530527 : imax = 3*3*6
50774 530527 : kmax = 6
50775 29178985 : DO i = 1, imax
50776 28648458 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50777 28648458 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50778 28648458 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50779 28648458 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50780 28648458 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50781 28648458 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50782 28648458 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50783 29178985 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50784 : END DO
50785 530527 : buffer2 = 0.0_dp
50786 530527 : imax = 5*3*6
50787 530527 : kmax = 3
50788 48277957 : DO i = 1, imax
50789 47747430 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50790 47747430 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50791 48277957 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50792 : END DO
50793 530527 : buffer1 = 0.0_dp
50794 530527 : imax = 5*3*6
50795 530527 : kmax = 3
50796 48277957 : DO i = 1, imax
50797 47747430 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
50798 47747430 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
50799 48277957 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
50800 : END DO
50801 2122108 : imax = 5*3*3
50802 2122108 : kmax = 6
50803 : i = 0
50804 2122108 : DO i1 = 1, 3
50805 6896851 : DO i2 = 1, 3
50806 30240039 : DO i3 = 1, 5
50807 23873715 : i = i + 1
50808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50810 23873715 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
50811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50813 23873715 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
50814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50816 23873715 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50819 23873715 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
50820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50822 23873715 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
50823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50825 23873715 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
50826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50828 23873715 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
50829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50831 28648458 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
50832 : END DO
50833 : END DO
50834 : END DO
50835 1006324 : s_offset_d1 = s_offset_d1 + 5
50836 : END DO
50837 812963 : s_offset_c1 = s_offset_c1 + 3
50838 : END DO
50839 617913 : s_offset_b1 = s_offset_b1 + 3
50840 : END DO
50841 530317 : s_offset_a1 = s_offset_a1 + 5
50842 : END DO
50843 249570 : END SUBROUTINE contract_dppd
50844 : #endif
50845 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
50846 : ! **************************************************************************************************
50847 : !> \brief ...
50848 : !> \param work ...
50849 : !> \param nl_a ...
50850 : !> \param nl_b ...
50851 : !> \param nl_c ...
50852 : !> \param nl_d ...
50853 : !> \param sphi_a ...
50854 : !> \param sphi_b ...
50855 : !> \param sphi_c ...
50856 : !> \param sphi_d ...
50857 : !> \param primitives ...
50858 : !> \param buffer1 ...
50859 : !> \param buffer2 ...
50860 : ! **************************************************************************************************
50861 : SUBROUTINE contract_dppf(work, &
50862 : nl_a, nl_b, nl_c, nl_d, &
50863 : sphi_a, sphi_b, sphi_c, sphi_d, &
50864 : primitives, &
50865 : buffer1, buffer2)
50866 : REAL(dp), DIMENSION(6*3*3*10), INTENT(IN) :: work
50867 : INTEGER :: nl_a, nl_b, nl_c, nl_d
50868 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
50869 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
50870 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
50871 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
50872 : REAL(dp), &
50873 : DIMENSION(5*nl_a, 3*nl_b, 3*nl_c, 7*nl_d) :: primitives
50874 : REAL(dp), DIMENSION(6*3*3*10) :: buffer1, buffer2
50875 :
50876 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
50877 : kmax, s_offset_a1, s_offset_b1, &
50878 : s_offset_c1, s_offset_d1
50879 :
50880 : s_offset_a1 = 0
50881 : DO ia = 1, nl_a
50882 : s_offset_b1 = 0
50883 : DO ib = 1, nl_b
50884 : s_offset_c1 = 0
50885 : DO ic = 1, nl_c
50886 : s_offset_d1 = 0
50887 : DO id = 1, nl_d
50888 : buffer1 = 0.0_dp
50889 : imax = 3*3*10
50890 : kmax = 6
50891 : DO i = 1, imax
50892 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
50893 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
50894 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
50895 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
50896 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
50897 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
50898 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
50899 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
50900 : END DO
50901 : buffer2 = 0.0_dp
50902 : imax = 5*3*10
50903 : kmax = 3
50904 : DO i = 1, imax
50905 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
50906 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
50907 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
50908 : END DO
50909 : buffer1 = 0.0_dp
50910 : imax = 5*3*10
50911 : kmax = 3
50912 : DO i = 1, imax
50913 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
50914 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
50915 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
50916 : END DO
50917 : imax = 5*3*3
50918 : kmax = 10
50919 : i = 0
50920 : DO i1 = 1, 3
50921 : DO i2 = 1, 3
50922 : DO i3 = 1, 5
50923 : i = i + 1
50924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50926 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
50927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50929 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
50930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50932 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
50933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50935 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
50936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50938 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
50939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50941 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
50942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50944 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
50945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
50946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
50947 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
50948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
50949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
50950 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
50951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
50952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
50953 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
50954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
50955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
50956 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
50957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50959 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
50960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50962 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
50963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
50964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
50965 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
50966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
50967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
50968 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
50969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
50970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
50971 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
50972 : END DO
50973 : END DO
50974 : END DO
50975 : s_offset_d1 = s_offset_d1 + 7
50976 : END DO
50977 : s_offset_c1 = s_offset_c1 + 3
50978 : END DO
50979 : s_offset_b1 = s_offset_b1 + 3
50980 : END DO
50981 : s_offset_a1 = s_offset_a1 + 5
50982 : END DO
50983 : END SUBROUTINE contract_dppf
50984 : #endif
50985 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
50986 : ! **************************************************************************************************
50987 : !> \brief ...
50988 : !> \param work ...
50989 : !> \param nl_a ...
50990 : !> \param nl_b ...
50991 : !> \param nl_c ...
50992 : !> \param nl_d ...
50993 : !> \param sphi_a ...
50994 : !> \param sphi_b ...
50995 : !> \param sphi_c ...
50996 : !> \param sphi_d ...
50997 : !> \param primitives ...
50998 : !> \param buffer1 ...
50999 : !> \param buffer2 ...
51000 : ! **************************************************************************************************
51001 : SUBROUTINE contract_dppg(work, &
51002 : nl_a, nl_b, nl_c, nl_d, &
51003 : sphi_a, sphi_b, sphi_c, sphi_d, &
51004 : primitives, &
51005 : buffer1, buffer2)
51006 : REAL(dp), DIMENSION(6*3*3*15), INTENT(IN) :: work
51007 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51008 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51009 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51010 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
51011 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
51012 : REAL(dp), &
51013 : DIMENSION(5*nl_a, 3*nl_b, 3*nl_c, 9*nl_d) :: primitives
51014 : REAL(dp), DIMENSION(6*3*3*15) :: buffer1, buffer2
51015 :
51016 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51017 : kmax, s_offset_a1, s_offset_b1, &
51018 : s_offset_c1, s_offset_d1
51019 :
51020 : s_offset_a1 = 0
51021 : DO ia = 1, nl_a
51022 : s_offset_b1 = 0
51023 : DO ib = 1, nl_b
51024 : s_offset_c1 = 0
51025 : DO ic = 1, nl_c
51026 : s_offset_d1 = 0
51027 : DO id = 1, nl_d
51028 : buffer1 = 0.0_dp
51029 : imax = 3*3*15
51030 : kmax = 6
51031 : DO i = 1, imax
51032 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51033 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51034 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51035 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51036 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51037 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51038 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51039 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51040 : END DO
51041 : buffer2 = 0.0_dp
51042 : imax = 5*3*15
51043 : kmax = 3
51044 : DO i = 1, imax
51045 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51046 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51047 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51048 : END DO
51049 : buffer1 = 0.0_dp
51050 : imax = 5*3*15
51051 : kmax = 3
51052 : DO i = 1, imax
51053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51054 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51055 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
51056 : END DO
51057 : imax = 5*3*3
51058 : kmax = 15
51059 : i = 0
51060 : DO i1 = 1, 3
51061 : DO i2 = 1, 3
51062 : DO i3 = 1, 5
51063 : i = i + 1
51064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51066 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
51067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51069 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
51070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51072 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
51073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51075 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
51076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51078 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
51079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51081 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
51082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
51083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
51084 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
51085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51087 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
51088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51090 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
51091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51093 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
51094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51096 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
51097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51099 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
51100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51102 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
51103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51105 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
51106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51108 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
51109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51111 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
51112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
51113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
51114 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
51115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51117 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
51118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51120 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
51121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51123 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
51124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51126 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
51127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51129 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
51130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51132 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
51133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51135 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
51136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51138 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
51139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51141 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
51142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51144 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
51145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51147 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
51148 : END DO
51149 : END DO
51150 : END DO
51151 : s_offset_d1 = s_offset_d1 + 9
51152 : END DO
51153 : s_offset_c1 = s_offset_c1 + 3
51154 : END DO
51155 : s_offset_b1 = s_offset_b1 + 3
51156 : END DO
51157 : s_offset_a1 = s_offset_a1 + 5
51158 : END DO
51159 : END SUBROUTINE contract_dppg
51160 : #endif
51161 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
51162 : ! **************************************************************************************************
51163 : !> \brief ...
51164 : !> \param work ...
51165 : !> \param nl_a ...
51166 : !> \param nl_b ...
51167 : !> \param nl_c ...
51168 : !> \param nl_d ...
51169 : !> \param sphi_a ...
51170 : !> \param sphi_b ...
51171 : !> \param sphi_c ...
51172 : !> \param sphi_d ...
51173 : !> \param primitives ...
51174 : !> \param buffer1 ...
51175 : !> \param buffer2 ...
51176 : ! **************************************************************************************************
51177 349637 : SUBROUTINE contract_dpds(work, &
51178 : nl_a, nl_b, nl_c, nl_d, &
51179 349637 : sphi_a, sphi_b, sphi_c, sphi_d, &
51180 349637 : primitives, &
51181 : buffer1, buffer2)
51182 : REAL(dp), DIMENSION(6*3*6*1), INTENT(IN) :: work
51183 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51184 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51185 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51186 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
51187 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
51188 : REAL(dp), &
51189 : DIMENSION(5*nl_a, 3*nl_b, 5*nl_c, 1*nl_d) :: primitives
51190 : REAL(dp), DIMENSION(6*3*6*1) :: buffer1, buffer2
51191 :
51192 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51193 : kmax, s_offset_a1, s_offset_b1, &
51194 : s_offset_c1, s_offset_d1
51195 :
51196 349637 : s_offset_a1 = 0
51197 725997 : DO ia = 1, nl_a
51198 : s_offset_b1 = 0
51199 857024 : DO ib = 1, nl_b
51200 : s_offset_c1 = 0
51201 996730 : DO ic = 1, nl_c
51202 : s_offset_d1 = 0
51203 1388969 : DO id = 1, nl_d
51204 872903 : buffer1 = 0.0_dp
51205 872903 : imax = 3*6*1
51206 872903 : kmax = 6
51207 16585157 : DO i = 1, imax
51208 15712254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51209 15712254 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51210 15712254 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51211 15712254 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51212 15712254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51213 15712254 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51214 15712254 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51215 16585157 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51216 : END DO
51217 872903 : buffer2 = 0.0_dp
51218 872903 : imax = 5*6*1
51219 872903 : kmax = 3
51220 27059993 : DO i = 1, imax
51221 26187090 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51222 26187090 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51223 27059993 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51224 : END DO
51225 872903 : buffer1 = 0.0_dp
51226 872903 : imax = 5*3*1
51227 872903 : kmax = 6
51228 13966448 : DO i = 1, imax
51229 13093545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51230 13093545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51231 13093545 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51232 13093545 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51233 13093545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
51234 13093545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51235 13093545 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51236 13966448 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
51237 : END DO
51238 5237418 : imax = 5*3*5
51239 5237418 : kmax = 1
51240 : i = 0
51241 5237418 : DO i1 = 1, 5
51242 18330963 : DO i2 = 1, 3
51243 82925785 : DO i3 = 1, 5
51244 65467725 : i = i + 1
51245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
51247 78561270 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
51248 : END DO
51249 : END DO
51250 : END DO
51251 1388969 : s_offset_d1 = s_offset_d1 + 1
51252 : END DO
51253 996730 : s_offset_c1 = s_offset_c1 + 5
51254 : END DO
51255 857024 : s_offset_b1 = s_offset_b1 + 3
51256 : END DO
51257 725997 : s_offset_a1 = s_offset_a1 + 5
51258 : END DO
51259 349637 : END SUBROUTINE contract_dpds
51260 : #endif
51261 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
51262 : ! **************************************************************************************************
51263 : !> \brief ...
51264 : !> \param work ...
51265 : !> \param nl_a ...
51266 : !> \param nl_b ...
51267 : !> \param nl_c ...
51268 : !> \param nl_d ...
51269 : !> \param sphi_a ...
51270 : !> \param sphi_b ...
51271 : !> \param sphi_c ...
51272 : !> \param sphi_d ...
51273 : !> \param primitives ...
51274 : !> \param buffer1 ...
51275 : !> \param buffer2 ...
51276 : ! **************************************************************************************************
51277 222037 : SUBROUTINE contract_dpdp(work, &
51278 : nl_a, nl_b, nl_c, nl_d, &
51279 222037 : sphi_a, sphi_b, sphi_c, sphi_d, &
51280 222037 : primitives, &
51281 : buffer1, buffer2)
51282 : REAL(dp), DIMENSION(6*3*6*3), INTENT(IN) :: work
51283 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51284 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51285 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51286 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
51287 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
51288 : REAL(dp), &
51289 : DIMENSION(5*nl_a, 3*nl_b, 5*nl_c, 3*nl_d) :: primitives
51290 : REAL(dp), DIMENSION(6*3*6*3) :: buffer1, buffer2
51291 :
51292 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51293 : kmax, s_offset_a1, s_offset_b1, &
51294 : s_offset_c1, s_offset_d1
51295 :
51296 222037 : s_offset_a1 = 0
51297 467718 : DO ia = 1, nl_a
51298 : s_offset_b1 = 0
51299 547775 : DO ib = 1, nl_b
51300 : s_offset_c1 = 0
51301 635846 : DO ic = 1, nl_c
51302 : s_offset_d1 = 0
51303 788141 : DO id = 1, nl_d
51304 454389 : buffer1 = 0.0_dp
51305 454389 : imax = 3*6*3
51306 454389 : kmax = 6
51307 24991395 : DO i = 1, imax
51308 24537006 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51309 24537006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51310 24537006 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51311 24537006 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51312 24537006 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51313 24537006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51314 24537006 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51315 24991395 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51316 : END DO
51317 454389 : buffer2 = 0.0_dp
51318 454389 : imax = 5*6*3
51319 454389 : kmax = 3
51320 41349399 : DO i = 1, imax
51321 40895010 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51322 40895010 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51323 41349399 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51324 : END DO
51325 454389 : buffer1 = 0.0_dp
51326 454389 : imax = 5*3*3
51327 454389 : kmax = 6
51328 20901894 : DO i = 1, imax
51329 20447505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51330 20447505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51331 20447505 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51332 20447505 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51333 20447505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
51334 20447505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51335 20447505 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51336 20901894 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
51337 : END DO
51338 2726334 : imax = 5*3*5
51339 2726334 : kmax = 3
51340 : i = 0
51341 2726334 : DO i1 = 1, 5
51342 9542169 : DO i2 = 1, 3
51343 43166955 : DO i3 = 1, 5
51344 34079175 : i = i + 1
51345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
51347 34079175 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
51348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
51350 34079175 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
51351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
51353 40895010 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
51354 : END DO
51355 : END DO
51356 : END DO
51357 788141 : s_offset_d1 = s_offset_d1 + 3
51358 : END DO
51359 635846 : s_offset_c1 = s_offset_c1 + 5
51360 : END DO
51361 547775 : s_offset_b1 = s_offset_b1 + 3
51362 : END DO
51363 467718 : s_offset_a1 = s_offset_a1 + 5
51364 : END DO
51365 222037 : END SUBROUTINE contract_dpdp
51366 : #endif
51367 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
51368 : ! **************************************************************************************************
51369 : !> \brief ...
51370 : !> \param work ...
51371 : !> \param nl_a ...
51372 : !> \param nl_b ...
51373 : !> \param nl_c ...
51374 : !> \param nl_d ...
51375 : !> \param sphi_a ...
51376 : !> \param sphi_b ...
51377 : !> \param sphi_c ...
51378 : !> \param sphi_d ...
51379 : !> \param primitives ...
51380 : !> \param buffer1 ...
51381 : !> \param buffer2 ...
51382 : ! **************************************************************************************************
51383 130780 : SUBROUTINE contract_dpdd(work, &
51384 : nl_a, nl_b, nl_c, nl_d, &
51385 130780 : sphi_a, sphi_b, sphi_c, sphi_d, &
51386 130780 : primitives, &
51387 : buffer1, buffer2)
51388 : REAL(dp), DIMENSION(6*3*6*6), INTENT(IN) :: work
51389 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51390 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51391 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51392 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
51393 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
51394 : REAL(dp), &
51395 : DIMENSION(5*nl_a, 3*nl_b, 5*nl_c, 5*nl_d) :: primitives
51396 : REAL(dp), DIMENSION(6*3*6*6) :: buffer1, buffer2
51397 :
51398 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51399 : kmax, s_offset_a1, s_offset_b1, &
51400 : s_offset_c1, s_offset_d1
51401 :
51402 130780 : s_offset_a1 = 0
51403 280687 : DO ia = 1, nl_a
51404 : s_offset_b1 = 0
51405 332131 : DO ib = 1, nl_b
51406 : s_offset_c1 = 0
51407 387153 : DO ic = 1, nl_c
51408 : s_offset_d1 = 0
51409 446119 : DO id = 1, nl_d
51410 241190 : buffer1 = 0.0_dp
51411 241190 : imax = 3*6*6
51412 241190 : kmax = 6
51413 26289710 : DO i = 1, imax
51414 26048520 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51415 26048520 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51416 26048520 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51417 26048520 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51418 26048520 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51419 26048520 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51420 26048520 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51421 26289710 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51422 : END DO
51423 241190 : buffer2 = 0.0_dp
51424 241190 : imax = 5*6*6
51425 241190 : kmax = 3
51426 43655390 : DO i = 1, imax
51427 43414200 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51428 43414200 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51429 43655390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51430 : END DO
51431 241190 : buffer1 = 0.0_dp
51432 241190 : imax = 5*3*6
51433 241190 : kmax = 6
51434 21948290 : DO i = 1, imax
51435 21707100 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51436 21707100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51437 21707100 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51438 21707100 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51439 21707100 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
51440 21707100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51441 21707100 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51442 21948290 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
51443 : END DO
51444 1447140 : imax = 5*3*5
51445 1447140 : kmax = 6
51446 : i = 0
51447 1447140 : DO i1 = 1, 5
51448 5064990 : DO i2 = 1, 3
51449 22913050 : DO i3 = 1, 5
51450 18089250 : i = i + 1
51451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51453 18089250 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
51454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51456 18089250 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
51457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51459 18089250 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
51460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51462 18089250 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
51463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51465 18089250 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
51466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51468 18089250 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
51469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51471 18089250 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
51472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51474 21707100 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
51475 : END DO
51476 : END DO
51477 : END DO
51478 446119 : s_offset_d1 = s_offset_d1 + 5
51479 : END DO
51480 387153 : s_offset_c1 = s_offset_c1 + 5
51481 : END DO
51482 332131 : s_offset_b1 = s_offset_b1 + 3
51483 : END DO
51484 280687 : s_offset_a1 = s_offset_a1 + 5
51485 : END DO
51486 130780 : END SUBROUTINE contract_dpdd
51487 : #endif
51488 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
51489 : ! **************************************************************************************************
51490 : !> \brief ...
51491 : !> \param work ...
51492 : !> \param nl_a ...
51493 : !> \param nl_b ...
51494 : !> \param nl_c ...
51495 : !> \param nl_d ...
51496 : !> \param sphi_a ...
51497 : !> \param sphi_b ...
51498 : !> \param sphi_c ...
51499 : !> \param sphi_d ...
51500 : !> \param primitives ...
51501 : !> \param buffer1 ...
51502 : !> \param buffer2 ...
51503 : ! **************************************************************************************************
51504 : SUBROUTINE contract_dpdf(work, &
51505 : nl_a, nl_b, nl_c, nl_d, &
51506 : sphi_a, sphi_b, sphi_c, sphi_d, &
51507 : primitives, &
51508 : buffer1, buffer2)
51509 : REAL(dp), DIMENSION(6*3*6*10), INTENT(IN) :: work
51510 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51511 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51512 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51513 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
51514 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
51515 : REAL(dp), &
51516 : DIMENSION(5*nl_a, 3*nl_b, 5*nl_c, 7*nl_d) :: primitives
51517 : REAL(dp), DIMENSION(6*3*6*10) :: buffer1, buffer2
51518 :
51519 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51520 : kmax, s_offset_a1, s_offset_b1, &
51521 : s_offset_c1, s_offset_d1
51522 :
51523 : s_offset_a1 = 0
51524 : DO ia = 1, nl_a
51525 : s_offset_b1 = 0
51526 : DO ib = 1, nl_b
51527 : s_offset_c1 = 0
51528 : DO ic = 1, nl_c
51529 : s_offset_d1 = 0
51530 : DO id = 1, nl_d
51531 : buffer1 = 0.0_dp
51532 : imax = 3*6*10
51533 : kmax = 6
51534 : DO i = 1, imax
51535 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51536 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51537 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51538 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51539 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51540 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51541 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51542 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51543 : END DO
51544 : buffer2 = 0.0_dp
51545 : imax = 5*6*10
51546 : kmax = 3
51547 : DO i = 1, imax
51548 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51549 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51550 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51551 : END DO
51552 : buffer1 = 0.0_dp
51553 : imax = 5*3*10
51554 : kmax = 6
51555 : DO i = 1, imax
51556 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51557 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51558 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51559 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51560 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
51561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51562 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
51564 : END DO
51565 : imax = 5*3*5
51566 : kmax = 10
51567 : i = 0
51568 : DO i1 = 1, 5
51569 : DO i2 = 1, 3
51570 : DO i3 = 1, 5
51571 : i = i + 1
51572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51574 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
51575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51577 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
51578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51580 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
51581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51583 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
51584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51586 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
51587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51589 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
51590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51592 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
51593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51595 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
51596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51598 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
51599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51601 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
51602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51604 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
51605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51607 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
51608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51610 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
51611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51613 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
51614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51616 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
51617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51619 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
51620 : END DO
51621 : END DO
51622 : END DO
51623 : s_offset_d1 = s_offset_d1 + 7
51624 : END DO
51625 : s_offset_c1 = s_offset_c1 + 5
51626 : END DO
51627 : s_offset_b1 = s_offset_b1 + 3
51628 : END DO
51629 : s_offset_a1 = s_offset_a1 + 5
51630 : END DO
51631 : END SUBROUTINE contract_dpdf
51632 : #endif
51633 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
51634 : ! **************************************************************************************************
51635 : !> \brief ...
51636 : !> \param work ...
51637 : !> \param nl_a ...
51638 : !> \param nl_b ...
51639 : !> \param nl_c ...
51640 : !> \param nl_d ...
51641 : !> \param sphi_a ...
51642 : !> \param sphi_b ...
51643 : !> \param sphi_c ...
51644 : !> \param sphi_d ...
51645 : !> \param primitives ...
51646 : !> \param buffer1 ...
51647 : !> \param buffer2 ...
51648 : ! **************************************************************************************************
51649 : SUBROUTINE contract_dpdg(work, &
51650 : nl_a, nl_b, nl_c, nl_d, &
51651 : sphi_a, sphi_b, sphi_c, sphi_d, &
51652 : primitives, &
51653 : buffer1, buffer2)
51654 : REAL(dp), DIMENSION(6*3*6*15), INTENT(IN) :: work
51655 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51656 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51657 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51658 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
51659 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
51660 : REAL(dp), &
51661 : DIMENSION(5*nl_a, 3*nl_b, 5*nl_c, 9*nl_d) :: primitives
51662 : REAL(dp), DIMENSION(6*3*6*15) :: buffer1, buffer2
51663 :
51664 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51665 : kmax, s_offset_a1, s_offset_b1, &
51666 : s_offset_c1, s_offset_d1
51667 :
51668 : s_offset_a1 = 0
51669 : DO ia = 1, nl_a
51670 : s_offset_b1 = 0
51671 : DO ib = 1, nl_b
51672 : s_offset_c1 = 0
51673 : DO ic = 1, nl_c
51674 : s_offset_d1 = 0
51675 : DO id = 1, nl_d
51676 : buffer1 = 0.0_dp
51677 : imax = 3*6*15
51678 : kmax = 6
51679 : DO i = 1, imax
51680 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51682 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51683 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51686 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51688 : END DO
51689 : buffer2 = 0.0_dp
51690 : imax = 5*6*15
51691 : kmax = 3
51692 : DO i = 1, imax
51693 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51694 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51695 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51696 : END DO
51697 : buffer1 = 0.0_dp
51698 : imax = 5*3*15
51699 : kmax = 6
51700 : DO i = 1, imax
51701 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
51702 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51703 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51704 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51705 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
51706 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51707 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51708 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
51709 : END DO
51710 : imax = 5*3*5
51711 : kmax = 15
51712 : i = 0
51713 : DO i1 = 1, 5
51714 : DO i2 = 1, 3
51715 : DO i3 = 1, 5
51716 : i = i + 1
51717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51719 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
51720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51722 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
51723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51725 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
51726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51728 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
51729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51731 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
51732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51734 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
51735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
51736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
51737 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
51738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51740 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
51741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51743 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
51744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51746 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
51747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51749 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
51750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51752 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
51753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51755 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
51756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
51758 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
51759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51761 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
51762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51764 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
51765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
51766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
51767 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
51768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
51769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
51770 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
51771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
51772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
51773 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
51774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51776 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
51777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51779 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
51780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
51781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
51782 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
51783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
51784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
51785 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
51786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51788 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
51789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51791 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
51792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
51793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
51794 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
51795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
51796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
51797 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
51798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
51799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
51800 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
51801 : END DO
51802 : END DO
51803 : END DO
51804 : s_offset_d1 = s_offset_d1 + 9
51805 : END DO
51806 : s_offset_c1 = s_offset_c1 + 5
51807 : END DO
51808 : s_offset_b1 = s_offset_b1 + 3
51809 : END DO
51810 : s_offset_a1 = s_offset_a1 + 5
51811 : END DO
51812 : END SUBROUTINE contract_dpdg
51813 : #endif
51814 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
51815 : ! **************************************************************************************************
51816 : !> \brief ...
51817 : !> \param work ...
51818 : !> \param nl_a ...
51819 : !> \param nl_b ...
51820 : !> \param nl_c ...
51821 : !> \param nl_d ...
51822 : !> \param sphi_a ...
51823 : !> \param sphi_b ...
51824 : !> \param sphi_c ...
51825 : !> \param sphi_d ...
51826 : !> \param primitives ...
51827 : !> \param buffer1 ...
51828 : !> \param buffer2 ...
51829 : ! **************************************************************************************************
51830 : SUBROUTINE contract_dpfs(work, &
51831 : nl_a, nl_b, nl_c, nl_d, &
51832 : sphi_a, sphi_b, sphi_c, sphi_d, &
51833 : primitives, &
51834 : buffer1, buffer2)
51835 : REAL(dp), DIMENSION(6*3*10*1), INTENT(IN) :: work
51836 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51837 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51838 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51839 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
51840 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
51841 : REAL(dp), &
51842 : DIMENSION(5*nl_a, 3*nl_b, 7*nl_c, 1*nl_d) :: primitives
51843 : REAL(dp), DIMENSION(6*3*10*1) :: buffer1, buffer2
51844 :
51845 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51846 : kmax, s_offset_a1, s_offset_b1, &
51847 : s_offset_c1, s_offset_d1
51848 :
51849 : s_offset_a1 = 0
51850 : DO ia = 1, nl_a
51851 : s_offset_b1 = 0
51852 : DO ib = 1, nl_b
51853 : s_offset_c1 = 0
51854 : DO ic = 1, nl_c
51855 : s_offset_d1 = 0
51856 : DO id = 1, nl_d
51857 : buffer1 = 0.0_dp
51858 : imax = 3*10*1
51859 : kmax = 6
51860 : DO i = 1, imax
51861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51862 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51864 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51865 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51866 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51867 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51869 : END DO
51870 : buffer2 = 0.0_dp
51871 : imax = 5*10*1
51872 : kmax = 3
51873 : DO i = 1, imax
51874 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51875 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51876 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51877 : END DO
51878 : buffer1 = 0.0_dp
51879 : imax = 5*3*1
51880 : kmax = 10
51881 : DO i = 1, imax
51882 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51883 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
51884 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51885 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
51886 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51887 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
51888 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51889 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
51890 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51891 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
51892 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
51893 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
51894 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
51895 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
51896 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
51897 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
51898 : END DO
51899 : imax = 5*3*7
51900 : kmax = 1
51901 : i = 0
51902 : DO i1 = 1, 7
51903 : DO i2 = 1, 3
51904 : DO i3 = 1, 5
51905 : i = i + 1
51906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
51907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
51908 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
51909 : END DO
51910 : END DO
51911 : END DO
51912 : s_offset_d1 = s_offset_d1 + 1
51913 : END DO
51914 : s_offset_c1 = s_offset_c1 + 7
51915 : END DO
51916 : s_offset_b1 = s_offset_b1 + 3
51917 : END DO
51918 : s_offset_a1 = s_offset_a1 + 5
51919 : END DO
51920 : END SUBROUTINE contract_dpfs
51921 : #endif
51922 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
51923 : ! **************************************************************************************************
51924 : !> \brief ...
51925 : !> \param work ...
51926 : !> \param nl_a ...
51927 : !> \param nl_b ...
51928 : !> \param nl_c ...
51929 : !> \param nl_d ...
51930 : !> \param sphi_a ...
51931 : !> \param sphi_b ...
51932 : !> \param sphi_c ...
51933 : !> \param sphi_d ...
51934 : !> \param primitives ...
51935 : !> \param buffer1 ...
51936 : !> \param buffer2 ...
51937 : ! **************************************************************************************************
51938 : SUBROUTINE contract_dpfp(work, &
51939 : nl_a, nl_b, nl_c, nl_d, &
51940 : sphi_a, sphi_b, sphi_c, sphi_d, &
51941 : primitives, &
51942 : buffer1, buffer2)
51943 : REAL(dp), DIMENSION(6*3*10*3), INTENT(IN) :: work
51944 : INTEGER :: nl_a, nl_b, nl_c, nl_d
51945 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
51946 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
51947 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
51948 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
51949 : REAL(dp), &
51950 : DIMENSION(5*nl_a, 3*nl_b, 7*nl_c, 3*nl_d) :: primitives
51951 : REAL(dp), DIMENSION(6*3*10*3) :: buffer1, buffer2
51952 :
51953 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
51954 : kmax, s_offset_a1, s_offset_b1, &
51955 : s_offset_c1, s_offset_d1
51956 :
51957 : s_offset_a1 = 0
51958 : DO ia = 1, nl_a
51959 : s_offset_b1 = 0
51960 : DO ib = 1, nl_b
51961 : s_offset_c1 = 0
51962 : DO ic = 1, nl_c
51963 : s_offset_d1 = 0
51964 : DO id = 1, nl_d
51965 : buffer1 = 0.0_dp
51966 : imax = 3*10*3
51967 : kmax = 6
51968 : DO i = 1, imax
51969 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
51970 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
51971 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
51972 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
51973 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
51974 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
51975 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
51976 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
51977 : END DO
51978 : buffer2 = 0.0_dp
51979 : imax = 5*10*3
51980 : kmax = 3
51981 : DO i = 1, imax
51982 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
51983 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
51984 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
51985 : END DO
51986 : buffer1 = 0.0_dp
51987 : imax = 5*3*3
51988 : kmax = 10
51989 : DO i = 1, imax
51990 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
51991 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
51992 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
51993 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
51994 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
51995 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
51996 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
51997 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
51998 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
51999 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52000 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52001 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52002 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
52003 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52004 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52005 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
52006 : END DO
52007 : imax = 5*3*7
52008 : kmax = 3
52009 : i = 0
52010 : DO i1 = 1, 7
52011 : DO i2 = 1, 3
52012 : DO i3 = 1, 5
52013 : i = i + 1
52014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
52016 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
52017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
52019 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
52022 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
52023 : END DO
52024 : END DO
52025 : END DO
52026 : s_offset_d1 = s_offset_d1 + 3
52027 : END DO
52028 : s_offset_c1 = s_offset_c1 + 7
52029 : END DO
52030 : s_offset_b1 = s_offset_b1 + 3
52031 : END DO
52032 : s_offset_a1 = s_offset_a1 + 5
52033 : END DO
52034 : END SUBROUTINE contract_dpfp
52035 : #endif
52036 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
52037 : ! **************************************************************************************************
52038 : !> \brief ...
52039 : !> \param work ...
52040 : !> \param nl_a ...
52041 : !> \param nl_b ...
52042 : !> \param nl_c ...
52043 : !> \param nl_d ...
52044 : !> \param sphi_a ...
52045 : !> \param sphi_b ...
52046 : !> \param sphi_c ...
52047 : !> \param sphi_d ...
52048 : !> \param primitives ...
52049 : !> \param buffer1 ...
52050 : !> \param buffer2 ...
52051 : ! **************************************************************************************************
52052 : SUBROUTINE contract_dpfd(work, &
52053 : nl_a, nl_b, nl_c, nl_d, &
52054 : sphi_a, sphi_b, sphi_c, sphi_d, &
52055 : primitives, &
52056 : buffer1, buffer2)
52057 : REAL(dp), DIMENSION(6*3*10*6), INTENT(IN) :: work
52058 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52059 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52060 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52061 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
52062 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
52063 : REAL(dp), &
52064 : DIMENSION(5*nl_a, 3*nl_b, 7*nl_c, 5*nl_d) :: primitives
52065 : REAL(dp), DIMENSION(6*3*10*6) :: buffer1, buffer2
52066 :
52067 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52068 : kmax, s_offset_a1, s_offset_b1, &
52069 : s_offset_c1, s_offset_d1
52070 :
52071 : s_offset_a1 = 0
52072 : DO ia = 1, nl_a
52073 : s_offset_b1 = 0
52074 : DO ib = 1, nl_b
52075 : s_offset_c1 = 0
52076 : DO ic = 1, nl_c
52077 : s_offset_d1 = 0
52078 : DO id = 1, nl_d
52079 : buffer1 = 0.0_dp
52080 : imax = 3*10*6
52081 : kmax = 6
52082 : DO i = 1, imax
52083 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52084 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52085 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52086 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52087 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52088 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52089 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52090 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52091 : END DO
52092 : buffer2 = 0.0_dp
52093 : imax = 5*10*6
52094 : kmax = 3
52095 : DO i = 1, imax
52096 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52097 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52098 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52099 : END DO
52100 : buffer1 = 0.0_dp
52101 : imax = 5*3*6
52102 : kmax = 10
52103 : DO i = 1, imax
52104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52105 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52106 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52107 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52108 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
52109 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52110 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52111 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
52112 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52113 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52114 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52115 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52116 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
52117 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52118 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52119 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
52120 : END DO
52121 : imax = 5*3*7
52122 : kmax = 6
52123 : i = 0
52124 : DO i1 = 1, 7
52125 : DO i2 = 1, 3
52126 : DO i3 = 1, 5
52127 : i = i + 1
52128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52130 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
52131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52133 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
52134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52136 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52139 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
52140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52142 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
52143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52145 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
52146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
52148 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
52149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52151 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
52152 : END DO
52153 : END DO
52154 : END DO
52155 : s_offset_d1 = s_offset_d1 + 5
52156 : END DO
52157 : s_offset_c1 = s_offset_c1 + 7
52158 : END DO
52159 : s_offset_b1 = s_offset_b1 + 3
52160 : END DO
52161 : s_offset_a1 = s_offset_a1 + 5
52162 : END DO
52163 : END SUBROUTINE contract_dpfd
52164 : #endif
52165 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
52166 : ! **************************************************************************************************
52167 : !> \brief ...
52168 : !> \param work ...
52169 : !> \param nl_a ...
52170 : !> \param nl_b ...
52171 : !> \param nl_c ...
52172 : !> \param nl_d ...
52173 : !> \param sphi_a ...
52174 : !> \param sphi_b ...
52175 : !> \param sphi_c ...
52176 : !> \param sphi_d ...
52177 : !> \param primitives ...
52178 : !> \param buffer1 ...
52179 : !> \param buffer2 ...
52180 : ! **************************************************************************************************
52181 : SUBROUTINE contract_dpff(work, &
52182 : nl_a, nl_b, nl_c, nl_d, &
52183 : sphi_a, sphi_b, sphi_c, sphi_d, &
52184 : primitives, &
52185 : buffer1, buffer2)
52186 : REAL(dp), DIMENSION(6*3*10*10), INTENT(IN) :: work
52187 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52188 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52189 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52190 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
52191 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
52192 : REAL(dp), &
52193 : DIMENSION(5*nl_a, 3*nl_b, 7*nl_c, 7*nl_d) :: primitives
52194 : REAL(dp), DIMENSION(6*3*10*10) :: buffer1, buffer2
52195 :
52196 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52197 : kmax, s_offset_a1, s_offset_b1, &
52198 : s_offset_c1, s_offset_d1
52199 :
52200 : s_offset_a1 = 0
52201 : DO ia = 1, nl_a
52202 : s_offset_b1 = 0
52203 : DO ib = 1, nl_b
52204 : s_offset_c1 = 0
52205 : DO ic = 1, nl_c
52206 : s_offset_d1 = 0
52207 : DO id = 1, nl_d
52208 : buffer1 = 0.0_dp
52209 : imax = 3*10*10
52210 : kmax = 6
52211 : DO i = 1, imax
52212 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52214 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52215 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52217 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52218 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52219 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52220 : END DO
52221 : buffer2 = 0.0_dp
52222 : imax = 5*10*10
52223 : kmax = 3
52224 : DO i = 1, imax
52225 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52226 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52227 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52228 : END DO
52229 : buffer1 = 0.0_dp
52230 : imax = 5*3*10
52231 : kmax = 10
52232 : DO i = 1, imax
52233 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52234 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52236 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52237 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
52238 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52239 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52240 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
52241 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52242 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52243 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52244 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52245 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
52246 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52247 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52248 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
52249 : END DO
52250 : imax = 5*3*7
52251 : kmax = 10
52252 : i = 0
52253 : DO i1 = 1, 7
52254 : DO i2 = 1, 3
52255 : DO i3 = 1, 5
52256 : i = i + 1
52257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52259 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
52260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52262 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
52263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52265 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52268 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
52269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52271 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
52272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
52273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
52274 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
52275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52277 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
52278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52280 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
52281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
52283 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
52284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52286 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
52287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52289 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
52290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52292 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
52293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52295 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
52296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
52297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
52298 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
52299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52301 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
52302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52304 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
52305 : END DO
52306 : END DO
52307 : END DO
52308 : s_offset_d1 = s_offset_d1 + 7
52309 : END DO
52310 : s_offset_c1 = s_offset_c1 + 7
52311 : END DO
52312 : s_offset_b1 = s_offset_b1 + 3
52313 : END DO
52314 : s_offset_a1 = s_offset_a1 + 5
52315 : END DO
52316 : END SUBROUTINE contract_dpff
52317 : #endif
52318 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
52319 : ! **************************************************************************************************
52320 : !> \brief ...
52321 : !> \param work ...
52322 : !> \param nl_a ...
52323 : !> \param nl_b ...
52324 : !> \param nl_c ...
52325 : !> \param nl_d ...
52326 : !> \param sphi_a ...
52327 : !> \param sphi_b ...
52328 : !> \param sphi_c ...
52329 : !> \param sphi_d ...
52330 : !> \param primitives ...
52331 : !> \param buffer1 ...
52332 : !> \param buffer2 ...
52333 : ! **************************************************************************************************
52334 : SUBROUTINE contract_dpfg(work, &
52335 : nl_a, nl_b, nl_c, nl_d, &
52336 : sphi_a, sphi_b, sphi_c, sphi_d, &
52337 : primitives, &
52338 : buffer1, buffer2)
52339 : REAL(dp), DIMENSION(6*3*10*15), INTENT(IN) :: work
52340 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52341 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52342 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52343 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
52344 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
52345 : REAL(dp), &
52346 : DIMENSION(5*nl_a, 3*nl_b, 7*nl_c, 9*nl_d) :: primitives
52347 : REAL(dp), DIMENSION(6*3*10*15) :: buffer1, buffer2
52348 :
52349 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52350 : kmax, s_offset_a1, s_offset_b1, &
52351 : s_offset_c1, s_offset_d1
52352 :
52353 : s_offset_a1 = 0
52354 : DO ia = 1, nl_a
52355 : s_offset_b1 = 0
52356 : DO ib = 1, nl_b
52357 : s_offset_c1 = 0
52358 : DO ic = 1, nl_c
52359 : s_offset_d1 = 0
52360 : DO id = 1, nl_d
52361 : buffer1 = 0.0_dp
52362 : imax = 3*10*15
52363 : kmax = 6
52364 : DO i = 1, imax
52365 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52367 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52368 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52369 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52370 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52371 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52372 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52373 : END DO
52374 : buffer2 = 0.0_dp
52375 : imax = 5*10*15
52376 : kmax = 3
52377 : DO i = 1, imax
52378 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52379 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52380 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52381 : END DO
52382 : buffer1 = 0.0_dp
52383 : imax = 5*3*15
52384 : kmax = 10
52385 : DO i = 1, imax
52386 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52387 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52388 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52390 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
52391 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52392 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52393 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
52394 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52396 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52397 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52398 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
52399 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52401 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
52402 : END DO
52403 : imax = 5*3*7
52404 : kmax = 15
52405 : i = 0
52406 : DO i1 = 1, 7
52407 : DO i2 = 1, 3
52408 : DO i3 = 1, 5
52409 : i = i + 1
52410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52412 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
52413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52415 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
52416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
52417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
52418 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
52419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52421 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52424 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
52425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
52426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
52427 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
52428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
52429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
52430 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
52431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52433 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
52434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
52435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
52436 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
52437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
52439 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
52440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52442 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
52443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52445 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
52446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52448 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
52449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52451 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
52452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52454 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
52455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
52456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
52457 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
52458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
52459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
52460 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
52461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52463 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
52464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
52465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
52466 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
52467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52469 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
52470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52472 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
52473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
52474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
52475 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
52476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
52478 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
52479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52481 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
52482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52484 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
52485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
52486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
52487 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
52488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52490 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
52491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52493 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
52494 : END DO
52495 : END DO
52496 : END DO
52497 : s_offset_d1 = s_offset_d1 + 9
52498 : END DO
52499 : s_offset_c1 = s_offset_c1 + 7
52500 : END DO
52501 : s_offset_b1 = s_offset_b1 + 3
52502 : END DO
52503 : s_offset_a1 = s_offset_a1 + 5
52504 : END DO
52505 : END SUBROUTINE contract_dpfg
52506 : #endif
52507 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
52508 : ! **************************************************************************************************
52509 : !> \brief ...
52510 : !> \param work ...
52511 : !> \param nl_a ...
52512 : !> \param nl_b ...
52513 : !> \param nl_c ...
52514 : !> \param nl_d ...
52515 : !> \param sphi_a ...
52516 : !> \param sphi_b ...
52517 : !> \param sphi_c ...
52518 : !> \param sphi_d ...
52519 : !> \param primitives ...
52520 : !> \param buffer1 ...
52521 : !> \param buffer2 ...
52522 : ! **************************************************************************************************
52523 : SUBROUTINE contract_dpgs(work, &
52524 : nl_a, nl_b, nl_c, nl_d, &
52525 : sphi_a, sphi_b, sphi_c, sphi_d, &
52526 : primitives, &
52527 : buffer1, buffer2)
52528 : REAL(dp), DIMENSION(6*3*15*1), INTENT(IN) :: work
52529 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52530 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52531 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52532 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
52533 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
52534 : REAL(dp), &
52535 : DIMENSION(5*nl_a, 3*nl_b, 9*nl_c, 1*nl_d) :: primitives
52536 : REAL(dp), DIMENSION(6*3*15*1) :: buffer1, buffer2
52537 :
52538 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52539 : kmax, s_offset_a1, s_offset_b1, &
52540 : s_offset_c1, s_offset_d1
52541 :
52542 : s_offset_a1 = 0
52543 : DO ia = 1, nl_a
52544 : s_offset_b1 = 0
52545 : DO ib = 1, nl_b
52546 : s_offset_c1 = 0
52547 : DO ic = 1, nl_c
52548 : s_offset_d1 = 0
52549 : DO id = 1, nl_d
52550 : buffer1 = 0.0_dp
52551 : imax = 3*15*1
52552 : kmax = 6
52553 : DO i = 1, imax
52554 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52555 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52556 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52557 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52558 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52559 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52560 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52561 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52562 : END DO
52563 : buffer2 = 0.0_dp
52564 : imax = 5*15*1
52565 : kmax = 3
52566 : DO i = 1, imax
52567 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52568 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52569 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52570 : END DO
52571 : buffer1 = 0.0_dp
52572 : imax = 5*3*1
52573 : kmax = 15
52574 : DO i = 1, imax
52575 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52576 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52577 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
52578 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52579 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52580 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52581 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
52582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52583 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
52584 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
52586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52587 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
52588 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52589 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52590 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52591 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
52592 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52593 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
52594 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
52595 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
52596 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
52597 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
52598 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
52599 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
52600 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
52601 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
52602 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
52603 : END DO
52604 : imax = 5*3*9
52605 : kmax = 1
52606 : i = 0
52607 : DO i1 = 1, 9
52608 : DO i2 = 1, 3
52609 : DO i3 = 1, 5
52610 : i = i + 1
52611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
52613 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
52614 : END DO
52615 : END DO
52616 : END DO
52617 : s_offset_d1 = s_offset_d1 + 1
52618 : END DO
52619 : s_offset_c1 = s_offset_c1 + 9
52620 : END DO
52621 : s_offset_b1 = s_offset_b1 + 3
52622 : END DO
52623 : s_offset_a1 = s_offset_a1 + 5
52624 : END DO
52625 : END SUBROUTINE contract_dpgs
52626 : #endif
52627 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
52628 : ! **************************************************************************************************
52629 : !> \brief ...
52630 : !> \param work ...
52631 : !> \param nl_a ...
52632 : !> \param nl_b ...
52633 : !> \param nl_c ...
52634 : !> \param nl_d ...
52635 : !> \param sphi_a ...
52636 : !> \param sphi_b ...
52637 : !> \param sphi_c ...
52638 : !> \param sphi_d ...
52639 : !> \param primitives ...
52640 : !> \param buffer1 ...
52641 : !> \param buffer2 ...
52642 : ! **************************************************************************************************
52643 : SUBROUTINE contract_dpgp(work, &
52644 : nl_a, nl_b, nl_c, nl_d, &
52645 : sphi_a, sphi_b, sphi_c, sphi_d, &
52646 : primitives, &
52647 : buffer1, buffer2)
52648 : REAL(dp), DIMENSION(6*3*15*3), INTENT(IN) :: work
52649 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52650 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52651 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52652 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
52653 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
52654 : REAL(dp), &
52655 : DIMENSION(5*nl_a, 3*nl_b, 9*nl_c, 3*nl_d) :: primitives
52656 : REAL(dp), DIMENSION(6*3*15*3) :: buffer1, buffer2
52657 :
52658 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52659 : kmax, s_offset_a1, s_offset_b1, &
52660 : s_offset_c1, s_offset_d1
52661 :
52662 : s_offset_a1 = 0
52663 : DO ia = 1, nl_a
52664 : s_offset_b1 = 0
52665 : DO ib = 1, nl_b
52666 : s_offset_c1 = 0
52667 : DO ic = 1, nl_c
52668 : s_offset_d1 = 0
52669 : DO id = 1, nl_d
52670 : buffer1 = 0.0_dp
52671 : imax = 3*15*3
52672 : kmax = 6
52673 : DO i = 1, imax
52674 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52675 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52676 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52677 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52679 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52680 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52681 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52682 : END DO
52683 : buffer2 = 0.0_dp
52684 : imax = 5*15*3
52685 : kmax = 3
52686 : DO i = 1, imax
52687 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52688 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52689 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52690 : END DO
52691 : buffer1 = 0.0_dp
52692 : imax = 5*3*3
52693 : kmax = 15
52694 : DO i = 1, imax
52695 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52696 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52697 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
52698 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52699 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52700 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52701 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
52702 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52703 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
52704 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52705 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
52706 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52707 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
52708 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52709 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52710 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52711 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
52712 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52713 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
52714 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
52715 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
52716 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
52717 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
52718 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
52719 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
52720 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
52721 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
52722 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
52723 : END DO
52724 : imax = 5*3*9
52725 : kmax = 3
52726 : i = 0
52727 : DO i1 = 1, 9
52728 : DO i2 = 1, 3
52729 : DO i3 = 1, 5
52730 : i = i + 1
52731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
52733 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
52734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
52736 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
52739 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
52740 : END DO
52741 : END DO
52742 : END DO
52743 : s_offset_d1 = s_offset_d1 + 3
52744 : END DO
52745 : s_offset_c1 = s_offset_c1 + 9
52746 : END DO
52747 : s_offset_b1 = s_offset_b1 + 3
52748 : END DO
52749 : s_offset_a1 = s_offset_a1 + 5
52750 : END DO
52751 : END SUBROUTINE contract_dpgp
52752 : #endif
52753 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
52754 : ! **************************************************************************************************
52755 : !> \brief ...
52756 : !> \param work ...
52757 : !> \param nl_a ...
52758 : !> \param nl_b ...
52759 : !> \param nl_c ...
52760 : !> \param nl_d ...
52761 : !> \param sphi_a ...
52762 : !> \param sphi_b ...
52763 : !> \param sphi_c ...
52764 : !> \param sphi_d ...
52765 : !> \param primitives ...
52766 : !> \param buffer1 ...
52767 : !> \param buffer2 ...
52768 : ! **************************************************************************************************
52769 : SUBROUTINE contract_dpgd(work, &
52770 : nl_a, nl_b, nl_c, nl_d, &
52771 : sphi_a, sphi_b, sphi_c, sphi_d, &
52772 : primitives, &
52773 : buffer1, buffer2)
52774 : REAL(dp), DIMENSION(6*3*15*6), INTENT(IN) :: work
52775 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52776 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52777 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52778 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
52779 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
52780 : REAL(dp), &
52781 : DIMENSION(5*nl_a, 3*nl_b, 9*nl_c, 5*nl_d) :: primitives
52782 : REAL(dp), DIMENSION(6*3*15*6) :: buffer1, buffer2
52783 :
52784 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52785 : kmax, s_offset_a1, s_offset_b1, &
52786 : s_offset_c1, s_offset_d1
52787 :
52788 : s_offset_a1 = 0
52789 : DO ia = 1, nl_a
52790 : s_offset_b1 = 0
52791 : DO ib = 1, nl_b
52792 : s_offset_c1 = 0
52793 : DO ic = 1, nl_c
52794 : s_offset_d1 = 0
52795 : DO id = 1, nl_d
52796 : buffer1 = 0.0_dp
52797 : imax = 3*15*6
52798 : kmax = 6
52799 : DO i = 1, imax
52800 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52802 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52803 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52804 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52805 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52806 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52807 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52808 : END DO
52809 : buffer2 = 0.0_dp
52810 : imax = 5*15*6
52811 : kmax = 3
52812 : DO i = 1, imax
52813 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52814 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52815 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52816 : END DO
52817 : buffer1 = 0.0_dp
52818 : imax = 5*3*6
52819 : kmax = 15
52820 : DO i = 1, imax
52821 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52822 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52823 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
52824 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52825 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52826 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52827 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
52828 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52829 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
52830 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52831 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
52832 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52833 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
52834 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52835 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52836 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52837 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
52838 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52839 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
52840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
52841 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
52842 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
52843 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
52844 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
52845 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
52846 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
52847 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
52848 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
52849 : END DO
52850 : imax = 5*3*9
52851 : kmax = 6
52852 : i = 0
52853 : DO i1 = 1, 9
52854 : DO i2 = 1, 3
52855 : DO i3 = 1, 5
52856 : i = i + 1
52857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52859 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
52860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52862 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
52863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
52864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
52865 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
52866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
52867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
52868 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
52869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52871 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
52872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
52874 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
52875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
52876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
52877 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
52878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
52879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
52880 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
52881 : END DO
52882 : END DO
52883 : END DO
52884 : s_offset_d1 = s_offset_d1 + 5
52885 : END DO
52886 : s_offset_c1 = s_offset_c1 + 9
52887 : END DO
52888 : s_offset_b1 = s_offset_b1 + 3
52889 : END DO
52890 : s_offset_a1 = s_offset_a1 + 5
52891 : END DO
52892 : END SUBROUTINE contract_dpgd
52893 : #endif
52894 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
52895 : ! **************************************************************************************************
52896 : !> \brief ...
52897 : !> \param work ...
52898 : !> \param nl_a ...
52899 : !> \param nl_b ...
52900 : !> \param nl_c ...
52901 : !> \param nl_d ...
52902 : !> \param sphi_a ...
52903 : !> \param sphi_b ...
52904 : !> \param sphi_c ...
52905 : !> \param sphi_d ...
52906 : !> \param primitives ...
52907 : !> \param buffer1 ...
52908 : !> \param buffer2 ...
52909 : ! **************************************************************************************************
52910 : SUBROUTINE contract_dpgf(work, &
52911 : nl_a, nl_b, nl_c, nl_d, &
52912 : sphi_a, sphi_b, sphi_c, sphi_d, &
52913 : primitives, &
52914 : buffer1, buffer2)
52915 : REAL(dp), DIMENSION(6*3*15*10), INTENT(IN) :: work
52916 : INTEGER :: nl_a, nl_b, nl_c, nl_d
52917 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
52918 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
52919 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
52920 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
52921 : REAL(dp), &
52922 : DIMENSION(5*nl_a, 3*nl_b, 9*nl_c, 7*nl_d) :: primitives
52923 : REAL(dp), DIMENSION(6*3*15*10) :: buffer1, buffer2
52924 :
52925 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
52926 : kmax, s_offset_a1, s_offset_b1, &
52927 : s_offset_c1, s_offset_d1
52928 :
52929 : s_offset_a1 = 0
52930 : DO ia = 1, nl_a
52931 : s_offset_b1 = 0
52932 : DO ib = 1, nl_b
52933 : s_offset_c1 = 0
52934 : DO ic = 1, nl_c
52935 : s_offset_d1 = 0
52936 : DO id = 1, nl_d
52937 : buffer1 = 0.0_dp
52938 : imax = 3*15*10
52939 : kmax = 6
52940 : DO i = 1, imax
52941 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
52942 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
52943 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
52944 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
52945 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
52946 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
52947 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
52948 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
52949 : END DO
52950 : buffer2 = 0.0_dp
52951 : imax = 5*15*10
52952 : kmax = 3
52953 : DO i = 1, imax
52954 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
52955 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
52956 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
52957 : END DO
52958 : buffer1 = 0.0_dp
52959 : imax = 5*3*10
52960 : kmax = 15
52961 : DO i = 1, imax
52962 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
52963 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
52964 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
52965 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
52966 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
52967 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
52968 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
52969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
52970 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
52971 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
52972 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
52973 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
52974 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
52975 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
52976 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
52977 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
52978 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
52979 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
52980 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
52981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
52982 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
52983 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
52984 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
52985 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
52986 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
52987 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
52988 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
52989 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
52990 : END DO
52991 : imax = 5*3*9
52992 : kmax = 10
52993 : i = 0
52994 : DO i1 = 1, 9
52995 : DO i2 = 1, 3
52996 : DO i3 = 1, 5
52997 : i = i + 1
52998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
52999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53000 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
53001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53003 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
53004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53006 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53009 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
53010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53012 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
53013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53015 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
53016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53018 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
53019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53021 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
53022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53024 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
53025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53027 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
53028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53030 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
53031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53033 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
53034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53036 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
53037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53039 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
53040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53042 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
53043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53045 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
53046 : END DO
53047 : END DO
53048 : END DO
53049 : s_offset_d1 = s_offset_d1 + 7
53050 : END DO
53051 : s_offset_c1 = s_offset_c1 + 9
53052 : END DO
53053 : s_offset_b1 = s_offset_b1 + 3
53054 : END DO
53055 : s_offset_a1 = s_offset_a1 + 5
53056 : END DO
53057 : END SUBROUTINE contract_dpgf
53058 : #endif
53059 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
53060 : ! **************************************************************************************************
53061 : !> \brief ...
53062 : !> \param work ...
53063 : !> \param nl_a ...
53064 : !> \param nl_b ...
53065 : !> \param nl_c ...
53066 : !> \param nl_d ...
53067 : !> \param sphi_a ...
53068 : !> \param sphi_b ...
53069 : !> \param sphi_c ...
53070 : !> \param sphi_d ...
53071 : !> \param primitives ...
53072 : !> \param buffer1 ...
53073 : !> \param buffer2 ...
53074 : ! **************************************************************************************************
53075 : SUBROUTINE contract_dpgg(work, &
53076 : nl_a, nl_b, nl_c, nl_d, &
53077 : sphi_a, sphi_b, sphi_c, sphi_d, &
53078 : primitives, &
53079 : buffer1, buffer2)
53080 : REAL(dp), DIMENSION(6*3*15*15), INTENT(IN) :: work
53081 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53082 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53083 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
53084 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
53085 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
53086 : REAL(dp), &
53087 : DIMENSION(5*nl_a, 3*nl_b, 9*nl_c, 9*nl_d) :: primitives
53088 : REAL(dp), DIMENSION(6*3*15*15) :: buffer1, buffer2
53089 :
53090 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53091 : kmax, s_offset_a1, s_offset_b1, &
53092 : s_offset_c1, s_offset_d1
53093 :
53094 : s_offset_a1 = 0
53095 : DO ia = 1, nl_a
53096 : s_offset_b1 = 0
53097 : DO ib = 1, nl_b
53098 : s_offset_c1 = 0
53099 : DO ic = 1, nl_c
53100 : s_offset_d1 = 0
53101 : DO id = 1, nl_d
53102 : buffer1 = 0.0_dp
53103 : imax = 3*15*15
53104 : kmax = 6
53105 : DO i = 1, imax
53106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53107 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53108 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53109 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53110 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53111 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53112 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53113 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53114 : END DO
53115 : buffer2 = 0.0_dp
53116 : imax = 5*15*15
53117 : kmax = 3
53118 : DO i = 1, imax
53119 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53120 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53121 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
53122 : END DO
53123 : buffer1 = 0.0_dp
53124 : imax = 5*3*15
53125 : kmax = 15
53126 : DO i = 1, imax
53127 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
53128 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
53129 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
53130 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
53131 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
53132 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
53133 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
53134 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
53135 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
53136 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
53137 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
53138 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
53139 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
53140 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
53141 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
53142 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
53143 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
53144 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
53145 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
53146 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
53147 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
53148 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
53149 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
53150 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
53151 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
53152 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
53153 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
53154 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
53155 : END DO
53156 : imax = 5*3*9
53157 : kmax = 15
53158 : i = 0
53159 : DO i1 = 1, 9
53160 : DO i2 = 1, 3
53161 : DO i3 = 1, 5
53162 : i = i + 1
53163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53165 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
53166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53168 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
53169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53171 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
53172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53174 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53177 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
53178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53180 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
53181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
53182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
53183 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
53184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53186 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
53187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53189 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
53190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53192 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
53193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53195 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
53196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53198 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
53199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53201 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
53202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53204 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
53205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53207 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
53208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53210 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
53211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
53212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
53213 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
53214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53216 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
53217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53219 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
53220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53222 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
53223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53225 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
53226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53228 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
53229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53231 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
53232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53234 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
53235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53237 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
53238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53240 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
53241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53243 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
53244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53246 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
53247 : END DO
53248 : END DO
53249 : END DO
53250 : s_offset_d1 = s_offset_d1 + 9
53251 : END DO
53252 : s_offset_c1 = s_offset_c1 + 9
53253 : END DO
53254 : s_offset_b1 = s_offset_b1 + 3
53255 : END DO
53256 : s_offset_a1 = s_offset_a1 + 5
53257 : END DO
53258 : END SUBROUTINE contract_dpgg
53259 : #endif
53260 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
53261 : ! **************************************************************************************************
53262 : !> \brief ...
53263 : !> \param work ...
53264 : !> \param nl_a ...
53265 : !> \param nl_b ...
53266 : !> \param nl_c ...
53267 : !> \param nl_d ...
53268 : !> \param sphi_a ...
53269 : !> \param sphi_b ...
53270 : !> \param sphi_c ...
53271 : !> \param sphi_d ...
53272 : !> \param primitives ...
53273 : !> \param buffer1 ...
53274 : !> \param buffer2 ...
53275 : ! **************************************************************************************************
53276 457225 : SUBROUTINE contract_ddss(work, &
53277 : nl_a, nl_b, nl_c, nl_d, &
53278 457225 : sphi_a, sphi_b, sphi_c, sphi_d, &
53279 457225 : primitives, &
53280 : buffer1, buffer2)
53281 : REAL(dp), DIMENSION(6*6*1*1), INTENT(IN) :: work
53282 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53283 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53284 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53285 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
53286 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
53287 : REAL(dp), &
53288 : DIMENSION(5*nl_a, 5*nl_b, 1*nl_c, 1*nl_d) :: primitives
53289 : REAL(dp), DIMENSION(6*6*1*1) :: buffer1, buffer2
53290 :
53291 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53292 : kmax, s_offset_a1, s_offset_b1, &
53293 : s_offset_c1, s_offset_d1
53294 :
53295 457225 : s_offset_a1 = 0
53296 974352 : DO ia = 1, nl_a
53297 : s_offset_b1 = 0
53298 1156877 : DO ib = 1, nl_b
53299 : s_offset_c1 = 0
53300 1663945 : DO ic = 1, nl_c
53301 : s_offset_d1 = 0
53302 2821854 : DO id = 1, nl_d
53303 1797659 : buffer1 = 0.0_dp
53304 1797659 : imax = 6*1*1
53305 1797659 : kmax = 6
53306 12583613 : DO i = 1, imax
53307 10785954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53308 10785954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53309 10785954 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53310 10785954 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53311 10785954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53312 10785954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53313 10785954 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53314 12583613 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53315 : END DO
53316 1797659 : buffer2 = 0.0_dp
53317 1797659 : imax = 5*1*1
53318 1797659 : kmax = 6
53319 10785954 : DO i = 1, imax
53320 8988295 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53321 8988295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53322 8988295 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53323 8988295 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53324 8988295 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53325 8988295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53326 8988295 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53327 10785954 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53328 : END DO
53329 1797659 : buffer1 = 0.0_dp
53330 1797659 : imax = 5*5*1
53331 1797659 : kmax = 1
53332 46739134 : DO i = 1, imax
53333 46739134 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
53334 : END DO
53335 3595318 : imax = 5*5*1
53336 3595318 : kmax = 1
53337 : i = 0
53338 3595318 : DO i1 = 1, 1
53339 12583613 : DO i2 = 1, 5
53340 55727429 : DO i3 = 1, 5
53341 44941475 : i = i + 1
53342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
53344 53929770 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
53345 : END DO
53346 : END DO
53347 : END DO
53348 2821854 : s_offset_d1 = s_offset_d1 + 1
53349 : END DO
53350 1663945 : s_offset_c1 = s_offset_c1 + 1
53351 : END DO
53352 1156877 : s_offset_b1 = s_offset_b1 + 5
53353 : END DO
53354 974352 : s_offset_a1 = s_offset_a1 + 5
53355 : END DO
53356 457225 : END SUBROUTINE contract_ddss
53357 : #endif
53358 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
53359 : ! **************************************************************************************************
53360 : !> \brief ...
53361 : !> \param work ...
53362 : !> \param nl_a ...
53363 : !> \param nl_b ...
53364 : !> \param nl_c ...
53365 : !> \param nl_d ...
53366 : !> \param sphi_a ...
53367 : !> \param sphi_b ...
53368 : !> \param sphi_c ...
53369 : !> \param sphi_d ...
53370 : !> \param primitives ...
53371 : !> \param buffer1 ...
53372 : !> \param buffer2 ...
53373 : ! **************************************************************************************************
53374 407464 : SUBROUTINE contract_ddsp(work, &
53375 : nl_a, nl_b, nl_c, nl_d, &
53376 407464 : sphi_a, sphi_b, sphi_c, sphi_d, &
53377 407464 : primitives, &
53378 : buffer1, buffer2)
53379 : REAL(dp), DIMENSION(6*6*1*3), INTENT(IN) :: work
53380 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53381 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53382 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53383 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
53384 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
53385 : REAL(dp), &
53386 : DIMENSION(5*nl_a, 5*nl_b, 1*nl_c, 3*nl_d) :: primitives
53387 : REAL(dp), DIMENSION(6*6*1*3) :: buffer1, buffer2
53388 :
53389 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53390 : kmax, s_offset_a1, s_offset_b1, &
53391 : s_offset_c1, s_offset_d1
53392 :
53393 407464 : s_offset_a1 = 0
53394 862714 : DO ia = 1, nl_a
53395 : s_offset_b1 = 0
53396 1009790 : DO ib = 1, nl_b
53397 : s_offset_c1 = 0
53398 1461499 : DO ic = 1, nl_c
53399 : s_offset_d1 = 0
53400 2079548 : DO id = 1, nl_d
53401 1172589 : buffer1 = 0.0_dp
53402 1172589 : imax = 6*1*3
53403 1172589 : kmax = 6
53404 22279191 : DO i = 1, imax
53405 21106602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53406 21106602 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53407 21106602 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53408 21106602 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53409 21106602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53410 21106602 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53411 21106602 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53412 22279191 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53413 : END DO
53414 1172589 : buffer2 = 0.0_dp
53415 1172589 : imax = 5*1*3
53416 1172589 : kmax = 6
53417 18761424 : DO i = 1, imax
53418 17588835 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53419 17588835 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53420 17588835 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53421 17588835 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53422 17588835 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53423 17588835 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53424 17588835 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53425 18761424 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53426 : END DO
53427 1172589 : buffer1 = 0.0_dp
53428 1172589 : imax = 5*5*3
53429 1172589 : kmax = 1
53430 89116764 : DO i = 1, imax
53431 89116764 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
53432 : END DO
53433 2345178 : imax = 5*5*1
53434 2345178 : kmax = 3
53435 : i = 0
53436 2345178 : DO i1 = 1, 1
53437 8208123 : DO i2 = 1, 5
53438 36350259 : DO i3 = 1, 5
53439 29314725 : i = i + 1
53440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
53442 29314725 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
53443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
53445 29314725 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
53448 35177670 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
53449 : END DO
53450 : END DO
53451 : END DO
53452 2079548 : s_offset_d1 = s_offset_d1 + 3
53453 : END DO
53454 1461499 : s_offset_c1 = s_offset_c1 + 1
53455 : END DO
53456 1009790 : s_offset_b1 = s_offset_b1 + 5
53457 : END DO
53458 862714 : s_offset_a1 = s_offset_a1 + 5
53459 : END DO
53460 407464 : END SUBROUTINE contract_ddsp
53461 : #endif
53462 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
53463 : ! **************************************************************************************************
53464 : !> \brief ...
53465 : !> \param work ...
53466 : !> \param nl_a ...
53467 : !> \param nl_b ...
53468 : !> \param nl_c ...
53469 : !> \param nl_d ...
53470 : !> \param sphi_a ...
53471 : !> \param sphi_b ...
53472 : !> \param sphi_c ...
53473 : !> \param sphi_d ...
53474 : !> \param primitives ...
53475 : !> \param buffer1 ...
53476 : !> \param buffer2 ...
53477 : ! **************************************************************************************************
53478 195178 : SUBROUTINE contract_ddsd(work, &
53479 : nl_a, nl_b, nl_c, nl_d, &
53480 195178 : sphi_a, sphi_b, sphi_c, sphi_d, &
53481 195178 : primitives, &
53482 : buffer1, buffer2)
53483 : REAL(dp), DIMENSION(6*6*1*6), INTENT(IN) :: work
53484 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53485 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53486 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53487 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
53488 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
53489 : REAL(dp), &
53490 : DIMENSION(5*nl_a, 5*nl_b, 1*nl_c, 5*nl_d) :: primitives
53491 : REAL(dp), DIMENSION(6*6*1*6) :: buffer1, buffer2
53492 :
53493 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53494 : kmax, s_offset_a1, s_offset_b1, &
53495 : s_offset_c1, s_offset_d1
53496 :
53497 195178 : s_offset_a1 = 0
53498 424443 : DO ia = 1, nl_a
53499 : s_offset_b1 = 0
53500 530100 : DO ib = 1, nl_b
53501 : s_offset_c1 = 0
53502 796799 : DO ic = 1, nl_c
53503 : s_offset_d1 = 0
53504 1114450 : DO id = 1, nl_d
53505 618486 : buffer1 = 0.0_dp
53506 618486 : imax = 6*1*6
53507 618486 : kmax = 6
53508 22883982 : DO i = 1, imax
53509 22265496 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53510 22265496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53511 22265496 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53512 22265496 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53513 22265496 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53514 22265496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53515 22265496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53516 22883982 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53517 : END DO
53518 618486 : buffer2 = 0.0_dp
53519 618486 : imax = 5*1*6
53520 618486 : kmax = 6
53521 19173066 : DO i = 1, imax
53522 18554580 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53523 18554580 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53524 18554580 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53525 18554580 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53526 18554580 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53527 18554580 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53528 18554580 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53529 19173066 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53530 : END DO
53531 618486 : buffer1 = 0.0_dp
53532 618486 : imax = 5*5*6
53533 618486 : kmax = 1
53534 93391386 : DO i = 1, imax
53535 93391386 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
53536 : END DO
53537 1236972 : imax = 5*5*1
53538 1236972 : kmax = 6
53539 : i = 0
53540 1236972 : DO i1 = 1, 1
53541 4329402 : DO i2 = 1, 5
53542 19173066 : DO i3 = 1, 5
53543 15462150 : i = i + 1
53544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53546 15462150 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
53547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53549 15462150 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
53550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53552 15462150 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53555 15462150 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
53556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53558 15462150 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
53559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53561 15462150 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
53562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53564 15462150 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
53565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53567 18554580 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
53568 : END DO
53569 : END DO
53570 : END DO
53571 1114450 : s_offset_d1 = s_offset_d1 + 5
53572 : END DO
53573 796799 : s_offset_c1 = s_offset_c1 + 1
53574 : END DO
53575 530100 : s_offset_b1 = s_offset_b1 + 5
53576 : END DO
53577 424443 : s_offset_a1 = s_offset_a1 + 5
53578 : END DO
53579 195178 : END SUBROUTINE contract_ddsd
53580 : #endif
53581 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
53582 : ! **************************************************************************************************
53583 : !> \brief ...
53584 : !> \param work ...
53585 : !> \param nl_a ...
53586 : !> \param nl_b ...
53587 : !> \param nl_c ...
53588 : !> \param nl_d ...
53589 : !> \param sphi_a ...
53590 : !> \param sphi_b ...
53591 : !> \param sphi_c ...
53592 : !> \param sphi_d ...
53593 : !> \param primitives ...
53594 : !> \param buffer1 ...
53595 : !> \param buffer2 ...
53596 : ! **************************************************************************************************
53597 : SUBROUTINE contract_ddsf(work, &
53598 : nl_a, nl_b, nl_c, nl_d, &
53599 : sphi_a, sphi_b, sphi_c, sphi_d, &
53600 : primitives, &
53601 : buffer1, buffer2)
53602 : REAL(dp), DIMENSION(6*6*1*10), INTENT(IN) :: work
53603 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53604 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53605 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53606 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
53607 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
53608 : REAL(dp), &
53609 : DIMENSION(5*nl_a, 5*nl_b, 1*nl_c, 7*nl_d) :: primitives
53610 : REAL(dp), DIMENSION(6*6*1*10) :: buffer1, buffer2
53611 :
53612 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53613 : kmax, s_offset_a1, s_offset_b1, &
53614 : s_offset_c1, s_offset_d1
53615 :
53616 : s_offset_a1 = 0
53617 : DO ia = 1, nl_a
53618 : s_offset_b1 = 0
53619 : DO ib = 1, nl_b
53620 : s_offset_c1 = 0
53621 : DO ic = 1, nl_c
53622 : s_offset_d1 = 0
53623 : DO id = 1, nl_d
53624 : buffer1 = 0.0_dp
53625 : imax = 6*1*10
53626 : kmax = 6
53627 : DO i = 1, imax
53628 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53629 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53630 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53631 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53633 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53634 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53635 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53636 : END DO
53637 : buffer2 = 0.0_dp
53638 : imax = 5*1*10
53639 : kmax = 6
53640 : DO i = 1, imax
53641 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53642 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53643 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53644 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53645 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53646 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53647 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53648 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53649 : END DO
53650 : buffer1 = 0.0_dp
53651 : imax = 5*5*10
53652 : kmax = 1
53653 : DO i = 1, imax
53654 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
53655 : END DO
53656 : imax = 5*5*1
53657 : kmax = 10
53658 : i = 0
53659 : DO i1 = 1, 1
53660 : DO i2 = 1, 5
53661 : DO i3 = 1, 5
53662 : i = i + 1
53663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53665 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
53666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53668 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
53669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53671 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53674 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
53675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53677 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
53678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53680 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
53681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53683 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
53684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53686 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
53687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53689 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
53690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53692 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
53693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53695 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
53696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53698 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
53699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53701 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
53702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53704 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
53705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53707 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
53708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53710 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
53711 : END DO
53712 : END DO
53713 : END DO
53714 : s_offset_d1 = s_offset_d1 + 7
53715 : END DO
53716 : s_offset_c1 = s_offset_c1 + 1
53717 : END DO
53718 : s_offset_b1 = s_offset_b1 + 5
53719 : END DO
53720 : s_offset_a1 = s_offset_a1 + 5
53721 : END DO
53722 : END SUBROUTINE contract_ddsf
53723 : #endif
53724 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
53725 : ! **************************************************************************************************
53726 : !> \brief ...
53727 : !> \param work ...
53728 : !> \param nl_a ...
53729 : !> \param nl_b ...
53730 : !> \param nl_c ...
53731 : !> \param nl_d ...
53732 : !> \param sphi_a ...
53733 : !> \param sphi_b ...
53734 : !> \param sphi_c ...
53735 : !> \param sphi_d ...
53736 : !> \param primitives ...
53737 : !> \param buffer1 ...
53738 : !> \param buffer2 ...
53739 : ! **************************************************************************************************
53740 : SUBROUTINE contract_ddsg(work, &
53741 : nl_a, nl_b, nl_c, nl_d, &
53742 : sphi_a, sphi_b, sphi_c, sphi_d, &
53743 : primitives, &
53744 : buffer1, buffer2)
53745 : REAL(dp), DIMENSION(6*6*1*15), INTENT(IN) :: work
53746 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53747 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53748 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53749 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
53750 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
53751 : REAL(dp), &
53752 : DIMENSION(5*nl_a, 5*nl_b, 1*nl_c, 9*nl_d) :: primitives
53753 : REAL(dp), DIMENSION(6*6*1*15) :: buffer1, buffer2
53754 :
53755 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53756 : kmax, s_offset_a1, s_offset_b1, &
53757 : s_offset_c1, s_offset_d1
53758 :
53759 : s_offset_a1 = 0
53760 : DO ia = 1, nl_a
53761 : s_offset_b1 = 0
53762 : DO ib = 1, nl_b
53763 : s_offset_c1 = 0
53764 : DO ic = 1, nl_c
53765 : s_offset_d1 = 0
53766 : DO id = 1, nl_d
53767 : buffer1 = 0.0_dp
53768 : imax = 6*1*15
53769 : kmax = 6
53770 : DO i = 1, imax
53771 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53772 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53773 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53774 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53775 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53777 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53779 : END DO
53780 : buffer2 = 0.0_dp
53781 : imax = 5*1*15
53782 : kmax = 6
53783 : DO i = 1, imax
53784 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53785 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53786 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53787 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53788 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53789 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53790 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53791 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53792 : END DO
53793 : buffer1 = 0.0_dp
53794 : imax = 5*5*15
53795 : kmax = 1
53796 : DO i = 1, imax
53797 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
53798 : END DO
53799 : imax = 5*5*1
53800 : kmax = 15
53801 : i = 0
53802 : DO i1 = 1, 1
53803 : DO i2 = 1, 5
53804 : DO i3 = 1, 5
53805 : i = i + 1
53806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53808 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
53809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53811 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
53812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53814 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
53815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53817 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
53818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53820 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
53821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53823 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
53824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
53825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
53826 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
53827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53829 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
53830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53832 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
53833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53835 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
53836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53838 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
53839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53841 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
53842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53844 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
53845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
53847 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
53848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53850 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
53851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53853 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
53854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
53855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
53856 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
53857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
53858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
53859 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
53860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
53861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
53862 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
53863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53865 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
53866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53868 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
53869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
53870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
53871 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
53872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
53873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
53874 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
53875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53877 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
53878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53880 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
53881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
53882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
53883 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
53884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
53885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
53886 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
53887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
53888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
53889 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
53890 : END DO
53891 : END DO
53892 : END DO
53893 : s_offset_d1 = s_offset_d1 + 9
53894 : END DO
53895 : s_offset_c1 = s_offset_c1 + 1
53896 : END DO
53897 : s_offset_b1 = s_offset_b1 + 5
53898 : END DO
53899 : s_offset_a1 = s_offset_a1 + 5
53900 : END DO
53901 : END SUBROUTINE contract_ddsg
53902 : #endif
53903 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
53904 : ! **************************************************************************************************
53905 : !> \brief ...
53906 : !> \param work ...
53907 : !> \param nl_a ...
53908 : !> \param nl_b ...
53909 : !> \param nl_c ...
53910 : !> \param nl_d ...
53911 : !> \param sphi_a ...
53912 : !> \param sphi_b ...
53913 : !> \param sphi_c ...
53914 : !> \param sphi_d ...
53915 : !> \param primitives ...
53916 : !> \param buffer1 ...
53917 : !> \param buffer2 ...
53918 : ! **************************************************************************************************
53919 368674 : SUBROUTINE contract_ddps(work, &
53920 : nl_a, nl_b, nl_c, nl_d, &
53921 368674 : sphi_a, sphi_b, sphi_c, sphi_d, &
53922 368674 : primitives, &
53923 : buffer1, buffer2)
53924 : REAL(dp), DIMENSION(6*6*3*1), INTENT(IN) :: work
53925 : INTEGER :: nl_a, nl_b, nl_c, nl_d
53926 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
53927 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
53928 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
53929 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
53930 : REAL(dp), &
53931 : DIMENSION(5*nl_a, 5*nl_b, 3*nl_c, 1*nl_d) :: primitives
53932 : REAL(dp), DIMENSION(6*6*3*1) :: buffer1, buffer2
53933 :
53934 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
53935 : kmax, s_offset_a1, s_offset_b1, &
53936 : s_offset_c1, s_offset_d1
53937 :
53938 368674 : s_offset_a1 = 0
53939 778248 : DO ia = 1, nl_a
53940 : s_offset_b1 = 0
53941 904987 : DO ib = 1, nl_b
53942 : s_offset_c1 = 0
53943 1161791 : DO ic = 1, nl_c
53944 : s_offset_d1 = 0
53945 1827154 : DO id = 1, nl_d
53946 1160776 : buffer1 = 0.0_dp
53947 1160776 : imax = 6*3*1
53948 1160776 : kmax = 6
53949 22054744 : DO i = 1, imax
53950 20893968 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
53951 20893968 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
53952 20893968 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
53953 20893968 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
53954 20893968 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
53955 20893968 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
53956 20893968 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
53957 22054744 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
53958 : END DO
53959 1160776 : buffer2 = 0.0_dp
53960 1160776 : imax = 5*3*1
53961 1160776 : kmax = 6
53962 18572416 : DO i = 1, imax
53963 17411640 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
53964 17411640 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
53965 17411640 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
53966 17411640 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
53967 17411640 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
53968 17411640 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
53969 17411640 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
53970 18572416 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
53971 : END DO
53972 1160776 : buffer1 = 0.0_dp
53973 1160776 : imax = 5*5*1
53974 1160776 : kmax = 3
53975 30180176 : DO i = 1, imax
53976 29019400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
53977 29019400 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
53978 30180176 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
53979 : END DO
53980 4643104 : imax = 5*5*3
53981 4643104 : kmax = 1
53982 : i = 0
53983 4643104 : DO i1 = 1, 3
53984 22054744 : DO i2 = 1, 5
53985 107952168 : DO i3 = 1, 5
53986 87058200 : i = i + 1
53987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
53988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
53989 104469840 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
53990 : END DO
53991 : END DO
53992 : END DO
53993 1827154 : s_offset_d1 = s_offset_d1 + 1
53994 : END DO
53995 1161791 : s_offset_c1 = s_offset_c1 + 3
53996 : END DO
53997 904987 : s_offset_b1 = s_offset_b1 + 5
53998 : END DO
53999 778248 : s_offset_a1 = s_offset_a1 + 5
54000 : END DO
54001 368674 : END SUBROUTINE contract_ddps
54002 : #endif
54003 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
54004 : ! **************************************************************************************************
54005 : !> \brief ...
54006 : !> \param work ...
54007 : !> \param nl_a ...
54008 : !> \param nl_b ...
54009 : !> \param nl_c ...
54010 : !> \param nl_d ...
54011 : !> \param sphi_a ...
54012 : !> \param sphi_b ...
54013 : !> \param sphi_c ...
54014 : !> \param sphi_d ...
54015 : !> \param primitives ...
54016 : !> \param buffer1 ...
54017 : !> \param buffer2 ...
54018 : ! **************************************************************************************************
54019 257805 : SUBROUTINE contract_ddpp(work, &
54020 : nl_a, nl_b, nl_c, nl_d, &
54021 257805 : sphi_a, sphi_b, sphi_c, sphi_d, &
54022 257805 : primitives, &
54023 : buffer1, buffer2)
54024 : REAL(dp), DIMENSION(6*6*3*3), INTENT(IN) :: work
54025 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54026 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54027 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54028 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
54029 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
54030 : REAL(dp), &
54031 : DIMENSION(5*nl_a, 5*nl_b, 3*nl_c, 3*nl_d) :: primitives
54032 : REAL(dp), DIMENSION(6*6*3*3) :: buffer1, buffer2
54033 :
54034 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54035 : kmax, s_offset_a1, s_offset_b1, &
54036 : s_offset_c1, s_offset_d1
54037 :
54038 257805 : s_offset_a1 = 0
54039 550513 : DO ia = 1, nl_a
54040 : s_offset_b1 = 0
54041 659589 : DO ib = 1, nl_b
54042 : s_offset_c1 = 0
54043 848420 : DO ic = 1, nl_c
54044 : s_offset_d1 = 0
54045 1105481 : DO id = 1, nl_d
54046 623942 : buffer1 = 0.0_dp
54047 623942 : imax = 6*3*3
54048 623942 : kmax = 6
54049 34316810 : DO i = 1, imax
54050 33692868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54051 33692868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54052 33692868 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54053 33692868 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54054 33692868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54055 33692868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54056 33692868 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54057 34316810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54058 : END DO
54059 623942 : buffer2 = 0.0_dp
54060 623942 : imax = 5*3*3
54061 623942 : kmax = 6
54062 28701332 : DO i = 1, imax
54063 28077390 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54064 28077390 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54065 28077390 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54066 28077390 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54067 28077390 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54068 28077390 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54069 28077390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54070 28701332 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54071 : END DO
54072 623942 : buffer1 = 0.0_dp
54073 623942 : imax = 5*5*3
54074 623942 : kmax = 3
54075 47419592 : DO i = 1, imax
54076 46795650 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54077 46795650 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54078 47419592 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
54079 : END DO
54080 2495768 : imax = 5*5*3
54081 2495768 : kmax = 3
54082 : i = 0
54083 2495768 : DO i1 = 1, 3
54084 11854898 : DO i2 = 1, 5
54085 58026606 : DO i3 = 1, 5
54086 46795650 : i = i + 1
54087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
54089 46795650 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
54090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
54092 46795650 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
54095 56154780 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
54096 : END DO
54097 : END DO
54098 : END DO
54099 1105481 : s_offset_d1 = s_offset_d1 + 3
54100 : END DO
54101 848420 : s_offset_c1 = s_offset_c1 + 3
54102 : END DO
54103 659589 : s_offset_b1 = s_offset_b1 + 5
54104 : END DO
54105 550513 : s_offset_a1 = s_offset_a1 + 5
54106 : END DO
54107 257805 : END SUBROUTINE contract_ddpp
54108 : #endif
54109 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
54110 : ! **************************************************************************************************
54111 : !> \brief ...
54112 : !> \param work ...
54113 : !> \param nl_a ...
54114 : !> \param nl_b ...
54115 : !> \param nl_c ...
54116 : !> \param nl_d ...
54117 : !> \param sphi_a ...
54118 : !> \param sphi_b ...
54119 : !> \param sphi_c ...
54120 : !> \param sphi_d ...
54121 : !> \param primitives ...
54122 : !> \param buffer1 ...
54123 : !> \param buffer2 ...
54124 : ! **************************************************************************************************
54125 165728 : SUBROUTINE contract_ddpd(work, &
54126 : nl_a, nl_b, nl_c, nl_d, &
54127 165728 : sphi_a, sphi_b, sphi_c, sphi_d, &
54128 165728 : primitives, &
54129 : buffer1, buffer2)
54130 : REAL(dp), DIMENSION(6*6*3*6), INTENT(IN) :: work
54131 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54132 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54133 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54134 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
54135 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
54136 : REAL(dp), &
54137 : DIMENSION(5*nl_a, 5*nl_b, 3*nl_c, 5*nl_d) :: primitives
54138 : REAL(dp), DIMENSION(6*6*3*6) :: buffer1, buffer2
54139 :
54140 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54141 : kmax, s_offset_a1, s_offset_b1, &
54142 : s_offset_c1, s_offset_d1
54143 :
54144 165728 : s_offset_a1 = 0
54145 357630 : DO ia = 1, nl_a
54146 : s_offset_b1 = 0
54147 440685 : DO ib = 1, nl_b
54148 : s_offset_c1 = 0
54149 572084 : DO ic = 1, nl_c
54150 : s_offset_d1 = 0
54151 713145 : DO id = 1, nl_d
54152 389844 : buffer1 = 0.0_dp
54153 389844 : imax = 6*3*6
54154 389844 : kmax = 6
54155 42492996 : DO i = 1, imax
54156 42103152 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54157 42103152 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54158 42103152 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54159 42103152 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54160 42103152 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54161 42103152 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54162 42103152 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54163 42492996 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54164 : END DO
54165 389844 : buffer2 = 0.0_dp
54166 389844 : imax = 5*3*6
54167 389844 : kmax = 6
54168 35475804 : DO i = 1, imax
54169 35085960 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54170 35085960 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54171 35085960 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54172 35085960 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54173 35085960 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54174 35085960 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54175 35085960 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54176 35475804 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54177 : END DO
54178 389844 : buffer1 = 0.0_dp
54179 389844 : imax = 5*5*6
54180 389844 : kmax = 3
54181 58866444 : DO i = 1, imax
54182 58476600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54183 58476600 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54184 58866444 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
54185 : END DO
54186 1559376 : imax = 5*5*3
54187 1559376 : kmax = 6
54188 : i = 0
54189 1559376 : DO i1 = 1, 3
54190 7407036 : DO i2 = 1, 5
54191 36255492 : DO i3 = 1, 5
54192 29238300 : i = i + 1
54193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54195 29238300 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
54196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54198 29238300 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
54199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54201 29238300 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54204 29238300 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
54205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54207 29238300 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
54208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54210 29238300 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
54211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
54213 29238300 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
54214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54216 35085960 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
54217 : END DO
54218 : END DO
54219 : END DO
54220 713145 : s_offset_d1 = s_offset_d1 + 5
54221 : END DO
54222 572084 : s_offset_c1 = s_offset_c1 + 3
54223 : END DO
54224 440685 : s_offset_b1 = s_offset_b1 + 5
54225 : END DO
54226 357630 : s_offset_a1 = s_offset_a1 + 5
54227 : END DO
54228 165728 : END SUBROUTINE contract_ddpd
54229 : #endif
54230 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
54231 : ! **************************************************************************************************
54232 : !> \brief ...
54233 : !> \param work ...
54234 : !> \param nl_a ...
54235 : !> \param nl_b ...
54236 : !> \param nl_c ...
54237 : !> \param nl_d ...
54238 : !> \param sphi_a ...
54239 : !> \param sphi_b ...
54240 : !> \param sphi_c ...
54241 : !> \param sphi_d ...
54242 : !> \param primitives ...
54243 : !> \param buffer1 ...
54244 : !> \param buffer2 ...
54245 : ! **************************************************************************************************
54246 : SUBROUTINE contract_ddpf(work, &
54247 : nl_a, nl_b, nl_c, nl_d, &
54248 : sphi_a, sphi_b, sphi_c, sphi_d, &
54249 : primitives, &
54250 : buffer1, buffer2)
54251 : REAL(dp), DIMENSION(6*6*3*10), INTENT(IN) :: work
54252 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54253 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54254 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54255 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
54256 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
54257 : REAL(dp), &
54258 : DIMENSION(5*nl_a, 5*nl_b, 3*nl_c, 7*nl_d) :: primitives
54259 : REAL(dp), DIMENSION(6*6*3*10) :: buffer1, buffer2
54260 :
54261 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54262 : kmax, s_offset_a1, s_offset_b1, &
54263 : s_offset_c1, s_offset_d1
54264 :
54265 : s_offset_a1 = 0
54266 : DO ia = 1, nl_a
54267 : s_offset_b1 = 0
54268 : DO ib = 1, nl_b
54269 : s_offset_c1 = 0
54270 : DO ic = 1, nl_c
54271 : s_offset_d1 = 0
54272 : DO id = 1, nl_d
54273 : buffer1 = 0.0_dp
54274 : imax = 6*3*10
54275 : kmax = 6
54276 : DO i = 1, imax
54277 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54278 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54279 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54280 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54281 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54283 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54284 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54285 : END DO
54286 : buffer2 = 0.0_dp
54287 : imax = 5*3*10
54288 : kmax = 6
54289 : DO i = 1, imax
54290 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54291 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54292 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54293 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54294 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54296 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54297 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54298 : END DO
54299 : buffer1 = 0.0_dp
54300 : imax = 5*5*10
54301 : kmax = 3
54302 : DO i = 1, imax
54303 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54304 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54305 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
54306 : END DO
54307 : imax = 5*5*3
54308 : kmax = 10
54309 : i = 0
54310 : DO i1 = 1, 3
54311 : DO i2 = 1, 5
54312 : DO i3 = 1, 5
54313 : i = i + 1
54314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54316 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
54317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54319 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
54320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54322 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
54326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
54329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
54330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
54331 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
54332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
54335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54337 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
54338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
54340 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
54341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54343 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
54344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54346 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
54347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54349 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
54350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54352 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
54353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
54354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
54355 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
54356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54358 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
54359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54361 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
54362 : END DO
54363 : END DO
54364 : END DO
54365 : s_offset_d1 = s_offset_d1 + 7
54366 : END DO
54367 : s_offset_c1 = s_offset_c1 + 3
54368 : END DO
54369 : s_offset_b1 = s_offset_b1 + 5
54370 : END DO
54371 : s_offset_a1 = s_offset_a1 + 5
54372 : END DO
54373 : END SUBROUTINE contract_ddpf
54374 : #endif
54375 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
54376 : ! **************************************************************************************************
54377 : !> \brief ...
54378 : !> \param work ...
54379 : !> \param nl_a ...
54380 : !> \param nl_b ...
54381 : !> \param nl_c ...
54382 : !> \param nl_d ...
54383 : !> \param sphi_a ...
54384 : !> \param sphi_b ...
54385 : !> \param sphi_c ...
54386 : !> \param sphi_d ...
54387 : !> \param primitives ...
54388 : !> \param buffer1 ...
54389 : !> \param buffer2 ...
54390 : ! **************************************************************************************************
54391 : SUBROUTINE contract_ddpg(work, &
54392 : nl_a, nl_b, nl_c, nl_d, &
54393 : sphi_a, sphi_b, sphi_c, sphi_d, &
54394 : primitives, &
54395 : buffer1, buffer2)
54396 : REAL(dp), DIMENSION(6*6*3*15), INTENT(IN) :: work
54397 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54398 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54399 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54400 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
54401 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
54402 : REAL(dp), &
54403 : DIMENSION(5*nl_a, 5*nl_b, 3*nl_c, 9*nl_d) :: primitives
54404 : REAL(dp), DIMENSION(6*6*3*15) :: buffer1, buffer2
54405 :
54406 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54407 : kmax, s_offset_a1, s_offset_b1, &
54408 : s_offset_c1, s_offset_d1
54409 :
54410 : s_offset_a1 = 0
54411 : DO ia = 1, nl_a
54412 : s_offset_b1 = 0
54413 : DO ib = 1, nl_b
54414 : s_offset_c1 = 0
54415 : DO ic = 1, nl_c
54416 : s_offset_d1 = 0
54417 : DO id = 1, nl_d
54418 : buffer1 = 0.0_dp
54419 : imax = 6*3*15
54420 : kmax = 6
54421 : DO i = 1, imax
54422 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54423 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54424 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54425 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54426 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54427 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54428 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54429 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54430 : END DO
54431 : buffer2 = 0.0_dp
54432 : imax = 5*3*15
54433 : kmax = 6
54434 : DO i = 1, imax
54435 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54436 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54437 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54438 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54439 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54441 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54442 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54443 : END DO
54444 : buffer1 = 0.0_dp
54445 : imax = 5*5*15
54446 : kmax = 3
54447 : DO i = 1, imax
54448 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54449 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54450 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
54451 : END DO
54452 : imax = 5*5*3
54453 : kmax = 15
54454 : i = 0
54455 : DO i1 = 1, 3
54456 : DO i2 = 1, 5
54457 : DO i3 = 1, 5
54458 : i = i + 1
54459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54461 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
54462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54464 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
54465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
54466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
54467 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
54468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54470 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54473 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
54474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
54475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
54476 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
54477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
54478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
54479 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
54480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54482 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
54483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
54484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
54485 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
54486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
54488 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
54489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54491 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
54492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54494 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
54495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54497 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
54498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54500 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
54501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54503 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
54504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
54505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
54506 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
54507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
54508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
54509 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
54510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54512 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
54513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
54514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
54515 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
54516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54518 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
54519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54521 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
54522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
54523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
54524 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
54525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
54527 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
54528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54530 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
54531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54533 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
54534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54536 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
54537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54539 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
54540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54542 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
54543 : END DO
54544 : END DO
54545 : END DO
54546 : s_offset_d1 = s_offset_d1 + 9
54547 : END DO
54548 : s_offset_c1 = s_offset_c1 + 3
54549 : END DO
54550 : s_offset_b1 = s_offset_b1 + 5
54551 : END DO
54552 : s_offset_a1 = s_offset_a1 + 5
54553 : END DO
54554 : END SUBROUTINE contract_ddpg
54555 : #endif
54556 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
54557 : ! **************************************************************************************************
54558 : !> \brief ...
54559 : !> \param work ...
54560 : !> \param nl_a ...
54561 : !> \param nl_b ...
54562 : !> \param nl_c ...
54563 : !> \param nl_d ...
54564 : !> \param sphi_a ...
54565 : !> \param sphi_b ...
54566 : !> \param sphi_c ...
54567 : !> \param sphi_d ...
54568 : !> \param primitives ...
54569 : !> \param buffer1 ...
54570 : !> \param buffer2 ...
54571 : ! **************************************************************************************************
54572 125691 : SUBROUTINE contract_ddds(work, &
54573 : nl_a, nl_b, nl_c, nl_d, &
54574 125691 : sphi_a, sphi_b, sphi_c, sphi_d, &
54575 125691 : primitives, &
54576 : buffer1, buffer2)
54577 : REAL(dp), DIMENSION(6*6*6*1), INTENT(IN) :: work
54578 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54579 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54580 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54581 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
54582 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
54583 : REAL(dp), &
54584 : DIMENSION(5*nl_a, 5*nl_b, 5*nl_c, 1*nl_d) :: primitives
54585 : REAL(dp), DIMENSION(6*6*6*1) :: buffer1, buffer2
54586 :
54587 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54588 : kmax, s_offset_a1, s_offset_b1, &
54589 : s_offset_c1, s_offset_d1
54590 :
54591 125691 : s_offset_a1 = 0
54592 272185 : DO ia = 1, nl_a
54593 : s_offset_b1 = 0
54594 337176 : DO ib = 1, nl_b
54595 : s_offset_c1 = 0
54596 408880 : DO ic = 1, nl_c
54597 : s_offset_d1 = 0
54598 603129 : DO id = 1, nl_d
54599 384931 : buffer1 = 0.0_dp
54600 384931 : imax = 6*6*1
54601 384931 : kmax = 6
54602 14242447 : DO i = 1, imax
54603 13857516 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54604 13857516 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54605 13857516 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54606 13857516 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54607 13857516 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54608 13857516 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54609 13857516 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54610 14242447 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54611 : END DO
54612 384931 : buffer2 = 0.0_dp
54613 384931 : imax = 5*6*1
54614 384931 : kmax = 6
54615 11932861 : DO i = 1, imax
54616 11547930 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54617 11547930 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54618 11547930 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54619 11547930 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54620 11547930 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54621 11547930 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54622 11547930 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54623 11932861 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54624 : END DO
54625 384931 : buffer1 = 0.0_dp
54626 384931 : imax = 5*5*1
54627 384931 : kmax = 6
54628 10008206 : DO i = 1, imax
54629 9623275 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54630 9623275 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
54631 9623275 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54632 9623275 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
54633 9623275 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
54634 9623275 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
54635 9623275 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
54636 10008206 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
54637 : END DO
54638 2309586 : imax = 5*5*5
54639 2309586 : kmax = 1
54640 : i = 0
54641 2309586 : DO i1 = 1, 5
54642 11932861 : DO i2 = 1, 5
54643 59664305 : DO i3 = 1, 5
54644 48116375 : i = i + 1
54645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
54647 57739650 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
54648 : END DO
54649 : END DO
54650 : END DO
54651 603129 : s_offset_d1 = s_offset_d1 + 1
54652 : END DO
54653 408880 : s_offset_c1 = s_offset_c1 + 5
54654 : END DO
54655 337176 : s_offset_b1 = s_offset_b1 + 5
54656 : END DO
54657 272185 : s_offset_a1 = s_offset_a1 + 5
54658 : END DO
54659 125691 : END SUBROUTINE contract_ddds
54660 : #endif
54661 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
54662 : ! **************************************************************************************************
54663 : !> \brief ...
54664 : !> \param work ...
54665 : !> \param nl_a ...
54666 : !> \param nl_b ...
54667 : !> \param nl_c ...
54668 : !> \param nl_d ...
54669 : !> \param sphi_a ...
54670 : !> \param sphi_b ...
54671 : !> \param sphi_c ...
54672 : !> \param sphi_d ...
54673 : !> \param primitives ...
54674 : !> \param buffer1 ...
54675 : !> \param buffer2 ...
54676 : ! **************************************************************************************************
54677 119163 : SUBROUTINE contract_dddp(work, &
54678 : nl_a, nl_b, nl_c, nl_d, &
54679 119163 : sphi_a, sphi_b, sphi_c, sphi_d, &
54680 119163 : primitives, &
54681 : buffer1, buffer2)
54682 : REAL(dp), DIMENSION(6*6*6*3), INTENT(IN) :: work
54683 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54684 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54685 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54686 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
54687 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
54688 : REAL(dp), &
54689 : DIMENSION(5*nl_a, 5*nl_b, 5*nl_c, 3*nl_d) :: primitives
54690 : REAL(dp), DIMENSION(6*6*6*3) :: buffer1, buffer2
54691 :
54692 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54693 : kmax, s_offset_a1, s_offset_b1, &
54694 : s_offset_c1, s_offset_d1
54695 :
54696 119163 : s_offset_a1 = 0
54697 255590 : DO ia = 1, nl_a
54698 : s_offset_b1 = 0
54699 309647 : DO ib = 1, nl_b
54700 : s_offset_c1 = 0
54701 367475 : DO ic = 1, nl_c
54702 : s_offset_d1 = 0
54703 429411 : DO id = 1, nl_d
54704 235156 : buffer1 = 0.0_dp
54705 235156 : imax = 6*6*3
54706 235156 : kmax = 6
54707 25632004 : DO i = 1, imax
54708 25396848 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54709 25396848 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54710 25396848 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54711 25396848 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54712 25396848 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54713 25396848 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54714 25396848 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54715 25632004 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54716 : END DO
54717 235156 : buffer2 = 0.0_dp
54718 235156 : imax = 5*6*3
54719 235156 : kmax = 6
54720 21399196 : DO i = 1, imax
54721 21164040 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54722 21164040 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54723 21164040 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54724 21164040 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54725 21164040 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54726 21164040 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54727 21164040 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54728 21399196 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54729 : END DO
54730 235156 : buffer1 = 0.0_dp
54731 235156 : imax = 5*5*3
54732 235156 : kmax = 6
54733 17871856 : DO i = 1, imax
54734 17636700 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54735 17636700 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
54736 17636700 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54737 17636700 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
54738 17636700 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
54739 17636700 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
54740 17636700 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
54741 17871856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
54742 : END DO
54743 1410936 : imax = 5*5*5
54744 1410936 : kmax = 3
54745 : i = 0
54746 1410936 : DO i1 = 1, 5
54747 7289836 : DO i2 = 1, 5
54748 36449180 : DO i3 = 1, 5
54749 29394500 : i = i + 1
54750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
54752 29394500 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
54753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
54755 29394500 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
54758 35273400 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
54759 : END DO
54760 : END DO
54761 : END DO
54762 429411 : s_offset_d1 = s_offset_d1 + 3
54763 : END DO
54764 367475 : s_offset_c1 = s_offset_c1 + 5
54765 : END DO
54766 309647 : s_offset_b1 = s_offset_b1 + 5
54767 : END DO
54768 255590 : s_offset_a1 = s_offset_a1 + 5
54769 : END DO
54770 119163 : END SUBROUTINE contract_dddp
54771 : #endif
54772 : #if __MAX_CONTR > 2 || __MAX_CONTR == 2
54773 : ! **************************************************************************************************
54774 : !> \brief ...
54775 : !> \param work ...
54776 : !> \param nl_a ...
54777 : !> \param nl_b ...
54778 : !> \param nl_c ...
54779 : !> \param nl_d ...
54780 : !> \param sphi_a ...
54781 : !> \param sphi_b ...
54782 : !> \param sphi_c ...
54783 : !> \param sphi_d ...
54784 : !> \param primitives ...
54785 : !> \param buffer1 ...
54786 : !> \param buffer2 ...
54787 : ! **************************************************************************************************
54788 81816 : SUBROUTINE contract_dddd(work, &
54789 : nl_a, nl_b, nl_c, nl_d, &
54790 81816 : sphi_a, sphi_b, sphi_c, sphi_d, &
54791 81816 : primitives, &
54792 : buffer1, buffer2)
54793 : REAL(dp), DIMENSION(6*6*6*6), INTENT(IN) :: work
54794 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54795 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54796 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54797 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
54798 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
54799 : REAL(dp), &
54800 : DIMENSION(5*nl_a, 5*nl_b, 5*nl_c, 5*nl_d) :: primitives
54801 : REAL(dp), DIMENSION(6*6*6*6) :: buffer1, buffer2
54802 :
54803 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54804 : kmax, s_offset_a1, s_offset_b1, &
54805 : s_offset_c1, s_offset_d1
54806 :
54807 81816 : s_offset_a1 = 0
54808 179095 : DO ia = 1, nl_a
54809 : s_offset_b1 = 0
54810 228236 : DO ib = 1, nl_b
54811 : s_offset_c1 = 0
54812 281172 : DO ic = 1, nl_c
54813 : s_offset_d1 = 0
54814 343490 : DO id = 1, nl_d
54815 193275 : buffer1 = 0.0_dp
54816 193275 : imax = 6*6*6
54817 193275 : kmax = 6
54818 41940675 : DO i = 1, imax
54819 41747400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54820 41747400 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54821 41747400 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54822 41747400 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54823 41747400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54824 41747400 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54825 41747400 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54826 41940675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54827 : END DO
54828 193275 : buffer2 = 0.0_dp
54829 193275 : imax = 5*6*6
54830 193275 : kmax = 6
54831 34982775 : DO i = 1, imax
54832 34789500 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54833 34789500 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54834 34789500 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54835 34789500 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54836 34789500 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54837 34789500 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54838 34789500 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54839 34982775 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54840 : END DO
54841 193275 : buffer1 = 0.0_dp
54842 193275 : imax = 5*5*6
54843 193275 : kmax = 6
54844 29184525 : DO i = 1, imax
54845 28991250 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54846 28991250 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
54847 28991250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54848 28991250 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
54849 28991250 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
54850 28991250 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
54851 28991250 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
54852 29184525 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
54853 : END DO
54854 1159650 : imax = 5*5*5
54855 1159650 : kmax = 6
54856 : i = 0
54857 1159650 : DO i1 = 1, 5
54858 5991525 : DO i2 = 1, 5
54859 29957625 : DO i3 = 1, 5
54860 24159375 : i = i + 1
54861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54863 24159375 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
54864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54866 24159375 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
54867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54869 24159375 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
54871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
54872 24159375 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
54873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54875 24159375 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
54876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54878 24159375 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
54879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
54880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
54881 24159375 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
54882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54884 28991250 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
54885 : END DO
54886 : END DO
54887 : END DO
54888 343490 : s_offset_d1 = s_offset_d1 + 5
54889 : END DO
54890 281172 : s_offset_c1 = s_offset_c1 + 5
54891 : END DO
54892 228236 : s_offset_b1 = s_offset_b1 + 5
54893 : END DO
54894 179095 : s_offset_a1 = s_offset_a1 + 5
54895 : END DO
54896 81816 : END SUBROUTINE contract_dddd
54897 : #endif
54898 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
54899 : ! **************************************************************************************************
54900 : !> \brief ...
54901 : !> \param work ...
54902 : !> \param nl_a ...
54903 : !> \param nl_b ...
54904 : !> \param nl_c ...
54905 : !> \param nl_d ...
54906 : !> \param sphi_a ...
54907 : !> \param sphi_b ...
54908 : !> \param sphi_c ...
54909 : !> \param sphi_d ...
54910 : !> \param primitives ...
54911 : !> \param buffer1 ...
54912 : !> \param buffer2 ...
54913 : ! **************************************************************************************************
54914 : SUBROUTINE contract_dddf(work, &
54915 : nl_a, nl_b, nl_c, nl_d, &
54916 : sphi_a, sphi_b, sphi_c, sphi_d, &
54917 : primitives, &
54918 : buffer1, buffer2)
54919 : REAL(dp), DIMENSION(6*6*6*10), INTENT(IN) :: work
54920 : INTEGER :: nl_a, nl_b, nl_c, nl_d
54921 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
54922 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
54923 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
54924 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
54925 : REAL(dp), &
54926 : DIMENSION(5*nl_a, 5*nl_b, 5*nl_c, 7*nl_d) :: primitives
54927 : REAL(dp), DIMENSION(6*6*6*10) :: buffer1, buffer2
54928 :
54929 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
54930 : kmax, s_offset_a1, s_offset_b1, &
54931 : s_offset_c1, s_offset_d1
54932 :
54933 : s_offset_a1 = 0
54934 : DO ia = 1, nl_a
54935 : s_offset_b1 = 0
54936 : DO ib = 1, nl_b
54937 : s_offset_c1 = 0
54938 : DO ic = 1, nl_c
54939 : s_offset_d1 = 0
54940 : DO id = 1, nl_d
54941 : buffer1 = 0.0_dp
54942 : imax = 6*6*10
54943 : kmax = 6
54944 : DO i = 1, imax
54945 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
54946 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
54947 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
54948 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
54949 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
54950 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
54951 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
54952 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
54953 : END DO
54954 : buffer2 = 0.0_dp
54955 : imax = 5*6*10
54956 : kmax = 6
54957 : DO i = 1, imax
54958 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
54959 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
54960 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
54961 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
54962 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
54963 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
54964 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
54965 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
54966 : END DO
54967 : buffer1 = 0.0_dp
54968 : imax = 5*5*10
54969 : kmax = 6
54970 : DO i = 1, imax
54971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
54972 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
54973 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
54974 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
54975 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
54976 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
54977 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
54978 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
54979 : END DO
54980 : imax = 5*5*5
54981 : kmax = 10
54982 : i = 0
54983 : DO i1 = 1, 5
54984 : DO i2 = 1, 5
54985 : DO i3 = 1, 5
54986 : i = i + 1
54987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
54988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
54989 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
54990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
54991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
54992 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
54993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
54994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
54995 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
54996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
54997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
54998 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
54999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55001 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
55002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55004 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
55005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55007 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
55008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55010 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
55011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55013 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
55014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55016 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
55017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55019 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
55020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55022 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
55023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55025 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
55026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55028 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
55029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55031 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
55032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55034 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
55035 : END DO
55036 : END DO
55037 : END DO
55038 : s_offset_d1 = s_offset_d1 + 7
55039 : END DO
55040 : s_offset_c1 = s_offset_c1 + 5
55041 : END DO
55042 : s_offset_b1 = s_offset_b1 + 5
55043 : END DO
55044 : s_offset_a1 = s_offset_a1 + 5
55045 : END DO
55046 : END SUBROUTINE contract_dddf
55047 : #endif
55048 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
55049 : ! **************************************************************************************************
55050 : !> \brief ...
55051 : !> \param work ...
55052 : !> \param nl_a ...
55053 : !> \param nl_b ...
55054 : !> \param nl_c ...
55055 : !> \param nl_d ...
55056 : !> \param sphi_a ...
55057 : !> \param sphi_b ...
55058 : !> \param sphi_c ...
55059 : !> \param sphi_d ...
55060 : !> \param primitives ...
55061 : !> \param buffer1 ...
55062 : !> \param buffer2 ...
55063 : ! **************************************************************************************************
55064 : SUBROUTINE contract_dddg(work, &
55065 : nl_a, nl_b, nl_c, nl_d, &
55066 : sphi_a, sphi_b, sphi_c, sphi_d, &
55067 : primitives, &
55068 : buffer1, buffer2)
55069 : REAL(dp), DIMENSION(6*6*6*15), INTENT(IN) :: work
55070 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55071 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55072 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55073 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
55074 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
55075 : REAL(dp), &
55076 : DIMENSION(5*nl_a, 5*nl_b, 5*nl_c, 9*nl_d) :: primitives
55077 : REAL(dp), DIMENSION(6*6*6*15) :: buffer1, buffer2
55078 :
55079 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55080 : kmax, s_offset_a1, s_offset_b1, &
55081 : s_offset_c1, s_offset_d1
55082 :
55083 : s_offset_a1 = 0
55084 : DO ia = 1, nl_a
55085 : s_offset_b1 = 0
55086 : DO ib = 1, nl_b
55087 : s_offset_c1 = 0
55088 : DO ic = 1, nl_c
55089 : s_offset_d1 = 0
55090 : DO id = 1, nl_d
55091 : buffer1 = 0.0_dp
55092 : imax = 6*6*15
55093 : kmax = 6
55094 : DO i = 1, imax
55095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55096 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55097 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55098 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55099 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55101 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55102 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55103 : END DO
55104 : buffer2 = 0.0_dp
55105 : imax = 5*6*15
55106 : kmax = 6
55107 : DO i = 1, imax
55108 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55109 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55110 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55111 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55112 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55113 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55114 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55115 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55116 : END DO
55117 : buffer1 = 0.0_dp
55118 : imax = 5*5*15
55119 : kmax = 6
55120 : DO i = 1, imax
55121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
55122 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55123 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55124 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55125 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
55126 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55127 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55128 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
55129 : END DO
55130 : imax = 5*5*5
55131 : kmax = 15
55132 : i = 0
55133 : DO i1 = 1, 5
55134 : DO i2 = 1, 5
55135 : DO i3 = 1, 5
55136 : i = i + 1
55137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55139 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
55140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55142 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
55143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55145 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
55146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55148 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
55149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55151 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
55152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55154 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
55155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
55156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
55157 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
55158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55160 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
55161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55163 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
55164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55166 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
55167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55169 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
55170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55172 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
55173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55175 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
55176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55178 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
55179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55181 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
55182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55184 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
55185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
55186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
55187 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
55188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55190 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
55191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55193 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
55194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55196 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
55197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55199 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
55200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55202 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
55203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55205 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
55206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55208 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
55209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55211 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
55212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55214 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
55215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55217 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
55218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55220 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
55221 : END DO
55222 : END DO
55223 : END DO
55224 : s_offset_d1 = s_offset_d1 + 9
55225 : END DO
55226 : s_offset_c1 = s_offset_c1 + 5
55227 : END DO
55228 : s_offset_b1 = s_offset_b1 + 5
55229 : END DO
55230 : s_offset_a1 = s_offset_a1 + 5
55231 : END DO
55232 : END SUBROUTINE contract_dddg
55233 : #endif
55234 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
55235 : ! **************************************************************************************************
55236 : !> \brief ...
55237 : !> \param work ...
55238 : !> \param nl_a ...
55239 : !> \param nl_b ...
55240 : !> \param nl_c ...
55241 : !> \param nl_d ...
55242 : !> \param sphi_a ...
55243 : !> \param sphi_b ...
55244 : !> \param sphi_c ...
55245 : !> \param sphi_d ...
55246 : !> \param primitives ...
55247 : !> \param buffer1 ...
55248 : !> \param buffer2 ...
55249 : ! **************************************************************************************************
55250 : SUBROUTINE contract_ddfs(work, &
55251 : nl_a, nl_b, nl_c, nl_d, &
55252 : sphi_a, sphi_b, sphi_c, sphi_d, &
55253 : primitives, &
55254 : buffer1, buffer2)
55255 : REAL(dp), DIMENSION(6*6*10*1), INTENT(IN) :: work
55256 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55257 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55258 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55259 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
55260 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
55261 : REAL(dp), &
55262 : DIMENSION(5*nl_a, 5*nl_b, 7*nl_c, 1*nl_d) :: primitives
55263 : REAL(dp), DIMENSION(6*6*10*1) :: buffer1, buffer2
55264 :
55265 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55266 : kmax, s_offset_a1, s_offset_b1, &
55267 : s_offset_c1, s_offset_d1
55268 :
55269 : s_offset_a1 = 0
55270 : DO ia = 1, nl_a
55271 : s_offset_b1 = 0
55272 : DO ib = 1, nl_b
55273 : s_offset_c1 = 0
55274 : DO ic = 1, nl_c
55275 : s_offset_d1 = 0
55276 : DO id = 1, nl_d
55277 : buffer1 = 0.0_dp
55278 : imax = 6*10*1
55279 : kmax = 6
55280 : DO i = 1, imax
55281 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55283 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55284 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55285 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55286 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55287 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55288 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55289 : END DO
55290 : buffer2 = 0.0_dp
55291 : imax = 5*10*1
55292 : kmax = 6
55293 : DO i = 1, imax
55294 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55296 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55297 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55298 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55299 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55300 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55301 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55302 : END DO
55303 : buffer1 = 0.0_dp
55304 : imax = 5*5*1
55305 : kmax = 10
55306 : DO i = 1, imax
55307 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55308 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
55309 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55310 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
55311 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55312 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
55313 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55314 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
55315 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55316 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
55317 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
55318 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
55319 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
55320 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
55321 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
55322 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
55323 : END DO
55324 : imax = 5*5*7
55325 : kmax = 1
55326 : i = 0
55327 : DO i1 = 1, 7
55328 : DO i2 = 1, 5
55329 : DO i3 = 1, 5
55330 : i = i + 1
55331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
55333 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
55334 : END DO
55335 : END DO
55336 : END DO
55337 : s_offset_d1 = s_offset_d1 + 1
55338 : END DO
55339 : s_offset_c1 = s_offset_c1 + 7
55340 : END DO
55341 : s_offset_b1 = s_offset_b1 + 5
55342 : END DO
55343 : s_offset_a1 = s_offset_a1 + 5
55344 : END DO
55345 : END SUBROUTINE contract_ddfs
55346 : #endif
55347 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
55348 : ! **************************************************************************************************
55349 : !> \brief ...
55350 : !> \param work ...
55351 : !> \param nl_a ...
55352 : !> \param nl_b ...
55353 : !> \param nl_c ...
55354 : !> \param nl_d ...
55355 : !> \param sphi_a ...
55356 : !> \param sphi_b ...
55357 : !> \param sphi_c ...
55358 : !> \param sphi_d ...
55359 : !> \param primitives ...
55360 : !> \param buffer1 ...
55361 : !> \param buffer2 ...
55362 : ! **************************************************************************************************
55363 : SUBROUTINE contract_ddfp(work, &
55364 : nl_a, nl_b, nl_c, nl_d, &
55365 : sphi_a, sphi_b, sphi_c, sphi_d, &
55366 : primitives, &
55367 : buffer1, buffer2)
55368 : REAL(dp), DIMENSION(6*6*10*3), INTENT(IN) :: work
55369 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55370 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55371 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55372 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
55373 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
55374 : REAL(dp), &
55375 : DIMENSION(5*nl_a, 5*nl_b, 7*nl_c, 3*nl_d) :: primitives
55376 : REAL(dp), DIMENSION(6*6*10*3) :: buffer1, buffer2
55377 :
55378 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55379 : kmax, s_offset_a1, s_offset_b1, &
55380 : s_offset_c1, s_offset_d1
55381 :
55382 : s_offset_a1 = 0
55383 : DO ia = 1, nl_a
55384 : s_offset_b1 = 0
55385 : DO ib = 1, nl_b
55386 : s_offset_c1 = 0
55387 : DO ic = 1, nl_c
55388 : s_offset_d1 = 0
55389 : DO id = 1, nl_d
55390 : buffer1 = 0.0_dp
55391 : imax = 6*10*3
55392 : kmax = 6
55393 : DO i = 1, imax
55394 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55396 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55397 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55398 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55400 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55401 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55402 : END DO
55403 : buffer2 = 0.0_dp
55404 : imax = 5*10*3
55405 : kmax = 6
55406 : DO i = 1, imax
55407 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55408 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55409 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55410 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55411 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55412 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55413 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55414 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55415 : END DO
55416 : buffer1 = 0.0_dp
55417 : imax = 5*5*3
55418 : kmax = 10
55419 : DO i = 1, imax
55420 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55421 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
55422 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55423 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
55424 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55425 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
55426 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55427 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
55428 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55429 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
55430 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
55431 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
55432 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
55433 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
55434 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
55435 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
55436 : END DO
55437 : imax = 5*5*7
55438 : kmax = 3
55439 : i = 0
55440 : DO i1 = 1, 7
55441 : DO i2 = 1, 5
55442 : DO i3 = 1, 5
55443 : i = i + 1
55444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
55446 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
55447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
55449 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
55450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
55452 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
55453 : END DO
55454 : END DO
55455 : END DO
55456 : s_offset_d1 = s_offset_d1 + 3
55457 : END DO
55458 : s_offset_c1 = s_offset_c1 + 7
55459 : END DO
55460 : s_offset_b1 = s_offset_b1 + 5
55461 : END DO
55462 : s_offset_a1 = s_offset_a1 + 5
55463 : END DO
55464 : END SUBROUTINE contract_ddfp
55465 : #endif
55466 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
55467 : ! **************************************************************************************************
55468 : !> \brief ...
55469 : !> \param work ...
55470 : !> \param nl_a ...
55471 : !> \param nl_b ...
55472 : !> \param nl_c ...
55473 : !> \param nl_d ...
55474 : !> \param sphi_a ...
55475 : !> \param sphi_b ...
55476 : !> \param sphi_c ...
55477 : !> \param sphi_d ...
55478 : !> \param primitives ...
55479 : !> \param buffer1 ...
55480 : !> \param buffer2 ...
55481 : ! **************************************************************************************************
55482 : SUBROUTINE contract_ddfd(work, &
55483 : nl_a, nl_b, nl_c, nl_d, &
55484 : sphi_a, sphi_b, sphi_c, sphi_d, &
55485 : primitives, &
55486 : buffer1, buffer2)
55487 : REAL(dp), DIMENSION(6*6*10*6), INTENT(IN) :: work
55488 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55489 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55490 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55491 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
55492 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
55493 : REAL(dp), &
55494 : DIMENSION(5*nl_a, 5*nl_b, 7*nl_c, 5*nl_d) :: primitives
55495 : REAL(dp), DIMENSION(6*6*10*6) :: buffer1, buffer2
55496 :
55497 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55498 : kmax, s_offset_a1, s_offset_b1, &
55499 : s_offset_c1, s_offset_d1
55500 :
55501 : s_offset_a1 = 0
55502 : DO ia = 1, nl_a
55503 : s_offset_b1 = 0
55504 : DO ib = 1, nl_b
55505 : s_offset_c1 = 0
55506 : DO ic = 1, nl_c
55507 : s_offset_d1 = 0
55508 : DO id = 1, nl_d
55509 : buffer1 = 0.0_dp
55510 : imax = 6*10*6
55511 : kmax = 6
55512 : DO i = 1, imax
55513 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55514 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55515 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55516 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55517 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55518 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55519 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55520 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55521 : END DO
55522 : buffer2 = 0.0_dp
55523 : imax = 5*10*6
55524 : kmax = 6
55525 : DO i = 1, imax
55526 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55527 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55528 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55529 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55530 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55531 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55532 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55533 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55534 : END DO
55535 : buffer1 = 0.0_dp
55536 : imax = 5*5*6
55537 : kmax = 10
55538 : DO i = 1, imax
55539 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55540 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
55541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55542 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
55543 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55544 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
55545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55546 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
55547 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55548 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
55549 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
55550 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
55551 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
55552 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
55553 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
55554 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
55555 : END DO
55556 : imax = 5*5*7
55557 : kmax = 6
55558 : i = 0
55559 : DO i1 = 1, 7
55560 : DO i2 = 1, 5
55561 : DO i3 = 1, 5
55562 : i = i + 1
55563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55565 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
55566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55568 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
55569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55571 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
55572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55574 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
55575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55577 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
55578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55580 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
55581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55583 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
55584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55586 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
55587 : END DO
55588 : END DO
55589 : END DO
55590 : s_offset_d1 = s_offset_d1 + 5
55591 : END DO
55592 : s_offset_c1 = s_offset_c1 + 7
55593 : END DO
55594 : s_offset_b1 = s_offset_b1 + 5
55595 : END DO
55596 : s_offset_a1 = s_offset_a1 + 5
55597 : END DO
55598 : END SUBROUTINE contract_ddfd
55599 : #endif
55600 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
55601 : ! **************************************************************************************************
55602 : !> \brief ...
55603 : !> \param work ...
55604 : !> \param nl_a ...
55605 : !> \param nl_b ...
55606 : !> \param nl_c ...
55607 : !> \param nl_d ...
55608 : !> \param sphi_a ...
55609 : !> \param sphi_b ...
55610 : !> \param sphi_c ...
55611 : !> \param sphi_d ...
55612 : !> \param primitives ...
55613 : !> \param buffer1 ...
55614 : !> \param buffer2 ...
55615 : ! **************************************************************************************************
55616 : SUBROUTINE contract_ddff(work, &
55617 : nl_a, nl_b, nl_c, nl_d, &
55618 : sphi_a, sphi_b, sphi_c, sphi_d, &
55619 : primitives, &
55620 : buffer1, buffer2)
55621 : REAL(dp), DIMENSION(6*6*10*10), INTENT(IN) :: work
55622 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55623 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55624 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55625 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
55626 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
55627 : REAL(dp), &
55628 : DIMENSION(5*nl_a, 5*nl_b, 7*nl_c, 7*nl_d) :: primitives
55629 : REAL(dp), DIMENSION(6*6*10*10) :: buffer1, buffer2
55630 :
55631 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55632 : kmax, s_offset_a1, s_offset_b1, &
55633 : s_offset_c1, s_offset_d1
55634 :
55635 : s_offset_a1 = 0
55636 : DO ia = 1, nl_a
55637 : s_offset_b1 = 0
55638 : DO ib = 1, nl_b
55639 : s_offset_c1 = 0
55640 : DO ic = 1, nl_c
55641 : s_offset_d1 = 0
55642 : DO id = 1, nl_d
55643 : buffer1 = 0.0_dp
55644 : imax = 6*10*10
55645 : kmax = 6
55646 : DO i = 1, imax
55647 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55648 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55649 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55650 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55651 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55652 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55653 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55654 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55655 : END DO
55656 : buffer2 = 0.0_dp
55657 : imax = 5*10*10
55658 : kmax = 6
55659 : DO i = 1, imax
55660 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55661 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55662 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55663 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55664 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55665 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55666 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55667 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55668 : END DO
55669 : buffer1 = 0.0_dp
55670 : imax = 5*5*10
55671 : kmax = 10
55672 : DO i = 1, imax
55673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55674 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
55675 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55676 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
55677 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55678 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
55679 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55680 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
55681 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55682 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
55683 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
55684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
55685 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
55686 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
55687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
55688 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
55689 : END DO
55690 : imax = 5*5*7
55691 : kmax = 10
55692 : i = 0
55693 : DO i1 = 1, 7
55694 : DO i2 = 1, 5
55695 : DO i3 = 1, 5
55696 : i = i + 1
55697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55699 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
55700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55702 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
55703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55705 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
55706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55708 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
55709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55711 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
55712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55714 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
55715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55717 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
55718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55720 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
55721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55723 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
55724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55726 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
55727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55729 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
55730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55732 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
55733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55735 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
55736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55738 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
55739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55741 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
55742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55744 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
55745 : END DO
55746 : END DO
55747 : END DO
55748 : s_offset_d1 = s_offset_d1 + 7
55749 : END DO
55750 : s_offset_c1 = s_offset_c1 + 7
55751 : END DO
55752 : s_offset_b1 = s_offset_b1 + 5
55753 : END DO
55754 : s_offset_a1 = s_offset_a1 + 5
55755 : END DO
55756 : END SUBROUTINE contract_ddff
55757 : #endif
55758 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
55759 : ! **************************************************************************************************
55760 : !> \brief ...
55761 : !> \param work ...
55762 : !> \param nl_a ...
55763 : !> \param nl_b ...
55764 : !> \param nl_c ...
55765 : !> \param nl_d ...
55766 : !> \param sphi_a ...
55767 : !> \param sphi_b ...
55768 : !> \param sphi_c ...
55769 : !> \param sphi_d ...
55770 : !> \param primitives ...
55771 : !> \param buffer1 ...
55772 : !> \param buffer2 ...
55773 : ! **************************************************************************************************
55774 : SUBROUTINE contract_ddfg(work, &
55775 : nl_a, nl_b, nl_c, nl_d, &
55776 : sphi_a, sphi_b, sphi_c, sphi_d, &
55777 : primitives, &
55778 : buffer1, buffer2)
55779 : REAL(dp), DIMENSION(6*6*10*15), INTENT(IN) :: work
55780 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55781 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55782 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55783 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
55784 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
55785 : REAL(dp), &
55786 : DIMENSION(5*nl_a, 5*nl_b, 7*nl_c, 9*nl_d) :: primitives
55787 : REAL(dp), DIMENSION(6*6*10*15) :: buffer1, buffer2
55788 :
55789 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55790 : kmax, s_offset_a1, s_offset_b1, &
55791 : s_offset_c1, s_offset_d1
55792 :
55793 : s_offset_a1 = 0
55794 : DO ia = 1, nl_a
55795 : s_offset_b1 = 0
55796 : DO ib = 1, nl_b
55797 : s_offset_c1 = 0
55798 : DO ic = 1, nl_c
55799 : s_offset_d1 = 0
55800 : DO id = 1, nl_d
55801 : buffer1 = 0.0_dp
55802 : imax = 6*10*15
55803 : kmax = 6
55804 : DO i = 1, imax
55805 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
55806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
55807 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
55808 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
55809 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
55810 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
55811 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
55812 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
55813 : END DO
55814 : buffer2 = 0.0_dp
55815 : imax = 5*10*15
55816 : kmax = 6
55817 : DO i = 1, imax
55818 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
55819 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
55820 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
55821 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
55822 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
55823 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
55824 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
55825 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
55826 : END DO
55827 : buffer1 = 0.0_dp
55828 : imax = 5*5*15
55829 : kmax = 10
55830 : DO i = 1, imax
55831 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
55832 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
55833 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
55834 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
55835 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
55836 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
55837 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
55838 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
55839 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
55840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
55841 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
55842 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
55843 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
55844 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
55845 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
55846 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
55847 : END DO
55848 : imax = 5*5*7
55849 : kmax = 15
55850 : i = 0
55851 : DO i1 = 1, 7
55852 : DO i2 = 1, 5
55853 : DO i3 = 1, 5
55854 : i = i + 1
55855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55857 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
55858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55860 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
55861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55863 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
55864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55866 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
55867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55869 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
55870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55872 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
55873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
55874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
55875 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
55876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55878 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
55879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55881 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
55882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55884 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
55885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55887 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
55888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55890 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
55891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55893 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
55894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
55895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
55896 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
55897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55899 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
55900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55902 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
55903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
55904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
55905 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
55906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
55907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
55908 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
55909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
55910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
55911 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
55912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55914 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
55915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55917 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
55918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
55919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
55920 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
55921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
55922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
55923 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
55924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55926 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
55927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55929 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
55930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
55931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
55932 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
55933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
55934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
55935 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
55936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
55937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
55938 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
55939 : END DO
55940 : END DO
55941 : END DO
55942 : s_offset_d1 = s_offset_d1 + 9
55943 : END DO
55944 : s_offset_c1 = s_offset_c1 + 7
55945 : END DO
55946 : s_offset_b1 = s_offset_b1 + 5
55947 : END DO
55948 : s_offset_a1 = s_offset_a1 + 5
55949 : END DO
55950 : END SUBROUTINE contract_ddfg
55951 : #endif
55952 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
55953 : ! **************************************************************************************************
55954 : !> \brief ...
55955 : !> \param work ...
55956 : !> \param nl_a ...
55957 : !> \param nl_b ...
55958 : !> \param nl_c ...
55959 : !> \param nl_d ...
55960 : !> \param sphi_a ...
55961 : !> \param sphi_b ...
55962 : !> \param sphi_c ...
55963 : !> \param sphi_d ...
55964 : !> \param primitives ...
55965 : !> \param buffer1 ...
55966 : !> \param buffer2 ...
55967 : ! **************************************************************************************************
55968 : SUBROUTINE contract_ddgs(work, &
55969 : nl_a, nl_b, nl_c, nl_d, &
55970 : sphi_a, sphi_b, sphi_c, sphi_d, &
55971 : primitives, &
55972 : buffer1, buffer2)
55973 : REAL(dp), DIMENSION(6*6*15*1), INTENT(IN) :: work
55974 : INTEGER :: nl_a, nl_b, nl_c, nl_d
55975 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
55976 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
55977 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
55978 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
55979 : REAL(dp), &
55980 : DIMENSION(5*nl_a, 5*nl_b, 9*nl_c, 1*nl_d) :: primitives
55981 : REAL(dp), DIMENSION(6*6*15*1) :: buffer1, buffer2
55982 :
55983 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
55984 : kmax, s_offset_a1, s_offset_b1, &
55985 : s_offset_c1, s_offset_d1
55986 :
55987 : s_offset_a1 = 0
55988 : DO ia = 1, nl_a
55989 : s_offset_b1 = 0
55990 : DO ib = 1, nl_b
55991 : s_offset_c1 = 0
55992 : DO ic = 1, nl_c
55993 : s_offset_d1 = 0
55994 : DO id = 1, nl_d
55995 : buffer1 = 0.0_dp
55996 : imax = 6*15*1
55997 : kmax = 6
55998 : DO i = 1, imax
55999 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56000 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56001 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56002 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56003 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56004 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56005 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56006 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56007 : END DO
56008 : buffer2 = 0.0_dp
56009 : imax = 5*15*1
56010 : kmax = 6
56011 : DO i = 1, imax
56012 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
56013 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56014 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56015 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56016 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
56017 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56018 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56019 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
56020 : END DO
56021 : buffer1 = 0.0_dp
56022 : imax = 5*5*1
56023 : kmax = 15
56024 : DO i = 1, imax
56025 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
56026 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
56027 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
56028 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
56029 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
56030 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
56031 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
56032 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
56033 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
56034 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
56035 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
56036 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
56037 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
56038 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
56039 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
56040 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
56041 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
56042 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
56043 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
56044 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
56045 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
56046 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
56047 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
56048 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
56049 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
56050 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
56051 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
56052 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
56053 : END DO
56054 : imax = 5*5*9
56055 : kmax = 1
56056 : i = 0
56057 : DO i1 = 1, 9
56058 : DO i2 = 1, 5
56059 : DO i3 = 1, 5
56060 : i = i + 1
56061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
56063 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
56064 : END DO
56065 : END DO
56066 : END DO
56067 : s_offset_d1 = s_offset_d1 + 1
56068 : END DO
56069 : s_offset_c1 = s_offset_c1 + 9
56070 : END DO
56071 : s_offset_b1 = s_offset_b1 + 5
56072 : END DO
56073 : s_offset_a1 = s_offset_a1 + 5
56074 : END DO
56075 : END SUBROUTINE contract_ddgs
56076 : #endif
56077 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
56078 : ! **************************************************************************************************
56079 : !> \brief ...
56080 : !> \param work ...
56081 : !> \param nl_a ...
56082 : !> \param nl_b ...
56083 : !> \param nl_c ...
56084 : !> \param nl_d ...
56085 : !> \param sphi_a ...
56086 : !> \param sphi_b ...
56087 : !> \param sphi_c ...
56088 : !> \param sphi_d ...
56089 : !> \param primitives ...
56090 : !> \param buffer1 ...
56091 : !> \param buffer2 ...
56092 : ! **************************************************************************************************
56093 : SUBROUTINE contract_ddgp(work, &
56094 : nl_a, nl_b, nl_c, nl_d, &
56095 : sphi_a, sphi_b, sphi_c, sphi_d, &
56096 : primitives, &
56097 : buffer1, buffer2)
56098 : REAL(dp), DIMENSION(6*6*15*3), INTENT(IN) :: work
56099 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56100 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56101 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
56102 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
56103 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
56104 : REAL(dp), &
56105 : DIMENSION(5*nl_a, 5*nl_b, 9*nl_c, 3*nl_d) :: primitives
56106 : REAL(dp), DIMENSION(6*6*15*3) :: buffer1, buffer2
56107 :
56108 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56109 : kmax, s_offset_a1, s_offset_b1, &
56110 : s_offset_c1, s_offset_d1
56111 :
56112 : s_offset_a1 = 0
56113 : DO ia = 1, nl_a
56114 : s_offset_b1 = 0
56115 : DO ib = 1, nl_b
56116 : s_offset_c1 = 0
56117 : DO ic = 1, nl_c
56118 : s_offset_d1 = 0
56119 : DO id = 1, nl_d
56120 : buffer1 = 0.0_dp
56121 : imax = 6*15*3
56122 : kmax = 6
56123 : DO i = 1, imax
56124 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56125 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56126 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56127 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56128 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56130 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56131 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56132 : END DO
56133 : buffer2 = 0.0_dp
56134 : imax = 5*15*3
56135 : kmax = 6
56136 : DO i = 1, imax
56137 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
56138 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56139 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56140 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56141 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
56142 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56143 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56144 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
56145 : END DO
56146 : buffer1 = 0.0_dp
56147 : imax = 5*5*3
56148 : kmax = 15
56149 : DO i = 1, imax
56150 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
56151 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
56152 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
56153 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
56154 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
56155 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
56156 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
56157 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
56158 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
56159 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
56160 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
56161 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
56162 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
56163 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
56164 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
56165 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
56166 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
56167 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
56168 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
56169 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
56170 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
56171 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
56172 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
56173 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
56174 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
56175 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
56176 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
56177 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
56178 : END DO
56179 : imax = 5*5*9
56180 : kmax = 3
56181 : i = 0
56182 : DO i1 = 1, 9
56183 : DO i2 = 1, 5
56184 : DO i3 = 1, 5
56185 : i = i + 1
56186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
56188 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
56189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
56191 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
56192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
56194 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
56195 : END DO
56196 : END DO
56197 : END DO
56198 : s_offset_d1 = s_offset_d1 + 3
56199 : END DO
56200 : s_offset_c1 = s_offset_c1 + 9
56201 : END DO
56202 : s_offset_b1 = s_offset_b1 + 5
56203 : END DO
56204 : s_offset_a1 = s_offset_a1 + 5
56205 : END DO
56206 : END SUBROUTINE contract_ddgp
56207 : #endif
56208 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
56209 : ! **************************************************************************************************
56210 : !> \brief ...
56211 : !> \param work ...
56212 : !> \param nl_a ...
56213 : !> \param nl_b ...
56214 : !> \param nl_c ...
56215 : !> \param nl_d ...
56216 : !> \param sphi_a ...
56217 : !> \param sphi_b ...
56218 : !> \param sphi_c ...
56219 : !> \param sphi_d ...
56220 : !> \param primitives ...
56221 : !> \param buffer1 ...
56222 : !> \param buffer2 ...
56223 : ! **************************************************************************************************
56224 : SUBROUTINE contract_ddgd(work, &
56225 : nl_a, nl_b, nl_c, nl_d, &
56226 : sphi_a, sphi_b, sphi_c, sphi_d, &
56227 : primitives, &
56228 : buffer1, buffer2)
56229 : REAL(dp), DIMENSION(6*6*15*6), INTENT(IN) :: work
56230 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56231 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56232 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
56233 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
56234 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
56235 : REAL(dp), &
56236 : DIMENSION(5*nl_a, 5*nl_b, 9*nl_c, 5*nl_d) :: primitives
56237 : REAL(dp), DIMENSION(6*6*15*6) :: buffer1, buffer2
56238 :
56239 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56240 : kmax, s_offset_a1, s_offset_b1, &
56241 : s_offset_c1, s_offset_d1
56242 :
56243 : s_offset_a1 = 0
56244 : DO ia = 1, nl_a
56245 : s_offset_b1 = 0
56246 : DO ib = 1, nl_b
56247 : s_offset_c1 = 0
56248 : DO ic = 1, nl_c
56249 : s_offset_d1 = 0
56250 : DO id = 1, nl_d
56251 : buffer1 = 0.0_dp
56252 : imax = 6*15*6
56253 : kmax = 6
56254 : DO i = 1, imax
56255 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56257 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56258 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56259 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56261 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56262 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56263 : END DO
56264 : buffer2 = 0.0_dp
56265 : imax = 5*15*6
56266 : kmax = 6
56267 : DO i = 1, imax
56268 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
56269 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56270 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56271 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56272 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
56273 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56274 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56275 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
56276 : END DO
56277 : buffer1 = 0.0_dp
56278 : imax = 5*5*6
56279 : kmax = 15
56280 : DO i = 1, imax
56281 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
56282 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
56283 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
56284 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
56285 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
56286 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
56287 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
56288 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
56289 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
56290 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
56291 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
56292 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
56293 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
56294 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
56295 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
56296 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
56297 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
56298 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
56299 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
56300 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
56301 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
56302 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
56303 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
56304 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
56305 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
56306 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
56307 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
56308 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
56309 : END DO
56310 : imax = 5*5*9
56311 : kmax = 6
56312 : i = 0
56313 : DO i1 = 1, 9
56314 : DO i2 = 1, 5
56315 : DO i3 = 1, 5
56316 : i = i + 1
56317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56319 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
56320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56322 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
56323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
56325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
56326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
56329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56331 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
56332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
56335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
56337 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
56338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56340 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
56341 : END DO
56342 : END DO
56343 : END DO
56344 : s_offset_d1 = s_offset_d1 + 5
56345 : END DO
56346 : s_offset_c1 = s_offset_c1 + 9
56347 : END DO
56348 : s_offset_b1 = s_offset_b1 + 5
56349 : END DO
56350 : s_offset_a1 = s_offset_a1 + 5
56351 : END DO
56352 : END SUBROUTINE contract_ddgd
56353 : #endif
56354 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
56355 : ! **************************************************************************************************
56356 : !> \brief ...
56357 : !> \param work ...
56358 : !> \param nl_a ...
56359 : !> \param nl_b ...
56360 : !> \param nl_c ...
56361 : !> \param nl_d ...
56362 : !> \param sphi_a ...
56363 : !> \param sphi_b ...
56364 : !> \param sphi_c ...
56365 : !> \param sphi_d ...
56366 : !> \param primitives ...
56367 : !> \param buffer1 ...
56368 : !> \param buffer2 ...
56369 : ! **************************************************************************************************
56370 : SUBROUTINE contract_ddgf(work, &
56371 : nl_a, nl_b, nl_c, nl_d, &
56372 : sphi_a, sphi_b, sphi_c, sphi_d, &
56373 : primitives, &
56374 : buffer1, buffer2)
56375 : REAL(dp), DIMENSION(6*6*15*10), INTENT(IN) :: work
56376 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56377 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56378 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
56379 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
56380 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
56381 : REAL(dp), &
56382 : DIMENSION(5*nl_a, 5*nl_b, 9*nl_c, 7*nl_d) :: primitives
56383 : REAL(dp), DIMENSION(6*6*15*10) :: buffer1, buffer2
56384 :
56385 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56386 : kmax, s_offset_a1, s_offset_b1, &
56387 : s_offset_c1, s_offset_d1
56388 :
56389 : s_offset_a1 = 0
56390 : DO ia = 1, nl_a
56391 : s_offset_b1 = 0
56392 : DO ib = 1, nl_b
56393 : s_offset_c1 = 0
56394 : DO ic = 1, nl_c
56395 : s_offset_d1 = 0
56396 : DO id = 1, nl_d
56397 : buffer1 = 0.0_dp
56398 : imax = 6*15*10
56399 : kmax = 6
56400 : DO i = 1, imax
56401 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56402 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56403 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56404 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56406 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56407 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56408 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56409 : END DO
56410 : buffer2 = 0.0_dp
56411 : imax = 5*15*10
56412 : kmax = 6
56413 : DO i = 1, imax
56414 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
56415 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56416 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56417 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56418 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
56419 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56420 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56421 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
56422 : END DO
56423 : buffer1 = 0.0_dp
56424 : imax = 5*5*10
56425 : kmax = 15
56426 : DO i = 1, imax
56427 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
56428 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
56429 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
56430 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
56431 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
56432 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
56433 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
56434 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
56435 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
56436 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
56437 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
56438 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
56439 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
56440 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
56441 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
56442 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
56443 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
56444 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
56445 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
56446 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
56447 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
56448 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
56449 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
56450 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
56451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
56452 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
56453 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
56454 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
56455 : END DO
56456 : imax = 5*5*9
56457 : kmax = 10
56458 : i = 0
56459 : DO i1 = 1, 9
56460 : DO i2 = 1, 5
56461 : DO i3 = 1, 5
56462 : i = i + 1
56463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56465 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
56466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56468 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
56469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
56471 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
56472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56474 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
56475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56477 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
56478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
56479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
56480 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
56481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56483 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
56484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56486 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
56487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
56489 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
56490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56492 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
56493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
56495 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
56496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56498 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
56499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56501 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
56502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
56503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
56504 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
56505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56507 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
56508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56510 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
56511 : END DO
56512 : END DO
56513 : END DO
56514 : s_offset_d1 = s_offset_d1 + 7
56515 : END DO
56516 : s_offset_c1 = s_offset_c1 + 9
56517 : END DO
56518 : s_offset_b1 = s_offset_b1 + 5
56519 : END DO
56520 : s_offset_a1 = s_offset_a1 + 5
56521 : END DO
56522 : END SUBROUTINE contract_ddgf
56523 : #endif
56524 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
56525 : ! **************************************************************************************************
56526 : !> \brief ...
56527 : !> \param work ...
56528 : !> \param nl_a ...
56529 : !> \param nl_b ...
56530 : !> \param nl_c ...
56531 : !> \param nl_d ...
56532 : !> \param sphi_a ...
56533 : !> \param sphi_b ...
56534 : !> \param sphi_c ...
56535 : !> \param sphi_d ...
56536 : !> \param primitives ...
56537 : !> \param buffer1 ...
56538 : !> \param buffer2 ...
56539 : ! **************************************************************************************************
56540 : SUBROUTINE contract_ddgg(work, &
56541 : nl_a, nl_b, nl_c, nl_d, &
56542 : sphi_a, sphi_b, sphi_c, sphi_d, &
56543 : primitives, &
56544 : buffer1, buffer2)
56545 : REAL(dp), DIMENSION(6*6*15*15), INTENT(IN) :: work
56546 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56547 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56548 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
56549 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
56550 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
56551 : REAL(dp), &
56552 : DIMENSION(5*nl_a, 5*nl_b, 9*nl_c, 9*nl_d) :: primitives
56553 : REAL(dp), DIMENSION(6*6*15*15) :: buffer1, buffer2
56554 :
56555 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56556 : kmax, s_offset_a1, s_offset_b1, &
56557 : s_offset_c1, s_offset_d1
56558 :
56559 : s_offset_a1 = 0
56560 : DO ia = 1, nl_a
56561 : s_offset_b1 = 0
56562 : DO ib = 1, nl_b
56563 : s_offset_c1 = 0
56564 : DO ic = 1, nl_c
56565 : s_offset_d1 = 0
56566 : DO id = 1, nl_d
56567 : buffer1 = 0.0_dp
56568 : imax = 6*15*15
56569 : kmax = 6
56570 : DO i = 1, imax
56571 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56573 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56574 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56575 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56576 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56577 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56578 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56579 : END DO
56580 : buffer2 = 0.0_dp
56581 : imax = 5*15*15
56582 : kmax = 6
56583 : DO i = 1, imax
56584 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
56585 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56586 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56587 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56588 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
56589 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56590 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56591 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
56592 : END DO
56593 : buffer1 = 0.0_dp
56594 : imax = 5*5*15
56595 : kmax = 15
56596 : DO i = 1, imax
56597 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
56598 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
56599 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
56600 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
56601 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
56602 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
56603 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
56604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
56605 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
56606 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
56607 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
56608 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
56609 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
56610 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
56611 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
56612 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
56613 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
56614 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
56615 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
56616 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
56617 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
56618 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
56619 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
56620 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
56621 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
56622 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
56623 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
56624 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
56625 : END DO
56626 : imax = 5*5*9
56627 : kmax = 15
56628 : i = 0
56629 : DO i1 = 1, 9
56630 : DO i2 = 1, 5
56631 : DO i3 = 1, 5
56632 : i = i + 1
56633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56635 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
56636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56638 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
56639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
56640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
56641 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
56642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
56644 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
56645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56647 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
56648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
56649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
56650 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
56651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
56652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
56653 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
56654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56656 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
56657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
56658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
56659 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
56660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
56662 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
56663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56665 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
56666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56668 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
56669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56671 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
56672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
56674 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
56675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56677 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
56678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
56679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
56680 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
56681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
56682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
56683 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
56684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
56686 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
56687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
56688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
56689 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
56690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56692 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
56693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56695 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
56696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
56697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
56698 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
56699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
56701 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
56702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56704 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
56705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56707 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
56708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
56709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
56710 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
56711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
56712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
56713 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
56714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
56715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
56716 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
56717 : END DO
56718 : END DO
56719 : END DO
56720 : s_offset_d1 = s_offset_d1 + 9
56721 : END DO
56722 : s_offset_c1 = s_offset_c1 + 9
56723 : END DO
56724 : s_offset_b1 = s_offset_b1 + 5
56725 : END DO
56726 : s_offset_a1 = s_offset_a1 + 5
56727 : END DO
56728 : END SUBROUTINE contract_ddgg
56729 : #endif
56730 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
56731 : ! **************************************************************************************************
56732 : !> \brief ...
56733 : !> \param work ...
56734 : !> \param nl_a ...
56735 : !> \param nl_b ...
56736 : !> \param nl_c ...
56737 : !> \param nl_d ...
56738 : !> \param sphi_a ...
56739 : !> \param sphi_b ...
56740 : !> \param sphi_c ...
56741 : !> \param sphi_d ...
56742 : !> \param primitives ...
56743 : !> \param buffer1 ...
56744 : !> \param buffer2 ...
56745 : ! **************************************************************************************************
56746 : SUBROUTINE contract_dfss(work, &
56747 : nl_a, nl_b, nl_c, nl_d, &
56748 : sphi_a, sphi_b, sphi_c, sphi_d, &
56749 : primitives, &
56750 : buffer1, buffer2)
56751 : REAL(dp), DIMENSION(6*10*1*1), INTENT(IN) :: work
56752 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56753 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56754 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
56755 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
56756 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
56757 : REAL(dp), &
56758 : DIMENSION(5*nl_a, 7*nl_b, 1*nl_c, 1*nl_d) :: primitives
56759 : REAL(dp), DIMENSION(6*10*1*1) :: buffer1, buffer2
56760 :
56761 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56762 : kmax, s_offset_a1, s_offset_b1, &
56763 : s_offset_c1, s_offset_d1
56764 :
56765 : s_offset_a1 = 0
56766 : DO ia = 1, nl_a
56767 : s_offset_b1 = 0
56768 : DO ib = 1, nl_b
56769 : s_offset_c1 = 0
56770 : DO ic = 1, nl_c
56771 : s_offset_d1 = 0
56772 : DO id = 1, nl_d
56773 : buffer1 = 0.0_dp
56774 : imax = 10*1*1
56775 : kmax = 6
56776 : DO i = 1, imax
56777 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56778 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56779 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56780 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56783 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56784 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56785 : END DO
56786 : buffer2 = 0.0_dp
56787 : imax = 5*1*1
56788 : kmax = 10
56789 : DO i = 1, imax
56790 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56791 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
56792 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56793 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
56794 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56795 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
56796 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56797 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
56798 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56799 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
56800 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
56801 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
56802 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
56803 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
56804 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
56805 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
56806 : END DO
56807 : buffer1 = 0.0_dp
56808 : imax = 5*7*1
56809 : kmax = 1
56810 : DO i = 1, imax
56811 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
56812 : END DO
56813 : imax = 5*7*1
56814 : kmax = 1
56815 : i = 0
56816 : DO i1 = 1, 1
56817 : DO i2 = 1, 7
56818 : DO i3 = 1, 5
56819 : i = i + 1
56820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
56822 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
56823 : END DO
56824 : END DO
56825 : END DO
56826 : s_offset_d1 = s_offset_d1 + 1
56827 : END DO
56828 : s_offset_c1 = s_offset_c1 + 1
56829 : END DO
56830 : s_offset_b1 = s_offset_b1 + 7
56831 : END DO
56832 : s_offset_a1 = s_offset_a1 + 5
56833 : END DO
56834 : END SUBROUTINE contract_dfss
56835 : #endif
56836 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
56837 : ! **************************************************************************************************
56838 : !> \brief ...
56839 : !> \param work ...
56840 : !> \param nl_a ...
56841 : !> \param nl_b ...
56842 : !> \param nl_c ...
56843 : !> \param nl_d ...
56844 : !> \param sphi_a ...
56845 : !> \param sphi_b ...
56846 : !> \param sphi_c ...
56847 : !> \param sphi_d ...
56848 : !> \param primitives ...
56849 : !> \param buffer1 ...
56850 : !> \param buffer2 ...
56851 : ! **************************************************************************************************
56852 : SUBROUTINE contract_dfsp(work, &
56853 : nl_a, nl_b, nl_c, nl_d, &
56854 : sphi_a, sphi_b, sphi_c, sphi_d, &
56855 : primitives, &
56856 : buffer1, buffer2)
56857 : REAL(dp), DIMENSION(6*10*1*3), INTENT(IN) :: work
56858 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56859 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56860 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
56861 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
56862 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
56863 : REAL(dp), &
56864 : DIMENSION(5*nl_a, 7*nl_b, 1*nl_c, 3*nl_d) :: primitives
56865 : REAL(dp), DIMENSION(6*10*1*3) :: buffer1, buffer2
56866 :
56867 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56868 : kmax, s_offset_a1, s_offset_b1, &
56869 : s_offset_c1, s_offset_d1
56870 :
56871 : s_offset_a1 = 0
56872 : DO ia = 1, nl_a
56873 : s_offset_b1 = 0
56874 : DO ib = 1, nl_b
56875 : s_offset_c1 = 0
56876 : DO ic = 1, nl_c
56877 : s_offset_d1 = 0
56878 : DO id = 1, nl_d
56879 : buffer1 = 0.0_dp
56880 : imax = 10*1*3
56881 : kmax = 6
56882 : DO i = 1, imax
56883 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56884 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56885 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56886 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56887 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
56888 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
56889 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
56890 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
56891 : END DO
56892 : buffer2 = 0.0_dp
56893 : imax = 5*1*3
56894 : kmax = 10
56895 : DO i = 1, imax
56896 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
56897 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
56898 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
56899 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
56900 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
56901 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
56902 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
56903 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
56904 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
56905 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
56906 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
56907 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
56908 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
56909 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
56910 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
56911 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
56912 : END DO
56913 : buffer1 = 0.0_dp
56914 : imax = 5*7*3
56915 : kmax = 1
56916 : DO i = 1, imax
56917 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
56918 : END DO
56919 : imax = 5*7*1
56920 : kmax = 3
56921 : i = 0
56922 : DO i1 = 1, 1
56923 : DO i2 = 1, 7
56924 : DO i3 = 1, 5
56925 : i = i + 1
56926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
56927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
56928 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
56929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
56930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
56931 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
56932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
56933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
56934 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
56935 : END DO
56936 : END DO
56937 : END DO
56938 : s_offset_d1 = s_offset_d1 + 3
56939 : END DO
56940 : s_offset_c1 = s_offset_c1 + 1
56941 : END DO
56942 : s_offset_b1 = s_offset_b1 + 7
56943 : END DO
56944 : s_offset_a1 = s_offset_a1 + 5
56945 : END DO
56946 : END SUBROUTINE contract_dfsp
56947 : #endif
56948 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
56949 : ! **************************************************************************************************
56950 : !> \brief ...
56951 : !> \param work ...
56952 : !> \param nl_a ...
56953 : !> \param nl_b ...
56954 : !> \param nl_c ...
56955 : !> \param nl_d ...
56956 : !> \param sphi_a ...
56957 : !> \param sphi_b ...
56958 : !> \param sphi_c ...
56959 : !> \param sphi_d ...
56960 : !> \param primitives ...
56961 : !> \param buffer1 ...
56962 : !> \param buffer2 ...
56963 : ! **************************************************************************************************
56964 : SUBROUTINE contract_dfsd(work, &
56965 : nl_a, nl_b, nl_c, nl_d, &
56966 : sphi_a, sphi_b, sphi_c, sphi_d, &
56967 : primitives, &
56968 : buffer1, buffer2)
56969 : REAL(dp), DIMENSION(6*10*1*6), INTENT(IN) :: work
56970 : INTEGER :: nl_a, nl_b, nl_c, nl_d
56971 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
56972 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
56973 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
56974 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
56975 : REAL(dp), &
56976 : DIMENSION(5*nl_a, 7*nl_b, 1*nl_c, 5*nl_d) :: primitives
56977 : REAL(dp), DIMENSION(6*10*1*6) :: buffer1, buffer2
56978 :
56979 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
56980 : kmax, s_offset_a1, s_offset_b1, &
56981 : s_offset_c1, s_offset_d1
56982 :
56983 : s_offset_a1 = 0
56984 : DO ia = 1, nl_a
56985 : s_offset_b1 = 0
56986 : DO ib = 1, nl_b
56987 : s_offset_c1 = 0
56988 : DO ic = 1, nl_c
56989 : s_offset_d1 = 0
56990 : DO id = 1, nl_d
56991 : buffer1 = 0.0_dp
56992 : imax = 10*1*6
56993 : kmax = 6
56994 : DO i = 1, imax
56995 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
56996 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
56997 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
56998 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
56999 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57000 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57001 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57002 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57003 : END DO
57004 : buffer2 = 0.0_dp
57005 : imax = 5*1*6
57006 : kmax = 10
57007 : DO i = 1, imax
57008 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57009 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57010 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57011 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57012 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57013 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57014 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57015 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57016 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57017 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57018 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57019 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57020 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57021 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57022 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57023 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57024 : END DO
57025 : buffer1 = 0.0_dp
57026 : imax = 5*7*6
57027 : kmax = 1
57028 : DO i = 1, imax
57029 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
57030 : END DO
57031 : imax = 5*7*1
57032 : kmax = 6
57033 : i = 0
57034 : DO i1 = 1, 1
57035 : DO i2 = 1, 7
57036 : DO i3 = 1, 5
57037 : i = i + 1
57038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57040 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
57041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57043 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
57044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57046 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57049 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
57050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57052 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
57053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57055 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
57056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57058 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
57059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57061 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
57062 : END DO
57063 : END DO
57064 : END DO
57065 : s_offset_d1 = s_offset_d1 + 5
57066 : END DO
57067 : s_offset_c1 = s_offset_c1 + 1
57068 : END DO
57069 : s_offset_b1 = s_offset_b1 + 7
57070 : END DO
57071 : s_offset_a1 = s_offset_a1 + 5
57072 : END DO
57073 : END SUBROUTINE contract_dfsd
57074 : #endif
57075 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
57076 : ! **************************************************************************************************
57077 : !> \brief ...
57078 : !> \param work ...
57079 : !> \param nl_a ...
57080 : !> \param nl_b ...
57081 : !> \param nl_c ...
57082 : !> \param nl_d ...
57083 : !> \param sphi_a ...
57084 : !> \param sphi_b ...
57085 : !> \param sphi_c ...
57086 : !> \param sphi_d ...
57087 : !> \param primitives ...
57088 : !> \param buffer1 ...
57089 : !> \param buffer2 ...
57090 : ! **************************************************************************************************
57091 : SUBROUTINE contract_dfsf(work, &
57092 : nl_a, nl_b, nl_c, nl_d, &
57093 : sphi_a, sphi_b, sphi_c, sphi_d, &
57094 : primitives, &
57095 : buffer1, buffer2)
57096 : REAL(dp), DIMENSION(6*10*1*10), INTENT(IN) :: work
57097 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57098 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57099 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57100 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
57101 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
57102 : REAL(dp), &
57103 : DIMENSION(5*nl_a, 7*nl_b, 1*nl_c, 7*nl_d) :: primitives
57104 : REAL(dp), DIMENSION(6*10*1*10) :: buffer1, buffer2
57105 :
57106 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57107 : kmax, s_offset_a1, s_offset_b1, &
57108 : s_offset_c1, s_offset_d1
57109 :
57110 : s_offset_a1 = 0
57111 : DO ia = 1, nl_a
57112 : s_offset_b1 = 0
57113 : DO ib = 1, nl_b
57114 : s_offset_c1 = 0
57115 : DO ic = 1, nl_c
57116 : s_offset_d1 = 0
57117 : DO id = 1, nl_d
57118 : buffer1 = 0.0_dp
57119 : imax = 10*1*10
57120 : kmax = 6
57121 : DO i = 1, imax
57122 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57123 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57124 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57125 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57126 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57127 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57128 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57129 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57130 : END DO
57131 : buffer2 = 0.0_dp
57132 : imax = 5*1*10
57133 : kmax = 10
57134 : DO i = 1, imax
57135 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57136 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57137 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57138 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57139 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57140 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57141 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57142 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57143 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57144 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57145 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57146 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57147 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57148 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57149 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57150 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57151 : END DO
57152 : buffer1 = 0.0_dp
57153 : imax = 5*7*10
57154 : kmax = 1
57155 : DO i = 1, imax
57156 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
57157 : END DO
57158 : imax = 5*7*1
57159 : kmax = 10
57160 : i = 0
57161 : DO i1 = 1, 1
57162 : DO i2 = 1, 7
57163 : DO i3 = 1, 5
57164 : i = i + 1
57165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57167 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
57168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57170 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
57171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57173 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57176 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
57177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57179 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
57180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57182 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
57183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57185 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
57186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57188 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
57189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57191 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
57192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57194 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
57195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57197 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
57198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57200 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
57201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57203 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
57204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57206 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
57207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57209 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
57210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57212 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
57213 : END DO
57214 : END DO
57215 : END DO
57216 : s_offset_d1 = s_offset_d1 + 7
57217 : END DO
57218 : s_offset_c1 = s_offset_c1 + 1
57219 : END DO
57220 : s_offset_b1 = s_offset_b1 + 7
57221 : END DO
57222 : s_offset_a1 = s_offset_a1 + 5
57223 : END DO
57224 : END SUBROUTINE contract_dfsf
57225 : #endif
57226 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
57227 : ! **************************************************************************************************
57228 : !> \brief ...
57229 : !> \param work ...
57230 : !> \param nl_a ...
57231 : !> \param nl_b ...
57232 : !> \param nl_c ...
57233 : !> \param nl_d ...
57234 : !> \param sphi_a ...
57235 : !> \param sphi_b ...
57236 : !> \param sphi_c ...
57237 : !> \param sphi_d ...
57238 : !> \param primitives ...
57239 : !> \param buffer1 ...
57240 : !> \param buffer2 ...
57241 : ! **************************************************************************************************
57242 : SUBROUTINE contract_dfsg(work, &
57243 : nl_a, nl_b, nl_c, nl_d, &
57244 : sphi_a, sphi_b, sphi_c, sphi_d, &
57245 : primitives, &
57246 : buffer1, buffer2)
57247 : REAL(dp), DIMENSION(6*10*1*15), INTENT(IN) :: work
57248 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57249 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57250 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57251 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
57252 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
57253 : REAL(dp), &
57254 : DIMENSION(5*nl_a, 7*nl_b, 1*nl_c, 9*nl_d) :: primitives
57255 : REAL(dp), DIMENSION(6*10*1*15) :: buffer1, buffer2
57256 :
57257 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57258 : kmax, s_offset_a1, s_offset_b1, &
57259 : s_offset_c1, s_offset_d1
57260 :
57261 : s_offset_a1 = 0
57262 : DO ia = 1, nl_a
57263 : s_offset_b1 = 0
57264 : DO ib = 1, nl_b
57265 : s_offset_c1 = 0
57266 : DO ic = 1, nl_c
57267 : s_offset_d1 = 0
57268 : DO id = 1, nl_d
57269 : buffer1 = 0.0_dp
57270 : imax = 10*1*15
57271 : kmax = 6
57272 : DO i = 1, imax
57273 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57274 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57275 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57276 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57277 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57278 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57279 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57280 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57281 : END DO
57282 : buffer2 = 0.0_dp
57283 : imax = 5*1*15
57284 : kmax = 10
57285 : DO i = 1, imax
57286 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57287 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57288 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57289 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57290 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57291 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57292 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57293 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57294 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57296 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57297 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57298 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57299 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57300 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57301 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57302 : END DO
57303 : buffer1 = 0.0_dp
57304 : imax = 5*7*15
57305 : kmax = 1
57306 : DO i = 1, imax
57307 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
57308 : END DO
57309 : imax = 5*7*1
57310 : kmax = 15
57311 : i = 0
57312 : DO i1 = 1, 1
57313 : DO i2 = 1, 7
57314 : DO i3 = 1, 5
57315 : i = i + 1
57316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57318 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
57319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57321 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
57322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
57323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
57324 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
57325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57327 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57330 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
57331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57333 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
57334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
57335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
57336 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
57337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57339 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
57340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
57341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
57342 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
57343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57345 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
57346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57348 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
57349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57351 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
57352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57354 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
57355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57357 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
57358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57360 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
57361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57363 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
57364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
57365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
57366 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
57367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57369 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
57370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57372 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
57373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57375 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
57376 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57378 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
57379 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
57380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
57381 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
57382 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57384 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
57385 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57387 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
57388 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57390 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
57391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57393 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
57394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57396 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
57397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57399 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
57400 : END DO
57401 : END DO
57402 : END DO
57403 : s_offset_d1 = s_offset_d1 + 9
57404 : END DO
57405 : s_offset_c1 = s_offset_c1 + 1
57406 : END DO
57407 : s_offset_b1 = s_offset_b1 + 7
57408 : END DO
57409 : s_offset_a1 = s_offset_a1 + 5
57410 : END DO
57411 : END SUBROUTINE contract_dfsg
57412 : #endif
57413 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
57414 : ! **************************************************************************************************
57415 : !> \brief ...
57416 : !> \param work ...
57417 : !> \param nl_a ...
57418 : !> \param nl_b ...
57419 : !> \param nl_c ...
57420 : !> \param nl_d ...
57421 : !> \param sphi_a ...
57422 : !> \param sphi_b ...
57423 : !> \param sphi_c ...
57424 : !> \param sphi_d ...
57425 : !> \param primitives ...
57426 : !> \param buffer1 ...
57427 : !> \param buffer2 ...
57428 : ! **************************************************************************************************
57429 : SUBROUTINE contract_dfps(work, &
57430 : nl_a, nl_b, nl_c, nl_d, &
57431 : sphi_a, sphi_b, sphi_c, sphi_d, &
57432 : primitives, &
57433 : buffer1, buffer2)
57434 : REAL(dp), DIMENSION(6*10*3*1), INTENT(IN) :: work
57435 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57436 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57437 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57438 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
57439 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
57440 : REAL(dp), &
57441 : DIMENSION(5*nl_a, 7*nl_b, 3*nl_c, 1*nl_d) :: primitives
57442 : REAL(dp), DIMENSION(6*10*3*1) :: buffer1, buffer2
57443 :
57444 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57445 : kmax, s_offset_a1, s_offset_b1, &
57446 : s_offset_c1, s_offset_d1
57447 :
57448 : s_offset_a1 = 0
57449 : DO ia = 1, nl_a
57450 : s_offset_b1 = 0
57451 : DO ib = 1, nl_b
57452 : s_offset_c1 = 0
57453 : DO ic = 1, nl_c
57454 : s_offset_d1 = 0
57455 : DO id = 1, nl_d
57456 : buffer1 = 0.0_dp
57457 : imax = 10*3*1
57458 : kmax = 6
57459 : DO i = 1, imax
57460 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57461 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57462 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57463 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57464 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57465 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57466 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57467 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57468 : END DO
57469 : buffer2 = 0.0_dp
57470 : imax = 5*3*1
57471 : kmax = 10
57472 : DO i = 1, imax
57473 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57474 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57475 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57476 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57477 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57478 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57479 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57480 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57481 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57482 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57483 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57484 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57485 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57486 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57487 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57488 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57489 : END DO
57490 : buffer1 = 0.0_dp
57491 : imax = 5*7*1
57492 : kmax = 3
57493 : DO i = 1, imax
57494 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
57495 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
57496 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
57497 : END DO
57498 : imax = 5*7*3
57499 : kmax = 1
57500 : i = 0
57501 : DO i1 = 1, 3
57502 : DO i2 = 1, 7
57503 : DO i3 = 1, 5
57504 : i = i + 1
57505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
57507 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
57508 : END DO
57509 : END DO
57510 : END DO
57511 : s_offset_d1 = s_offset_d1 + 1
57512 : END DO
57513 : s_offset_c1 = s_offset_c1 + 3
57514 : END DO
57515 : s_offset_b1 = s_offset_b1 + 7
57516 : END DO
57517 : s_offset_a1 = s_offset_a1 + 5
57518 : END DO
57519 : END SUBROUTINE contract_dfps
57520 : #endif
57521 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
57522 : ! **************************************************************************************************
57523 : !> \brief ...
57524 : !> \param work ...
57525 : !> \param nl_a ...
57526 : !> \param nl_b ...
57527 : !> \param nl_c ...
57528 : !> \param nl_d ...
57529 : !> \param sphi_a ...
57530 : !> \param sphi_b ...
57531 : !> \param sphi_c ...
57532 : !> \param sphi_d ...
57533 : !> \param primitives ...
57534 : !> \param buffer1 ...
57535 : !> \param buffer2 ...
57536 : ! **************************************************************************************************
57537 : SUBROUTINE contract_dfpp(work, &
57538 : nl_a, nl_b, nl_c, nl_d, &
57539 : sphi_a, sphi_b, sphi_c, sphi_d, &
57540 : primitives, &
57541 : buffer1, buffer2)
57542 : REAL(dp), DIMENSION(6*10*3*3), INTENT(IN) :: work
57543 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57544 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57545 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57546 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
57547 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
57548 : REAL(dp), &
57549 : DIMENSION(5*nl_a, 7*nl_b, 3*nl_c, 3*nl_d) :: primitives
57550 : REAL(dp), DIMENSION(6*10*3*3) :: buffer1, buffer2
57551 :
57552 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57553 : kmax, s_offset_a1, s_offset_b1, &
57554 : s_offset_c1, s_offset_d1
57555 :
57556 : s_offset_a1 = 0
57557 : DO ia = 1, nl_a
57558 : s_offset_b1 = 0
57559 : DO ib = 1, nl_b
57560 : s_offset_c1 = 0
57561 : DO ic = 1, nl_c
57562 : s_offset_d1 = 0
57563 : DO id = 1, nl_d
57564 : buffer1 = 0.0_dp
57565 : imax = 10*3*3
57566 : kmax = 6
57567 : DO i = 1, imax
57568 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57570 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57571 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57572 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57573 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57574 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57575 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57576 : END DO
57577 : buffer2 = 0.0_dp
57578 : imax = 5*3*3
57579 : kmax = 10
57580 : DO i = 1, imax
57581 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57582 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57583 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57584 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57585 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57586 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57587 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57588 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57589 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57590 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57591 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57592 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57593 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57594 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57595 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57596 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57597 : END DO
57598 : buffer1 = 0.0_dp
57599 : imax = 5*7*3
57600 : kmax = 3
57601 : DO i = 1, imax
57602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
57603 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
57604 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
57605 : END DO
57606 : imax = 5*7*3
57607 : kmax = 3
57608 : i = 0
57609 : DO i1 = 1, 3
57610 : DO i2 = 1, 7
57611 : DO i3 = 1, 5
57612 : i = i + 1
57613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
57615 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
57616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
57618 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
57621 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
57622 : END DO
57623 : END DO
57624 : END DO
57625 : s_offset_d1 = s_offset_d1 + 3
57626 : END DO
57627 : s_offset_c1 = s_offset_c1 + 3
57628 : END DO
57629 : s_offset_b1 = s_offset_b1 + 7
57630 : END DO
57631 : s_offset_a1 = s_offset_a1 + 5
57632 : END DO
57633 : END SUBROUTINE contract_dfpp
57634 : #endif
57635 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
57636 : ! **************************************************************************************************
57637 : !> \brief ...
57638 : !> \param work ...
57639 : !> \param nl_a ...
57640 : !> \param nl_b ...
57641 : !> \param nl_c ...
57642 : !> \param nl_d ...
57643 : !> \param sphi_a ...
57644 : !> \param sphi_b ...
57645 : !> \param sphi_c ...
57646 : !> \param sphi_d ...
57647 : !> \param primitives ...
57648 : !> \param buffer1 ...
57649 : !> \param buffer2 ...
57650 : ! **************************************************************************************************
57651 : SUBROUTINE contract_dfpd(work, &
57652 : nl_a, nl_b, nl_c, nl_d, &
57653 : sphi_a, sphi_b, sphi_c, sphi_d, &
57654 : primitives, &
57655 : buffer1, buffer2)
57656 : REAL(dp), DIMENSION(6*10*3*6), INTENT(IN) :: work
57657 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57658 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57659 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57660 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
57661 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
57662 : REAL(dp), &
57663 : DIMENSION(5*nl_a, 7*nl_b, 3*nl_c, 5*nl_d) :: primitives
57664 : REAL(dp), DIMENSION(6*10*3*6) :: buffer1, buffer2
57665 :
57666 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57667 : kmax, s_offset_a1, s_offset_b1, &
57668 : s_offset_c1, s_offset_d1
57669 :
57670 : s_offset_a1 = 0
57671 : DO ia = 1, nl_a
57672 : s_offset_b1 = 0
57673 : DO ib = 1, nl_b
57674 : s_offset_c1 = 0
57675 : DO ic = 1, nl_c
57676 : s_offset_d1 = 0
57677 : DO id = 1, nl_d
57678 : buffer1 = 0.0_dp
57679 : imax = 10*3*6
57680 : kmax = 6
57681 : DO i = 1, imax
57682 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57683 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57684 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57685 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57686 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57687 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57688 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57689 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57690 : END DO
57691 : buffer2 = 0.0_dp
57692 : imax = 5*3*6
57693 : kmax = 10
57694 : DO i = 1, imax
57695 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57696 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57697 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57698 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57699 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57700 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57701 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57702 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57703 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57704 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57705 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57706 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57707 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57708 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57709 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57710 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57711 : END DO
57712 : buffer1 = 0.0_dp
57713 : imax = 5*7*6
57714 : kmax = 3
57715 : DO i = 1, imax
57716 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
57717 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
57718 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
57719 : END DO
57720 : imax = 5*7*3
57721 : kmax = 6
57722 : i = 0
57723 : DO i1 = 1, 3
57724 : DO i2 = 1, 7
57725 : DO i3 = 1, 5
57726 : i = i + 1
57727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57729 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
57730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57732 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
57733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57735 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57738 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
57739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57741 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
57742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57744 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
57745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57747 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
57748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57750 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
57751 : END DO
57752 : END DO
57753 : END DO
57754 : s_offset_d1 = s_offset_d1 + 5
57755 : END DO
57756 : s_offset_c1 = s_offset_c1 + 3
57757 : END DO
57758 : s_offset_b1 = s_offset_b1 + 7
57759 : END DO
57760 : s_offset_a1 = s_offset_a1 + 5
57761 : END DO
57762 : END SUBROUTINE contract_dfpd
57763 : #endif
57764 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
57765 : ! **************************************************************************************************
57766 : !> \brief ...
57767 : !> \param work ...
57768 : !> \param nl_a ...
57769 : !> \param nl_b ...
57770 : !> \param nl_c ...
57771 : !> \param nl_d ...
57772 : !> \param sphi_a ...
57773 : !> \param sphi_b ...
57774 : !> \param sphi_c ...
57775 : !> \param sphi_d ...
57776 : !> \param primitives ...
57777 : !> \param buffer1 ...
57778 : !> \param buffer2 ...
57779 : ! **************************************************************************************************
57780 : SUBROUTINE contract_dfpf(work, &
57781 : nl_a, nl_b, nl_c, nl_d, &
57782 : sphi_a, sphi_b, sphi_c, sphi_d, &
57783 : primitives, &
57784 : buffer1, buffer2)
57785 : REAL(dp), DIMENSION(6*10*3*10), INTENT(IN) :: work
57786 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57787 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57788 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57789 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
57790 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
57791 : REAL(dp), &
57792 : DIMENSION(5*nl_a, 7*nl_b, 3*nl_c, 7*nl_d) :: primitives
57793 : REAL(dp), DIMENSION(6*10*3*10) :: buffer1, buffer2
57794 :
57795 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57796 : kmax, s_offset_a1, s_offset_b1, &
57797 : s_offset_c1, s_offset_d1
57798 :
57799 : s_offset_a1 = 0
57800 : DO ia = 1, nl_a
57801 : s_offset_b1 = 0
57802 : DO ib = 1, nl_b
57803 : s_offset_c1 = 0
57804 : DO ic = 1, nl_c
57805 : s_offset_d1 = 0
57806 : DO id = 1, nl_d
57807 : buffer1 = 0.0_dp
57808 : imax = 10*3*10
57809 : kmax = 6
57810 : DO i = 1, imax
57811 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57812 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57813 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57815 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57816 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57817 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57818 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57819 : END DO
57820 : buffer2 = 0.0_dp
57821 : imax = 5*3*10
57822 : kmax = 10
57823 : DO i = 1, imax
57824 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57825 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57826 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57827 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57828 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57829 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57830 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57831 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57832 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57833 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57834 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57835 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57836 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57837 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57838 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57839 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57840 : END DO
57841 : buffer1 = 0.0_dp
57842 : imax = 5*7*10
57843 : kmax = 3
57844 : DO i = 1, imax
57845 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
57846 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
57847 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
57848 : END DO
57849 : imax = 5*7*3
57850 : kmax = 10
57851 : i = 0
57852 : DO i1 = 1, 3
57853 : DO i2 = 1, 7
57854 : DO i3 = 1, 5
57855 : i = i + 1
57856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57858 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
57859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57861 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
57862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57864 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
57865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57867 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
57868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57870 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
57871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57873 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
57874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57876 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
57877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
57878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
57879 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
57880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
57881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
57882 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
57883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
57884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
57885 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
57886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
57887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
57888 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
57889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57891 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
57892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57894 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
57895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
57896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
57897 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
57898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
57899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
57900 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
57901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
57902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
57903 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
57904 : END DO
57905 : END DO
57906 : END DO
57907 : s_offset_d1 = s_offset_d1 + 7
57908 : END DO
57909 : s_offset_c1 = s_offset_c1 + 3
57910 : END DO
57911 : s_offset_b1 = s_offset_b1 + 7
57912 : END DO
57913 : s_offset_a1 = s_offset_a1 + 5
57914 : END DO
57915 : END SUBROUTINE contract_dfpf
57916 : #endif
57917 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
57918 : ! **************************************************************************************************
57919 : !> \brief ...
57920 : !> \param work ...
57921 : !> \param nl_a ...
57922 : !> \param nl_b ...
57923 : !> \param nl_c ...
57924 : !> \param nl_d ...
57925 : !> \param sphi_a ...
57926 : !> \param sphi_b ...
57927 : !> \param sphi_c ...
57928 : !> \param sphi_d ...
57929 : !> \param primitives ...
57930 : !> \param buffer1 ...
57931 : !> \param buffer2 ...
57932 : ! **************************************************************************************************
57933 : SUBROUTINE contract_dfpg(work, &
57934 : nl_a, nl_b, nl_c, nl_d, &
57935 : sphi_a, sphi_b, sphi_c, sphi_d, &
57936 : primitives, &
57937 : buffer1, buffer2)
57938 : REAL(dp), DIMENSION(6*10*3*15), INTENT(IN) :: work
57939 : INTEGER :: nl_a, nl_b, nl_c, nl_d
57940 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
57941 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
57942 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
57943 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
57944 : REAL(dp), &
57945 : DIMENSION(5*nl_a, 7*nl_b, 3*nl_c, 9*nl_d) :: primitives
57946 : REAL(dp), DIMENSION(6*10*3*15) :: buffer1, buffer2
57947 :
57948 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
57949 : kmax, s_offset_a1, s_offset_b1, &
57950 : s_offset_c1, s_offset_d1
57951 :
57952 : s_offset_a1 = 0
57953 : DO ia = 1, nl_a
57954 : s_offset_b1 = 0
57955 : DO ib = 1, nl_b
57956 : s_offset_c1 = 0
57957 : DO ic = 1, nl_c
57958 : s_offset_d1 = 0
57959 : DO id = 1, nl_d
57960 : buffer1 = 0.0_dp
57961 : imax = 10*3*15
57962 : kmax = 6
57963 : DO i = 1, imax
57964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
57965 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
57966 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
57967 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
57968 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
57969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
57970 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
57971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
57972 : END DO
57973 : buffer2 = 0.0_dp
57974 : imax = 5*3*15
57975 : kmax = 10
57976 : DO i = 1, imax
57977 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
57978 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
57979 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
57980 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
57981 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
57982 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
57983 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
57984 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
57985 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
57986 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
57987 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
57988 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
57989 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
57990 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
57991 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
57992 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
57993 : END DO
57994 : buffer1 = 0.0_dp
57995 : imax = 5*7*15
57996 : kmax = 3
57997 : DO i = 1, imax
57998 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
57999 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58000 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
58001 : END DO
58002 : imax = 5*7*3
58003 : kmax = 15
58004 : i = 0
58005 : DO i1 = 1, 3
58006 : DO i2 = 1, 7
58007 : DO i3 = 1, 5
58008 : i = i + 1
58009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58011 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
58012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58014 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
58015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58017 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
58018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58020 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
58021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58023 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
58024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58026 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
58027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
58028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
58029 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
58030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58032 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
58033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58035 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
58036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58038 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
58039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58041 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
58042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58044 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
58045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58047 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
58048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58050 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
58051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58053 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
58054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58056 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
58057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
58058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
58059 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
58060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58062 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
58063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58065 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
58066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58068 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
58069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58071 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
58072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58074 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
58075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58077 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
58078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58080 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
58081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58083 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
58084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58086 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
58087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58089 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
58090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58092 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
58093 : END DO
58094 : END DO
58095 : END DO
58096 : s_offset_d1 = s_offset_d1 + 9
58097 : END DO
58098 : s_offset_c1 = s_offset_c1 + 3
58099 : END DO
58100 : s_offset_b1 = s_offset_b1 + 7
58101 : END DO
58102 : s_offset_a1 = s_offset_a1 + 5
58103 : END DO
58104 : END SUBROUTINE contract_dfpg
58105 : #endif
58106 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58107 : ! **************************************************************************************************
58108 : !> \brief ...
58109 : !> \param work ...
58110 : !> \param nl_a ...
58111 : !> \param nl_b ...
58112 : !> \param nl_c ...
58113 : !> \param nl_d ...
58114 : !> \param sphi_a ...
58115 : !> \param sphi_b ...
58116 : !> \param sphi_c ...
58117 : !> \param sphi_d ...
58118 : !> \param primitives ...
58119 : !> \param buffer1 ...
58120 : !> \param buffer2 ...
58121 : ! **************************************************************************************************
58122 : SUBROUTINE contract_dfds(work, &
58123 : nl_a, nl_b, nl_c, nl_d, &
58124 : sphi_a, sphi_b, sphi_c, sphi_d, &
58125 : primitives, &
58126 : buffer1, buffer2)
58127 : REAL(dp), DIMENSION(6*10*6*1), INTENT(IN) :: work
58128 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58129 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58130 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58131 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
58132 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
58133 : REAL(dp), &
58134 : DIMENSION(5*nl_a, 7*nl_b, 5*nl_c, 1*nl_d) :: primitives
58135 : REAL(dp), DIMENSION(6*10*6*1) :: buffer1, buffer2
58136 :
58137 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58138 : kmax, s_offset_a1, s_offset_b1, &
58139 : s_offset_c1, s_offset_d1
58140 :
58141 : s_offset_a1 = 0
58142 : DO ia = 1, nl_a
58143 : s_offset_b1 = 0
58144 : DO ib = 1, nl_b
58145 : s_offset_c1 = 0
58146 : DO ic = 1, nl_c
58147 : s_offset_d1 = 0
58148 : DO id = 1, nl_d
58149 : buffer1 = 0.0_dp
58150 : imax = 10*6*1
58151 : kmax = 6
58152 : DO i = 1, imax
58153 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58154 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58155 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58156 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58157 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58158 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58159 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58160 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58161 : END DO
58162 : buffer2 = 0.0_dp
58163 : imax = 5*6*1
58164 : kmax = 10
58165 : DO i = 1, imax
58166 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58167 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58168 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58169 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58170 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58171 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58172 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58173 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58174 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58175 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58176 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58177 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58178 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58179 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58180 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58181 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58182 : END DO
58183 : buffer1 = 0.0_dp
58184 : imax = 5*7*1
58185 : kmax = 6
58186 : DO i = 1, imax
58187 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
58188 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58189 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58190 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58191 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
58192 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58193 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58194 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
58195 : END DO
58196 : imax = 5*7*5
58197 : kmax = 1
58198 : i = 0
58199 : DO i1 = 1, 5
58200 : DO i2 = 1, 7
58201 : DO i3 = 1, 5
58202 : i = i + 1
58203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
58205 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
58206 : END DO
58207 : END DO
58208 : END DO
58209 : s_offset_d1 = s_offset_d1 + 1
58210 : END DO
58211 : s_offset_c1 = s_offset_c1 + 5
58212 : END DO
58213 : s_offset_b1 = s_offset_b1 + 7
58214 : END DO
58215 : s_offset_a1 = s_offset_a1 + 5
58216 : END DO
58217 : END SUBROUTINE contract_dfds
58218 : #endif
58219 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58220 : ! **************************************************************************************************
58221 : !> \brief ...
58222 : !> \param work ...
58223 : !> \param nl_a ...
58224 : !> \param nl_b ...
58225 : !> \param nl_c ...
58226 : !> \param nl_d ...
58227 : !> \param sphi_a ...
58228 : !> \param sphi_b ...
58229 : !> \param sphi_c ...
58230 : !> \param sphi_d ...
58231 : !> \param primitives ...
58232 : !> \param buffer1 ...
58233 : !> \param buffer2 ...
58234 : ! **************************************************************************************************
58235 : SUBROUTINE contract_dfdp(work, &
58236 : nl_a, nl_b, nl_c, nl_d, &
58237 : sphi_a, sphi_b, sphi_c, sphi_d, &
58238 : primitives, &
58239 : buffer1, buffer2)
58240 : REAL(dp), DIMENSION(6*10*6*3), INTENT(IN) :: work
58241 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58242 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58243 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58244 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
58245 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
58246 : REAL(dp), &
58247 : DIMENSION(5*nl_a, 7*nl_b, 5*nl_c, 3*nl_d) :: primitives
58248 : REAL(dp), DIMENSION(6*10*6*3) :: buffer1, buffer2
58249 :
58250 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58251 : kmax, s_offset_a1, s_offset_b1, &
58252 : s_offset_c1, s_offset_d1
58253 :
58254 : s_offset_a1 = 0
58255 : DO ia = 1, nl_a
58256 : s_offset_b1 = 0
58257 : DO ib = 1, nl_b
58258 : s_offset_c1 = 0
58259 : DO ic = 1, nl_c
58260 : s_offset_d1 = 0
58261 : DO id = 1, nl_d
58262 : buffer1 = 0.0_dp
58263 : imax = 10*6*3
58264 : kmax = 6
58265 : DO i = 1, imax
58266 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58267 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58268 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58269 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58270 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58271 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58272 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58273 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58274 : END DO
58275 : buffer2 = 0.0_dp
58276 : imax = 5*6*3
58277 : kmax = 10
58278 : DO i = 1, imax
58279 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58280 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58281 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58282 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58283 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58284 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58285 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58286 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58287 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58288 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58289 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58290 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58291 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58292 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58293 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58294 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58295 : END DO
58296 : buffer1 = 0.0_dp
58297 : imax = 5*7*3
58298 : kmax = 6
58299 : DO i = 1, imax
58300 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
58301 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58302 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58303 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58304 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
58305 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58306 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58307 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
58308 : END DO
58309 : imax = 5*7*5
58310 : kmax = 3
58311 : i = 0
58312 : DO i1 = 1, 5
58313 : DO i2 = 1, 7
58314 : DO i3 = 1, 5
58315 : i = i + 1
58316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
58318 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
58319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
58321 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
58322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
58324 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
58325 : END DO
58326 : END DO
58327 : END DO
58328 : s_offset_d1 = s_offset_d1 + 3
58329 : END DO
58330 : s_offset_c1 = s_offset_c1 + 5
58331 : END DO
58332 : s_offset_b1 = s_offset_b1 + 7
58333 : END DO
58334 : s_offset_a1 = s_offset_a1 + 5
58335 : END DO
58336 : END SUBROUTINE contract_dfdp
58337 : #endif
58338 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58339 : ! **************************************************************************************************
58340 : !> \brief ...
58341 : !> \param work ...
58342 : !> \param nl_a ...
58343 : !> \param nl_b ...
58344 : !> \param nl_c ...
58345 : !> \param nl_d ...
58346 : !> \param sphi_a ...
58347 : !> \param sphi_b ...
58348 : !> \param sphi_c ...
58349 : !> \param sphi_d ...
58350 : !> \param primitives ...
58351 : !> \param buffer1 ...
58352 : !> \param buffer2 ...
58353 : ! **************************************************************************************************
58354 : SUBROUTINE contract_dfdd(work, &
58355 : nl_a, nl_b, nl_c, nl_d, &
58356 : sphi_a, sphi_b, sphi_c, sphi_d, &
58357 : primitives, &
58358 : buffer1, buffer2)
58359 : REAL(dp), DIMENSION(6*10*6*6), INTENT(IN) :: work
58360 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58361 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58362 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58363 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
58364 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
58365 : REAL(dp), &
58366 : DIMENSION(5*nl_a, 7*nl_b, 5*nl_c, 5*nl_d) :: primitives
58367 : REAL(dp), DIMENSION(6*10*6*6) :: buffer1, buffer2
58368 :
58369 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58370 : kmax, s_offset_a1, s_offset_b1, &
58371 : s_offset_c1, s_offset_d1
58372 :
58373 : s_offset_a1 = 0
58374 : DO ia = 1, nl_a
58375 : s_offset_b1 = 0
58376 : DO ib = 1, nl_b
58377 : s_offset_c1 = 0
58378 : DO ic = 1, nl_c
58379 : s_offset_d1 = 0
58380 : DO id = 1, nl_d
58381 : buffer1 = 0.0_dp
58382 : imax = 10*6*6
58383 : kmax = 6
58384 : DO i = 1, imax
58385 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58386 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58387 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58388 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58390 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58391 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58392 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58393 : END DO
58394 : buffer2 = 0.0_dp
58395 : imax = 5*6*6
58396 : kmax = 10
58397 : DO i = 1, imax
58398 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58399 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58400 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58401 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58402 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58403 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58404 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58405 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58406 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58407 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58408 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58409 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58410 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58411 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58412 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58413 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58414 : END DO
58415 : buffer1 = 0.0_dp
58416 : imax = 5*7*6
58417 : kmax = 6
58418 : DO i = 1, imax
58419 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
58420 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58421 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58422 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58423 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
58424 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58425 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58426 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
58427 : END DO
58428 : imax = 5*7*5
58429 : kmax = 6
58430 : i = 0
58431 : DO i1 = 1, 5
58432 : DO i2 = 1, 7
58433 : DO i3 = 1, 5
58434 : i = i + 1
58435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58437 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
58438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58440 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
58441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58443 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
58444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58446 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
58447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58449 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
58450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58452 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
58453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58455 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
58456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58458 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
58459 : END DO
58460 : END DO
58461 : END DO
58462 : s_offset_d1 = s_offset_d1 + 5
58463 : END DO
58464 : s_offset_c1 = s_offset_c1 + 5
58465 : END DO
58466 : s_offset_b1 = s_offset_b1 + 7
58467 : END DO
58468 : s_offset_a1 = s_offset_a1 + 5
58469 : END DO
58470 : END SUBROUTINE contract_dfdd
58471 : #endif
58472 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58473 : ! **************************************************************************************************
58474 : !> \brief ...
58475 : !> \param work ...
58476 : !> \param nl_a ...
58477 : !> \param nl_b ...
58478 : !> \param nl_c ...
58479 : !> \param nl_d ...
58480 : !> \param sphi_a ...
58481 : !> \param sphi_b ...
58482 : !> \param sphi_c ...
58483 : !> \param sphi_d ...
58484 : !> \param primitives ...
58485 : !> \param buffer1 ...
58486 : !> \param buffer2 ...
58487 : ! **************************************************************************************************
58488 : SUBROUTINE contract_dfdf(work, &
58489 : nl_a, nl_b, nl_c, nl_d, &
58490 : sphi_a, sphi_b, sphi_c, sphi_d, &
58491 : primitives, &
58492 : buffer1, buffer2)
58493 : REAL(dp), DIMENSION(6*10*6*10), INTENT(IN) :: work
58494 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58495 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58496 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58497 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
58498 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
58499 : REAL(dp), &
58500 : DIMENSION(5*nl_a, 7*nl_b, 5*nl_c, 7*nl_d) :: primitives
58501 : REAL(dp), DIMENSION(6*10*6*10) :: buffer1, buffer2
58502 :
58503 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58504 : kmax, s_offset_a1, s_offset_b1, &
58505 : s_offset_c1, s_offset_d1
58506 :
58507 : s_offset_a1 = 0
58508 : DO ia = 1, nl_a
58509 : s_offset_b1 = 0
58510 : DO ib = 1, nl_b
58511 : s_offset_c1 = 0
58512 : DO ic = 1, nl_c
58513 : s_offset_d1 = 0
58514 : DO id = 1, nl_d
58515 : buffer1 = 0.0_dp
58516 : imax = 10*6*10
58517 : kmax = 6
58518 : DO i = 1, imax
58519 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58520 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58521 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58522 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58523 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58524 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58525 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58526 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58527 : END DO
58528 : buffer2 = 0.0_dp
58529 : imax = 5*6*10
58530 : kmax = 10
58531 : DO i = 1, imax
58532 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58533 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58534 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58535 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58536 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58537 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58538 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58539 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58540 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58541 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58542 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58543 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58544 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58545 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58546 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58547 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58548 : END DO
58549 : buffer1 = 0.0_dp
58550 : imax = 5*7*10
58551 : kmax = 6
58552 : DO i = 1, imax
58553 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
58554 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58555 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58556 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58557 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
58558 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58559 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58560 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
58561 : END DO
58562 : imax = 5*7*5
58563 : kmax = 10
58564 : i = 0
58565 : DO i1 = 1, 5
58566 : DO i2 = 1, 7
58567 : DO i3 = 1, 5
58568 : i = i + 1
58569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58571 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
58572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58574 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
58575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58577 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
58578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58580 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
58581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58583 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
58584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58586 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
58587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58589 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
58590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58592 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
58593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58595 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
58596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58598 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
58599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58601 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
58602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58604 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
58605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58607 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
58608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58610 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
58611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58613 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
58614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58616 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
58617 : END DO
58618 : END DO
58619 : END DO
58620 : s_offset_d1 = s_offset_d1 + 7
58621 : END DO
58622 : s_offset_c1 = s_offset_c1 + 5
58623 : END DO
58624 : s_offset_b1 = s_offset_b1 + 7
58625 : END DO
58626 : s_offset_a1 = s_offset_a1 + 5
58627 : END DO
58628 : END SUBROUTINE contract_dfdf
58629 : #endif
58630 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
58631 : ! **************************************************************************************************
58632 : !> \brief ...
58633 : !> \param work ...
58634 : !> \param nl_a ...
58635 : !> \param nl_b ...
58636 : !> \param nl_c ...
58637 : !> \param nl_d ...
58638 : !> \param sphi_a ...
58639 : !> \param sphi_b ...
58640 : !> \param sphi_c ...
58641 : !> \param sphi_d ...
58642 : !> \param primitives ...
58643 : !> \param buffer1 ...
58644 : !> \param buffer2 ...
58645 : ! **************************************************************************************************
58646 : SUBROUTINE contract_dfdg(work, &
58647 : nl_a, nl_b, nl_c, nl_d, &
58648 : sphi_a, sphi_b, sphi_c, sphi_d, &
58649 : primitives, &
58650 : buffer1, buffer2)
58651 : REAL(dp), DIMENSION(6*10*6*15), INTENT(IN) :: work
58652 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58653 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58654 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58655 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
58656 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
58657 : REAL(dp), &
58658 : DIMENSION(5*nl_a, 7*nl_b, 5*nl_c, 9*nl_d) :: primitives
58659 : REAL(dp), DIMENSION(6*10*6*15) :: buffer1, buffer2
58660 :
58661 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58662 : kmax, s_offset_a1, s_offset_b1, &
58663 : s_offset_c1, s_offset_d1
58664 :
58665 : s_offset_a1 = 0
58666 : DO ia = 1, nl_a
58667 : s_offset_b1 = 0
58668 : DO ib = 1, nl_b
58669 : s_offset_c1 = 0
58670 : DO ic = 1, nl_c
58671 : s_offset_d1 = 0
58672 : DO id = 1, nl_d
58673 : buffer1 = 0.0_dp
58674 : imax = 10*6*15
58675 : kmax = 6
58676 : DO i = 1, imax
58677 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58678 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58679 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58680 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58681 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58682 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58683 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58685 : END DO
58686 : buffer2 = 0.0_dp
58687 : imax = 5*6*15
58688 : kmax = 10
58689 : DO i = 1, imax
58690 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58691 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58692 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58693 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58694 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58695 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58696 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58697 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58698 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58699 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58700 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58701 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58702 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58703 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58704 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58705 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58706 : END DO
58707 : buffer1 = 0.0_dp
58708 : imax = 5*7*15
58709 : kmax = 6
58710 : DO i = 1, imax
58711 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
58712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58713 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58714 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58715 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
58716 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58717 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58718 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
58719 : END DO
58720 : imax = 5*7*5
58721 : kmax = 15
58722 : i = 0
58723 : DO i1 = 1, 5
58724 : DO i2 = 1, 7
58725 : DO i3 = 1, 5
58726 : i = i + 1
58727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58729 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
58730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58732 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
58733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58735 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
58736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58738 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
58739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58741 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
58742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58744 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
58745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
58746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
58747 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
58748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58750 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
58751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58753 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
58754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58756 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
58757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58759 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
58760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58762 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
58763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58765 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
58766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
58768 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
58769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58771 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
58772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58774 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
58775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
58776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
58777 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
58778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
58779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
58780 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
58781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
58782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
58783 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
58784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58786 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
58787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58789 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
58790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
58791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
58792 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
58793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
58794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
58795 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
58796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58798 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
58799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58801 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
58802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
58803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
58804 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
58805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
58806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
58807 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
58808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
58809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
58810 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
58811 : END DO
58812 : END DO
58813 : END DO
58814 : s_offset_d1 = s_offset_d1 + 9
58815 : END DO
58816 : s_offset_c1 = s_offset_c1 + 5
58817 : END DO
58818 : s_offset_b1 = s_offset_b1 + 7
58819 : END DO
58820 : s_offset_a1 = s_offset_a1 + 5
58821 : END DO
58822 : END SUBROUTINE contract_dfdg
58823 : #endif
58824 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58825 : ! **************************************************************************************************
58826 : !> \brief ...
58827 : !> \param work ...
58828 : !> \param nl_a ...
58829 : !> \param nl_b ...
58830 : !> \param nl_c ...
58831 : !> \param nl_d ...
58832 : !> \param sphi_a ...
58833 : !> \param sphi_b ...
58834 : !> \param sphi_c ...
58835 : !> \param sphi_d ...
58836 : !> \param primitives ...
58837 : !> \param buffer1 ...
58838 : !> \param buffer2 ...
58839 : ! **************************************************************************************************
58840 : SUBROUTINE contract_dffs(work, &
58841 : nl_a, nl_b, nl_c, nl_d, &
58842 : sphi_a, sphi_b, sphi_c, sphi_d, &
58843 : primitives, &
58844 : buffer1, buffer2)
58845 : REAL(dp), DIMENSION(6*10*10*1), INTENT(IN) :: work
58846 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58847 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58848 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58849 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
58850 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
58851 : REAL(dp), &
58852 : DIMENSION(5*nl_a, 7*nl_b, 7*nl_c, 1*nl_d) :: primitives
58853 : REAL(dp), DIMENSION(6*10*10*1) :: buffer1, buffer2
58854 :
58855 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58856 : kmax, s_offset_a1, s_offset_b1, &
58857 : s_offset_c1, s_offset_d1
58858 :
58859 : s_offset_a1 = 0
58860 : DO ia = 1, nl_a
58861 : s_offset_b1 = 0
58862 : DO ib = 1, nl_b
58863 : s_offset_c1 = 0
58864 : DO ic = 1, nl_c
58865 : s_offset_d1 = 0
58866 : DO id = 1, nl_d
58867 : buffer1 = 0.0_dp
58868 : imax = 10*10*1
58869 : kmax = 6
58870 : DO i = 1, imax
58871 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58872 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58873 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58874 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58875 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58876 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58877 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58878 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
58879 : END DO
58880 : buffer2 = 0.0_dp
58881 : imax = 5*10*1
58882 : kmax = 10
58883 : DO i = 1, imax
58884 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
58885 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
58886 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
58887 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
58888 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
58889 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
58890 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
58891 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
58892 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
58893 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
58894 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
58895 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
58896 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
58897 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
58898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
58899 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
58900 : END DO
58901 : buffer1 = 0.0_dp
58902 : imax = 5*7*1
58903 : kmax = 10
58904 : DO i = 1, imax
58905 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
58906 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
58907 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
58908 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
58909 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
58910 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
58911 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
58912 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
58913 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
58914 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
58915 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
58916 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
58917 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
58918 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
58919 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
58920 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
58921 : END DO
58922 : imax = 5*7*7
58923 : kmax = 1
58924 : i = 0
58925 : DO i1 = 1, 7
58926 : DO i2 = 1, 7
58927 : DO i3 = 1, 5
58928 : i = i + 1
58929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
58930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
58931 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
58932 : END DO
58933 : END DO
58934 : END DO
58935 : s_offset_d1 = s_offset_d1 + 1
58936 : END DO
58937 : s_offset_c1 = s_offset_c1 + 7
58938 : END DO
58939 : s_offset_b1 = s_offset_b1 + 7
58940 : END DO
58941 : s_offset_a1 = s_offset_a1 + 5
58942 : END DO
58943 : END SUBROUTINE contract_dffs
58944 : #endif
58945 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
58946 : ! **************************************************************************************************
58947 : !> \brief ...
58948 : !> \param work ...
58949 : !> \param nl_a ...
58950 : !> \param nl_b ...
58951 : !> \param nl_c ...
58952 : !> \param nl_d ...
58953 : !> \param sphi_a ...
58954 : !> \param sphi_b ...
58955 : !> \param sphi_c ...
58956 : !> \param sphi_d ...
58957 : !> \param primitives ...
58958 : !> \param buffer1 ...
58959 : !> \param buffer2 ...
58960 : ! **************************************************************************************************
58961 : SUBROUTINE contract_dffp(work, &
58962 : nl_a, nl_b, nl_c, nl_d, &
58963 : sphi_a, sphi_b, sphi_c, sphi_d, &
58964 : primitives, &
58965 : buffer1, buffer2)
58966 : REAL(dp), DIMENSION(6*10*10*3), INTENT(IN) :: work
58967 : INTEGER :: nl_a, nl_b, nl_c, nl_d
58968 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
58969 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
58970 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
58971 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
58972 : REAL(dp), &
58973 : DIMENSION(5*nl_a, 7*nl_b, 7*nl_c, 3*nl_d) :: primitives
58974 : REAL(dp), DIMENSION(6*10*10*3) :: buffer1, buffer2
58975 :
58976 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
58977 : kmax, s_offset_a1, s_offset_b1, &
58978 : s_offset_c1, s_offset_d1
58979 :
58980 : s_offset_a1 = 0
58981 : DO ia = 1, nl_a
58982 : s_offset_b1 = 0
58983 : DO ib = 1, nl_b
58984 : s_offset_c1 = 0
58985 : DO ic = 1, nl_c
58986 : s_offset_d1 = 0
58987 : DO id = 1, nl_d
58988 : buffer1 = 0.0_dp
58989 : imax = 10*10*3
58990 : kmax = 6
58991 : DO i = 1, imax
58992 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
58993 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
58994 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
58995 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
58996 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
58997 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
58998 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
58999 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59000 : END DO
59001 : buffer2 = 0.0_dp
59002 : imax = 5*10*3
59003 : kmax = 10
59004 : DO i = 1, imax
59005 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59006 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59007 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59008 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59009 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59010 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59011 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59012 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59013 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59014 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59015 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59016 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59017 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59018 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59019 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59020 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59021 : END DO
59022 : buffer1 = 0.0_dp
59023 : imax = 5*7*3
59024 : kmax = 10
59025 : DO i = 1, imax
59026 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59027 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59028 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59029 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59030 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
59031 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59032 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59033 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
59034 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59035 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59036 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59037 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59038 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
59039 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59040 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59041 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
59042 : END DO
59043 : imax = 5*7*7
59044 : kmax = 3
59045 : i = 0
59046 : DO i1 = 1, 7
59047 : DO i2 = 1, 7
59048 : DO i3 = 1, 5
59049 : i = i + 1
59050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
59052 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
59053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
59055 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
59058 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
59059 : END DO
59060 : END DO
59061 : END DO
59062 : s_offset_d1 = s_offset_d1 + 3
59063 : END DO
59064 : s_offset_c1 = s_offset_c1 + 7
59065 : END DO
59066 : s_offset_b1 = s_offset_b1 + 7
59067 : END DO
59068 : s_offset_a1 = s_offset_a1 + 5
59069 : END DO
59070 : END SUBROUTINE contract_dffp
59071 : #endif
59072 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
59073 : ! **************************************************************************************************
59074 : !> \brief ...
59075 : !> \param work ...
59076 : !> \param nl_a ...
59077 : !> \param nl_b ...
59078 : !> \param nl_c ...
59079 : !> \param nl_d ...
59080 : !> \param sphi_a ...
59081 : !> \param sphi_b ...
59082 : !> \param sphi_c ...
59083 : !> \param sphi_d ...
59084 : !> \param primitives ...
59085 : !> \param buffer1 ...
59086 : !> \param buffer2 ...
59087 : ! **************************************************************************************************
59088 : SUBROUTINE contract_dffd(work, &
59089 : nl_a, nl_b, nl_c, nl_d, &
59090 : sphi_a, sphi_b, sphi_c, sphi_d, &
59091 : primitives, &
59092 : buffer1, buffer2)
59093 : REAL(dp), DIMENSION(6*10*10*6), INTENT(IN) :: work
59094 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59095 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59096 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59097 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
59098 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
59099 : REAL(dp), &
59100 : DIMENSION(5*nl_a, 7*nl_b, 7*nl_c, 5*nl_d) :: primitives
59101 : REAL(dp), DIMENSION(6*10*10*6) :: buffer1, buffer2
59102 :
59103 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59104 : kmax, s_offset_a1, s_offset_b1, &
59105 : s_offset_c1, s_offset_d1
59106 :
59107 : s_offset_a1 = 0
59108 : DO ia = 1, nl_a
59109 : s_offset_b1 = 0
59110 : DO ib = 1, nl_b
59111 : s_offset_c1 = 0
59112 : DO ic = 1, nl_c
59113 : s_offset_d1 = 0
59114 : DO id = 1, nl_d
59115 : buffer1 = 0.0_dp
59116 : imax = 10*10*6
59117 : kmax = 6
59118 : DO i = 1, imax
59119 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59120 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59121 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59122 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59123 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59124 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59125 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59126 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59127 : END DO
59128 : buffer2 = 0.0_dp
59129 : imax = 5*10*6
59130 : kmax = 10
59131 : DO i = 1, imax
59132 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59133 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59134 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59135 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59136 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59137 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59138 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59139 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59140 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59141 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59142 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59143 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59144 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59145 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59146 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59147 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59148 : END DO
59149 : buffer1 = 0.0_dp
59150 : imax = 5*7*6
59151 : kmax = 10
59152 : DO i = 1, imax
59153 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59154 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59155 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59156 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59157 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
59158 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59159 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59160 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
59161 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59162 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59163 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59164 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59165 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
59166 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59167 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59168 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
59169 : END DO
59170 : imax = 5*7*7
59171 : kmax = 6
59172 : i = 0
59173 : DO i1 = 1, 7
59174 : DO i2 = 1, 7
59175 : DO i3 = 1, 5
59176 : i = i + 1
59177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59179 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
59180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59182 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
59183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59185 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59188 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
59189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59191 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
59192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59194 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
59195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
59197 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
59198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59200 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
59201 : END DO
59202 : END DO
59203 : END DO
59204 : s_offset_d1 = s_offset_d1 + 5
59205 : END DO
59206 : s_offset_c1 = s_offset_c1 + 7
59207 : END DO
59208 : s_offset_b1 = s_offset_b1 + 7
59209 : END DO
59210 : s_offset_a1 = s_offset_a1 + 5
59211 : END DO
59212 : END SUBROUTINE contract_dffd
59213 : #endif
59214 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
59215 : ! **************************************************************************************************
59216 : !> \brief ...
59217 : !> \param work ...
59218 : !> \param nl_a ...
59219 : !> \param nl_b ...
59220 : !> \param nl_c ...
59221 : !> \param nl_d ...
59222 : !> \param sphi_a ...
59223 : !> \param sphi_b ...
59224 : !> \param sphi_c ...
59225 : !> \param sphi_d ...
59226 : !> \param primitives ...
59227 : !> \param buffer1 ...
59228 : !> \param buffer2 ...
59229 : ! **************************************************************************************************
59230 : SUBROUTINE contract_dfff(work, &
59231 : nl_a, nl_b, nl_c, nl_d, &
59232 : sphi_a, sphi_b, sphi_c, sphi_d, &
59233 : primitives, &
59234 : buffer1, buffer2)
59235 : REAL(dp), DIMENSION(6*10*10*10), INTENT(IN) :: work
59236 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59237 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59238 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59239 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
59240 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
59241 : REAL(dp), &
59242 : DIMENSION(5*nl_a, 7*nl_b, 7*nl_c, 7*nl_d) :: primitives
59243 : REAL(dp), DIMENSION(6*10*10*10) :: buffer1, buffer2
59244 :
59245 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59246 : kmax, s_offset_a1, s_offset_b1, &
59247 : s_offset_c1, s_offset_d1
59248 :
59249 : s_offset_a1 = 0
59250 : DO ia = 1, nl_a
59251 : s_offset_b1 = 0
59252 : DO ib = 1, nl_b
59253 : s_offset_c1 = 0
59254 : DO ic = 1, nl_c
59255 : s_offset_d1 = 0
59256 : DO id = 1, nl_d
59257 : buffer1 = 0.0_dp
59258 : imax = 10*10*10
59259 : kmax = 6
59260 : DO i = 1, imax
59261 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59262 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59263 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59265 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59266 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59267 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59268 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59269 : END DO
59270 : buffer2 = 0.0_dp
59271 : imax = 5*10*10
59272 : kmax = 10
59273 : DO i = 1, imax
59274 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59275 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59276 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59277 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59278 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59279 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59280 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59281 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59282 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59283 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59284 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59285 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59286 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59287 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59288 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59289 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59290 : END DO
59291 : buffer1 = 0.0_dp
59292 : imax = 5*7*10
59293 : kmax = 10
59294 : DO i = 1, imax
59295 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59296 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59297 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59298 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59299 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
59300 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59301 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59302 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
59303 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59304 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59305 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59306 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59307 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
59308 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59309 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59310 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
59311 : END DO
59312 : imax = 5*7*7
59313 : kmax = 10
59314 : i = 0
59315 : DO i1 = 1, 7
59316 : DO i2 = 1, 7
59317 : DO i3 = 1, 5
59318 : i = i + 1
59319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59321 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
59322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59324 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
59325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59327 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59330 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
59331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59333 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
59334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
59335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
59336 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
59337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59339 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
59340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59342 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
59343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
59345 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
59346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59348 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
59349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59351 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
59352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59354 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
59355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59357 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
59358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
59359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
59360 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
59361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59363 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
59364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59366 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
59367 : END DO
59368 : END DO
59369 : END DO
59370 : s_offset_d1 = s_offset_d1 + 7
59371 : END DO
59372 : s_offset_c1 = s_offset_c1 + 7
59373 : END DO
59374 : s_offset_b1 = s_offset_b1 + 7
59375 : END DO
59376 : s_offset_a1 = s_offset_a1 + 5
59377 : END DO
59378 : END SUBROUTINE contract_dfff
59379 : #endif
59380 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
59381 : ! **************************************************************************************************
59382 : !> \brief ...
59383 : !> \param work ...
59384 : !> \param nl_a ...
59385 : !> \param nl_b ...
59386 : !> \param nl_c ...
59387 : !> \param nl_d ...
59388 : !> \param sphi_a ...
59389 : !> \param sphi_b ...
59390 : !> \param sphi_c ...
59391 : !> \param sphi_d ...
59392 : !> \param primitives ...
59393 : !> \param buffer1 ...
59394 : !> \param buffer2 ...
59395 : ! **************************************************************************************************
59396 : SUBROUTINE contract_dffg(work, &
59397 : nl_a, nl_b, nl_c, nl_d, &
59398 : sphi_a, sphi_b, sphi_c, sphi_d, &
59399 : primitives, &
59400 : buffer1, buffer2)
59401 : REAL(dp), DIMENSION(6*10*10*15), INTENT(IN) :: work
59402 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59403 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59404 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59405 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
59406 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
59407 : REAL(dp), &
59408 : DIMENSION(5*nl_a, 7*nl_b, 7*nl_c, 9*nl_d) :: primitives
59409 : REAL(dp), DIMENSION(6*10*10*15) :: buffer1, buffer2
59410 :
59411 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59412 : kmax, s_offset_a1, s_offset_b1, &
59413 : s_offset_c1, s_offset_d1
59414 :
59415 : s_offset_a1 = 0
59416 : DO ia = 1, nl_a
59417 : s_offset_b1 = 0
59418 : DO ib = 1, nl_b
59419 : s_offset_c1 = 0
59420 : DO ic = 1, nl_c
59421 : s_offset_d1 = 0
59422 : DO id = 1, nl_d
59423 : buffer1 = 0.0_dp
59424 : imax = 10*10*15
59425 : kmax = 6
59426 : DO i = 1, imax
59427 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59429 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59430 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59431 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59432 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59433 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59434 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59435 : END DO
59436 : buffer2 = 0.0_dp
59437 : imax = 5*10*15
59438 : kmax = 10
59439 : DO i = 1, imax
59440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59441 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59442 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59443 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59444 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59445 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59446 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59447 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59448 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59449 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59450 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59451 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59452 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59453 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59454 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59455 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59456 : END DO
59457 : buffer1 = 0.0_dp
59458 : imax = 5*7*15
59459 : kmax = 10
59460 : DO i = 1, imax
59461 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59462 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59463 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59464 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59465 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
59466 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59467 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59468 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
59469 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59470 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59471 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59472 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59473 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
59474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59475 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59476 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
59477 : END DO
59478 : imax = 5*7*7
59479 : kmax = 15
59480 : i = 0
59481 : DO i1 = 1, 7
59482 : DO i2 = 1, 7
59483 : DO i3 = 1, 5
59484 : i = i + 1
59485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59487 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
59488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59490 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
59491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
59492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
59493 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
59494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59496 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59499 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
59500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
59501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
59502 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
59503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
59504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
59505 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
59506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59508 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
59509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
59510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
59511 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
59512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
59514 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
59515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59517 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
59518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59520 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
59521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59523 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
59524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59526 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
59527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59529 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
59530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
59531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
59532 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
59533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
59534 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
59535 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
59536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59538 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
59539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
59540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
59541 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
59542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59544 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
59545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59547 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
59548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
59549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
59550 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
59551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
59553 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
59554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59556 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
59557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59559 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
59560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
59561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
59562 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
59563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59565 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
59566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59568 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
59569 : END DO
59570 : END DO
59571 : END DO
59572 : s_offset_d1 = s_offset_d1 + 9
59573 : END DO
59574 : s_offset_c1 = s_offset_c1 + 7
59575 : END DO
59576 : s_offset_b1 = s_offset_b1 + 7
59577 : END DO
59578 : s_offset_a1 = s_offset_a1 + 5
59579 : END DO
59580 : END SUBROUTINE contract_dffg
59581 : #endif
59582 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
59583 : ! **************************************************************************************************
59584 : !> \brief ...
59585 : !> \param work ...
59586 : !> \param nl_a ...
59587 : !> \param nl_b ...
59588 : !> \param nl_c ...
59589 : !> \param nl_d ...
59590 : !> \param sphi_a ...
59591 : !> \param sphi_b ...
59592 : !> \param sphi_c ...
59593 : !> \param sphi_d ...
59594 : !> \param primitives ...
59595 : !> \param buffer1 ...
59596 : !> \param buffer2 ...
59597 : ! **************************************************************************************************
59598 : SUBROUTINE contract_dfgs(work, &
59599 : nl_a, nl_b, nl_c, nl_d, &
59600 : sphi_a, sphi_b, sphi_c, sphi_d, &
59601 : primitives, &
59602 : buffer1, buffer2)
59603 : REAL(dp), DIMENSION(6*10*15*1), INTENT(IN) :: work
59604 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59605 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59606 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59607 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
59608 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
59609 : REAL(dp), &
59610 : DIMENSION(5*nl_a, 7*nl_b, 9*nl_c, 1*nl_d) :: primitives
59611 : REAL(dp), DIMENSION(6*10*15*1) :: buffer1, buffer2
59612 :
59613 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59614 : kmax, s_offset_a1, s_offset_b1, &
59615 : s_offset_c1, s_offset_d1
59616 :
59617 : s_offset_a1 = 0
59618 : DO ia = 1, nl_a
59619 : s_offset_b1 = 0
59620 : DO ib = 1, nl_b
59621 : s_offset_c1 = 0
59622 : DO ic = 1, nl_c
59623 : s_offset_d1 = 0
59624 : DO id = 1, nl_d
59625 : buffer1 = 0.0_dp
59626 : imax = 10*15*1
59627 : kmax = 6
59628 : DO i = 1, imax
59629 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59630 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59631 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59632 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59633 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59634 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59635 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59637 : END DO
59638 : buffer2 = 0.0_dp
59639 : imax = 5*15*1
59640 : kmax = 10
59641 : DO i = 1, imax
59642 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59643 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59644 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59645 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59646 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59647 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59648 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59649 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59650 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59651 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59652 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59653 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59654 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59655 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59656 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59657 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59658 : END DO
59659 : buffer1 = 0.0_dp
59660 : imax = 5*7*1
59661 : kmax = 15
59662 : DO i = 1, imax
59663 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59664 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59665 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
59666 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59667 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59668 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59669 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
59670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59671 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
59672 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59673 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
59674 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59675 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
59676 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59677 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59678 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59679 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
59680 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59681 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
59682 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
59683 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
59684 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
59685 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
59686 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
59687 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
59688 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
59689 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
59690 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
59691 : END DO
59692 : imax = 5*7*9
59693 : kmax = 1
59694 : i = 0
59695 : DO i1 = 1, 9
59696 : DO i2 = 1, 7
59697 : DO i3 = 1, 5
59698 : i = i + 1
59699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
59701 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
59702 : END DO
59703 : END DO
59704 : END DO
59705 : s_offset_d1 = s_offset_d1 + 1
59706 : END DO
59707 : s_offset_c1 = s_offset_c1 + 9
59708 : END DO
59709 : s_offset_b1 = s_offset_b1 + 7
59710 : END DO
59711 : s_offset_a1 = s_offset_a1 + 5
59712 : END DO
59713 : END SUBROUTINE contract_dfgs
59714 : #endif
59715 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
59716 : ! **************************************************************************************************
59717 : !> \brief ...
59718 : !> \param work ...
59719 : !> \param nl_a ...
59720 : !> \param nl_b ...
59721 : !> \param nl_c ...
59722 : !> \param nl_d ...
59723 : !> \param sphi_a ...
59724 : !> \param sphi_b ...
59725 : !> \param sphi_c ...
59726 : !> \param sphi_d ...
59727 : !> \param primitives ...
59728 : !> \param buffer1 ...
59729 : !> \param buffer2 ...
59730 : ! **************************************************************************************************
59731 : SUBROUTINE contract_dfgp(work, &
59732 : nl_a, nl_b, nl_c, nl_d, &
59733 : sphi_a, sphi_b, sphi_c, sphi_d, &
59734 : primitives, &
59735 : buffer1, buffer2)
59736 : REAL(dp), DIMENSION(6*10*15*3), INTENT(IN) :: work
59737 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59738 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59739 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59740 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
59741 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
59742 : REAL(dp), &
59743 : DIMENSION(5*nl_a, 7*nl_b, 9*nl_c, 3*nl_d) :: primitives
59744 : REAL(dp), DIMENSION(6*10*15*3) :: buffer1, buffer2
59745 :
59746 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59747 : kmax, s_offset_a1, s_offset_b1, &
59748 : s_offset_c1, s_offset_d1
59749 :
59750 : s_offset_a1 = 0
59751 : DO ia = 1, nl_a
59752 : s_offset_b1 = 0
59753 : DO ib = 1, nl_b
59754 : s_offset_c1 = 0
59755 : DO ic = 1, nl_c
59756 : s_offset_d1 = 0
59757 : DO id = 1, nl_d
59758 : buffer1 = 0.0_dp
59759 : imax = 10*15*3
59760 : kmax = 6
59761 : DO i = 1, imax
59762 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59763 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59764 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59765 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59766 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59767 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59768 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59769 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59770 : END DO
59771 : buffer2 = 0.0_dp
59772 : imax = 5*15*3
59773 : kmax = 10
59774 : DO i = 1, imax
59775 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59776 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59777 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59778 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59779 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59780 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59781 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59782 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59783 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59784 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59785 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59786 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59787 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59788 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59789 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59790 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59791 : END DO
59792 : buffer1 = 0.0_dp
59793 : imax = 5*7*3
59794 : kmax = 15
59795 : DO i = 1, imax
59796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59797 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59798 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
59799 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59800 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59801 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59802 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
59803 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59804 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
59805 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59806 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
59807 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59808 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
59809 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59811 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59812 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
59813 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59814 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
59815 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
59816 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
59817 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
59818 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
59819 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
59820 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
59821 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
59822 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
59823 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
59824 : END DO
59825 : imax = 5*7*9
59826 : kmax = 3
59827 : i = 0
59828 : DO i1 = 1, 9
59829 : DO i2 = 1, 7
59830 : DO i3 = 1, 5
59831 : i = i + 1
59832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
59834 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
59835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
59837 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
59840 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
59841 : END DO
59842 : END DO
59843 : END DO
59844 : s_offset_d1 = s_offset_d1 + 3
59845 : END DO
59846 : s_offset_c1 = s_offset_c1 + 9
59847 : END DO
59848 : s_offset_b1 = s_offset_b1 + 7
59849 : END DO
59850 : s_offset_a1 = s_offset_a1 + 5
59851 : END DO
59852 : END SUBROUTINE contract_dfgp
59853 : #endif
59854 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
59855 : ! **************************************************************************************************
59856 : !> \brief ...
59857 : !> \param work ...
59858 : !> \param nl_a ...
59859 : !> \param nl_b ...
59860 : !> \param nl_c ...
59861 : !> \param nl_d ...
59862 : !> \param sphi_a ...
59863 : !> \param sphi_b ...
59864 : !> \param sphi_c ...
59865 : !> \param sphi_d ...
59866 : !> \param primitives ...
59867 : !> \param buffer1 ...
59868 : !> \param buffer2 ...
59869 : ! **************************************************************************************************
59870 : SUBROUTINE contract_dfgd(work, &
59871 : nl_a, nl_b, nl_c, nl_d, &
59872 : sphi_a, sphi_b, sphi_c, sphi_d, &
59873 : primitives, &
59874 : buffer1, buffer2)
59875 : REAL(dp), DIMENSION(6*10*15*6), INTENT(IN) :: work
59876 : INTEGER :: nl_a, nl_b, nl_c, nl_d
59877 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
59878 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
59879 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
59880 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
59881 : REAL(dp), &
59882 : DIMENSION(5*nl_a, 7*nl_b, 9*nl_c, 5*nl_d) :: primitives
59883 : REAL(dp), DIMENSION(6*10*15*6) :: buffer1, buffer2
59884 :
59885 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
59886 : kmax, s_offset_a1, s_offset_b1, &
59887 : s_offset_c1, s_offset_d1
59888 :
59889 : s_offset_a1 = 0
59890 : DO ia = 1, nl_a
59891 : s_offset_b1 = 0
59892 : DO ib = 1, nl_b
59893 : s_offset_c1 = 0
59894 : DO ic = 1, nl_c
59895 : s_offset_d1 = 0
59896 : DO id = 1, nl_d
59897 : buffer1 = 0.0_dp
59898 : imax = 10*15*6
59899 : kmax = 6
59900 : DO i = 1, imax
59901 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
59902 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
59903 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
59904 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
59905 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
59906 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
59907 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
59908 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
59909 : END DO
59910 : buffer2 = 0.0_dp
59911 : imax = 5*15*6
59912 : kmax = 10
59913 : DO i = 1, imax
59914 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
59915 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
59916 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
59917 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
59918 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
59919 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
59920 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
59921 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
59922 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
59923 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
59924 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
59925 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
59926 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
59927 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
59928 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
59929 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
59930 : END DO
59931 : buffer1 = 0.0_dp
59932 : imax = 5*7*6
59933 : kmax = 15
59934 : DO i = 1, imax
59935 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
59936 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
59937 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
59938 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
59939 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
59940 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
59941 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
59942 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
59943 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
59944 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
59945 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
59946 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
59947 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
59948 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
59949 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
59950 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
59951 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
59952 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
59953 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
59954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
59955 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
59956 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
59957 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
59958 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
59959 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
59960 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
59961 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
59962 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
59963 : END DO
59964 : imax = 5*7*9
59965 : kmax = 6
59966 : i = 0
59967 : DO i1 = 1, 9
59968 : DO i2 = 1, 7
59969 : DO i3 = 1, 5
59970 : i = i + 1
59971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59973 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
59974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59976 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
59977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
59978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
59979 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
59980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
59981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
59982 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
59983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59985 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
59986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
59987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
59988 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
59989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
59990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
59991 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
59992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
59993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
59994 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
59995 : END DO
59996 : END DO
59997 : END DO
59998 : s_offset_d1 = s_offset_d1 + 5
59999 : END DO
60000 : s_offset_c1 = s_offset_c1 + 9
60001 : END DO
60002 : s_offset_b1 = s_offset_b1 + 7
60003 : END DO
60004 : s_offset_a1 = s_offset_a1 + 5
60005 : END DO
60006 : END SUBROUTINE contract_dfgd
60007 : #endif
60008 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60009 : ! **************************************************************************************************
60010 : !> \brief ...
60011 : !> \param work ...
60012 : !> \param nl_a ...
60013 : !> \param nl_b ...
60014 : !> \param nl_c ...
60015 : !> \param nl_d ...
60016 : !> \param sphi_a ...
60017 : !> \param sphi_b ...
60018 : !> \param sphi_c ...
60019 : !> \param sphi_d ...
60020 : !> \param primitives ...
60021 : !> \param buffer1 ...
60022 : !> \param buffer2 ...
60023 : ! **************************************************************************************************
60024 : SUBROUTINE contract_dfgf(work, &
60025 : nl_a, nl_b, nl_c, nl_d, &
60026 : sphi_a, sphi_b, sphi_c, sphi_d, &
60027 : primitives, &
60028 : buffer1, buffer2)
60029 : REAL(dp), DIMENSION(6*10*15*10), INTENT(IN) :: work
60030 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60031 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60032 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
60033 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
60034 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
60035 : REAL(dp), &
60036 : DIMENSION(5*nl_a, 7*nl_b, 9*nl_c, 7*nl_d) :: primitives
60037 : REAL(dp), DIMENSION(6*10*15*10) :: buffer1, buffer2
60038 :
60039 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60040 : kmax, s_offset_a1, s_offset_b1, &
60041 : s_offset_c1, s_offset_d1
60042 :
60043 : s_offset_a1 = 0
60044 : DO ia = 1, nl_a
60045 : s_offset_b1 = 0
60046 : DO ib = 1, nl_b
60047 : s_offset_c1 = 0
60048 : DO ic = 1, nl_c
60049 : s_offset_d1 = 0
60050 : DO id = 1, nl_d
60051 : buffer1 = 0.0_dp
60052 : imax = 10*15*10
60053 : kmax = 6
60054 : DO i = 1, imax
60055 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60056 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60057 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60058 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60059 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60060 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60061 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60062 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60063 : END DO
60064 : buffer2 = 0.0_dp
60065 : imax = 5*15*10
60066 : kmax = 10
60067 : DO i = 1, imax
60068 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60069 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60070 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60071 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60072 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
60073 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60074 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60075 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
60076 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60077 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60078 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60079 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60080 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
60081 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60082 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60083 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
60084 : END DO
60085 : buffer1 = 0.0_dp
60086 : imax = 5*7*10
60087 : kmax = 15
60088 : DO i = 1, imax
60089 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
60090 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
60091 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
60092 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
60093 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
60094 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
60095 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
60096 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
60097 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
60098 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
60099 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
60100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
60101 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
60102 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
60103 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
60104 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
60105 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
60106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
60107 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
60108 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
60109 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
60110 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
60111 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
60112 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
60113 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
60114 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
60115 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
60116 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
60117 : END DO
60118 : imax = 5*7*9
60119 : kmax = 10
60120 : i = 0
60121 : DO i1 = 1, 9
60122 : DO i2 = 1, 7
60123 : DO i3 = 1, 5
60124 : i = i + 1
60125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60127 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
60128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60130 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
60131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60133 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
60134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60136 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
60137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60139 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
60140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60142 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
60143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60145 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
60146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60148 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
60149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
60151 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
60152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60154 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
60155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60157 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
60158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60160 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
60161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60163 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
60164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60166 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
60167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60169 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
60170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60172 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
60173 : END DO
60174 : END DO
60175 : END DO
60176 : s_offset_d1 = s_offset_d1 + 7
60177 : END DO
60178 : s_offset_c1 = s_offset_c1 + 9
60179 : END DO
60180 : s_offset_b1 = s_offset_b1 + 7
60181 : END DO
60182 : s_offset_a1 = s_offset_a1 + 5
60183 : END DO
60184 : END SUBROUTINE contract_dfgf
60185 : #endif
60186 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60187 : ! **************************************************************************************************
60188 : !> \brief ...
60189 : !> \param work ...
60190 : !> \param nl_a ...
60191 : !> \param nl_b ...
60192 : !> \param nl_c ...
60193 : !> \param nl_d ...
60194 : !> \param sphi_a ...
60195 : !> \param sphi_b ...
60196 : !> \param sphi_c ...
60197 : !> \param sphi_d ...
60198 : !> \param primitives ...
60199 : !> \param buffer1 ...
60200 : !> \param buffer2 ...
60201 : ! **************************************************************************************************
60202 : SUBROUTINE contract_dfgg(work, &
60203 : nl_a, nl_b, nl_c, nl_d, &
60204 : sphi_a, sphi_b, sphi_c, sphi_d, &
60205 : primitives, &
60206 : buffer1, buffer2)
60207 : REAL(dp), DIMENSION(6*10*15*15), INTENT(IN) :: work
60208 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60209 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60210 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
60211 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
60212 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
60213 : REAL(dp), &
60214 : DIMENSION(5*nl_a, 7*nl_b, 9*nl_c, 9*nl_d) :: primitives
60215 : REAL(dp), DIMENSION(6*10*15*15) :: buffer1, buffer2
60216 :
60217 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60218 : kmax, s_offset_a1, s_offset_b1, &
60219 : s_offset_c1, s_offset_d1
60220 :
60221 : s_offset_a1 = 0
60222 : DO ia = 1, nl_a
60223 : s_offset_b1 = 0
60224 : DO ib = 1, nl_b
60225 : s_offset_c1 = 0
60226 : DO ic = 1, nl_c
60227 : s_offset_d1 = 0
60228 : DO id = 1, nl_d
60229 : buffer1 = 0.0_dp
60230 : imax = 10*15*15
60231 : kmax = 6
60232 : DO i = 1, imax
60233 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60234 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60236 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60237 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60239 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60240 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60241 : END DO
60242 : buffer2 = 0.0_dp
60243 : imax = 5*15*15
60244 : kmax = 10
60245 : DO i = 1, imax
60246 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60247 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60248 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60249 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60250 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
60251 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60252 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60253 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
60254 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60255 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60256 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60257 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60258 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
60259 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60260 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60261 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
60262 : END DO
60263 : buffer1 = 0.0_dp
60264 : imax = 5*7*15
60265 : kmax = 15
60266 : DO i = 1, imax
60267 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
60268 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
60269 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
60270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
60271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
60272 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
60273 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
60274 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
60275 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
60276 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
60277 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
60278 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
60279 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
60280 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
60281 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
60282 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
60283 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
60284 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
60285 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
60286 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
60287 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
60288 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
60289 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
60290 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
60291 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
60292 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
60293 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
60294 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
60295 : END DO
60296 : imax = 5*7*9
60297 : kmax = 15
60298 : i = 0
60299 : DO i1 = 1, 9
60300 : DO i2 = 1, 7
60301 : DO i3 = 1, 5
60302 : i = i + 1
60303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60305 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
60306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60308 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
60309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
60310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
60311 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
60312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60314 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
60315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60317 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
60318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60320 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
60321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
60322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
60323 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
60324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60326 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
60327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
60328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
60329 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
60330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
60332 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
60333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60335 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
60336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60338 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
60339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60341 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
60342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60344 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
60345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60347 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
60348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60350 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
60351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
60352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
60353 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
60354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60356 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
60357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60359 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
60360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60362 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
60363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60365 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
60366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
60367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
60368 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
60369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
60371 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
60372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60374 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
60375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60376 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60377 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
60378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60379 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60380 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
60381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60382 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60383 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
60384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60385 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60386 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
60387 : END DO
60388 : END DO
60389 : END DO
60390 : s_offset_d1 = s_offset_d1 + 9
60391 : END DO
60392 : s_offset_c1 = s_offset_c1 + 9
60393 : END DO
60394 : s_offset_b1 = s_offset_b1 + 7
60395 : END DO
60396 : s_offset_a1 = s_offset_a1 + 5
60397 : END DO
60398 : END SUBROUTINE contract_dfgg
60399 : #endif
60400 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60401 : ! **************************************************************************************************
60402 : !> \brief ...
60403 : !> \param work ...
60404 : !> \param nl_a ...
60405 : !> \param nl_b ...
60406 : !> \param nl_c ...
60407 : !> \param nl_d ...
60408 : !> \param sphi_a ...
60409 : !> \param sphi_b ...
60410 : !> \param sphi_c ...
60411 : !> \param sphi_d ...
60412 : !> \param primitives ...
60413 : !> \param buffer1 ...
60414 : !> \param buffer2 ...
60415 : ! **************************************************************************************************
60416 : SUBROUTINE contract_dgss(work, &
60417 : nl_a, nl_b, nl_c, nl_d, &
60418 : sphi_a, sphi_b, sphi_c, sphi_d, &
60419 : primitives, &
60420 : buffer1, buffer2)
60421 : REAL(dp), DIMENSION(6*15*1*1), INTENT(IN) :: work
60422 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60423 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60424 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
60425 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
60426 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
60427 : REAL(dp), &
60428 : DIMENSION(5*nl_a, 9*nl_b, 1*nl_c, 1*nl_d) :: primitives
60429 : REAL(dp), DIMENSION(6*15*1*1) :: buffer1, buffer2
60430 :
60431 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60432 : kmax, s_offset_a1, s_offset_b1, &
60433 : s_offset_c1, s_offset_d1
60434 :
60435 : s_offset_a1 = 0
60436 : DO ia = 1, nl_a
60437 : s_offset_b1 = 0
60438 : DO ib = 1, nl_b
60439 : s_offset_c1 = 0
60440 : DO ic = 1, nl_c
60441 : s_offset_d1 = 0
60442 : DO id = 1, nl_d
60443 : buffer1 = 0.0_dp
60444 : imax = 15*1*1
60445 : kmax = 6
60446 : DO i = 1, imax
60447 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60448 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60449 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60450 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60451 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60452 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60453 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60454 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60455 : END DO
60456 : buffer2 = 0.0_dp
60457 : imax = 5*1*1
60458 : kmax = 15
60459 : DO i = 1, imax
60460 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60461 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60462 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
60463 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60464 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60465 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60466 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
60467 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60468 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
60469 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60470 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
60471 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60472 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
60473 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60474 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60475 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60476 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
60477 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60478 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
60479 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
60480 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
60481 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
60482 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
60483 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
60484 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
60485 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
60486 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
60487 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
60488 : END DO
60489 : buffer1 = 0.0_dp
60490 : imax = 5*9*1
60491 : kmax = 1
60492 : DO i = 1, imax
60493 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
60494 : END DO
60495 : imax = 5*9*1
60496 : kmax = 1
60497 : i = 0
60498 : DO i1 = 1, 1
60499 : DO i2 = 1, 9
60500 : DO i3 = 1, 5
60501 : i = i + 1
60502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
60504 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
60505 : END DO
60506 : END DO
60507 : END DO
60508 : s_offset_d1 = s_offset_d1 + 1
60509 : END DO
60510 : s_offset_c1 = s_offset_c1 + 1
60511 : END DO
60512 : s_offset_b1 = s_offset_b1 + 9
60513 : END DO
60514 : s_offset_a1 = s_offset_a1 + 5
60515 : END DO
60516 : END SUBROUTINE contract_dgss
60517 : #endif
60518 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60519 : ! **************************************************************************************************
60520 : !> \brief ...
60521 : !> \param work ...
60522 : !> \param nl_a ...
60523 : !> \param nl_b ...
60524 : !> \param nl_c ...
60525 : !> \param nl_d ...
60526 : !> \param sphi_a ...
60527 : !> \param sphi_b ...
60528 : !> \param sphi_c ...
60529 : !> \param sphi_d ...
60530 : !> \param primitives ...
60531 : !> \param buffer1 ...
60532 : !> \param buffer2 ...
60533 : ! **************************************************************************************************
60534 : SUBROUTINE contract_dgsp(work, &
60535 : nl_a, nl_b, nl_c, nl_d, &
60536 : sphi_a, sphi_b, sphi_c, sphi_d, &
60537 : primitives, &
60538 : buffer1, buffer2)
60539 : REAL(dp), DIMENSION(6*15*1*3), INTENT(IN) :: work
60540 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60541 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60542 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
60543 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
60544 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
60545 : REAL(dp), &
60546 : DIMENSION(5*nl_a, 9*nl_b, 1*nl_c, 3*nl_d) :: primitives
60547 : REAL(dp), DIMENSION(6*15*1*3) :: buffer1, buffer2
60548 :
60549 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60550 : kmax, s_offset_a1, s_offset_b1, &
60551 : s_offset_c1, s_offset_d1
60552 :
60553 : s_offset_a1 = 0
60554 : DO ia = 1, nl_a
60555 : s_offset_b1 = 0
60556 : DO ib = 1, nl_b
60557 : s_offset_c1 = 0
60558 : DO ic = 1, nl_c
60559 : s_offset_d1 = 0
60560 : DO id = 1, nl_d
60561 : buffer1 = 0.0_dp
60562 : imax = 15*1*3
60563 : kmax = 6
60564 : DO i = 1, imax
60565 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60566 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60567 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60568 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60569 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60571 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60572 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60573 : END DO
60574 : buffer2 = 0.0_dp
60575 : imax = 5*1*3
60576 : kmax = 15
60577 : DO i = 1, imax
60578 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60579 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60580 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
60581 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60582 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60583 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60584 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
60585 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60586 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
60587 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60588 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
60589 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60590 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
60591 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60592 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60593 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60594 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
60595 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60596 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
60597 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
60598 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
60599 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
60600 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
60601 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
60602 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
60603 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
60604 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
60605 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
60606 : END DO
60607 : buffer1 = 0.0_dp
60608 : imax = 5*9*3
60609 : kmax = 1
60610 : DO i = 1, imax
60611 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
60612 : END DO
60613 : imax = 5*9*1
60614 : kmax = 3
60615 : i = 0
60616 : DO i1 = 1, 1
60617 : DO i2 = 1, 9
60618 : DO i3 = 1, 5
60619 : i = i + 1
60620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
60622 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
60623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
60625 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
60626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
60628 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
60629 : END DO
60630 : END DO
60631 : END DO
60632 : s_offset_d1 = s_offset_d1 + 3
60633 : END DO
60634 : s_offset_c1 = s_offset_c1 + 1
60635 : END DO
60636 : s_offset_b1 = s_offset_b1 + 9
60637 : END DO
60638 : s_offset_a1 = s_offset_a1 + 5
60639 : END DO
60640 : END SUBROUTINE contract_dgsp
60641 : #endif
60642 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60643 : ! **************************************************************************************************
60644 : !> \brief ...
60645 : !> \param work ...
60646 : !> \param nl_a ...
60647 : !> \param nl_b ...
60648 : !> \param nl_c ...
60649 : !> \param nl_d ...
60650 : !> \param sphi_a ...
60651 : !> \param sphi_b ...
60652 : !> \param sphi_c ...
60653 : !> \param sphi_d ...
60654 : !> \param primitives ...
60655 : !> \param buffer1 ...
60656 : !> \param buffer2 ...
60657 : ! **************************************************************************************************
60658 : SUBROUTINE contract_dgsd(work, &
60659 : nl_a, nl_b, nl_c, nl_d, &
60660 : sphi_a, sphi_b, sphi_c, sphi_d, &
60661 : primitives, &
60662 : buffer1, buffer2)
60663 : REAL(dp), DIMENSION(6*15*1*6), INTENT(IN) :: work
60664 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60665 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60666 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
60667 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
60668 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
60669 : REAL(dp), &
60670 : DIMENSION(5*nl_a, 9*nl_b, 1*nl_c, 5*nl_d) :: primitives
60671 : REAL(dp), DIMENSION(6*15*1*6) :: buffer1, buffer2
60672 :
60673 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60674 : kmax, s_offset_a1, s_offset_b1, &
60675 : s_offset_c1, s_offset_d1
60676 :
60677 : s_offset_a1 = 0
60678 : DO ia = 1, nl_a
60679 : s_offset_b1 = 0
60680 : DO ib = 1, nl_b
60681 : s_offset_c1 = 0
60682 : DO ic = 1, nl_c
60683 : s_offset_d1 = 0
60684 : DO id = 1, nl_d
60685 : buffer1 = 0.0_dp
60686 : imax = 15*1*6
60687 : kmax = 6
60688 : DO i = 1, imax
60689 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60690 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60691 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60692 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60693 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60694 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60695 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60696 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60697 : END DO
60698 : buffer2 = 0.0_dp
60699 : imax = 5*1*6
60700 : kmax = 15
60701 : DO i = 1, imax
60702 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60703 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60704 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
60705 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60706 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60707 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60708 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
60709 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60710 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
60711 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60712 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
60713 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60714 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
60715 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60716 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60717 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60718 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
60719 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60720 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
60721 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
60722 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
60723 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
60724 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
60725 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
60726 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
60727 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
60728 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
60729 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
60730 : END DO
60731 : buffer1 = 0.0_dp
60732 : imax = 5*9*6
60733 : kmax = 1
60734 : DO i = 1, imax
60735 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
60736 : END DO
60737 : imax = 5*9*1
60738 : kmax = 6
60739 : i = 0
60740 : DO i1 = 1, 1
60741 : DO i2 = 1, 9
60742 : DO i3 = 1, 5
60743 : i = i + 1
60744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60746 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
60747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60749 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
60750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60752 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
60753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60755 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
60756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60758 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
60759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60761 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
60762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
60764 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
60765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60767 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
60768 : END DO
60769 : END DO
60770 : END DO
60771 : s_offset_d1 = s_offset_d1 + 5
60772 : END DO
60773 : s_offset_c1 = s_offset_c1 + 1
60774 : END DO
60775 : s_offset_b1 = s_offset_b1 + 9
60776 : END DO
60777 : s_offset_a1 = s_offset_a1 + 5
60778 : END DO
60779 : END SUBROUTINE contract_dgsd
60780 : #endif
60781 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60782 : ! **************************************************************************************************
60783 : !> \brief ...
60784 : !> \param work ...
60785 : !> \param nl_a ...
60786 : !> \param nl_b ...
60787 : !> \param nl_c ...
60788 : !> \param nl_d ...
60789 : !> \param sphi_a ...
60790 : !> \param sphi_b ...
60791 : !> \param sphi_c ...
60792 : !> \param sphi_d ...
60793 : !> \param primitives ...
60794 : !> \param buffer1 ...
60795 : !> \param buffer2 ...
60796 : ! **************************************************************************************************
60797 : SUBROUTINE contract_dgsf(work, &
60798 : nl_a, nl_b, nl_c, nl_d, &
60799 : sphi_a, sphi_b, sphi_c, sphi_d, &
60800 : primitives, &
60801 : buffer1, buffer2)
60802 : REAL(dp), DIMENSION(6*15*1*10), INTENT(IN) :: work
60803 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60804 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60805 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
60806 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
60807 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
60808 : REAL(dp), &
60809 : DIMENSION(5*nl_a, 9*nl_b, 1*nl_c, 7*nl_d) :: primitives
60810 : REAL(dp), DIMENSION(6*15*1*10) :: buffer1, buffer2
60811 :
60812 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60813 : kmax, s_offset_a1, s_offset_b1, &
60814 : s_offset_c1, s_offset_d1
60815 :
60816 : s_offset_a1 = 0
60817 : DO ia = 1, nl_a
60818 : s_offset_b1 = 0
60819 : DO ib = 1, nl_b
60820 : s_offset_c1 = 0
60821 : DO ic = 1, nl_c
60822 : s_offset_d1 = 0
60823 : DO id = 1, nl_d
60824 : buffer1 = 0.0_dp
60825 : imax = 15*1*10
60826 : kmax = 6
60827 : DO i = 1, imax
60828 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60829 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60830 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60831 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60832 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60833 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60834 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60835 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60836 : END DO
60837 : buffer2 = 0.0_dp
60838 : imax = 5*1*10
60839 : kmax = 15
60840 : DO i = 1, imax
60841 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
60842 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
60843 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
60844 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
60845 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
60846 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
60847 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
60848 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
60849 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
60850 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
60851 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
60852 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
60853 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
60854 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
60855 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
60856 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
60857 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
60858 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
60859 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
60860 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
60861 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
60862 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
60863 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
60864 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
60865 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
60866 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
60867 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
60868 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
60869 : END DO
60870 : buffer1 = 0.0_dp
60871 : imax = 5*9*10
60872 : kmax = 1
60873 : DO i = 1, imax
60874 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
60875 : END DO
60876 : imax = 5*9*1
60877 : kmax = 10
60878 : i = 0
60879 : DO i1 = 1, 1
60880 : DO i2 = 1, 9
60881 : DO i3 = 1, 5
60882 : i = i + 1
60883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60885 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
60886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60888 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
60889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60891 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
60892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60894 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
60895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60897 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
60898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60900 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
60901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60903 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
60904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
60905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
60906 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
60907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
60908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
60909 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
60910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
60911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
60912 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
60913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
60914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
60915 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
60916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60918 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
60919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60921 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
60922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
60923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
60924 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
60925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
60926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
60927 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
60928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
60929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
60930 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
60931 : END DO
60932 : END DO
60933 : END DO
60934 : s_offset_d1 = s_offset_d1 + 7
60935 : END DO
60936 : s_offset_c1 = s_offset_c1 + 1
60937 : END DO
60938 : s_offset_b1 = s_offset_b1 + 9
60939 : END DO
60940 : s_offset_a1 = s_offset_a1 + 5
60941 : END DO
60942 : END SUBROUTINE contract_dgsf
60943 : #endif
60944 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
60945 : ! **************************************************************************************************
60946 : !> \brief ...
60947 : !> \param work ...
60948 : !> \param nl_a ...
60949 : !> \param nl_b ...
60950 : !> \param nl_c ...
60951 : !> \param nl_d ...
60952 : !> \param sphi_a ...
60953 : !> \param sphi_b ...
60954 : !> \param sphi_c ...
60955 : !> \param sphi_d ...
60956 : !> \param primitives ...
60957 : !> \param buffer1 ...
60958 : !> \param buffer2 ...
60959 : ! **************************************************************************************************
60960 : SUBROUTINE contract_dgsg(work, &
60961 : nl_a, nl_b, nl_c, nl_d, &
60962 : sphi_a, sphi_b, sphi_c, sphi_d, &
60963 : primitives, &
60964 : buffer1, buffer2)
60965 : REAL(dp), DIMENSION(6*15*1*15), INTENT(IN) :: work
60966 : INTEGER :: nl_a, nl_b, nl_c, nl_d
60967 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
60968 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
60969 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
60970 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
60971 : REAL(dp), &
60972 : DIMENSION(5*nl_a, 9*nl_b, 1*nl_c, 9*nl_d) :: primitives
60973 : REAL(dp), DIMENSION(6*15*1*15) :: buffer1, buffer2
60974 :
60975 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
60976 : kmax, s_offset_a1, s_offset_b1, &
60977 : s_offset_c1, s_offset_d1
60978 :
60979 : s_offset_a1 = 0
60980 : DO ia = 1, nl_a
60981 : s_offset_b1 = 0
60982 : DO ib = 1, nl_b
60983 : s_offset_c1 = 0
60984 : DO ic = 1, nl_c
60985 : s_offset_d1 = 0
60986 : DO id = 1, nl_d
60987 : buffer1 = 0.0_dp
60988 : imax = 15*1*15
60989 : kmax = 6
60990 : DO i = 1, imax
60991 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
60992 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
60993 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
60994 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
60995 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
60996 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
60997 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
60998 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
60999 : END DO
61000 : buffer2 = 0.0_dp
61001 : imax = 5*1*15
61002 : kmax = 15
61003 : DO i = 1, imax
61004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61005 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61006 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61007 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61008 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61009 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61010 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61011 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61012 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61013 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61014 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61015 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61016 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61017 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61018 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61019 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61020 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61021 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61022 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61023 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61024 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61025 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61026 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61027 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61028 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61029 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61030 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61031 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61032 : END DO
61033 : buffer1 = 0.0_dp
61034 : imax = 5*9*15
61035 : kmax = 1
61036 : DO i = 1, imax
61037 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
61038 : END DO
61039 : imax = 5*9*1
61040 : kmax = 15
61041 : i = 0
61042 : DO i1 = 1, 1
61043 : DO i2 = 1, 9
61044 : DO i3 = 1, 5
61045 : i = i + 1
61046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61048 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
61049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61051 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
61052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61054 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
61055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61057 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
61058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61060 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
61061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61063 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
61064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
61065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
61066 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
61067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61069 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
61070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61072 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
61073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61075 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
61076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61078 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
61079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61081 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
61082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61084 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
61085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61087 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
61088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61090 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
61091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61093 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
61094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
61095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
61096 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
61097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61099 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
61100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61102 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
61103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61105 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
61106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61108 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
61109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61111 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
61112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61114 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
61115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61117 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
61118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61120 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
61121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61123 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
61124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61126 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
61127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61129 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
61130 : END DO
61131 : END DO
61132 : END DO
61133 : s_offset_d1 = s_offset_d1 + 9
61134 : END DO
61135 : s_offset_c1 = s_offset_c1 + 1
61136 : END DO
61137 : s_offset_b1 = s_offset_b1 + 9
61138 : END DO
61139 : s_offset_a1 = s_offset_a1 + 5
61140 : END DO
61141 : END SUBROUTINE contract_dgsg
61142 : #endif
61143 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61144 : ! **************************************************************************************************
61145 : !> \brief ...
61146 : !> \param work ...
61147 : !> \param nl_a ...
61148 : !> \param nl_b ...
61149 : !> \param nl_c ...
61150 : !> \param nl_d ...
61151 : !> \param sphi_a ...
61152 : !> \param sphi_b ...
61153 : !> \param sphi_c ...
61154 : !> \param sphi_d ...
61155 : !> \param primitives ...
61156 : !> \param buffer1 ...
61157 : !> \param buffer2 ...
61158 : ! **************************************************************************************************
61159 : SUBROUTINE contract_dgps(work, &
61160 : nl_a, nl_b, nl_c, nl_d, &
61161 : sphi_a, sphi_b, sphi_c, sphi_d, &
61162 : primitives, &
61163 : buffer1, buffer2)
61164 : REAL(dp), DIMENSION(6*15*3*1), INTENT(IN) :: work
61165 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61166 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61167 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61168 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
61169 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
61170 : REAL(dp), &
61171 : DIMENSION(5*nl_a, 9*nl_b, 3*nl_c, 1*nl_d) :: primitives
61172 : REAL(dp), DIMENSION(6*15*3*1) :: buffer1, buffer2
61173 :
61174 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61175 : kmax, s_offset_a1, s_offset_b1, &
61176 : s_offset_c1, s_offset_d1
61177 :
61178 : s_offset_a1 = 0
61179 : DO ia = 1, nl_a
61180 : s_offset_b1 = 0
61181 : DO ib = 1, nl_b
61182 : s_offset_c1 = 0
61183 : DO ic = 1, nl_c
61184 : s_offset_d1 = 0
61185 : DO id = 1, nl_d
61186 : buffer1 = 0.0_dp
61187 : imax = 15*3*1
61188 : kmax = 6
61189 : DO i = 1, imax
61190 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61191 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61192 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61193 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61194 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61195 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61196 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61197 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61198 : END DO
61199 : buffer2 = 0.0_dp
61200 : imax = 5*3*1
61201 : kmax = 15
61202 : DO i = 1, imax
61203 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61204 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61205 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61206 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61207 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61208 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61209 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61210 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61211 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61212 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61213 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61214 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61215 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61216 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61217 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61218 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61219 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61220 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61221 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61222 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61223 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61224 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61225 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61226 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61227 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61228 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61229 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61230 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61231 : END DO
61232 : buffer1 = 0.0_dp
61233 : imax = 5*9*1
61234 : kmax = 3
61235 : DO i = 1, imax
61236 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61237 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61238 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
61239 : END DO
61240 : imax = 5*9*3
61241 : kmax = 1
61242 : i = 0
61243 : DO i1 = 1, 3
61244 : DO i2 = 1, 9
61245 : DO i3 = 1, 5
61246 : i = i + 1
61247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
61249 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
61250 : END DO
61251 : END DO
61252 : END DO
61253 : s_offset_d1 = s_offset_d1 + 1
61254 : END DO
61255 : s_offset_c1 = s_offset_c1 + 3
61256 : END DO
61257 : s_offset_b1 = s_offset_b1 + 9
61258 : END DO
61259 : s_offset_a1 = s_offset_a1 + 5
61260 : END DO
61261 : END SUBROUTINE contract_dgps
61262 : #endif
61263 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61264 : ! **************************************************************************************************
61265 : !> \brief ...
61266 : !> \param work ...
61267 : !> \param nl_a ...
61268 : !> \param nl_b ...
61269 : !> \param nl_c ...
61270 : !> \param nl_d ...
61271 : !> \param sphi_a ...
61272 : !> \param sphi_b ...
61273 : !> \param sphi_c ...
61274 : !> \param sphi_d ...
61275 : !> \param primitives ...
61276 : !> \param buffer1 ...
61277 : !> \param buffer2 ...
61278 : ! **************************************************************************************************
61279 : SUBROUTINE contract_dgpp(work, &
61280 : nl_a, nl_b, nl_c, nl_d, &
61281 : sphi_a, sphi_b, sphi_c, sphi_d, &
61282 : primitives, &
61283 : buffer1, buffer2)
61284 : REAL(dp), DIMENSION(6*15*3*3), INTENT(IN) :: work
61285 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61286 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61287 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61288 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
61289 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
61290 : REAL(dp), &
61291 : DIMENSION(5*nl_a, 9*nl_b, 3*nl_c, 3*nl_d) :: primitives
61292 : REAL(dp), DIMENSION(6*15*3*3) :: buffer1, buffer2
61293 :
61294 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61295 : kmax, s_offset_a1, s_offset_b1, &
61296 : s_offset_c1, s_offset_d1
61297 :
61298 : s_offset_a1 = 0
61299 : DO ia = 1, nl_a
61300 : s_offset_b1 = 0
61301 : DO ib = 1, nl_b
61302 : s_offset_c1 = 0
61303 : DO ic = 1, nl_c
61304 : s_offset_d1 = 0
61305 : DO id = 1, nl_d
61306 : buffer1 = 0.0_dp
61307 : imax = 15*3*3
61308 : kmax = 6
61309 : DO i = 1, imax
61310 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61311 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61312 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61313 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61314 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61315 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61316 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61317 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61318 : END DO
61319 : buffer2 = 0.0_dp
61320 : imax = 5*3*3
61321 : kmax = 15
61322 : DO i = 1, imax
61323 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61324 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61325 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61326 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61327 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61328 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61329 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61330 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61331 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61332 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61333 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61334 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61335 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61336 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61337 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61338 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61339 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61340 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61341 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61342 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61343 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61344 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61345 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61346 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61347 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61348 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61349 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61350 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61351 : END DO
61352 : buffer1 = 0.0_dp
61353 : imax = 5*9*3
61354 : kmax = 3
61355 : DO i = 1, imax
61356 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61357 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61358 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
61359 : END DO
61360 : imax = 5*9*3
61361 : kmax = 3
61362 : i = 0
61363 : DO i1 = 1, 3
61364 : DO i2 = 1, 9
61365 : DO i3 = 1, 5
61366 : i = i + 1
61367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
61369 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
61370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
61372 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
61373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
61375 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
61376 : END DO
61377 : END DO
61378 : END DO
61379 : s_offset_d1 = s_offset_d1 + 3
61380 : END DO
61381 : s_offset_c1 = s_offset_c1 + 3
61382 : END DO
61383 : s_offset_b1 = s_offset_b1 + 9
61384 : END DO
61385 : s_offset_a1 = s_offset_a1 + 5
61386 : END DO
61387 : END SUBROUTINE contract_dgpp
61388 : #endif
61389 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61390 : ! **************************************************************************************************
61391 : !> \brief ...
61392 : !> \param work ...
61393 : !> \param nl_a ...
61394 : !> \param nl_b ...
61395 : !> \param nl_c ...
61396 : !> \param nl_d ...
61397 : !> \param sphi_a ...
61398 : !> \param sphi_b ...
61399 : !> \param sphi_c ...
61400 : !> \param sphi_d ...
61401 : !> \param primitives ...
61402 : !> \param buffer1 ...
61403 : !> \param buffer2 ...
61404 : ! **************************************************************************************************
61405 : SUBROUTINE contract_dgpd(work, &
61406 : nl_a, nl_b, nl_c, nl_d, &
61407 : sphi_a, sphi_b, sphi_c, sphi_d, &
61408 : primitives, &
61409 : buffer1, buffer2)
61410 : REAL(dp), DIMENSION(6*15*3*6), INTENT(IN) :: work
61411 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61412 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61413 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61414 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
61415 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
61416 : REAL(dp), &
61417 : DIMENSION(5*nl_a, 9*nl_b, 3*nl_c, 5*nl_d) :: primitives
61418 : REAL(dp), DIMENSION(6*15*3*6) :: buffer1, buffer2
61419 :
61420 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61421 : kmax, s_offset_a1, s_offset_b1, &
61422 : s_offset_c1, s_offset_d1
61423 :
61424 : s_offset_a1 = 0
61425 : DO ia = 1, nl_a
61426 : s_offset_b1 = 0
61427 : DO ib = 1, nl_b
61428 : s_offset_c1 = 0
61429 : DO ic = 1, nl_c
61430 : s_offset_d1 = 0
61431 : DO id = 1, nl_d
61432 : buffer1 = 0.0_dp
61433 : imax = 15*3*6
61434 : kmax = 6
61435 : DO i = 1, imax
61436 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61437 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61438 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61439 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61441 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61442 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61443 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61444 : END DO
61445 : buffer2 = 0.0_dp
61446 : imax = 5*3*6
61447 : kmax = 15
61448 : DO i = 1, imax
61449 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61450 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61451 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61452 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61453 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61454 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61455 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61456 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61457 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61458 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61459 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61460 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61461 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61462 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61463 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61464 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61465 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61466 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61467 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61468 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61469 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61470 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61471 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61472 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61473 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61474 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61475 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61476 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61477 : END DO
61478 : buffer1 = 0.0_dp
61479 : imax = 5*9*6
61480 : kmax = 3
61481 : DO i = 1, imax
61482 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61483 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61484 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
61485 : END DO
61486 : imax = 5*9*3
61487 : kmax = 6
61488 : i = 0
61489 : DO i1 = 1, 3
61490 : DO i2 = 1, 9
61491 : DO i3 = 1, 5
61492 : i = i + 1
61493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61495 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
61496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61498 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
61499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61501 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
61502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61504 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
61505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61507 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
61508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61510 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
61511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61513 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
61514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61516 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
61517 : END DO
61518 : END DO
61519 : END DO
61520 : s_offset_d1 = s_offset_d1 + 5
61521 : END DO
61522 : s_offset_c1 = s_offset_c1 + 3
61523 : END DO
61524 : s_offset_b1 = s_offset_b1 + 9
61525 : END DO
61526 : s_offset_a1 = s_offset_a1 + 5
61527 : END DO
61528 : END SUBROUTINE contract_dgpd
61529 : #endif
61530 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61531 : ! **************************************************************************************************
61532 : !> \brief ...
61533 : !> \param work ...
61534 : !> \param nl_a ...
61535 : !> \param nl_b ...
61536 : !> \param nl_c ...
61537 : !> \param nl_d ...
61538 : !> \param sphi_a ...
61539 : !> \param sphi_b ...
61540 : !> \param sphi_c ...
61541 : !> \param sphi_d ...
61542 : !> \param primitives ...
61543 : !> \param buffer1 ...
61544 : !> \param buffer2 ...
61545 : ! **************************************************************************************************
61546 : SUBROUTINE contract_dgpf(work, &
61547 : nl_a, nl_b, nl_c, nl_d, &
61548 : sphi_a, sphi_b, sphi_c, sphi_d, &
61549 : primitives, &
61550 : buffer1, buffer2)
61551 : REAL(dp), DIMENSION(6*15*3*10), INTENT(IN) :: work
61552 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61553 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61554 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61555 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
61556 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
61557 : REAL(dp), &
61558 : DIMENSION(5*nl_a, 9*nl_b, 3*nl_c, 7*nl_d) :: primitives
61559 : REAL(dp), DIMENSION(6*15*3*10) :: buffer1, buffer2
61560 :
61561 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61562 : kmax, s_offset_a1, s_offset_b1, &
61563 : s_offset_c1, s_offset_d1
61564 :
61565 : s_offset_a1 = 0
61566 : DO ia = 1, nl_a
61567 : s_offset_b1 = 0
61568 : DO ib = 1, nl_b
61569 : s_offset_c1 = 0
61570 : DO ic = 1, nl_c
61571 : s_offset_d1 = 0
61572 : DO id = 1, nl_d
61573 : buffer1 = 0.0_dp
61574 : imax = 15*3*10
61575 : kmax = 6
61576 : DO i = 1, imax
61577 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61578 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61579 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61580 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61581 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61583 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61585 : END DO
61586 : buffer2 = 0.0_dp
61587 : imax = 5*3*10
61588 : kmax = 15
61589 : DO i = 1, imax
61590 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61591 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61592 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61593 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61594 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61595 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61596 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61597 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61598 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61599 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61600 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61601 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61602 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61603 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61604 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61605 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61606 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61607 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61608 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61609 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61610 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61611 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61612 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61613 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61614 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61615 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61616 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61617 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61618 : END DO
61619 : buffer1 = 0.0_dp
61620 : imax = 5*9*10
61621 : kmax = 3
61622 : DO i = 1, imax
61623 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61624 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61625 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
61626 : END DO
61627 : imax = 5*9*3
61628 : kmax = 10
61629 : i = 0
61630 : DO i1 = 1, 3
61631 : DO i2 = 1, 9
61632 : DO i3 = 1, 5
61633 : i = i + 1
61634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61636 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
61637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61639 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
61640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61642 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
61643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61645 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
61646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61648 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
61649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61651 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
61652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61654 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
61655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61657 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
61658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61660 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
61661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61663 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
61664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61666 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
61667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61669 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
61670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61672 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
61673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61675 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
61676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61678 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
61679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61681 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
61682 : END DO
61683 : END DO
61684 : END DO
61685 : s_offset_d1 = s_offset_d1 + 7
61686 : END DO
61687 : s_offset_c1 = s_offset_c1 + 3
61688 : END DO
61689 : s_offset_b1 = s_offset_b1 + 9
61690 : END DO
61691 : s_offset_a1 = s_offset_a1 + 5
61692 : END DO
61693 : END SUBROUTINE contract_dgpf
61694 : #endif
61695 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61696 : ! **************************************************************************************************
61697 : !> \brief ...
61698 : !> \param work ...
61699 : !> \param nl_a ...
61700 : !> \param nl_b ...
61701 : !> \param nl_c ...
61702 : !> \param nl_d ...
61703 : !> \param sphi_a ...
61704 : !> \param sphi_b ...
61705 : !> \param sphi_c ...
61706 : !> \param sphi_d ...
61707 : !> \param primitives ...
61708 : !> \param buffer1 ...
61709 : !> \param buffer2 ...
61710 : ! **************************************************************************************************
61711 : SUBROUTINE contract_dgpg(work, &
61712 : nl_a, nl_b, nl_c, nl_d, &
61713 : sphi_a, sphi_b, sphi_c, sphi_d, &
61714 : primitives, &
61715 : buffer1, buffer2)
61716 : REAL(dp), DIMENSION(6*15*3*15), INTENT(IN) :: work
61717 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61718 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61719 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61720 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
61721 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
61722 : REAL(dp), &
61723 : DIMENSION(5*nl_a, 9*nl_b, 3*nl_c, 9*nl_d) :: primitives
61724 : REAL(dp), DIMENSION(6*15*3*15) :: buffer1, buffer2
61725 :
61726 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61727 : kmax, s_offset_a1, s_offset_b1, &
61728 : s_offset_c1, s_offset_d1
61729 :
61730 : s_offset_a1 = 0
61731 : DO ia = 1, nl_a
61732 : s_offset_b1 = 0
61733 : DO ib = 1, nl_b
61734 : s_offset_c1 = 0
61735 : DO ic = 1, nl_c
61736 : s_offset_d1 = 0
61737 : DO id = 1, nl_d
61738 : buffer1 = 0.0_dp
61739 : imax = 15*3*15
61740 : kmax = 6
61741 : DO i = 1, imax
61742 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61743 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61744 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61745 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61746 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61747 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61748 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61749 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61750 : END DO
61751 : buffer2 = 0.0_dp
61752 : imax = 5*3*15
61753 : kmax = 15
61754 : DO i = 1, imax
61755 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61756 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61757 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61758 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61759 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61760 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61761 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61762 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61763 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61764 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61765 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61766 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61767 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61768 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61769 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61770 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61771 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61772 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61773 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61774 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61775 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61776 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61777 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61778 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61779 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61780 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61781 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61782 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61783 : END DO
61784 : buffer1 = 0.0_dp
61785 : imax = 5*9*15
61786 : kmax = 3
61787 : DO i = 1, imax
61788 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61789 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61790 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
61791 : END DO
61792 : imax = 5*9*3
61793 : kmax = 15
61794 : i = 0
61795 : DO i1 = 1, 3
61796 : DO i2 = 1, 9
61797 : DO i3 = 1, 5
61798 : i = i + 1
61799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61801 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
61802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61804 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
61805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61807 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
61808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61810 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
61811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61813 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
61814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61816 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
61817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
61818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
61819 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
61820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61822 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
61823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61825 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
61826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61828 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
61829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61831 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
61832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61834 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
61835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61837 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
61838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
61839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
61840 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
61841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61843 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
61844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61846 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
61847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
61848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
61849 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
61850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
61851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
61852 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
61853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
61854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
61855 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
61856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61858 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
61859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61861 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
61862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
61863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
61864 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
61865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
61866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
61867 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
61868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61870 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
61871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61873 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
61874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
61875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
61876 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
61877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
61878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
61879 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
61880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
61881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
61882 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
61883 : END DO
61884 : END DO
61885 : END DO
61886 : s_offset_d1 = s_offset_d1 + 9
61887 : END DO
61888 : s_offset_c1 = s_offset_c1 + 3
61889 : END DO
61890 : s_offset_b1 = s_offset_b1 + 9
61891 : END DO
61892 : s_offset_a1 = s_offset_a1 + 5
61893 : END DO
61894 : END SUBROUTINE contract_dgpg
61895 : #endif
61896 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
61897 : ! **************************************************************************************************
61898 : !> \brief ...
61899 : !> \param work ...
61900 : !> \param nl_a ...
61901 : !> \param nl_b ...
61902 : !> \param nl_c ...
61903 : !> \param nl_d ...
61904 : !> \param sphi_a ...
61905 : !> \param sphi_b ...
61906 : !> \param sphi_c ...
61907 : !> \param sphi_d ...
61908 : !> \param primitives ...
61909 : !> \param buffer1 ...
61910 : !> \param buffer2 ...
61911 : ! **************************************************************************************************
61912 : SUBROUTINE contract_dgds(work, &
61913 : nl_a, nl_b, nl_c, nl_d, &
61914 : sphi_a, sphi_b, sphi_c, sphi_d, &
61915 : primitives, &
61916 : buffer1, buffer2)
61917 : REAL(dp), DIMENSION(6*15*6*1), INTENT(IN) :: work
61918 : INTEGER :: nl_a, nl_b, nl_c, nl_d
61919 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
61920 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
61921 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
61922 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
61923 : REAL(dp), &
61924 : DIMENSION(5*nl_a, 9*nl_b, 5*nl_c, 1*nl_d) :: primitives
61925 : REAL(dp), DIMENSION(6*15*6*1) :: buffer1, buffer2
61926 :
61927 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
61928 : kmax, s_offset_a1, s_offset_b1, &
61929 : s_offset_c1, s_offset_d1
61930 :
61931 : s_offset_a1 = 0
61932 : DO ia = 1, nl_a
61933 : s_offset_b1 = 0
61934 : DO ib = 1, nl_b
61935 : s_offset_c1 = 0
61936 : DO ic = 1, nl_c
61937 : s_offset_d1 = 0
61938 : DO id = 1, nl_d
61939 : buffer1 = 0.0_dp
61940 : imax = 15*6*1
61941 : kmax = 6
61942 : DO i = 1, imax
61943 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
61944 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
61945 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
61946 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
61947 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
61948 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
61949 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
61950 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
61951 : END DO
61952 : buffer2 = 0.0_dp
61953 : imax = 5*6*1
61954 : kmax = 15
61955 : DO i = 1, imax
61956 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
61957 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
61958 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
61959 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
61960 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
61961 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
61962 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
61963 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
61964 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
61965 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
61966 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
61967 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
61968 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
61969 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
61970 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
61971 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
61972 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
61973 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
61974 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
61975 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
61976 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
61977 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
61978 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
61979 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
61980 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
61981 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
61982 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
61983 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
61984 : END DO
61985 : buffer1 = 0.0_dp
61986 : imax = 5*9*1
61987 : kmax = 6
61988 : DO i = 1, imax
61989 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
61990 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
61991 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
61992 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
61993 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
61994 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
61995 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
61996 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
61997 : END DO
61998 : imax = 5*9*5
61999 : kmax = 1
62000 : i = 0
62001 : DO i1 = 1, 5
62002 : DO i2 = 1, 9
62003 : DO i3 = 1, 5
62004 : i = i + 1
62005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
62007 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
62008 : END DO
62009 : END DO
62010 : END DO
62011 : s_offset_d1 = s_offset_d1 + 1
62012 : END DO
62013 : s_offset_c1 = s_offset_c1 + 5
62014 : END DO
62015 : s_offset_b1 = s_offset_b1 + 9
62016 : END DO
62017 : s_offset_a1 = s_offset_a1 + 5
62018 : END DO
62019 : END SUBROUTINE contract_dgds
62020 : #endif
62021 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62022 : ! **************************************************************************************************
62023 : !> \brief ...
62024 : !> \param work ...
62025 : !> \param nl_a ...
62026 : !> \param nl_b ...
62027 : !> \param nl_c ...
62028 : !> \param nl_d ...
62029 : !> \param sphi_a ...
62030 : !> \param sphi_b ...
62031 : !> \param sphi_c ...
62032 : !> \param sphi_d ...
62033 : !> \param primitives ...
62034 : !> \param buffer1 ...
62035 : !> \param buffer2 ...
62036 : ! **************************************************************************************************
62037 : SUBROUTINE contract_dgdp(work, &
62038 : nl_a, nl_b, nl_c, nl_d, &
62039 : sphi_a, sphi_b, sphi_c, sphi_d, &
62040 : primitives, &
62041 : buffer1, buffer2)
62042 : REAL(dp), DIMENSION(6*15*6*3), INTENT(IN) :: work
62043 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62044 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62045 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62046 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
62047 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
62048 : REAL(dp), &
62049 : DIMENSION(5*nl_a, 9*nl_b, 5*nl_c, 3*nl_d) :: primitives
62050 : REAL(dp), DIMENSION(6*15*6*3) :: buffer1, buffer2
62051 :
62052 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62053 : kmax, s_offset_a1, s_offset_b1, &
62054 : s_offset_c1, s_offset_d1
62055 :
62056 : s_offset_a1 = 0
62057 : DO ia = 1, nl_a
62058 : s_offset_b1 = 0
62059 : DO ib = 1, nl_b
62060 : s_offset_c1 = 0
62061 : DO ic = 1, nl_c
62062 : s_offset_d1 = 0
62063 : DO id = 1, nl_d
62064 : buffer1 = 0.0_dp
62065 : imax = 15*6*3
62066 : kmax = 6
62067 : DO i = 1, imax
62068 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62069 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62070 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62071 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62072 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62073 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62074 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62075 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62076 : END DO
62077 : buffer2 = 0.0_dp
62078 : imax = 5*6*3
62079 : kmax = 15
62080 : DO i = 1, imax
62081 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62082 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62083 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62084 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62085 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62086 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62087 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62088 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62089 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62090 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62091 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62092 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62093 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62094 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62095 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62096 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62097 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62098 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62099 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62100 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62101 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62102 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62103 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62104 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62105 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62106 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62107 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62108 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62109 : END DO
62110 : buffer1 = 0.0_dp
62111 : imax = 5*9*3
62112 : kmax = 6
62113 : DO i = 1, imax
62114 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
62115 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62116 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62117 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62118 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
62119 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62120 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
62122 : END DO
62123 : imax = 5*9*5
62124 : kmax = 3
62125 : i = 0
62126 : DO i1 = 1, 5
62127 : DO i2 = 1, 9
62128 : DO i3 = 1, 5
62129 : i = i + 1
62130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
62132 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
62133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
62135 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
62136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
62138 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
62139 : END DO
62140 : END DO
62141 : END DO
62142 : s_offset_d1 = s_offset_d1 + 3
62143 : END DO
62144 : s_offset_c1 = s_offset_c1 + 5
62145 : END DO
62146 : s_offset_b1 = s_offset_b1 + 9
62147 : END DO
62148 : s_offset_a1 = s_offset_a1 + 5
62149 : END DO
62150 : END SUBROUTINE contract_dgdp
62151 : #endif
62152 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62153 : ! **************************************************************************************************
62154 : !> \brief ...
62155 : !> \param work ...
62156 : !> \param nl_a ...
62157 : !> \param nl_b ...
62158 : !> \param nl_c ...
62159 : !> \param nl_d ...
62160 : !> \param sphi_a ...
62161 : !> \param sphi_b ...
62162 : !> \param sphi_c ...
62163 : !> \param sphi_d ...
62164 : !> \param primitives ...
62165 : !> \param buffer1 ...
62166 : !> \param buffer2 ...
62167 : ! **************************************************************************************************
62168 : SUBROUTINE contract_dgdd(work, &
62169 : nl_a, nl_b, nl_c, nl_d, &
62170 : sphi_a, sphi_b, sphi_c, sphi_d, &
62171 : primitives, &
62172 : buffer1, buffer2)
62173 : REAL(dp), DIMENSION(6*15*6*6), INTENT(IN) :: work
62174 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62175 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62176 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62177 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
62178 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
62179 : REAL(dp), &
62180 : DIMENSION(5*nl_a, 9*nl_b, 5*nl_c, 5*nl_d) :: primitives
62181 : REAL(dp), DIMENSION(6*15*6*6) :: buffer1, buffer2
62182 :
62183 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62184 : kmax, s_offset_a1, s_offset_b1, &
62185 : s_offset_c1, s_offset_d1
62186 :
62187 : s_offset_a1 = 0
62188 : DO ia = 1, nl_a
62189 : s_offset_b1 = 0
62190 : DO ib = 1, nl_b
62191 : s_offset_c1 = 0
62192 : DO ic = 1, nl_c
62193 : s_offset_d1 = 0
62194 : DO id = 1, nl_d
62195 : buffer1 = 0.0_dp
62196 : imax = 15*6*6
62197 : kmax = 6
62198 : DO i = 1, imax
62199 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62200 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62201 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62202 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62203 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62204 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62205 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62206 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62207 : END DO
62208 : buffer2 = 0.0_dp
62209 : imax = 5*6*6
62210 : kmax = 15
62211 : DO i = 1, imax
62212 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62213 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62214 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62215 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62216 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62217 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62218 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62219 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62220 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62221 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62222 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62223 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62224 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62225 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62226 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62227 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62228 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62229 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62230 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62231 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62232 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62233 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62234 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62235 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62236 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62237 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62238 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62239 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62240 : END DO
62241 : buffer1 = 0.0_dp
62242 : imax = 5*9*6
62243 : kmax = 6
62244 : DO i = 1, imax
62245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
62246 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62247 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62248 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62249 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
62250 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62251 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62252 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
62253 : END DO
62254 : imax = 5*9*5
62255 : kmax = 6
62256 : i = 0
62257 : DO i1 = 1, 5
62258 : DO i2 = 1, 9
62259 : DO i3 = 1, 5
62260 : i = i + 1
62261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62263 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
62264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62266 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
62267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
62269 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
62270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62272 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
62273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62275 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
62276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62278 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
62279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
62281 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
62282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62284 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
62285 : END DO
62286 : END DO
62287 : END DO
62288 : s_offset_d1 = s_offset_d1 + 5
62289 : END DO
62290 : s_offset_c1 = s_offset_c1 + 5
62291 : END DO
62292 : s_offset_b1 = s_offset_b1 + 9
62293 : END DO
62294 : s_offset_a1 = s_offset_a1 + 5
62295 : END DO
62296 : END SUBROUTINE contract_dgdd
62297 : #endif
62298 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62299 : ! **************************************************************************************************
62300 : !> \brief ...
62301 : !> \param work ...
62302 : !> \param nl_a ...
62303 : !> \param nl_b ...
62304 : !> \param nl_c ...
62305 : !> \param nl_d ...
62306 : !> \param sphi_a ...
62307 : !> \param sphi_b ...
62308 : !> \param sphi_c ...
62309 : !> \param sphi_d ...
62310 : !> \param primitives ...
62311 : !> \param buffer1 ...
62312 : !> \param buffer2 ...
62313 : ! **************************************************************************************************
62314 : SUBROUTINE contract_dgdf(work, &
62315 : nl_a, nl_b, nl_c, nl_d, &
62316 : sphi_a, sphi_b, sphi_c, sphi_d, &
62317 : primitives, &
62318 : buffer1, buffer2)
62319 : REAL(dp), DIMENSION(6*15*6*10), INTENT(IN) :: work
62320 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62321 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62322 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62323 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
62324 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
62325 : REAL(dp), &
62326 : DIMENSION(5*nl_a, 9*nl_b, 5*nl_c, 7*nl_d) :: primitives
62327 : REAL(dp), DIMENSION(6*15*6*10) :: buffer1, buffer2
62328 :
62329 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62330 : kmax, s_offset_a1, s_offset_b1, &
62331 : s_offset_c1, s_offset_d1
62332 :
62333 : s_offset_a1 = 0
62334 : DO ia = 1, nl_a
62335 : s_offset_b1 = 0
62336 : DO ib = 1, nl_b
62337 : s_offset_c1 = 0
62338 : DO ic = 1, nl_c
62339 : s_offset_d1 = 0
62340 : DO id = 1, nl_d
62341 : buffer1 = 0.0_dp
62342 : imax = 15*6*10
62343 : kmax = 6
62344 : DO i = 1, imax
62345 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62346 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62347 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62348 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62349 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62351 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62352 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62353 : END DO
62354 : buffer2 = 0.0_dp
62355 : imax = 5*6*10
62356 : kmax = 15
62357 : DO i = 1, imax
62358 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62359 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62360 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62361 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62362 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62363 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62364 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62365 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62366 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62367 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62368 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62369 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62370 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62371 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62372 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62373 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62374 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62375 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62376 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62377 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62378 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62379 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62380 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62381 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62382 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62383 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62384 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62385 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62386 : END DO
62387 : buffer1 = 0.0_dp
62388 : imax = 5*9*10
62389 : kmax = 6
62390 : DO i = 1, imax
62391 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
62392 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62393 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62394 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62395 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
62396 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62397 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62398 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
62399 : END DO
62400 : imax = 5*9*5
62401 : kmax = 10
62402 : i = 0
62403 : DO i1 = 1, 5
62404 : DO i2 = 1, 9
62405 : DO i3 = 1, 5
62406 : i = i + 1
62407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62409 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
62410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62412 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
62413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
62415 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
62416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62418 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
62419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62421 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
62422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
62423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
62424 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
62425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62427 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
62428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62430 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
62431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
62433 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
62434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62436 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
62437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
62439 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
62440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62442 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
62443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62445 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
62446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
62447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
62448 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
62449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62451 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
62452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62454 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
62455 : END DO
62456 : END DO
62457 : END DO
62458 : s_offset_d1 = s_offset_d1 + 7
62459 : END DO
62460 : s_offset_c1 = s_offset_c1 + 5
62461 : END DO
62462 : s_offset_b1 = s_offset_b1 + 9
62463 : END DO
62464 : s_offset_a1 = s_offset_a1 + 5
62465 : END DO
62466 : END SUBROUTINE contract_dgdf
62467 : #endif
62468 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62469 : ! **************************************************************************************************
62470 : !> \brief ...
62471 : !> \param work ...
62472 : !> \param nl_a ...
62473 : !> \param nl_b ...
62474 : !> \param nl_c ...
62475 : !> \param nl_d ...
62476 : !> \param sphi_a ...
62477 : !> \param sphi_b ...
62478 : !> \param sphi_c ...
62479 : !> \param sphi_d ...
62480 : !> \param primitives ...
62481 : !> \param buffer1 ...
62482 : !> \param buffer2 ...
62483 : ! **************************************************************************************************
62484 : SUBROUTINE contract_dgdg(work, &
62485 : nl_a, nl_b, nl_c, nl_d, &
62486 : sphi_a, sphi_b, sphi_c, sphi_d, &
62487 : primitives, &
62488 : buffer1, buffer2)
62489 : REAL(dp), DIMENSION(6*15*6*15), INTENT(IN) :: work
62490 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62491 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62492 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62493 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
62494 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
62495 : REAL(dp), &
62496 : DIMENSION(5*nl_a, 9*nl_b, 5*nl_c, 9*nl_d) :: primitives
62497 : REAL(dp), DIMENSION(6*15*6*15) :: buffer1, buffer2
62498 :
62499 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62500 : kmax, s_offset_a1, s_offset_b1, &
62501 : s_offset_c1, s_offset_d1
62502 :
62503 : s_offset_a1 = 0
62504 : DO ia = 1, nl_a
62505 : s_offset_b1 = 0
62506 : DO ib = 1, nl_b
62507 : s_offset_c1 = 0
62508 : DO ic = 1, nl_c
62509 : s_offset_d1 = 0
62510 : DO id = 1, nl_d
62511 : buffer1 = 0.0_dp
62512 : imax = 15*6*15
62513 : kmax = 6
62514 : DO i = 1, imax
62515 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62516 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62517 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62518 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62519 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62520 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62521 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62522 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62523 : END DO
62524 : buffer2 = 0.0_dp
62525 : imax = 5*6*15
62526 : kmax = 15
62527 : DO i = 1, imax
62528 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62529 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62530 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62531 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62532 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62533 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62534 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62535 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62536 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62537 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62538 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62539 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62540 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62541 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62542 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62543 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62544 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62545 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62546 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62547 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62548 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62549 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62550 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62551 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62552 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62553 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62554 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62555 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62556 : END DO
62557 : buffer1 = 0.0_dp
62558 : imax = 5*9*15
62559 : kmax = 6
62560 : DO i = 1, imax
62561 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
62562 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62564 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62565 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
62566 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62567 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62568 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
62569 : END DO
62570 : imax = 5*9*5
62571 : kmax = 15
62572 : i = 0
62573 : DO i1 = 1, 5
62574 : DO i2 = 1, 9
62575 : DO i3 = 1, 5
62576 : i = i + 1
62577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62579 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
62580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62582 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
62583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
62584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
62585 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
62586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
62588 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
62589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62591 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
62592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
62593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
62594 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
62595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
62596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
62597 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
62598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62600 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
62601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
62602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
62603 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
62604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
62606 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
62607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62609 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
62610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62612 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
62613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62615 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
62616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
62618 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
62619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62621 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
62622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
62623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
62624 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
62625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
62626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
62627 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
62628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
62630 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
62631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
62632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
62633 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
62634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62636 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
62637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62639 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
62640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
62641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
62642 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
62643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
62645 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
62646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62648 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
62649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62651 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
62652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
62653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
62654 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
62655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
62656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
62657 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
62658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
62659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
62660 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
62661 : END DO
62662 : END DO
62663 : END DO
62664 : s_offset_d1 = s_offset_d1 + 9
62665 : END DO
62666 : s_offset_c1 = s_offset_c1 + 5
62667 : END DO
62668 : s_offset_b1 = s_offset_b1 + 9
62669 : END DO
62670 : s_offset_a1 = s_offset_a1 + 5
62671 : END DO
62672 : END SUBROUTINE contract_dgdg
62673 : #endif
62674 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62675 : ! **************************************************************************************************
62676 : !> \brief ...
62677 : !> \param work ...
62678 : !> \param nl_a ...
62679 : !> \param nl_b ...
62680 : !> \param nl_c ...
62681 : !> \param nl_d ...
62682 : !> \param sphi_a ...
62683 : !> \param sphi_b ...
62684 : !> \param sphi_c ...
62685 : !> \param sphi_d ...
62686 : !> \param primitives ...
62687 : !> \param buffer1 ...
62688 : !> \param buffer2 ...
62689 : ! **************************************************************************************************
62690 : SUBROUTINE contract_dgfs(work, &
62691 : nl_a, nl_b, nl_c, nl_d, &
62692 : sphi_a, sphi_b, sphi_c, sphi_d, &
62693 : primitives, &
62694 : buffer1, buffer2)
62695 : REAL(dp), DIMENSION(6*15*10*1), INTENT(IN) :: work
62696 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62697 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62698 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62699 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
62700 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
62701 : REAL(dp), &
62702 : DIMENSION(5*nl_a, 9*nl_b, 7*nl_c, 1*nl_d) :: primitives
62703 : REAL(dp), DIMENSION(6*15*10*1) :: buffer1, buffer2
62704 :
62705 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62706 : kmax, s_offset_a1, s_offset_b1, &
62707 : s_offset_c1, s_offset_d1
62708 :
62709 : s_offset_a1 = 0
62710 : DO ia = 1, nl_a
62711 : s_offset_b1 = 0
62712 : DO ib = 1, nl_b
62713 : s_offset_c1 = 0
62714 : DO ic = 1, nl_c
62715 : s_offset_d1 = 0
62716 : DO id = 1, nl_d
62717 : buffer1 = 0.0_dp
62718 : imax = 15*10*1
62719 : kmax = 6
62720 : DO i = 1, imax
62721 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62722 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62723 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62724 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62725 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62726 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62727 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62728 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62729 : END DO
62730 : buffer2 = 0.0_dp
62731 : imax = 5*10*1
62732 : kmax = 15
62733 : DO i = 1, imax
62734 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62735 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62736 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62737 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62738 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62739 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62740 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62741 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62742 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62743 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62744 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62745 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62746 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62747 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62748 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62749 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62750 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62751 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62752 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62753 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62754 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62755 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62756 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62757 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62758 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62759 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62760 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62761 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62762 : END DO
62763 : buffer1 = 0.0_dp
62764 : imax = 5*9*1
62765 : kmax = 10
62766 : DO i = 1, imax
62767 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62768 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
62769 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62770 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
62771 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62772 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
62773 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62774 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
62775 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
62777 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
62778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
62779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
62780 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
62781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
62782 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
62783 : END DO
62784 : imax = 5*9*7
62785 : kmax = 1
62786 : i = 0
62787 : DO i1 = 1, 7
62788 : DO i2 = 1, 9
62789 : DO i3 = 1, 5
62790 : i = i + 1
62791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
62793 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
62794 : END DO
62795 : END DO
62796 : END DO
62797 : s_offset_d1 = s_offset_d1 + 1
62798 : END DO
62799 : s_offset_c1 = s_offset_c1 + 7
62800 : END DO
62801 : s_offset_b1 = s_offset_b1 + 9
62802 : END DO
62803 : s_offset_a1 = s_offset_a1 + 5
62804 : END DO
62805 : END SUBROUTINE contract_dgfs
62806 : #endif
62807 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62808 : ! **************************************************************************************************
62809 : !> \brief ...
62810 : !> \param work ...
62811 : !> \param nl_a ...
62812 : !> \param nl_b ...
62813 : !> \param nl_c ...
62814 : !> \param nl_d ...
62815 : !> \param sphi_a ...
62816 : !> \param sphi_b ...
62817 : !> \param sphi_c ...
62818 : !> \param sphi_d ...
62819 : !> \param primitives ...
62820 : !> \param buffer1 ...
62821 : !> \param buffer2 ...
62822 : ! **************************************************************************************************
62823 : SUBROUTINE contract_dgfp(work, &
62824 : nl_a, nl_b, nl_c, nl_d, &
62825 : sphi_a, sphi_b, sphi_c, sphi_d, &
62826 : primitives, &
62827 : buffer1, buffer2)
62828 : REAL(dp), DIMENSION(6*15*10*3), INTENT(IN) :: work
62829 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62830 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62831 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62832 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
62833 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
62834 : REAL(dp), &
62835 : DIMENSION(5*nl_a, 9*nl_b, 7*nl_c, 3*nl_d) :: primitives
62836 : REAL(dp), DIMENSION(6*15*10*3) :: buffer1, buffer2
62837 :
62838 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62839 : kmax, s_offset_a1, s_offset_b1, &
62840 : s_offset_c1, s_offset_d1
62841 :
62842 : s_offset_a1 = 0
62843 : DO ia = 1, nl_a
62844 : s_offset_b1 = 0
62845 : DO ib = 1, nl_b
62846 : s_offset_c1 = 0
62847 : DO ic = 1, nl_c
62848 : s_offset_d1 = 0
62849 : DO id = 1, nl_d
62850 : buffer1 = 0.0_dp
62851 : imax = 15*10*3
62852 : kmax = 6
62853 : DO i = 1, imax
62854 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62855 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62856 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62857 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62858 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62859 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62860 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
62861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
62862 : END DO
62863 : buffer2 = 0.0_dp
62864 : imax = 5*10*3
62865 : kmax = 15
62866 : DO i = 1, imax
62867 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
62868 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
62869 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
62870 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
62871 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
62872 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
62873 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
62874 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
62875 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
62876 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
62877 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
62878 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
62879 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
62880 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
62881 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
62882 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
62883 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
62884 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
62885 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
62886 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
62887 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
62888 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
62889 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
62890 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
62891 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
62892 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
62893 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
62894 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
62895 : END DO
62896 : buffer1 = 0.0_dp
62897 : imax = 5*9*3
62898 : kmax = 10
62899 : DO i = 1, imax
62900 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
62901 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
62902 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
62903 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
62904 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
62905 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
62906 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
62907 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
62908 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
62909 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
62910 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
62911 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
62912 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
62913 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
62914 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
62915 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
62916 : END DO
62917 : imax = 5*9*7
62918 : kmax = 3
62919 : i = 0
62920 : DO i1 = 1, 7
62921 : DO i2 = 1, 9
62922 : DO i3 = 1, 5
62923 : i = i + 1
62924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
62925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
62926 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
62927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
62928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
62929 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
62930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
62931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
62932 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
62933 : END DO
62934 : END DO
62935 : END DO
62936 : s_offset_d1 = s_offset_d1 + 3
62937 : END DO
62938 : s_offset_c1 = s_offset_c1 + 7
62939 : END DO
62940 : s_offset_b1 = s_offset_b1 + 9
62941 : END DO
62942 : s_offset_a1 = s_offset_a1 + 5
62943 : END DO
62944 : END SUBROUTINE contract_dgfp
62945 : #endif
62946 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
62947 : ! **************************************************************************************************
62948 : !> \brief ...
62949 : !> \param work ...
62950 : !> \param nl_a ...
62951 : !> \param nl_b ...
62952 : !> \param nl_c ...
62953 : !> \param nl_d ...
62954 : !> \param sphi_a ...
62955 : !> \param sphi_b ...
62956 : !> \param sphi_c ...
62957 : !> \param sphi_d ...
62958 : !> \param primitives ...
62959 : !> \param buffer1 ...
62960 : !> \param buffer2 ...
62961 : ! **************************************************************************************************
62962 : SUBROUTINE contract_dgfd(work, &
62963 : nl_a, nl_b, nl_c, nl_d, &
62964 : sphi_a, sphi_b, sphi_c, sphi_d, &
62965 : primitives, &
62966 : buffer1, buffer2)
62967 : REAL(dp), DIMENSION(6*15*10*6), INTENT(IN) :: work
62968 : INTEGER :: nl_a, nl_b, nl_c, nl_d
62969 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
62970 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
62971 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
62972 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
62973 : REAL(dp), &
62974 : DIMENSION(5*nl_a, 9*nl_b, 7*nl_c, 5*nl_d) :: primitives
62975 : REAL(dp), DIMENSION(6*15*10*6) :: buffer1, buffer2
62976 :
62977 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
62978 : kmax, s_offset_a1, s_offset_b1, &
62979 : s_offset_c1, s_offset_d1
62980 :
62981 : s_offset_a1 = 0
62982 : DO ia = 1, nl_a
62983 : s_offset_b1 = 0
62984 : DO ib = 1, nl_b
62985 : s_offset_c1 = 0
62986 : DO ic = 1, nl_c
62987 : s_offset_d1 = 0
62988 : DO id = 1, nl_d
62989 : buffer1 = 0.0_dp
62990 : imax = 15*10*6
62991 : kmax = 6
62992 : DO i = 1, imax
62993 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
62994 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
62995 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
62996 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
62997 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
62998 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
62999 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63000 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63001 : END DO
63002 : buffer2 = 0.0_dp
63003 : imax = 5*10*6
63004 : kmax = 15
63005 : DO i = 1, imax
63006 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63007 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63008 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63009 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63010 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63011 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63012 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63013 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63014 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63015 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63016 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63017 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63018 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63019 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63020 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63021 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63022 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63023 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63024 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63025 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63026 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63027 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63028 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63029 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63030 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63031 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63032 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63033 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63034 : END DO
63035 : buffer1 = 0.0_dp
63036 : imax = 5*9*6
63037 : kmax = 10
63038 : DO i = 1, imax
63039 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63040 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63041 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63042 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63043 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
63044 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63045 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63046 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
63047 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63048 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63049 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63050 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63051 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
63052 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63054 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
63055 : END DO
63056 : imax = 5*9*7
63057 : kmax = 6
63058 : i = 0
63059 : DO i1 = 1, 7
63060 : DO i2 = 1, 9
63061 : DO i3 = 1, 5
63062 : i = i + 1
63063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63065 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
63066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63068 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
63069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63071 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
63072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63074 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
63075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63077 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
63078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63080 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
63081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
63083 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
63084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63086 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
63087 : END DO
63088 : END DO
63089 : END DO
63090 : s_offset_d1 = s_offset_d1 + 5
63091 : END DO
63092 : s_offset_c1 = s_offset_c1 + 7
63093 : END DO
63094 : s_offset_b1 = s_offset_b1 + 9
63095 : END DO
63096 : s_offset_a1 = s_offset_a1 + 5
63097 : END DO
63098 : END SUBROUTINE contract_dgfd
63099 : #endif
63100 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63101 : ! **************************************************************************************************
63102 : !> \brief ...
63103 : !> \param work ...
63104 : !> \param nl_a ...
63105 : !> \param nl_b ...
63106 : !> \param nl_c ...
63107 : !> \param nl_d ...
63108 : !> \param sphi_a ...
63109 : !> \param sphi_b ...
63110 : !> \param sphi_c ...
63111 : !> \param sphi_d ...
63112 : !> \param primitives ...
63113 : !> \param buffer1 ...
63114 : !> \param buffer2 ...
63115 : ! **************************************************************************************************
63116 : SUBROUTINE contract_dgff(work, &
63117 : nl_a, nl_b, nl_c, nl_d, &
63118 : sphi_a, sphi_b, sphi_c, sphi_d, &
63119 : primitives, &
63120 : buffer1, buffer2)
63121 : REAL(dp), DIMENSION(6*15*10*10), INTENT(IN) :: work
63122 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63123 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63124 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63125 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
63126 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
63127 : REAL(dp), &
63128 : DIMENSION(5*nl_a, 9*nl_b, 7*nl_c, 7*nl_d) :: primitives
63129 : REAL(dp), DIMENSION(6*15*10*10) :: buffer1, buffer2
63130 :
63131 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63132 : kmax, s_offset_a1, s_offset_b1, &
63133 : s_offset_c1, s_offset_d1
63134 :
63135 : s_offset_a1 = 0
63136 : DO ia = 1, nl_a
63137 : s_offset_b1 = 0
63138 : DO ib = 1, nl_b
63139 : s_offset_c1 = 0
63140 : DO ic = 1, nl_c
63141 : s_offset_d1 = 0
63142 : DO id = 1, nl_d
63143 : buffer1 = 0.0_dp
63144 : imax = 15*10*10
63145 : kmax = 6
63146 : DO i = 1, imax
63147 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
63148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
63149 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
63150 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
63151 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
63152 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
63153 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63154 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63155 : END DO
63156 : buffer2 = 0.0_dp
63157 : imax = 5*10*10
63158 : kmax = 15
63159 : DO i = 1, imax
63160 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63161 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63162 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63163 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63164 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63165 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63166 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63167 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63168 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63169 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63170 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63171 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63172 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63173 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63174 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63175 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63176 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63177 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63178 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63179 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63180 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63181 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63182 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63183 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63184 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63185 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63186 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63187 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63188 : END DO
63189 : buffer1 = 0.0_dp
63190 : imax = 5*9*10
63191 : kmax = 10
63192 : DO i = 1, imax
63193 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63194 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63195 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63196 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63197 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
63198 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63199 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63200 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
63201 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63202 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63203 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63204 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
63206 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63207 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63208 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
63209 : END DO
63210 : imax = 5*9*7
63211 : kmax = 10
63212 : i = 0
63213 : DO i1 = 1, 7
63214 : DO i2 = 1, 9
63215 : DO i3 = 1, 5
63216 : i = i + 1
63217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63219 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
63220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63222 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
63223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63225 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
63226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63228 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
63229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63231 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
63232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
63233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
63234 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
63235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63237 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
63238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63240 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
63241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
63243 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
63244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63246 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
63247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63249 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
63250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63252 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
63253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63255 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
63256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
63257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
63258 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
63259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63261 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
63262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63264 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
63265 : END DO
63266 : END DO
63267 : END DO
63268 : s_offset_d1 = s_offset_d1 + 7
63269 : END DO
63270 : s_offset_c1 = s_offset_c1 + 7
63271 : END DO
63272 : s_offset_b1 = s_offset_b1 + 9
63273 : END DO
63274 : s_offset_a1 = s_offset_a1 + 5
63275 : END DO
63276 : END SUBROUTINE contract_dgff
63277 : #endif
63278 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63279 : ! **************************************************************************************************
63280 : !> \brief ...
63281 : !> \param work ...
63282 : !> \param nl_a ...
63283 : !> \param nl_b ...
63284 : !> \param nl_c ...
63285 : !> \param nl_d ...
63286 : !> \param sphi_a ...
63287 : !> \param sphi_b ...
63288 : !> \param sphi_c ...
63289 : !> \param sphi_d ...
63290 : !> \param primitives ...
63291 : !> \param buffer1 ...
63292 : !> \param buffer2 ...
63293 : ! **************************************************************************************************
63294 : SUBROUTINE contract_dgfg(work, &
63295 : nl_a, nl_b, nl_c, nl_d, &
63296 : sphi_a, sphi_b, sphi_c, sphi_d, &
63297 : primitives, &
63298 : buffer1, buffer2)
63299 : REAL(dp), DIMENSION(6*15*10*15), INTENT(IN) :: work
63300 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63301 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63302 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63303 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
63304 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
63305 : REAL(dp), &
63306 : DIMENSION(5*nl_a, 9*nl_b, 7*nl_c, 9*nl_d) :: primitives
63307 : REAL(dp), DIMENSION(6*15*10*15) :: buffer1, buffer2
63308 :
63309 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63310 : kmax, s_offset_a1, s_offset_b1, &
63311 : s_offset_c1, s_offset_d1
63312 :
63313 : s_offset_a1 = 0
63314 : DO ia = 1, nl_a
63315 : s_offset_b1 = 0
63316 : DO ib = 1, nl_b
63317 : s_offset_c1 = 0
63318 : DO ic = 1, nl_c
63319 : s_offset_d1 = 0
63320 : DO id = 1, nl_d
63321 : buffer1 = 0.0_dp
63322 : imax = 15*10*15
63323 : kmax = 6
63324 : DO i = 1, imax
63325 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
63326 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
63327 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
63328 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
63329 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
63330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
63331 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63332 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63333 : END DO
63334 : buffer2 = 0.0_dp
63335 : imax = 5*10*15
63336 : kmax = 15
63337 : DO i = 1, imax
63338 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63339 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63340 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63341 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63342 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63343 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63344 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63345 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63346 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63347 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63348 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63349 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63350 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63351 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63352 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63353 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63354 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63355 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63356 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63357 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63358 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63359 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63360 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63361 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63362 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63363 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63364 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63365 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63366 : END DO
63367 : buffer1 = 0.0_dp
63368 : imax = 5*9*15
63369 : kmax = 10
63370 : DO i = 1, imax
63371 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63372 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63373 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63374 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63375 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
63376 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63378 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
63379 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63381 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63382 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63383 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
63384 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63385 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63386 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
63387 : END DO
63388 : imax = 5*9*7
63389 : kmax = 15
63390 : i = 0
63391 : DO i1 = 1, 7
63392 : DO i2 = 1, 9
63393 : DO i3 = 1, 5
63394 : i = i + 1
63395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63397 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
63398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63400 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
63401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
63402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
63403 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
63404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63406 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
63407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63409 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
63410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
63411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
63412 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
63413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
63414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
63415 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
63416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63418 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
63419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
63420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
63421 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
63422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
63424 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
63425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63427 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
63428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63430 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
63431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63433 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
63434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63436 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
63437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63439 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
63440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
63441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
63442 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
63443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
63444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
63445 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
63446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63448 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
63449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
63450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
63451 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
63452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63454 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
63455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63457 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
63458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
63459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
63460 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
63461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
63463 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
63464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63466 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
63467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63469 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
63470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
63471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
63472 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
63473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63475 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
63476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63478 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
63479 : END DO
63480 : END DO
63481 : END DO
63482 : s_offset_d1 = s_offset_d1 + 9
63483 : END DO
63484 : s_offset_c1 = s_offset_c1 + 7
63485 : END DO
63486 : s_offset_b1 = s_offset_b1 + 9
63487 : END DO
63488 : s_offset_a1 = s_offset_a1 + 5
63489 : END DO
63490 : END SUBROUTINE contract_dgfg
63491 : #endif
63492 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63493 : ! **************************************************************************************************
63494 : !> \brief ...
63495 : !> \param work ...
63496 : !> \param nl_a ...
63497 : !> \param nl_b ...
63498 : !> \param nl_c ...
63499 : !> \param nl_d ...
63500 : !> \param sphi_a ...
63501 : !> \param sphi_b ...
63502 : !> \param sphi_c ...
63503 : !> \param sphi_d ...
63504 : !> \param primitives ...
63505 : !> \param buffer1 ...
63506 : !> \param buffer2 ...
63507 : ! **************************************************************************************************
63508 : SUBROUTINE contract_dggs(work, &
63509 : nl_a, nl_b, nl_c, nl_d, &
63510 : sphi_a, sphi_b, sphi_c, sphi_d, &
63511 : primitives, &
63512 : buffer1, buffer2)
63513 : REAL(dp), DIMENSION(6*15*15*1), INTENT(IN) :: work
63514 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63515 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63516 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63517 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
63518 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
63519 : REAL(dp), &
63520 : DIMENSION(5*nl_a, 9*nl_b, 9*nl_c, 1*nl_d) :: primitives
63521 : REAL(dp), DIMENSION(6*15*15*1) :: buffer1, buffer2
63522 :
63523 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63524 : kmax, s_offset_a1, s_offset_b1, &
63525 : s_offset_c1, s_offset_d1
63526 :
63527 : s_offset_a1 = 0
63528 : DO ia = 1, nl_a
63529 : s_offset_b1 = 0
63530 : DO ib = 1, nl_b
63531 : s_offset_c1 = 0
63532 : DO ic = 1, nl_c
63533 : s_offset_d1 = 0
63534 : DO id = 1, nl_d
63535 : buffer1 = 0.0_dp
63536 : imax = 15*15*1
63537 : kmax = 6
63538 : DO i = 1, imax
63539 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
63540 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
63541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
63542 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
63543 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
63544 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
63545 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63546 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63547 : END DO
63548 : buffer2 = 0.0_dp
63549 : imax = 5*15*1
63550 : kmax = 15
63551 : DO i = 1, imax
63552 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63553 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63554 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63555 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63556 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63557 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63558 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63559 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63560 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63561 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63562 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63563 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63564 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63565 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63566 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63567 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63568 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63569 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63570 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63571 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63572 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63573 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63574 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63575 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63576 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63577 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63578 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63579 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63580 : END DO
63581 : buffer1 = 0.0_dp
63582 : imax = 5*9*1
63583 : kmax = 15
63584 : DO i = 1, imax
63585 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63586 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63587 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
63588 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63589 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63590 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63591 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
63592 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63593 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
63594 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63595 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
63596 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63597 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
63598 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63599 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63600 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63601 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
63602 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63603 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
63604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
63605 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
63606 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
63607 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
63608 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
63609 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
63610 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
63611 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
63612 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
63613 : END DO
63614 : imax = 5*9*9
63615 : kmax = 1
63616 : i = 0
63617 : DO i1 = 1, 9
63618 : DO i2 = 1, 9
63619 : DO i3 = 1, 5
63620 : i = i + 1
63621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
63623 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
63624 : END DO
63625 : END DO
63626 : END DO
63627 : s_offset_d1 = s_offset_d1 + 1
63628 : END DO
63629 : s_offset_c1 = s_offset_c1 + 9
63630 : END DO
63631 : s_offset_b1 = s_offset_b1 + 9
63632 : END DO
63633 : s_offset_a1 = s_offset_a1 + 5
63634 : END DO
63635 : END SUBROUTINE contract_dggs
63636 : #endif
63637 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63638 : ! **************************************************************************************************
63639 : !> \brief ...
63640 : !> \param work ...
63641 : !> \param nl_a ...
63642 : !> \param nl_b ...
63643 : !> \param nl_c ...
63644 : !> \param nl_d ...
63645 : !> \param sphi_a ...
63646 : !> \param sphi_b ...
63647 : !> \param sphi_c ...
63648 : !> \param sphi_d ...
63649 : !> \param primitives ...
63650 : !> \param buffer1 ...
63651 : !> \param buffer2 ...
63652 : ! **************************************************************************************************
63653 : SUBROUTINE contract_dggp(work, &
63654 : nl_a, nl_b, nl_c, nl_d, &
63655 : sphi_a, sphi_b, sphi_c, sphi_d, &
63656 : primitives, &
63657 : buffer1, buffer2)
63658 : REAL(dp), DIMENSION(6*15*15*3), INTENT(IN) :: work
63659 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63660 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63661 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63662 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
63663 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
63664 : REAL(dp), &
63665 : DIMENSION(5*nl_a, 9*nl_b, 9*nl_c, 3*nl_d) :: primitives
63666 : REAL(dp), DIMENSION(6*15*15*3) :: buffer1, buffer2
63667 :
63668 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63669 : kmax, s_offset_a1, s_offset_b1, &
63670 : s_offset_c1, s_offset_d1
63671 :
63672 : s_offset_a1 = 0
63673 : DO ia = 1, nl_a
63674 : s_offset_b1 = 0
63675 : DO ib = 1, nl_b
63676 : s_offset_c1 = 0
63677 : DO ic = 1, nl_c
63678 : s_offset_d1 = 0
63679 : DO id = 1, nl_d
63680 : buffer1 = 0.0_dp
63681 : imax = 15*15*3
63682 : kmax = 6
63683 : DO i = 1, imax
63684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
63685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
63686 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
63687 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
63688 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
63689 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
63690 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63691 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63692 : END DO
63693 : buffer2 = 0.0_dp
63694 : imax = 5*15*3
63695 : kmax = 15
63696 : DO i = 1, imax
63697 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63698 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63699 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63700 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63701 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63702 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63703 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63704 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63705 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63706 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63707 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63708 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63709 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63710 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63711 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63712 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63713 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63714 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63715 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63716 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63717 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63718 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63719 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63720 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63721 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63722 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63723 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63724 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63725 : END DO
63726 : buffer1 = 0.0_dp
63727 : imax = 5*9*3
63728 : kmax = 15
63729 : DO i = 1, imax
63730 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63731 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63732 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
63733 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63734 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63735 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63736 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
63737 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63738 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
63739 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63740 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
63741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63742 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
63743 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63744 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63745 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63746 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
63747 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63748 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
63749 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
63750 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
63751 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
63752 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
63753 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
63754 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
63755 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
63756 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
63757 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
63758 : END DO
63759 : imax = 5*9*9
63760 : kmax = 3
63761 : i = 0
63762 : DO i1 = 1, 9
63763 : DO i2 = 1, 9
63764 : DO i3 = 1, 5
63765 : i = i + 1
63766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
63768 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
63769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
63771 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
63772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
63774 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
63775 : END DO
63776 : END DO
63777 : END DO
63778 : s_offset_d1 = s_offset_d1 + 3
63779 : END DO
63780 : s_offset_c1 = s_offset_c1 + 9
63781 : END DO
63782 : s_offset_b1 = s_offset_b1 + 9
63783 : END DO
63784 : s_offset_a1 = s_offset_a1 + 5
63785 : END DO
63786 : END SUBROUTINE contract_dggp
63787 : #endif
63788 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63789 : ! **************************************************************************************************
63790 : !> \brief ...
63791 : !> \param work ...
63792 : !> \param nl_a ...
63793 : !> \param nl_b ...
63794 : !> \param nl_c ...
63795 : !> \param nl_d ...
63796 : !> \param sphi_a ...
63797 : !> \param sphi_b ...
63798 : !> \param sphi_c ...
63799 : !> \param sphi_d ...
63800 : !> \param primitives ...
63801 : !> \param buffer1 ...
63802 : !> \param buffer2 ...
63803 : ! **************************************************************************************************
63804 : SUBROUTINE contract_dggd(work, &
63805 : nl_a, nl_b, nl_c, nl_d, &
63806 : sphi_a, sphi_b, sphi_c, sphi_d, &
63807 : primitives, &
63808 : buffer1, buffer2)
63809 : REAL(dp), DIMENSION(6*15*15*6), INTENT(IN) :: work
63810 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63811 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63812 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63813 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
63814 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
63815 : REAL(dp), &
63816 : DIMENSION(5*nl_a, 9*nl_b, 9*nl_c, 5*nl_d) :: primitives
63817 : REAL(dp), DIMENSION(6*15*15*6) :: buffer1, buffer2
63818 :
63819 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63820 : kmax, s_offset_a1, s_offset_b1, &
63821 : s_offset_c1, s_offset_d1
63822 :
63823 : s_offset_a1 = 0
63824 : DO ia = 1, nl_a
63825 : s_offset_b1 = 0
63826 : DO ib = 1, nl_b
63827 : s_offset_c1 = 0
63828 : DO ic = 1, nl_c
63829 : s_offset_d1 = 0
63830 : DO id = 1, nl_d
63831 : buffer1 = 0.0_dp
63832 : imax = 15*15*6
63833 : kmax = 6
63834 : DO i = 1, imax
63835 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
63836 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
63837 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
63838 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
63839 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
63840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
63841 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
63842 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
63843 : END DO
63844 : buffer2 = 0.0_dp
63845 : imax = 5*15*6
63846 : kmax = 15
63847 : DO i = 1, imax
63848 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
63849 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
63850 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
63851 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
63852 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
63853 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
63854 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
63855 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
63856 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
63857 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
63858 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
63859 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
63860 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
63861 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
63862 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
63863 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
63864 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
63865 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
63866 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
63867 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
63868 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
63869 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
63870 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
63871 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
63872 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
63873 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
63874 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
63875 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
63876 : END DO
63877 : buffer1 = 0.0_dp
63878 : imax = 5*9*6
63879 : kmax = 15
63880 : DO i = 1, imax
63881 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
63882 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
63883 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
63884 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
63885 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
63886 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
63887 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
63888 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
63889 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
63890 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
63891 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
63892 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
63893 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
63894 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
63895 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
63896 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
63897 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
63898 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
63899 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
63900 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
63901 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
63902 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
63903 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
63904 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
63905 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
63906 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
63907 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
63908 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
63909 : END DO
63910 : imax = 5*9*9
63911 : kmax = 6
63912 : i = 0
63913 : DO i1 = 1, 9
63914 : DO i2 = 1, 9
63915 : DO i3 = 1, 5
63916 : i = i + 1
63917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63919 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
63920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63922 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
63923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
63924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
63925 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
63926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
63927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
63928 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
63929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63931 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
63932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
63933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
63934 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
63935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
63936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
63937 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
63938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
63939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
63940 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
63941 : END DO
63942 : END DO
63943 : END DO
63944 : s_offset_d1 = s_offset_d1 + 5
63945 : END DO
63946 : s_offset_c1 = s_offset_c1 + 9
63947 : END DO
63948 : s_offset_b1 = s_offset_b1 + 9
63949 : END DO
63950 : s_offset_a1 = s_offset_a1 + 5
63951 : END DO
63952 : END SUBROUTINE contract_dggd
63953 : #endif
63954 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
63955 : ! **************************************************************************************************
63956 : !> \brief ...
63957 : !> \param work ...
63958 : !> \param nl_a ...
63959 : !> \param nl_b ...
63960 : !> \param nl_c ...
63961 : !> \param nl_d ...
63962 : !> \param sphi_a ...
63963 : !> \param sphi_b ...
63964 : !> \param sphi_c ...
63965 : !> \param sphi_d ...
63966 : !> \param primitives ...
63967 : !> \param buffer1 ...
63968 : !> \param buffer2 ...
63969 : ! **************************************************************************************************
63970 : SUBROUTINE contract_dggf(work, &
63971 : nl_a, nl_b, nl_c, nl_d, &
63972 : sphi_a, sphi_b, sphi_c, sphi_d, &
63973 : primitives, &
63974 : buffer1, buffer2)
63975 : REAL(dp), DIMENSION(6*15*15*10), INTENT(IN) :: work
63976 : INTEGER :: nl_a, nl_b, nl_c, nl_d
63977 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
63978 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
63979 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
63980 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
63981 : REAL(dp), &
63982 : DIMENSION(5*nl_a, 9*nl_b, 9*nl_c, 7*nl_d) :: primitives
63983 : REAL(dp), DIMENSION(6*15*15*10) :: buffer1, buffer2
63984 :
63985 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
63986 : kmax, s_offset_a1, s_offset_b1, &
63987 : s_offset_c1, s_offset_d1
63988 :
63989 : s_offset_a1 = 0
63990 : DO ia = 1, nl_a
63991 : s_offset_b1 = 0
63992 : DO ib = 1, nl_b
63993 : s_offset_c1 = 0
63994 : DO ic = 1, nl_c
63995 : s_offset_d1 = 0
63996 : DO id = 1, nl_d
63997 : buffer1 = 0.0_dp
63998 : imax = 15*15*10
63999 : kmax = 6
64000 : DO i = 1, imax
64001 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
64002 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64003 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64004 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64005 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
64006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64007 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64008 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
64009 : END DO
64010 : buffer2 = 0.0_dp
64011 : imax = 5*15*10
64012 : kmax = 15
64013 : DO i = 1, imax
64014 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
64015 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
64016 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
64017 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
64018 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
64019 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
64020 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
64021 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
64022 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
64023 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
64024 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
64025 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
64026 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
64027 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
64028 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
64029 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
64030 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
64031 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
64032 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
64033 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
64034 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
64035 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
64036 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
64037 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
64038 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
64039 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
64040 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
64041 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
64042 : END DO
64043 : buffer1 = 0.0_dp
64044 : imax = 5*9*10
64045 : kmax = 15
64046 : DO i = 1, imax
64047 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
64048 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
64049 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
64050 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
64051 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
64052 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
64053 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
64054 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
64055 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
64056 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
64057 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
64058 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
64059 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
64060 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
64061 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
64062 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
64063 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
64064 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
64065 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
64066 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
64067 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
64068 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
64069 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
64070 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
64071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
64072 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
64073 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
64074 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
64075 : END DO
64076 : imax = 5*9*9
64077 : kmax = 10
64078 : i = 0
64079 : DO i1 = 1, 9
64080 : DO i2 = 1, 9
64081 : DO i3 = 1, 5
64082 : i = i + 1
64083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64085 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
64086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64088 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
64089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64091 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64094 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
64095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64097 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
64098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64100 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
64101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64103 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
64104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64106 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
64107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64109 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
64110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64112 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
64113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64115 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
64116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64118 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
64119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64121 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
64122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64124 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
64125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64127 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
64128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64130 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
64131 : END DO
64132 : END DO
64133 : END DO
64134 : s_offset_d1 = s_offset_d1 + 7
64135 : END DO
64136 : s_offset_c1 = s_offset_c1 + 9
64137 : END DO
64138 : s_offset_b1 = s_offset_b1 + 9
64139 : END DO
64140 : s_offset_a1 = s_offset_a1 + 5
64141 : END DO
64142 : END SUBROUTINE contract_dggf
64143 : #endif
64144 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
64145 : ! **************************************************************************************************
64146 : !> \brief ...
64147 : !> \param work ...
64148 : !> \param nl_a ...
64149 : !> \param nl_b ...
64150 : !> \param nl_c ...
64151 : !> \param nl_d ...
64152 : !> \param sphi_a ...
64153 : !> \param sphi_b ...
64154 : !> \param sphi_c ...
64155 : !> \param sphi_d ...
64156 : !> \param primitives ...
64157 : !> \param buffer1 ...
64158 : !> \param buffer2 ...
64159 : ! **************************************************************************************************
64160 : SUBROUTINE contract_dggg(work, &
64161 : nl_a, nl_b, nl_c, nl_d, &
64162 : sphi_a, sphi_b, sphi_c, sphi_d, &
64163 : primitives, &
64164 : buffer1, buffer2)
64165 : REAL(dp), DIMENSION(6*15*15*15), INTENT(IN) :: work
64166 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64167 : REAL(dp), DIMENSION(6, 5*nl_a), INTENT(IN) :: sphi_a
64168 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
64169 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
64170 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
64171 : REAL(dp), &
64172 : DIMENSION(5*nl_a, 9*nl_b, 9*nl_c, 9*nl_d) :: primitives
64173 : REAL(dp), DIMENSION(6*15*15*15) :: buffer1, buffer2
64174 :
64175 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64176 : kmax, s_offset_a1, s_offset_b1, &
64177 : s_offset_c1, s_offset_d1
64178 :
64179 : s_offset_a1 = 0
64180 : DO ia = 1, nl_a
64181 : s_offset_b1 = 0
64182 : DO ib = 1, nl_b
64183 : s_offset_c1 = 0
64184 : DO ic = 1, nl_c
64185 : s_offset_d1 = 0
64186 : DO id = 1, nl_d
64187 : buffer1 = 0.0_dp
64188 : imax = 15*15*15
64189 : kmax = 6
64190 : DO i = 1, imax
64191 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
64192 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64193 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64194 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64195 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
64196 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64197 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64198 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
64199 : END DO
64200 : buffer2 = 0.0_dp
64201 : imax = 5*15*15
64202 : kmax = 15
64203 : DO i = 1, imax
64204 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
64205 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
64206 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
64207 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
64208 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
64209 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
64210 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
64211 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
64212 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
64213 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
64214 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
64215 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
64216 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
64217 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
64218 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
64219 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
64220 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
64221 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
64222 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
64223 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
64224 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
64225 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
64226 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
64227 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
64228 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
64229 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
64230 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
64231 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
64232 : END DO
64233 : buffer1 = 0.0_dp
64234 : imax = 5*9*15
64235 : kmax = 15
64236 : DO i = 1, imax
64237 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
64238 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
64239 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
64240 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
64241 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
64242 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
64243 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
64244 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
64245 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
64246 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
64247 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
64248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
64249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
64250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
64251 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
64252 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
64253 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
64254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
64255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
64256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
64257 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
64258 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
64259 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
64260 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
64261 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
64262 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
64263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
64264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
64265 : END DO
64266 : imax = 5*9*9
64267 : kmax = 15
64268 : i = 0
64269 : DO i1 = 1, 9
64270 : DO i2 = 1, 9
64271 : DO i3 = 1, 5
64272 : i = i + 1
64273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64275 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
64276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64278 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
64279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64281 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
64282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64284 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64287 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
64288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64290 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
64291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
64292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
64293 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
64294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64296 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
64297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64299 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
64300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64302 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
64303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64305 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
64306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64308 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
64309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64311 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
64312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64314 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
64315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64317 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
64318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64320 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
64321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
64322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
64323 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
64324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64326 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
64327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64329 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
64330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64332 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
64333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64335 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
64336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64338 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
64339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64341 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
64342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64344 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
64345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64347 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
64348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64350 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
64351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64353 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
64354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64356 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
64357 : END DO
64358 : END DO
64359 : END DO
64360 : s_offset_d1 = s_offset_d1 + 9
64361 : END DO
64362 : s_offset_c1 = s_offset_c1 + 9
64363 : END DO
64364 : s_offset_b1 = s_offset_b1 + 9
64365 : END DO
64366 : s_offset_a1 = s_offset_a1 + 5
64367 : END DO
64368 : END SUBROUTINE contract_dggg
64369 : #endif
64370 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
64371 : ! **************************************************************************************************
64372 : !> \brief ...
64373 : !> \param work ...
64374 : !> \param nl_a ...
64375 : !> \param nl_b ...
64376 : !> \param nl_c ...
64377 : !> \param nl_d ...
64378 : !> \param sphi_a ...
64379 : !> \param sphi_b ...
64380 : !> \param sphi_c ...
64381 : !> \param sphi_d ...
64382 : !> \param primitives ...
64383 : !> \param buffer1 ...
64384 : !> \param buffer2 ...
64385 : ! **************************************************************************************************
64386 : SUBROUTINE contract_fsss(work, &
64387 : nl_a, nl_b, nl_c, nl_d, &
64388 : sphi_a, sphi_b, sphi_c, sphi_d, &
64389 : primitives, &
64390 : buffer1, buffer2)
64391 : REAL(dp), DIMENSION(10*1*1*1), INTENT(IN) :: work
64392 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64393 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
64394 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
64395 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
64396 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
64397 : REAL(dp), &
64398 : DIMENSION(7*nl_a, 1*nl_b, 1*nl_c, 1*nl_d) :: primitives
64399 : REAL(dp), DIMENSION(10*1*1*1) :: buffer1, buffer2
64400 :
64401 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64402 : kmax, s_offset_a1, s_offset_b1, &
64403 : s_offset_c1, s_offset_d1
64404 :
64405 : s_offset_a1 = 0
64406 : DO ia = 1, nl_a
64407 : s_offset_b1 = 0
64408 : DO ib = 1, nl_b
64409 : s_offset_c1 = 0
64410 : DO ic = 1, nl_c
64411 : s_offset_d1 = 0
64412 : DO id = 1, nl_d
64413 : buffer1 = 0.0_dp
64414 : imax = 1*1*1
64415 : kmax = 10
64416 : DO i = 1, imax
64417 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64418 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
64419 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64420 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
64421 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64422 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
64423 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64424 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
64425 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64426 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
64427 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
64428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
64429 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
64430 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
64431 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
64432 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
64433 : END DO
64434 : buffer2 = 0.0_dp
64435 : imax = 7*1*1
64436 : kmax = 1
64437 : DO i = 1, imax
64438 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
64439 : END DO
64440 : buffer1 = 0.0_dp
64441 : imax = 7*1*1
64442 : kmax = 1
64443 : DO i = 1, imax
64444 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
64445 : END DO
64446 : imax = 7*1*1
64447 : kmax = 1
64448 : i = 0
64449 : DO i1 = 1, 1
64450 : DO i2 = 1, 1
64451 : DO i3 = 1, 7
64452 : i = i + 1
64453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
64455 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
64456 : END DO
64457 : END DO
64458 : END DO
64459 : s_offset_d1 = s_offset_d1 + 1
64460 : END DO
64461 : s_offset_c1 = s_offset_c1 + 1
64462 : END DO
64463 : s_offset_b1 = s_offset_b1 + 1
64464 : END DO
64465 : s_offset_a1 = s_offset_a1 + 7
64466 : END DO
64467 : END SUBROUTINE contract_fsss
64468 : #endif
64469 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
64470 : ! **************************************************************************************************
64471 : !> \brief ...
64472 : !> \param work ...
64473 : !> \param nl_a ...
64474 : !> \param nl_b ...
64475 : !> \param nl_c ...
64476 : !> \param nl_d ...
64477 : !> \param sphi_a ...
64478 : !> \param sphi_b ...
64479 : !> \param sphi_c ...
64480 : !> \param sphi_d ...
64481 : !> \param primitives ...
64482 : !> \param buffer1 ...
64483 : !> \param buffer2 ...
64484 : ! **************************************************************************************************
64485 : SUBROUTINE contract_fssp(work, &
64486 : nl_a, nl_b, nl_c, nl_d, &
64487 : sphi_a, sphi_b, sphi_c, sphi_d, &
64488 : primitives, &
64489 : buffer1, buffer2)
64490 : REAL(dp), DIMENSION(10*1*1*3), INTENT(IN) :: work
64491 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64492 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
64493 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
64494 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
64495 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
64496 : REAL(dp), &
64497 : DIMENSION(7*nl_a, 1*nl_b, 1*nl_c, 3*nl_d) :: primitives
64498 : REAL(dp), DIMENSION(10*1*1*3) :: buffer1, buffer2
64499 :
64500 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64501 : kmax, s_offset_a1, s_offset_b1, &
64502 : s_offset_c1, s_offset_d1
64503 :
64504 : s_offset_a1 = 0
64505 : DO ia = 1, nl_a
64506 : s_offset_b1 = 0
64507 : DO ib = 1, nl_b
64508 : s_offset_c1 = 0
64509 : DO ic = 1, nl_c
64510 : s_offset_d1 = 0
64511 : DO id = 1, nl_d
64512 : buffer1 = 0.0_dp
64513 : imax = 1*1*3
64514 : kmax = 10
64515 : DO i = 1, imax
64516 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64517 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
64518 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64519 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
64520 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64521 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
64522 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64523 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
64524 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64525 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
64526 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
64527 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
64528 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
64529 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
64530 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
64531 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
64532 : END DO
64533 : buffer2 = 0.0_dp
64534 : imax = 7*1*3
64535 : kmax = 1
64536 : DO i = 1, imax
64537 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
64538 : END DO
64539 : buffer1 = 0.0_dp
64540 : imax = 7*1*3
64541 : kmax = 1
64542 : DO i = 1, imax
64543 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
64544 : END DO
64545 : imax = 7*1*1
64546 : kmax = 3
64547 : i = 0
64548 : DO i1 = 1, 1
64549 : DO i2 = 1, 1
64550 : DO i3 = 1, 7
64551 : i = i + 1
64552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
64554 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
64555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
64557 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
64560 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
64561 : END DO
64562 : END DO
64563 : END DO
64564 : s_offset_d1 = s_offset_d1 + 3
64565 : END DO
64566 : s_offset_c1 = s_offset_c1 + 1
64567 : END DO
64568 : s_offset_b1 = s_offset_b1 + 1
64569 : END DO
64570 : s_offset_a1 = s_offset_a1 + 7
64571 : END DO
64572 : END SUBROUTINE contract_fssp
64573 : #endif
64574 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
64575 : ! **************************************************************************************************
64576 : !> \brief ...
64577 : !> \param work ...
64578 : !> \param nl_a ...
64579 : !> \param nl_b ...
64580 : !> \param nl_c ...
64581 : !> \param nl_d ...
64582 : !> \param sphi_a ...
64583 : !> \param sphi_b ...
64584 : !> \param sphi_c ...
64585 : !> \param sphi_d ...
64586 : !> \param primitives ...
64587 : !> \param buffer1 ...
64588 : !> \param buffer2 ...
64589 : ! **************************************************************************************************
64590 : SUBROUTINE contract_fssd(work, &
64591 : nl_a, nl_b, nl_c, nl_d, &
64592 : sphi_a, sphi_b, sphi_c, sphi_d, &
64593 : primitives, &
64594 : buffer1, buffer2)
64595 : REAL(dp), DIMENSION(10*1*1*6), INTENT(IN) :: work
64596 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64597 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
64598 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
64599 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
64600 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
64601 : REAL(dp), &
64602 : DIMENSION(7*nl_a, 1*nl_b, 1*nl_c, 5*nl_d) :: primitives
64603 : REAL(dp), DIMENSION(10*1*1*6) :: buffer1, buffer2
64604 :
64605 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64606 : kmax, s_offset_a1, s_offset_b1, &
64607 : s_offset_c1, s_offset_d1
64608 :
64609 : s_offset_a1 = 0
64610 : DO ia = 1, nl_a
64611 : s_offset_b1 = 0
64612 : DO ib = 1, nl_b
64613 : s_offset_c1 = 0
64614 : DO ic = 1, nl_c
64615 : s_offset_d1 = 0
64616 : DO id = 1, nl_d
64617 : buffer1 = 0.0_dp
64618 : imax = 1*1*6
64619 : kmax = 10
64620 : DO i = 1, imax
64621 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64622 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
64623 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64624 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
64625 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64626 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
64627 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64628 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
64629 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64630 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
64631 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
64632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
64633 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
64634 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
64635 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
64636 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
64637 : END DO
64638 : buffer2 = 0.0_dp
64639 : imax = 7*1*6
64640 : kmax = 1
64641 : DO i = 1, imax
64642 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
64643 : END DO
64644 : buffer1 = 0.0_dp
64645 : imax = 7*1*6
64646 : kmax = 1
64647 : DO i = 1, imax
64648 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
64649 : END DO
64650 : imax = 7*1*1
64651 : kmax = 6
64652 : i = 0
64653 : DO i1 = 1, 1
64654 : DO i2 = 1, 1
64655 : DO i3 = 1, 7
64656 : i = i + 1
64657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64659 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
64660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64662 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
64663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64665 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64668 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
64669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64671 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
64672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64674 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
64675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64677 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
64678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64680 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
64681 : END DO
64682 : END DO
64683 : END DO
64684 : s_offset_d1 = s_offset_d1 + 5
64685 : END DO
64686 : s_offset_c1 = s_offset_c1 + 1
64687 : END DO
64688 : s_offset_b1 = s_offset_b1 + 1
64689 : END DO
64690 : s_offset_a1 = s_offset_a1 + 7
64691 : END DO
64692 : END SUBROUTINE contract_fssd
64693 : #endif
64694 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
64695 : ! **************************************************************************************************
64696 : !> \brief ...
64697 : !> \param work ...
64698 : !> \param nl_a ...
64699 : !> \param nl_b ...
64700 : !> \param nl_c ...
64701 : !> \param nl_d ...
64702 : !> \param sphi_a ...
64703 : !> \param sphi_b ...
64704 : !> \param sphi_c ...
64705 : !> \param sphi_d ...
64706 : !> \param primitives ...
64707 : !> \param buffer1 ...
64708 : !> \param buffer2 ...
64709 : ! **************************************************************************************************
64710 : SUBROUTINE contract_fssf(work, &
64711 : nl_a, nl_b, nl_c, nl_d, &
64712 : sphi_a, sphi_b, sphi_c, sphi_d, &
64713 : primitives, &
64714 : buffer1, buffer2)
64715 : REAL(dp), DIMENSION(10*1*1*10), INTENT(IN) :: work
64716 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64717 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
64718 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
64719 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
64720 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
64721 : REAL(dp), &
64722 : DIMENSION(7*nl_a, 1*nl_b, 1*nl_c, 7*nl_d) :: primitives
64723 : REAL(dp), DIMENSION(10*1*1*10) :: buffer1, buffer2
64724 :
64725 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64726 : kmax, s_offset_a1, s_offset_b1, &
64727 : s_offset_c1, s_offset_d1
64728 :
64729 : s_offset_a1 = 0
64730 : DO ia = 1, nl_a
64731 : s_offset_b1 = 0
64732 : DO ib = 1, nl_b
64733 : s_offset_c1 = 0
64734 : DO ic = 1, nl_c
64735 : s_offset_d1 = 0
64736 : DO id = 1, nl_d
64737 : buffer1 = 0.0_dp
64738 : imax = 1*1*10
64739 : kmax = 10
64740 : DO i = 1, imax
64741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64742 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
64743 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64744 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
64745 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64746 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
64747 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64748 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
64749 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64750 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
64751 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
64752 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
64753 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
64754 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
64755 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
64756 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
64757 : END DO
64758 : buffer2 = 0.0_dp
64759 : imax = 7*1*10
64760 : kmax = 1
64761 : DO i = 1, imax
64762 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
64763 : END DO
64764 : buffer1 = 0.0_dp
64765 : imax = 7*1*10
64766 : kmax = 1
64767 : DO i = 1, imax
64768 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
64769 : END DO
64770 : imax = 7*1*1
64771 : kmax = 10
64772 : i = 0
64773 : DO i1 = 1, 1
64774 : DO i2 = 1, 1
64775 : DO i3 = 1, 7
64776 : i = i + 1
64777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64779 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
64780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64782 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
64783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64785 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64788 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
64789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64791 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
64792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64794 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
64795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64797 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
64798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64800 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
64801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64803 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
64804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64806 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
64807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64809 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
64810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64812 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
64813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64815 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
64816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64818 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
64819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64821 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
64822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64824 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
64825 : END DO
64826 : END DO
64827 : END DO
64828 : s_offset_d1 = s_offset_d1 + 7
64829 : END DO
64830 : s_offset_c1 = s_offset_c1 + 1
64831 : END DO
64832 : s_offset_b1 = s_offset_b1 + 1
64833 : END DO
64834 : s_offset_a1 = s_offset_a1 + 7
64835 : END DO
64836 : END SUBROUTINE contract_fssf
64837 : #endif
64838 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
64839 : ! **************************************************************************************************
64840 : !> \brief ...
64841 : !> \param work ...
64842 : !> \param nl_a ...
64843 : !> \param nl_b ...
64844 : !> \param nl_c ...
64845 : !> \param nl_d ...
64846 : !> \param sphi_a ...
64847 : !> \param sphi_b ...
64848 : !> \param sphi_c ...
64849 : !> \param sphi_d ...
64850 : !> \param primitives ...
64851 : !> \param buffer1 ...
64852 : !> \param buffer2 ...
64853 : ! **************************************************************************************************
64854 : SUBROUTINE contract_fssg(work, &
64855 : nl_a, nl_b, nl_c, nl_d, &
64856 : sphi_a, sphi_b, sphi_c, sphi_d, &
64857 : primitives, &
64858 : buffer1, buffer2)
64859 : REAL(dp), DIMENSION(10*1*1*15), INTENT(IN) :: work
64860 : INTEGER :: nl_a, nl_b, nl_c, nl_d
64861 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
64862 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
64863 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
64864 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
64865 : REAL(dp), &
64866 : DIMENSION(7*nl_a, 1*nl_b, 1*nl_c, 9*nl_d) :: primitives
64867 : REAL(dp), DIMENSION(10*1*1*15) :: buffer1, buffer2
64868 :
64869 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
64870 : kmax, s_offset_a1, s_offset_b1, &
64871 : s_offset_c1, s_offset_d1
64872 :
64873 : s_offset_a1 = 0
64874 : DO ia = 1, nl_a
64875 : s_offset_b1 = 0
64876 : DO ib = 1, nl_b
64877 : s_offset_c1 = 0
64878 : DO ic = 1, nl_c
64879 : s_offset_d1 = 0
64880 : DO id = 1, nl_d
64881 : buffer1 = 0.0_dp
64882 : imax = 1*1*15
64883 : kmax = 10
64884 : DO i = 1, imax
64885 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
64886 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
64887 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
64888 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
64889 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
64890 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
64891 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
64892 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
64893 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
64894 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
64895 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
64896 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
64897 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
64898 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
64899 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
64900 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
64901 : END DO
64902 : buffer2 = 0.0_dp
64903 : imax = 7*1*15
64904 : kmax = 1
64905 : DO i = 1, imax
64906 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
64907 : END DO
64908 : buffer1 = 0.0_dp
64909 : imax = 7*1*15
64910 : kmax = 1
64911 : DO i = 1, imax
64912 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
64913 : END DO
64914 : imax = 7*1*1
64915 : kmax = 15
64916 : i = 0
64917 : DO i1 = 1, 1
64918 : DO i2 = 1, 1
64919 : DO i3 = 1, 7
64920 : i = i + 1
64921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64923 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
64924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64926 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
64927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64929 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
64930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64932 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
64933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64935 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
64936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64938 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
64939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
64940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
64941 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
64942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64944 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
64945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64947 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
64948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64950 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
64951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64953 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
64954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64956 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
64957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64959 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
64960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
64961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
64962 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
64963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64965 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
64966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64968 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
64969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
64970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
64971 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
64972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
64973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
64974 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
64975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
64976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
64977 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
64978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64980 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
64981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64983 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
64984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
64985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
64986 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
64987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
64988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
64989 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
64990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
64991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
64992 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
64993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
64994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
64995 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
64996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
64997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
64998 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
64999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65001 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
65002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65004 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
65005 : END DO
65006 : END DO
65007 : END DO
65008 : s_offset_d1 = s_offset_d1 + 9
65009 : END DO
65010 : s_offset_c1 = s_offset_c1 + 1
65011 : END DO
65012 : s_offset_b1 = s_offset_b1 + 1
65013 : END DO
65014 : s_offset_a1 = s_offset_a1 + 7
65015 : END DO
65016 : END SUBROUTINE contract_fssg
65017 : #endif
65018 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65019 : ! **************************************************************************************************
65020 : !> \brief ...
65021 : !> \param work ...
65022 : !> \param nl_a ...
65023 : !> \param nl_b ...
65024 : !> \param nl_c ...
65025 : !> \param nl_d ...
65026 : !> \param sphi_a ...
65027 : !> \param sphi_b ...
65028 : !> \param sphi_c ...
65029 : !> \param sphi_d ...
65030 : !> \param primitives ...
65031 : !> \param buffer1 ...
65032 : !> \param buffer2 ...
65033 : ! **************************************************************************************************
65034 : SUBROUTINE contract_fsps(work, &
65035 : nl_a, nl_b, nl_c, nl_d, &
65036 : sphi_a, sphi_b, sphi_c, sphi_d, &
65037 : primitives, &
65038 : buffer1, buffer2)
65039 : REAL(dp), DIMENSION(10*1*3*1), INTENT(IN) :: work
65040 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65041 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65042 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65043 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
65044 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
65045 : REAL(dp), &
65046 : DIMENSION(7*nl_a, 1*nl_b, 3*nl_c, 1*nl_d) :: primitives
65047 : REAL(dp), DIMENSION(10*1*3*1) :: buffer1, buffer2
65048 :
65049 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65050 : kmax, s_offset_a1, s_offset_b1, &
65051 : s_offset_c1, s_offset_d1
65052 :
65053 : s_offset_a1 = 0
65054 : DO ia = 1, nl_a
65055 : s_offset_b1 = 0
65056 : DO ib = 1, nl_b
65057 : s_offset_c1 = 0
65058 : DO ic = 1, nl_c
65059 : s_offset_d1 = 0
65060 : DO id = 1, nl_d
65061 : buffer1 = 0.0_dp
65062 : imax = 1*3*1
65063 : kmax = 10
65064 : DO i = 1, imax
65065 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65066 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65067 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65068 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65069 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65070 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65072 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65073 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65074 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65075 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65077 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65078 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65080 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65081 : END DO
65082 : buffer2 = 0.0_dp
65083 : imax = 7*3*1
65084 : kmax = 1
65085 : DO i = 1, imax
65086 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65087 : END DO
65088 : buffer1 = 0.0_dp
65089 : imax = 7*1*1
65090 : kmax = 3
65091 : DO i = 1, imax
65092 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65093 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65094 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
65095 : END DO
65096 : imax = 7*1*3
65097 : kmax = 1
65098 : i = 0
65099 : DO i1 = 1, 3
65100 : DO i2 = 1, 1
65101 : DO i3 = 1, 7
65102 : i = i + 1
65103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
65105 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
65106 : END DO
65107 : END DO
65108 : END DO
65109 : s_offset_d1 = s_offset_d1 + 1
65110 : END DO
65111 : s_offset_c1 = s_offset_c1 + 3
65112 : END DO
65113 : s_offset_b1 = s_offset_b1 + 1
65114 : END DO
65115 : s_offset_a1 = s_offset_a1 + 7
65116 : END DO
65117 : END SUBROUTINE contract_fsps
65118 : #endif
65119 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65120 : ! **************************************************************************************************
65121 : !> \brief ...
65122 : !> \param work ...
65123 : !> \param nl_a ...
65124 : !> \param nl_b ...
65125 : !> \param nl_c ...
65126 : !> \param nl_d ...
65127 : !> \param sphi_a ...
65128 : !> \param sphi_b ...
65129 : !> \param sphi_c ...
65130 : !> \param sphi_d ...
65131 : !> \param primitives ...
65132 : !> \param buffer1 ...
65133 : !> \param buffer2 ...
65134 : ! **************************************************************************************************
65135 : SUBROUTINE contract_fspp(work, &
65136 : nl_a, nl_b, nl_c, nl_d, &
65137 : sphi_a, sphi_b, sphi_c, sphi_d, &
65138 : primitives, &
65139 : buffer1, buffer2)
65140 : REAL(dp), DIMENSION(10*1*3*3), INTENT(IN) :: work
65141 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65142 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65143 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65144 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
65145 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
65146 : REAL(dp), &
65147 : DIMENSION(7*nl_a, 1*nl_b, 3*nl_c, 3*nl_d) :: primitives
65148 : REAL(dp), DIMENSION(10*1*3*3) :: buffer1, buffer2
65149 :
65150 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65151 : kmax, s_offset_a1, s_offset_b1, &
65152 : s_offset_c1, s_offset_d1
65153 :
65154 : s_offset_a1 = 0
65155 : DO ia = 1, nl_a
65156 : s_offset_b1 = 0
65157 : DO ib = 1, nl_b
65158 : s_offset_c1 = 0
65159 : DO ic = 1, nl_c
65160 : s_offset_d1 = 0
65161 : DO id = 1, nl_d
65162 : buffer1 = 0.0_dp
65163 : imax = 1*3*3
65164 : kmax = 10
65165 : DO i = 1, imax
65166 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65167 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65168 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65169 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65170 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65171 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65172 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65173 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65174 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65175 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65176 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65177 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65178 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65179 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65180 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65182 : END DO
65183 : buffer2 = 0.0_dp
65184 : imax = 7*3*3
65185 : kmax = 1
65186 : DO i = 1, imax
65187 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65188 : END DO
65189 : buffer1 = 0.0_dp
65190 : imax = 7*1*3
65191 : kmax = 3
65192 : DO i = 1, imax
65193 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65194 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65195 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
65196 : END DO
65197 : imax = 7*1*3
65198 : kmax = 3
65199 : i = 0
65200 : DO i1 = 1, 3
65201 : DO i2 = 1, 1
65202 : DO i3 = 1, 7
65203 : i = i + 1
65204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
65206 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
65207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
65209 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
65212 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
65213 : END DO
65214 : END DO
65215 : END DO
65216 : s_offset_d1 = s_offset_d1 + 3
65217 : END DO
65218 : s_offset_c1 = s_offset_c1 + 3
65219 : END DO
65220 : s_offset_b1 = s_offset_b1 + 1
65221 : END DO
65222 : s_offset_a1 = s_offset_a1 + 7
65223 : END DO
65224 : END SUBROUTINE contract_fspp
65225 : #endif
65226 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65227 : ! **************************************************************************************************
65228 : !> \brief ...
65229 : !> \param work ...
65230 : !> \param nl_a ...
65231 : !> \param nl_b ...
65232 : !> \param nl_c ...
65233 : !> \param nl_d ...
65234 : !> \param sphi_a ...
65235 : !> \param sphi_b ...
65236 : !> \param sphi_c ...
65237 : !> \param sphi_d ...
65238 : !> \param primitives ...
65239 : !> \param buffer1 ...
65240 : !> \param buffer2 ...
65241 : ! **************************************************************************************************
65242 : SUBROUTINE contract_fspd(work, &
65243 : nl_a, nl_b, nl_c, nl_d, &
65244 : sphi_a, sphi_b, sphi_c, sphi_d, &
65245 : primitives, &
65246 : buffer1, buffer2)
65247 : REAL(dp), DIMENSION(10*1*3*6), INTENT(IN) :: work
65248 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65249 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65250 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65251 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
65252 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
65253 : REAL(dp), &
65254 : DIMENSION(7*nl_a, 1*nl_b, 3*nl_c, 5*nl_d) :: primitives
65255 : REAL(dp), DIMENSION(10*1*3*6) :: buffer1, buffer2
65256 :
65257 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65258 : kmax, s_offset_a1, s_offset_b1, &
65259 : s_offset_c1, s_offset_d1
65260 :
65261 : s_offset_a1 = 0
65262 : DO ia = 1, nl_a
65263 : s_offset_b1 = 0
65264 : DO ib = 1, nl_b
65265 : s_offset_c1 = 0
65266 : DO ic = 1, nl_c
65267 : s_offset_d1 = 0
65268 : DO id = 1, nl_d
65269 : buffer1 = 0.0_dp
65270 : imax = 1*3*6
65271 : kmax = 10
65272 : DO i = 1, imax
65273 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65274 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65275 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65276 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65277 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65278 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65279 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65280 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65281 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65283 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65284 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65285 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65286 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65287 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65288 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65289 : END DO
65290 : buffer2 = 0.0_dp
65291 : imax = 7*3*6
65292 : kmax = 1
65293 : DO i = 1, imax
65294 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65295 : END DO
65296 : buffer1 = 0.0_dp
65297 : imax = 7*1*6
65298 : kmax = 3
65299 : DO i = 1, imax
65300 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65301 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65302 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
65303 : END DO
65304 : imax = 7*1*3
65305 : kmax = 6
65306 : i = 0
65307 : DO i1 = 1, 3
65308 : DO i2 = 1, 1
65309 : DO i3 = 1, 7
65310 : i = i + 1
65311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65313 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
65314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65316 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
65317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65319 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65322 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
65323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65325 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
65326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65328 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
65329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
65331 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
65332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65334 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
65335 : END DO
65336 : END DO
65337 : END DO
65338 : s_offset_d1 = s_offset_d1 + 5
65339 : END DO
65340 : s_offset_c1 = s_offset_c1 + 3
65341 : END DO
65342 : s_offset_b1 = s_offset_b1 + 1
65343 : END DO
65344 : s_offset_a1 = s_offset_a1 + 7
65345 : END DO
65346 : END SUBROUTINE contract_fspd
65347 : #endif
65348 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65349 : ! **************************************************************************************************
65350 : !> \brief ...
65351 : !> \param work ...
65352 : !> \param nl_a ...
65353 : !> \param nl_b ...
65354 : !> \param nl_c ...
65355 : !> \param nl_d ...
65356 : !> \param sphi_a ...
65357 : !> \param sphi_b ...
65358 : !> \param sphi_c ...
65359 : !> \param sphi_d ...
65360 : !> \param primitives ...
65361 : !> \param buffer1 ...
65362 : !> \param buffer2 ...
65363 : ! **************************************************************************************************
65364 : SUBROUTINE contract_fspf(work, &
65365 : nl_a, nl_b, nl_c, nl_d, &
65366 : sphi_a, sphi_b, sphi_c, sphi_d, &
65367 : primitives, &
65368 : buffer1, buffer2)
65369 : REAL(dp), DIMENSION(10*1*3*10), INTENT(IN) :: work
65370 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65371 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65372 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65373 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
65374 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
65375 : REAL(dp), &
65376 : DIMENSION(7*nl_a, 1*nl_b, 3*nl_c, 7*nl_d) :: primitives
65377 : REAL(dp), DIMENSION(10*1*3*10) :: buffer1, buffer2
65378 :
65379 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65380 : kmax, s_offset_a1, s_offset_b1, &
65381 : s_offset_c1, s_offset_d1
65382 :
65383 : s_offset_a1 = 0
65384 : DO ia = 1, nl_a
65385 : s_offset_b1 = 0
65386 : DO ib = 1, nl_b
65387 : s_offset_c1 = 0
65388 : DO ic = 1, nl_c
65389 : s_offset_d1 = 0
65390 : DO id = 1, nl_d
65391 : buffer1 = 0.0_dp
65392 : imax = 1*3*10
65393 : kmax = 10
65394 : DO i = 1, imax
65395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65396 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65397 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65398 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65399 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65400 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65401 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65402 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65403 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65404 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65405 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65406 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65407 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65408 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65409 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65410 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65411 : END DO
65412 : buffer2 = 0.0_dp
65413 : imax = 7*3*10
65414 : kmax = 1
65415 : DO i = 1, imax
65416 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65417 : END DO
65418 : buffer1 = 0.0_dp
65419 : imax = 7*1*10
65420 : kmax = 3
65421 : DO i = 1, imax
65422 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65423 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65424 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
65425 : END DO
65426 : imax = 7*1*3
65427 : kmax = 10
65428 : i = 0
65429 : DO i1 = 1, 3
65430 : DO i2 = 1, 1
65431 : DO i3 = 1, 7
65432 : i = i + 1
65433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65435 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
65436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65438 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
65439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65441 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65444 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
65445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65447 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
65448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
65449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
65450 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
65451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65453 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
65454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65456 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
65457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
65459 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
65460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65462 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
65463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65465 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
65466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65468 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
65469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65471 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
65472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
65473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
65474 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
65475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65477 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
65478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65480 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
65481 : END DO
65482 : END DO
65483 : END DO
65484 : s_offset_d1 = s_offset_d1 + 7
65485 : END DO
65486 : s_offset_c1 = s_offset_c1 + 3
65487 : END DO
65488 : s_offset_b1 = s_offset_b1 + 1
65489 : END DO
65490 : s_offset_a1 = s_offset_a1 + 7
65491 : END DO
65492 : END SUBROUTINE contract_fspf
65493 : #endif
65494 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
65495 : ! **************************************************************************************************
65496 : !> \brief ...
65497 : !> \param work ...
65498 : !> \param nl_a ...
65499 : !> \param nl_b ...
65500 : !> \param nl_c ...
65501 : !> \param nl_d ...
65502 : !> \param sphi_a ...
65503 : !> \param sphi_b ...
65504 : !> \param sphi_c ...
65505 : !> \param sphi_d ...
65506 : !> \param primitives ...
65507 : !> \param buffer1 ...
65508 : !> \param buffer2 ...
65509 : ! **************************************************************************************************
65510 : SUBROUTINE contract_fspg(work, &
65511 : nl_a, nl_b, nl_c, nl_d, &
65512 : sphi_a, sphi_b, sphi_c, sphi_d, &
65513 : primitives, &
65514 : buffer1, buffer2)
65515 : REAL(dp), DIMENSION(10*1*3*15), INTENT(IN) :: work
65516 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65517 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65518 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65519 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
65520 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
65521 : REAL(dp), &
65522 : DIMENSION(7*nl_a, 1*nl_b, 3*nl_c, 9*nl_d) :: primitives
65523 : REAL(dp), DIMENSION(10*1*3*15) :: buffer1, buffer2
65524 :
65525 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65526 : kmax, s_offset_a1, s_offset_b1, &
65527 : s_offset_c1, s_offset_d1
65528 :
65529 : s_offset_a1 = 0
65530 : DO ia = 1, nl_a
65531 : s_offset_b1 = 0
65532 : DO ib = 1, nl_b
65533 : s_offset_c1 = 0
65534 : DO ic = 1, nl_c
65535 : s_offset_d1 = 0
65536 : DO id = 1, nl_d
65537 : buffer1 = 0.0_dp
65538 : imax = 1*3*15
65539 : kmax = 10
65540 : DO i = 1, imax
65541 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65542 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65543 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65544 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65545 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65546 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65547 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65548 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65549 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65550 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65551 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65552 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65553 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65554 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65555 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65556 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65557 : END DO
65558 : buffer2 = 0.0_dp
65559 : imax = 7*3*15
65560 : kmax = 1
65561 : DO i = 1, imax
65562 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65563 : END DO
65564 : buffer1 = 0.0_dp
65565 : imax = 7*1*15
65566 : kmax = 3
65567 : DO i = 1, imax
65568 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65569 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65570 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
65571 : END DO
65572 : imax = 7*1*3
65573 : kmax = 15
65574 : i = 0
65575 : DO i1 = 1, 3
65576 : DO i2 = 1, 1
65577 : DO i3 = 1, 7
65578 : i = i + 1
65579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65581 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
65582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65584 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
65585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
65586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
65587 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
65588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65590 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65593 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
65594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
65595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
65596 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
65597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
65598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
65599 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
65600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65602 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
65603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
65604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
65605 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
65606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
65608 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
65609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65611 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
65612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65614 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
65615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65617 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
65618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65620 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
65621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65623 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
65624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
65625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
65626 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
65627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
65628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
65629 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
65630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65632 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
65633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
65634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
65635 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
65636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65638 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
65639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65641 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
65642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
65643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
65644 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
65645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
65647 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
65648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65650 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
65651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65653 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
65654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
65655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
65656 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
65657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65659 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
65660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65662 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
65663 : END DO
65664 : END DO
65665 : END DO
65666 : s_offset_d1 = s_offset_d1 + 9
65667 : END DO
65668 : s_offset_c1 = s_offset_c1 + 3
65669 : END DO
65670 : s_offset_b1 = s_offset_b1 + 1
65671 : END DO
65672 : s_offset_a1 = s_offset_a1 + 7
65673 : END DO
65674 : END SUBROUTINE contract_fspg
65675 : #endif
65676 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65677 : ! **************************************************************************************************
65678 : !> \brief ...
65679 : !> \param work ...
65680 : !> \param nl_a ...
65681 : !> \param nl_b ...
65682 : !> \param nl_c ...
65683 : !> \param nl_d ...
65684 : !> \param sphi_a ...
65685 : !> \param sphi_b ...
65686 : !> \param sphi_c ...
65687 : !> \param sphi_d ...
65688 : !> \param primitives ...
65689 : !> \param buffer1 ...
65690 : !> \param buffer2 ...
65691 : ! **************************************************************************************************
65692 : SUBROUTINE contract_fsds(work, &
65693 : nl_a, nl_b, nl_c, nl_d, &
65694 : sphi_a, sphi_b, sphi_c, sphi_d, &
65695 : primitives, &
65696 : buffer1, buffer2)
65697 : REAL(dp), DIMENSION(10*1*6*1), INTENT(IN) :: work
65698 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65699 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65700 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65701 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
65702 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
65703 : REAL(dp), &
65704 : DIMENSION(7*nl_a, 1*nl_b, 5*nl_c, 1*nl_d) :: primitives
65705 : REAL(dp), DIMENSION(10*1*6*1) :: buffer1, buffer2
65706 :
65707 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65708 : kmax, s_offset_a1, s_offset_b1, &
65709 : s_offset_c1, s_offset_d1
65710 :
65711 : s_offset_a1 = 0
65712 : DO ia = 1, nl_a
65713 : s_offset_b1 = 0
65714 : DO ib = 1, nl_b
65715 : s_offset_c1 = 0
65716 : DO ic = 1, nl_c
65717 : s_offset_d1 = 0
65718 : DO id = 1, nl_d
65719 : buffer1 = 0.0_dp
65720 : imax = 1*6*1
65721 : kmax = 10
65722 : DO i = 1, imax
65723 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65724 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65725 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65726 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65727 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65728 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65729 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65730 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65731 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65732 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65733 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65734 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65735 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65736 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65737 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65738 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65739 : END DO
65740 : buffer2 = 0.0_dp
65741 : imax = 7*6*1
65742 : kmax = 1
65743 : DO i = 1, imax
65744 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65745 : END DO
65746 : buffer1 = 0.0_dp
65747 : imax = 7*1*1
65748 : kmax = 6
65749 : DO i = 1, imax
65750 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65751 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
65752 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65753 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
65754 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
65755 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
65756 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
65757 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
65758 : END DO
65759 : imax = 7*1*5
65760 : kmax = 1
65761 : i = 0
65762 : DO i1 = 1, 5
65763 : DO i2 = 1, 1
65764 : DO i3 = 1, 7
65765 : i = i + 1
65766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
65768 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
65769 : END DO
65770 : END DO
65771 : END DO
65772 : s_offset_d1 = s_offset_d1 + 1
65773 : END DO
65774 : s_offset_c1 = s_offset_c1 + 5
65775 : END DO
65776 : s_offset_b1 = s_offset_b1 + 1
65777 : END DO
65778 : s_offset_a1 = s_offset_a1 + 7
65779 : END DO
65780 : END SUBROUTINE contract_fsds
65781 : #endif
65782 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65783 : ! **************************************************************************************************
65784 : !> \brief ...
65785 : !> \param work ...
65786 : !> \param nl_a ...
65787 : !> \param nl_b ...
65788 : !> \param nl_c ...
65789 : !> \param nl_d ...
65790 : !> \param sphi_a ...
65791 : !> \param sphi_b ...
65792 : !> \param sphi_c ...
65793 : !> \param sphi_d ...
65794 : !> \param primitives ...
65795 : !> \param buffer1 ...
65796 : !> \param buffer2 ...
65797 : ! **************************************************************************************************
65798 : SUBROUTINE contract_fsdp(work, &
65799 : nl_a, nl_b, nl_c, nl_d, &
65800 : sphi_a, sphi_b, sphi_c, sphi_d, &
65801 : primitives, &
65802 : buffer1, buffer2)
65803 : REAL(dp), DIMENSION(10*1*6*3), INTENT(IN) :: work
65804 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65805 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65806 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65807 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
65808 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
65809 : REAL(dp), &
65810 : DIMENSION(7*nl_a, 1*nl_b, 5*nl_c, 3*nl_d) :: primitives
65811 : REAL(dp), DIMENSION(10*1*6*3) :: buffer1, buffer2
65812 :
65813 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65814 : kmax, s_offset_a1, s_offset_b1, &
65815 : s_offset_c1, s_offset_d1
65816 :
65817 : s_offset_a1 = 0
65818 : DO ia = 1, nl_a
65819 : s_offset_b1 = 0
65820 : DO ib = 1, nl_b
65821 : s_offset_c1 = 0
65822 : DO ic = 1, nl_c
65823 : s_offset_d1 = 0
65824 : DO id = 1, nl_d
65825 : buffer1 = 0.0_dp
65826 : imax = 1*6*3
65827 : kmax = 10
65828 : DO i = 1, imax
65829 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65830 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65831 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65832 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65833 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65834 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65835 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65836 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65837 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65838 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65839 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65840 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65841 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65842 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65843 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65844 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65845 : END DO
65846 : buffer2 = 0.0_dp
65847 : imax = 7*6*3
65848 : kmax = 1
65849 : DO i = 1, imax
65850 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65851 : END DO
65852 : buffer1 = 0.0_dp
65853 : imax = 7*1*3
65854 : kmax = 6
65855 : DO i = 1, imax
65856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65857 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
65858 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65859 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
65860 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
65861 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
65862 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
65863 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
65864 : END DO
65865 : imax = 7*1*5
65866 : kmax = 3
65867 : i = 0
65868 : DO i1 = 1, 5
65869 : DO i2 = 1, 1
65870 : DO i3 = 1, 7
65871 : i = i + 1
65872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
65874 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
65875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
65877 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
65879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
65880 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
65881 : END DO
65882 : END DO
65883 : END DO
65884 : s_offset_d1 = s_offset_d1 + 3
65885 : END DO
65886 : s_offset_c1 = s_offset_c1 + 5
65887 : END DO
65888 : s_offset_b1 = s_offset_b1 + 1
65889 : END DO
65890 : s_offset_a1 = s_offset_a1 + 7
65891 : END DO
65892 : END SUBROUTINE contract_fsdp
65893 : #endif
65894 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
65895 : ! **************************************************************************************************
65896 : !> \brief ...
65897 : !> \param work ...
65898 : !> \param nl_a ...
65899 : !> \param nl_b ...
65900 : !> \param nl_c ...
65901 : !> \param nl_d ...
65902 : !> \param sphi_a ...
65903 : !> \param sphi_b ...
65904 : !> \param sphi_c ...
65905 : !> \param sphi_d ...
65906 : !> \param primitives ...
65907 : !> \param buffer1 ...
65908 : !> \param buffer2 ...
65909 : ! **************************************************************************************************
65910 : SUBROUTINE contract_fsdd(work, &
65911 : nl_a, nl_b, nl_c, nl_d, &
65912 : sphi_a, sphi_b, sphi_c, sphi_d, &
65913 : primitives, &
65914 : buffer1, buffer2)
65915 : REAL(dp), DIMENSION(10*1*6*6), INTENT(IN) :: work
65916 : INTEGER :: nl_a, nl_b, nl_c, nl_d
65917 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
65918 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
65919 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
65920 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
65921 : REAL(dp), &
65922 : DIMENSION(7*nl_a, 1*nl_b, 5*nl_c, 5*nl_d) :: primitives
65923 : REAL(dp), DIMENSION(10*1*6*6) :: buffer1, buffer2
65924 :
65925 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
65926 : kmax, s_offset_a1, s_offset_b1, &
65927 : s_offset_c1, s_offset_d1
65928 :
65929 : s_offset_a1 = 0
65930 : DO ia = 1, nl_a
65931 : s_offset_b1 = 0
65932 : DO ib = 1, nl_b
65933 : s_offset_c1 = 0
65934 : DO ic = 1, nl_c
65935 : s_offset_d1 = 0
65936 : DO id = 1, nl_d
65937 : buffer1 = 0.0_dp
65938 : imax = 1*6*6
65939 : kmax = 10
65940 : DO i = 1, imax
65941 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
65942 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
65943 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
65944 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
65945 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
65946 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
65947 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
65948 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
65949 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
65950 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
65951 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
65952 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
65953 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
65954 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
65955 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
65956 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
65957 : END DO
65958 : buffer2 = 0.0_dp
65959 : imax = 7*6*6
65960 : kmax = 1
65961 : DO i = 1, imax
65962 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
65963 : END DO
65964 : buffer1 = 0.0_dp
65965 : imax = 7*1*6
65966 : kmax = 6
65967 : DO i = 1, imax
65968 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
65969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
65970 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
65971 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
65972 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
65973 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
65974 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
65975 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
65976 : END DO
65977 : imax = 7*1*5
65978 : kmax = 6
65979 : i = 0
65980 : DO i1 = 1, 5
65981 : DO i2 = 1, 1
65982 : DO i3 = 1, 7
65983 : i = i + 1
65984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65986 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
65987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
65988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
65989 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
65990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
65991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
65992 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
65993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
65994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
65995 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
65996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
65997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
65998 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
65999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66001 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
66002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66004 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
66005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66007 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
66008 : END DO
66009 : END DO
66010 : END DO
66011 : s_offset_d1 = s_offset_d1 + 5
66012 : END DO
66013 : s_offset_c1 = s_offset_c1 + 5
66014 : END DO
66015 : s_offset_b1 = s_offset_b1 + 1
66016 : END DO
66017 : s_offset_a1 = s_offset_a1 + 7
66018 : END DO
66019 : END SUBROUTINE contract_fsdd
66020 : #endif
66021 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
66022 : ! **************************************************************************************************
66023 : !> \brief ...
66024 : !> \param work ...
66025 : !> \param nl_a ...
66026 : !> \param nl_b ...
66027 : !> \param nl_c ...
66028 : !> \param nl_d ...
66029 : !> \param sphi_a ...
66030 : !> \param sphi_b ...
66031 : !> \param sphi_c ...
66032 : !> \param sphi_d ...
66033 : !> \param primitives ...
66034 : !> \param buffer1 ...
66035 : !> \param buffer2 ...
66036 : ! **************************************************************************************************
66037 : SUBROUTINE contract_fsdf(work, &
66038 : nl_a, nl_b, nl_c, nl_d, &
66039 : sphi_a, sphi_b, sphi_c, sphi_d, &
66040 : primitives, &
66041 : buffer1, buffer2)
66042 : REAL(dp), DIMENSION(10*1*6*10), INTENT(IN) :: work
66043 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66044 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66045 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66046 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
66047 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
66048 : REAL(dp), &
66049 : DIMENSION(7*nl_a, 1*nl_b, 5*nl_c, 7*nl_d) :: primitives
66050 : REAL(dp), DIMENSION(10*1*6*10) :: buffer1, buffer2
66051 :
66052 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66053 : kmax, s_offset_a1, s_offset_b1, &
66054 : s_offset_c1, s_offset_d1
66055 :
66056 : s_offset_a1 = 0
66057 : DO ia = 1, nl_a
66058 : s_offset_b1 = 0
66059 : DO ib = 1, nl_b
66060 : s_offset_c1 = 0
66061 : DO ic = 1, nl_c
66062 : s_offset_d1 = 0
66063 : DO id = 1, nl_d
66064 : buffer1 = 0.0_dp
66065 : imax = 1*6*10
66066 : kmax = 10
66067 : DO i = 1, imax
66068 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66069 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66070 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66071 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66072 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66073 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66074 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66075 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66076 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66077 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66078 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66080 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66081 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66082 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66083 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66084 : END DO
66085 : buffer2 = 0.0_dp
66086 : imax = 7*6*10
66087 : kmax = 1
66088 : DO i = 1, imax
66089 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66090 : END DO
66091 : buffer1 = 0.0_dp
66092 : imax = 7*1*10
66093 : kmax = 6
66094 : DO i = 1, imax
66095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
66096 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66097 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66098 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66099 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
66100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66101 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66102 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
66103 : END DO
66104 : imax = 7*1*5
66105 : kmax = 10
66106 : i = 0
66107 : DO i1 = 1, 5
66108 : DO i2 = 1, 1
66109 : DO i3 = 1, 7
66110 : i = i + 1
66111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66113 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
66114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66116 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
66117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66119 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66122 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
66123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66125 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
66126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66128 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
66129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66131 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
66132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66134 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
66135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66137 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
66138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66140 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
66141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66143 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
66144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66146 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
66147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66149 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
66150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66152 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
66153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66155 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
66156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66158 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
66159 : END DO
66160 : END DO
66161 : END DO
66162 : s_offset_d1 = s_offset_d1 + 7
66163 : END DO
66164 : s_offset_c1 = s_offset_c1 + 5
66165 : END DO
66166 : s_offset_b1 = s_offset_b1 + 1
66167 : END DO
66168 : s_offset_a1 = s_offset_a1 + 7
66169 : END DO
66170 : END SUBROUTINE contract_fsdf
66171 : #endif
66172 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
66173 : ! **************************************************************************************************
66174 : !> \brief ...
66175 : !> \param work ...
66176 : !> \param nl_a ...
66177 : !> \param nl_b ...
66178 : !> \param nl_c ...
66179 : !> \param nl_d ...
66180 : !> \param sphi_a ...
66181 : !> \param sphi_b ...
66182 : !> \param sphi_c ...
66183 : !> \param sphi_d ...
66184 : !> \param primitives ...
66185 : !> \param buffer1 ...
66186 : !> \param buffer2 ...
66187 : ! **************************************************************************************************
66188 : SUBROUTINE contract_fsdg(work, &
66189 : nl_a, nl_b, nl_c, nl_d, &
66190 : sphi_a, sphi_b, sphi_c, sphi_d, &
66191 : primitives, &
66192 : buffer1, buffer2)
66193 : REAL(dp), DIMENSION(10*1*6*15), INTENT(IN) :: work
66194 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66195 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66196 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66197 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
66198 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
66199 : REAL(dp), &
66200 : DIMENSION(7*nl_a, 1*nl_b, 5*nl_c, 9*nl_d) :: primitives
66201 : REAL(dp), DIMENSION(10*1*6*15) :: buffer1, buffer2
66202 :
66203 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66204 : kmax, s_offset_a1, s_offset_b1, &
66205 : s_offset_c1, s_offset_d1
66206 :
66207 : s_offset_a1 = 0
66208 : DO ia = 1, nl_a
66209 : s_offset_b1 = 0
66210 : DO ib = 1, nl_b
66211 : s_offset_c1 = 0
66212 : DO ic = 1, nl_c
66213 : s_offset_d1 = 0
66214 : DO id = 1, nl_d
66215 : buffer1 = 0.0_dp
66216 : imax = 1*6*15
66217 : kmax = 10
66218 : DO i = 1, imax
66219 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66220 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66221 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66222 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66223 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66224 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66225 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66226 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66227 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66228 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66229 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66230 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66231 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66232 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66233 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66234 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66235 : END DO
66236 : buffer2 = 0.0_dp
66237 : imax = 7*6*15
66238 : kmax = 1
66239 : DO i = 1, imax
66240 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66241 : END DO
66242 : buffer1 = 0.0_dp
66243 : imax = 7*1*15
66244 : kmax = 6
66245 : DO i = 1, imax
66246 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
66247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66248 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66249 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66250 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
66251 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66252 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66253 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
66254 : END DO
66255 : imax = 7*1*5
66256 : kmax = 15
66257 : i = 0
66258 : DO i1 = 1, 5
66259 : DO i2 = 1, 1
66260 : DO i3 = 1, 7
66261 : i = i + 1
66262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66264 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
66265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66267 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
66268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
66269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
66270 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
66271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66273 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66276 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
66277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66279 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
66280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
66281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
66282 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
66283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66285 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
66286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
66287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
66288 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
66289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66291 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
66292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66294 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
66295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66297 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
66298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66300 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
66301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66303 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
66304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66306 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
66307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66309 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
66310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
66311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
66312 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
66313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66315 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
66316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66318 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
66319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66321 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
66322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66324 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
66325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
66326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
66327 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
66328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66330 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
66331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66333 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
66334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66336 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
66337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66339 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
66340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66342 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
66343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66345 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
66346 : END DO
66347 : END DO
66348 : END DO
66349 : s_offset_d1 = s_offset_d1 + 9
66350 : END DO
66351 : s_offset_c1 = s_offset_c1 + 5
66352 : END DO
66353 : s_offset_b1 = s_offset_b1 + 1
66354 : END DO
66355 : s_offset_a1 = s_offset_a1 + 7
66356 : END DO
66357 : END SUBROUTINE contract_fsdg
66358 : #endif
66359 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
66360 : ! **************************************************************************************************
66361 : !> \brief ...
66362 : !> \param work ...
66363 : !> \param nl_a ...
66364 : !> \param nl_b ...
66365 : !> \param nl_c ...
66366 : !> \param nl_d ...
66367 : !> \param sphi_a ...
66368 : !> \param sphi_b ...
66369 : !> \param sphi_c ...
66370 : !> \param sphi_d ...
66371 : !> \param primitives ...
66372 : !> \param buffer1 ...
66373 : !> \param buffer2 ...
66374 : ! **************************************************************************************************
66375 : SUBROUTINE contract_fsfs(work, &
66376 : nl_a, nl_b, nl_c, nl_d, &
66377 : sphi_a, sphi_b, sphi_c, sphi_d, &
66378 : primitives, &
66379 : buffer1, buffer2)
66380 : REAL(dp), DIMENSION(10*1*10*1), INTENT(IN) :: work
66381 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66382 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66383 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66384 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
66385 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
66386 : REAL(dp), &
66387 : DIMENSION(7*nl_a, 1*nl_b, 7*nl_c, 1*nl_d) :: primitives
66388 : REAL(dp), DIMENSION(10*1*10*1) :: buffer1, buffer2
66389 :
66390 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66391 : kmax, s_offset_a1, s_offset_b1, &
66392 : s_offset_c1, s_offset_d1
66393 :
66394 : s_offset_a1 = 0
66395 : DO ia = 1, nl_a
66396 : s_offset_b1 = 0
66397 : DO ib = 1, nl_b
66398 : s_offset_c1 = 0
66399 : DO ic = 1, nl_c
66400 : s_offset_d1 = 0
66401 : DO id = 1, nl_d
66402 : buffer1 = 0.0_dp
66403 : imax = 1*10*1
66404 : kmax = 10
66405 : DO i = 1, imax
66406 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66407 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66408 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66409 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66410 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66411 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66412 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66413 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66414 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66415 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66416 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66417 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66418 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66419 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66420 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66421 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66422 : END DO
66423 : buffer2 = 0.0_dp
66424 : imax = 7*10*1
66425 : kmax = 1
66426 : DO i = 1, imax
66427 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66428 : END DO
66429 : buffer1 = 0.0_dp
66430 : imax = 7*1*1
66431 : kmax = 10
66432 : DO i = 1, imax
66433 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66434 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
66435 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66436 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
66437 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66438 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
66439 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66440 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
66441 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66442 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
66443 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
66444 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
66445 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
66446 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
66447 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
66448 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
66449 : END DO
66450 : imax = 7*1*7
66451 : kmax = 1
66452 : i = 0
66453 : DO i1 = 1, 7
66454 : DO i2 = 1, 1
66455 : DO i3 = 1, 7
66456 : i = i + 1
66457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
66459 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
66460 : END DO
66461 : END DO
66462 : END DO
66463 : s_offset_d1 = s_offset_d1 + 1
66464 : END DO
66465 : s_offset_c1 = s_offset_c1 + 7
66466 : END DO
66467 : s_offset_b1 = s_offset_b1 + 1
66468 : END DO
66469 : s_offset_a1 = s_offset_a1 + 7
66470 : END DO
66471 : END SUBROUTINE contract_fsfs
66472 : #endif
66473 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
66474 : ! **************************************************************************************************
66475 : !> \brief ...
66476 : !> \param work ...
66477 : !> \param nl_a ...
66478 : !> \param nl_b ...
66479 : !> \param nl_c ...
66480 : !> \param nl_d ...
66481 : !> \param sphi_a ...
66482 : !> \param sphi_b ...
66483 : !> \param sphi_c ...
66484 : !> \param sphi_d ...
66485 : !> \param primitives ...
66486 : !> \param buffer1 ...
66487 : !> \param buffer2 ...
66488 : ! **************************************************************************************************
66489 : SUBROUTINE contract_fsfp(work, &
66490 : nl_a, nl_b, nl_c, nl_d, &
66491 : sphi_a, sphi_b, sphi_c, sphi_d, &
66492 : primitives, &
66493 : buffer1, buffer2)
66494 : REAL(dp), DIMENSION(10*1*10*3), INTENT(IN) :: work
66495 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66496 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66497 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66498 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
66499 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
66500 : REAL(dp), &
66501 : DIMENSION(7*nl_a, 1*nl_b, 7*nl_c, 3*nl_d) :: primitives
66502 : REAL(dp), DIMENSION(10*1*10*3) :: buffer1, buffer2
66503 :
66504 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66505 : kmax, s_offset_a1, s_offset_b1, &
66506 : s_offset_c1, s_offset_d1
66507 :
66508 : s_offset_a1 = 0
66509 : DO ia = 1, nl_a
66510 : s_offset_b1 = 0
66511 : DO ib = 1, nl_b
66512 : s_offset_c1 = 0
66513 : DO ic = 1, nl_c
66514 : s_offset_d1 = 0
66515 : DO id = 1, nl_d
66516 : buffer1 = 0.0_dp
66517 : imax = 1*10*3
66518 : kmax = 10
66519 : DO i = 1, imax
66520 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66521 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66522 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66523 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66524 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66525 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66526 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66527 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66528 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66529 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66530 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66531 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66532 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66533 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66534 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66535 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66536 : END DO
66537 : buffer2 = 0.0_dp
66538 : imax = 7*10*3
66539 : kmax = 1
66540 : DO i = 1, imax
66541 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66542 : END DO
66543 : buffer1 = 0.0_dp
66544 : imax = 7*1*3
66545 : kmax = 10
66546 : DO i = 1, imax
66547 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66548 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
66549 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66550 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
66551 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66552 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
66553 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66554 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
66555 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66556 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
66557 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
66558 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
66559 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
66560 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
66561 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
66562 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
66563 : END DO
66564 : imax = 7*1*7
66565 : kmax = 3
66566 : i = 0
66567 : DO i1 = 1, 7
66568 : DO i2 = 1, 1
66569 : DO i3 = 1, 7
66570 : i = i + 1
66571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
66573 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
66574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
66576 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
66579 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
66580 : END DO
66581 : END DO
66582 : END DO
66583 : s_offset_d1 = s_offset_d1 + 3
66584 : END DO
66585 : s_offset_c1 = s_offset_c1 + 7
66586 : END DO
66587 : s_offset_b1 = s_offset_b1 + 1
66588 : END DO
66589 : s_offset_a1 = s_offset_a1 + 7
66590 : END DO
66591 : END SUBROUTINE contract_fsfp
66592 : #endif
66593 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
66594 : ! **************************************************************************************************
66595 : !> \brief ...
66596 : !> \param work ...
66597 : !> \param nl_a ...
66598 : !> \param nl_b ...
66599 : !> \param nl_c ...
66600 : !> \param nl_d ...
66601 : !> \param sphi_a ...
66602 : !> \param sphi_b ...
66603 : !> \param sphi_c ...
66604 : !> \param sphi_d ...
66605 : !> \param primitives ...
66606 : !> \param buffer1 ...
66607 : !> \param buffer2 ...
66608 : ! **************************************************************************************************
66609 : SUBROUTINE contract_fsfd(work, &
66610 : nl_a, nl_b, nl_c, nl_d, &
66611 : sphi_a, sphi_b, sphi_c, sphi_d, &
66612 : primitives, &
66613 : buffer1, buffer2)
66614 : REAL(dp), DIMENSION(10*1*10*6), INTENT(IN) :: work
66615 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66616 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66617 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66618 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
66619 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
66620 : REAL(dp), &
66621 : DIMENSION(7*nl_a, 1*nl_b, 7*nl_c, 5*nl_d) :: primitives
66622 : REAL(dp), DIMENSION(10*1*10*6) :: buffer1, buffer2
66623 :
66624 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66625 : kmax, s_offset_a1, s_offset_b1, &
66626 : s_offset_c1, s_offset_d1
66627 :
66628 : s_offset_a1 = 0
66629 : DO ia = 1, nl_a
66630 : s_offset_b1 = 0
66631 : DO ib = 1, nl_b
66632 : s_offset_c1 = 0
66633 : DO ic = 1, nl_c
66634 : s_offset_d1 = 0
66635 : DO id = 1, nl_d
66636 : buffer1 = 0.0_dp
66637 : imax = 1*10*6
66638 : kmax = 10
66639 : DO i = 1, imax
66640 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66641 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66642 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66643 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66644 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66645 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66647 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66648 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66649 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66650 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66651 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66652 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66653 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66654 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66655 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66656 : END DO
66657 : buffer2 = 0.0_dp
66658 : imax = 7*10*6
66659 : kmax = 1
66660 : DO i = 1, imax
66661 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66662 : END DO
66663 : buffer1 = 0.0_dp
66664 : imax = 7*1*6
66665 : kmax = 10
66666 : DO i = 1, imax
66667 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66668 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
66669 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66670 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
66671 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66672 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
66673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66674 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
66675 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66676 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
66677 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
66678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
66679 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
66680 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
66681 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
66682 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
66683 : END DO
66684 : imax = 7*1*7
66685 : kmax = 6
66686 : i = 0
66687 : DO i1 = 1, 7
66688 : DO i2 = 1, 1
66689 : DO i3 = 1, 7
66690 : i = i + 1
66691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66693 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
66694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66696 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
66697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66699 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66702 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
66703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66705 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
66706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66708 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
66709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66711 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
66712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66714 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
66715 : END DO
66716 : END DO
66717 : END DO
66718 : s_offset_d1 = s_offset_d1 + 5
66719 : END DO
66720 : s_offset_c1 = s_offset_c1 + 7
66721 : END DO
66722 : s_offset_b1 = s_offset_b1 + 1
66723 : END DO
66724 : s_offset_a1 = s_offset_a1 + 7
66725 : END DO
66726 : END SUBROUTINE contract_fsfd
66727 : #endif
66728 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
66729 : ! **************************************************************************************************
66730 : !> \brief ...
66731 : !> \param work ...
66732 : !> \param nl_a ...
66733 : !> \param nl_b ...
66734 : !> \param nl_c ...
66735 : !> \param nl_d ...
66736 : !> \param sphi_a ...
66737 : !> \param sphi_b ...
66738 : !> \param sphi_c ...
66739 : !> \param sphi_d ...
66740 : !> \param primitives ...
66741 : !> \param buffer1 ...
66742 : !> \param buffer2 ...
66743 : ! **************************************************************************************************
66744 : SUBROUTINE contract_fsff(work, &
66745 : nl_a, nl_b, nl_c, nl_d, &
66746 : sphi_a, sphi_b, sphi_c, sphi_d, &
66747 : primitives, &
66748 : buffer1, buffer2)
66749 : REAL(dp), DIMENSION(10*1*10*10), INTENT(IN) :: work
66750 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66751 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66752 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66753 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
66754 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
66755 : REAL(dp), &
66756 : DIMENSION(7*nl_a, 1*nl_b, 7*nl_c, 7*nl_d) :: primitives
66757 : REAL(dp), DIMENSION(10*1*10*10) :: buffer1, buffer2
66758 :
66759 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66760 : kmax, s_offset_a1, s_offset_b1, &
66761 : s_offset_c1, s_offset_d1
66762 :
66763 : s_offset_a1 = 0
66764 : DO ia = 1, nl_a
66765 : s_offset_b1 = 0
66766 : DO ib = 1, nl_b
66767 : s_offset_c1 = 0
66768 : DO ic = 1, nl_c
66769 : s_offset_d1 = 0
66770 : DO id = 1, nl_d
66771 : buffer1 = 0.0_dp
66772 : imax = 1*10*10
66773 : kmax = 10
66774 : DO i = 1, imax
66775 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66776 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66777 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66780 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66781 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66782 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66783 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66784 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66785 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66787 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66788 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66789 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66790 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66791 : END DO
66792 : buffer2 = 0.0_dp
66793 : imax = 7*10*10
66794 : kmax = 1
66795 : DO i = 1, imax
66796 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66797 : END DO
66798 : buffer1 = 0.0_dp
66799 : imax = 7*1*10
66800 : kmax = 10
66801 : DO i = 1, imax
66802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66803 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
66804 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66805 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
66806 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66807 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
66808 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66809 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
66810 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66811 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
66812 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
66813 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
66814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
66815 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
66816 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
66817 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
66818 : END DO
66819 : imax = 7*1*7
66820 : kmax = 10
66821 : i = 0
66822 : DO i1 = 1, 7
66823 : DO i2 = 1, 1
66824 : DO i3 = 1, 7
66825 : i = i + 1
66826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66828 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
66829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66831 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
66832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66834 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66837 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
66838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66840 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
66841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66843 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
66844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66846 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
66847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66849 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
66850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
66851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
66852 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
66853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66855 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
66856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66858 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
66859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66861 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
66862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66864 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
66865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
66866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
66867 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
66868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66870 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
66871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
66872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
66873 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
66874 : END DO
66875 : END DO
66876 : END DO
66877 : s_offset_d1 = s_offset_d1 + 7
66878 : END DO
66879 : s_offset_c1 = s_offset_c1 + 7
66880 : END DO
66881 : s_offset_b1 = s_offset_b1 + 1
66882 : END DO
66883 : s_offset_a1 = s_offset_a1 + 7
66884 : END DO
66885 : END SUBROUTINE contract_fsff
66886 : #endif
66887 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
66888 : ! **************************************************************************************************
66889 : !> \brief ...
66890 : !> \param work ...
66891 : !> \param nl_a ...
66892 : !> \param nl_b ...
66893 : !> \param nl_c ...
66894 : !> \param nl_d ...
66895 : !> \param sphi_a ...
66896 : !> \param sphi_b ...
66897 : !> \param sphi_c ...
66898 : !> \param sphi_d ...
66899 : !> \param primitives ...
66900 : !> \param buffer1 ...
66901 : !> \param buffer2 ...
66902 : ! **************************************************************************************************
66903 : SUBROUTINE contract_fsfg(work, &
66904 : nl_a, nl_b, nl_c, nl_d, &
66905 : sphi_a, sphi_b, sphi_c, sphi_d, &
66906 : primitives, &
66907 : buffer1, buffer2)
66908 : REAL(dp), DIMENSION(10*1*10*15), INTENT(IN) :: work
66909 : INTEGER :: nl_a, nl_b, nl_c, nl_d
66910 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
66911 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
66912 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
66913 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
66914 : REAL(dp), &
66915 : DIMENSION(7*nl_a, 1*nl_b, 7*nl_c, 9*nl_d) :: primitives
66916 : REAL(dp), DIMENSION(10*1*10*15) :: buffer1, buffer2
66917 :
66918 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
66919 : kmax, s_offset_a1, s_offset_b1, &
66920 : s_offset_c1, s_offset_d1
66921 :
66922 : s_offset_a1 = 0
66923 : DO ia = 1, nl_a
66924 : s_offset_b1 = 0
66925 : DO ib = 1, nl_b
66926 : s_offset_c1 = 0
66927 : DO ic = 1, nl_c
66928 : s_offset_d1 = 0
66929 : DO id = 1, nl_d
66930 : buffer1 = 0.0_dp
66931 : imax = 1*10*15
66932 : kmax = 10
66933 : DO i = 1, imax
66934 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
66935 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
66936 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
66937 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
66938 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
66939 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
66940 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
66941 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
66942 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
66943 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
66944 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
66945 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
66946 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
66947 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
66948 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
66949 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
66950 : END DO
66951 : buffer2 = 0.0_dp
66952 : imax = 7*10*15
66953 : kmax = 1
66954 : DO i = 1, imax
66955 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
66956 : END DO
66957 : buffer1 = 0.0_dp
66958 : imax = 7*1*15
66959 : kmax = 10
66960 : DO i = 1, imax
66961 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
66962 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
66963 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
66964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
66965 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
66966 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
66967 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
66968 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
66969 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
66970 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
66971 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
66972 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
66973 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
66974 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
66975 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
66976 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
66977 : END DO
66978 : imax = 7*1*7
66979 : kmax = 15
66980 : i = 0
66981 : DO i1 = 1, 7
66982 : DO i2 = 1, 1
66983 : DO i3 = 1, 7
66984 : i = i + 1
66985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
66986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
66987 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
66988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
66989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
66990 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
66991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
66992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
66993 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
66994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
66995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
66996 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
66997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
66998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
66999 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
67000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67002 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
67003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
67004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
67005 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
67006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67008 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
67009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
67010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
67011 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
67012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67014 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
67015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67017 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
67018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67020 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
67021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67023 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
67024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67026 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
67027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67029 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
67030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67032 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
67033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
67034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
67035 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
67036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67038 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
67039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67041 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
67042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67044 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
67045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67047 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
67048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
67049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
67050 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
67051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67053 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
67054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67056 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
67057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67059 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
67060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67062 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
67063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67065 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
67066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67068 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
67069 : END DO
67070 : END DO
67071 : END DO
67072 : s_offset_d1 = s_offset_d1 + 9
67073 : END DO
67074 : s_offset_c1 = s_offset_c1 + 7
67075 : END DO
67076 : s_offset_b1 = s_offset_b1 + 1
67077 : END DO
67078 : s_offset_a1 = s_offset_a1 + 7
67079 : END DO
67080 : END SUBROUTINE contract_fsfg
67081 : #endif
67082 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
67083 : ! **************************************************************************************************
67084 : !> \brief ...
67085 : !> \param work ...
67086 : !> \param nl_a ...
67087 : !> \param nl_b ...
67088 : !> \param nl_c ...
67089 : !> \param nl_d ...
67090 : !> \param sphi_a ...
67091 : !> \param sphi_b ...
67092 : !> \param sphi_c ...
67093 : !> \param sphi_d ...
67094 : !> \param primitives ...
67095 : !> \param buffer1 ...
67096 : !> \param buffer2 ...
67097 : ! **************************************************************************************************
67098 : SUBROUTINE contract_fsgs(work, &
67099 : nl_a, nl_b, nl_c, nl_d, &
67100 : sphi_a, sphi_b, sphi_c, sphi_d, &
67101 : primitives, &
67102 : buffer1, buffer2)
67103 : REAL(dp), DIMENSION(10*1*15*1), INTENT(IN) :: work
67104 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67105 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67106 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
67107 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
67108 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
67109 : REAL(dp), &
67110 : DIMENSION(7*nl_a, 1*nl_b, 9*nl_c, 1*nl_d) :: primitives
67111 : REAL(dp), DIMENSION(10*1*15*1) :: buffer1, buffer2
67112 :
67113 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67114 : kmax, s_offset_a1, s_offset_b1, &
67115 : s_offset_c1, s_offset_d1
67116 :
67117 : s_offset_a1 = 0
67118 : DO ia = 1, nl_a
67119 : s_offset_b1 = 0
67120 : DO ib = 1, nl_b
67121 : s_offset_c1 = 0
67122 : DO ic = 1, nl_c
67123 : s_offset_d1 = 0
67124 : DO id = 1, nl_d
67125 : buffer1 = 0.0_dp
67126 : imax = 1*15*1
67127 : kmax = 10
67128 : DO i = 1, imax
67129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67130 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67131 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67132 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67133 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67134 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67135 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67136 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67137 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67138 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67139 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67140 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67141 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67142 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67143 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67144 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67145 : END DO
67146 : buffer2 = 0.0_dp
67147 : imax = 7*15*1
67148 : kmax = 1
67149 : DO i = 1, imax
67150 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
67151 : END DO
67152 : buffer1 = 0.0_dp
67153 : imax = 7*1*1
67154 : kmax = 15
67155 : DO i = 1, imax
67156 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
67157 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
67158 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
67159 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
67160 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
67161 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
67162 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
67163 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
67164 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
67165 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
67166 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
67167 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
67168 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
67169 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
67170 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
67171 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
67172 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
67173 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
67174 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
67175 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
67176 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
67177 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
67178 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
67179 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
67180 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
67181 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
67182 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
67183 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
67184 : END DO
67185 : imax = 7*1*9
67186 : kmax = 1
67187 : i = 0
67188 : DO i1 = 1, 9
67189 : DO i2 = 1, 1
67190 : DO i3 = 1, 7
67191 : i = i + 1
67192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
67194 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
67195 : END DO
67196 : END DO
67197 : END DO
67198 : s_offset_d1 = s_offset_d1 + 1
67199 : END DO
67200 : s_offset_c1 = s_offset_c1 + 9
67201 : END DO
67202 : s_offset_b1 = s_offset_b1 + 1
67203 : END DO
67204 : s_offset_a1 = s_offset_a1 + 7
67205 : END DO
67206 : END SUBROUTINE contract_fsgs
67207 : #endif
67208 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
67209 : ! **************************************************************************************************
67210 : !> \brief ...
67211 : !> \param work ...
67212 : !> \param nl_a ...
67213 : !> \param nl_b ...
67214 : !> \param nl_c ...
67215 : !> \param nl_d ...
67216 : !> \param sphi_a ...
67217 : !> \param sphi_b ...
67218 : !> \param sphi_c ...
67219 : !> \param sphi_d ...
67220 : !> \param primitives ...
67221 : !> \param buffer1 ...
67222 : !> \param buffer2 ...
67223 : ! **************************************************************************************************
67224 : SUBROUTINE contract_fsgp(work, &
67225 : nl_a, nl_b, nl_c, nl_d, &
67226 : sphi_a, sphi_b, sphi_c, sphi_d, &
67227 : primitives, &
67228 : buffer1, buffer2)
67229 : REAL(dp), DIMENSION(10*1*15*3), INTENT(IN) :: work
67230 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67231 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67232 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
67233 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
67234 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
67235 : REAL(dp), &
67236 : DIMENSION(7*nl_a, 1*nl_b, 9*nl_c, 3*nl_d) :: primitives
67237 : REAL(dp), DIMENSION(10*1*15*3) :: buffer1, buffer2
67238 :
67239 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67240 : kmax, s_offset_a1, s_offset_b1, &
67241 : s_offset_c1, s_offset_d1
67242 :
67243 : s_offset_a1 = 0
67244 : DO ia = 1, nl_a
67245 : s_offset_b1 = 0
67246 : DO ib = 1, nl_b
67247 : s_offset_c1 = 0
67248 : DO ic = 1, nl_c
67249 : s_offset_d1 = 0
67250 : DO id = 1, nl_d
67251 : buffer1 = 0.0_dp
67252 : imax = 1*15*3
67253 : kmax = 10
67254 : DO i = 1, imax
67255 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67256 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67257 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67258 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67259 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67260 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67261 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67262 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67263 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67265 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67266 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67267 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67268 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67269 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67270 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67271 : END DO
67272 : buffer2 = 0.0_dp
67273 : imax = 7*15*3
67274 : kmax = 1
67275 : DO i = 1, imax
67276 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
67277 : END DO
67278 : buffer1 = 0.0_dp
67279 : imax = 7*1*3
67280 : kmax = 15
67281 : DO i = 1, imax
67282 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
67283 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
67284 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
67285 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
67286 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
67287 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
67288 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
67289 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
67290 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
67291 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
67292 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
67293 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
67294 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
67295 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
67296 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
67297 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
67298 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
67299 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
67300 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
67301 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
67302 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
67303 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
67304 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
67305 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
67306 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
67307 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
67308 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
67309 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
67310 : END DO
67311 : imax = 7*1*9
67312 : kmax = 3
67313 : i = 0
67314 : DO i1 = 1, 9
67315 : DO i2 = 1, 1
67316 : DO i3 = 1, 7
67317 : i = i + 1
67318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
67320 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
67321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
67323 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
67324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
67326 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
67327 : END DO
67328 : END DO
67329 : END DO
67330 : s_offset_d1 = s_offset_d1 + 3
67331 : END DO
67332 : s_offset_c1 = s_offset_c1 + 9
67333 : END DO
67334 : s_offset_b1 = s_offset_b1 + 1
67335 : END DO
67336 : s_offset_a1 = s_offset_a1 + 7
67337 : END DO
67338 : END SUBROUTINE contract_fsgp
67339 : #endif
67340 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
67341 : ! **************************************************************************************************
67342 : !> \brief ...
67343 : !> \param work ...
67344 : !> \param nl_a ...
67345 : !> \param nl_b ...
67346 : !> \param nl_c ...
67347 : !> \param nl_d ...
67348 : !> \param sphi_a ...
67349 : !> \param sphi_b ...
67350 : !> \param sphi_c ...
67351 : !> \param sphi_d ...
67352 : !> \param primitives ...
67353 : !> \param buffer1 ...
67354 : !> \param buffer2 ...
67355 : ! **************************************************************************************************
67356 : SUBROUTINE contract_fsgd(work, &
67357 : nl_a, nl_b, nl_c, nl_d, &
67358 : sphi_a, sphi_b, sphi_c, sphi_d, &
67359 : primitives, &
67360 : buffer1, buffer2)
67361 : REAL(dp), DIMENSION(10*1*15*6), INTENT(IN) :: work
67362 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67363 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67364 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
67365 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
67366 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
67367 : REAL(dp), &
67368 : DIMENSION(7*nl_a, 1*nl_b, 9*nl_c, 5*nl_d) :: primitives
67369 : REAL(dp), DIMENSION(10*1*15*6) :: buffer1, buffer2
67370 :
67371 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67372 : kmax, s_offset_a1, s_offset_b1, &
67373 : s_offset_c1, s_offset_d1
67374 :
67375 : s_offset_a1 = 0
67376 : DO ia = 1, nl_a
67377 : s_offset_b1 = 0
67378 : DO ib = 1, nl_b
67379 : s_offset_c1 = 0
67380 : DO ic = 1, nl_c
67381 : s_offset_d1 = 0
67382 : DO id = 1, nl_d
67383 : buffer1 = 0.0_dp
67384 : imax = 1*15*6
67385 : kmax = 10
67386 : DO i = 1, imax
67387 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67388 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67389 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67390 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67391 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67392 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67393 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67394 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67395 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67396 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67397 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67398 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67399 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67400 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67401 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67402 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67403 : END DO
67404 : buffer2 = 0.0_dp
67405 : imax = 7*15*6
67406 : kmax = 1
67407 : DO i = 1, imax
67408 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
67409 : END DO
67410 : buffer1 = 0.0_dp
67411 : imax = 7*1*6
67412 : kmax = 15
67413 : DO i = 1, imax
67414 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
67415 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
67416 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
67417 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
67418 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
67419 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
67420 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
67421 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
67422 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
67423 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
67424 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
67425 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
67426 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
67427 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
67428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
67429 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
67430 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
67431 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
67432 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
67433 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
67434 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
67435 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
67436 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
67437 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
67438 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
67439 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
67440 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
67441 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
67442 : END DO
67443 : imax = 7*1*9
67444 : kmax = 6
67445 : i = 0
67446 : DO i1 = 1, 9
67447 : DO i2 = 1, 1
67448 : DO i3 = 1, 7
67449 : i = i + 1
67450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67452 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
67453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67455 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
67456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67458 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
67459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67461 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
67462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67464 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
67465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67467 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
67468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67470 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
67471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67473 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
67474 : END DO
67475 : END DO
67476 : END DO
67477 : s_offset_d1 = s_offset_d1 + 5
67478 : END DO
67479 : s_offset_c1 = s_offset_c1 + 9
67480 : END DO
67481 : s_offset_b1 = s_offset_b1 + 1
67482 : END DO
67483 : s_offset_a1 = s_offset_a1 + 7
67484 : END DO
67485 : END SUBROUTINE contract_fsgd
67486 : #endif
67487 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
67488 : ! **************************************************************************************************
67489 : !> \brief ...
67490 : !> \param work ...
67491 : !> \param nl_a ...
67492 : !> \param nl_b ...
67493 : !> \param nl_c ...
67494 : !> \param nl_d ...
67495 : !> \param sphi_a ...
67496 : !> \param sphi_b ...
67497 : !> \param sphi_c ...
67498 : !> \param sphi_d ...
67499 : !> \param primitives ...
67500 : !> \param buffer1 ...
67501 : !> \param buffer2 ...
67502 : ! **************************************************************************************************
67503 : SUBROUTINE contract_fsgf(work, &
67504 : nl_a, nl_b, nl_c, nl_d, &
67505 : sphi_a, sphi_b, sphi_c, sphi_d, &
67506 : primitives, &
67507 : buffer1, buffer2)
67508 : REAL(dp), DIMENSION(10*1*15*10), INTENT(IN) :: work
67509 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67510 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67511 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
67512 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
67513 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
67514 : REAL(dp), &
67515 : DIMENSION(7*nl_a, 1*nl_b, 9*nl_c, 7*nl_d) :: primitives
67516 : REAL(dp), DIMENSION(10*1*15*10) :: buffer1, buffer2
67517 :
67518 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67519 : kmax, s_offset_a1, s_offset_b1, &
67520 : s_offset_c1, s_offset_d1
67521 :
67522 : s_offset_a1 = 0
67523 : DO ia = 1, nl_a
67524 : s_offset_b1 = 0
67525 : DO ib = 1, nl_b
67526 : s_offset_c1 = 0
67527 : DO ic = 1, nl_c
67528 : s_offset_d1 = 0
67529 : DO id = 1, nl_d
67530 : buffer1 = 0.0_dp
67531 : imax = 1*15*10
67532 : kmax = 10
67533 : DO i = 1, imax
67534 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67535 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67536 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67537 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67538 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67539 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67540 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67541 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67542 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67543 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67544 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67546 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67547 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67548 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67549 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67550 : END DO
67551 : buffer2 = 0.0_dp
67552 : imax = 7*15*10
67553 : kmax = 1
67554 : DO i = 1, imax
67555 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
67556 : END DO
67557 : buffer1 = 0.0_dp
67558 : imax = 7*1*10
67559 : kmax = 15
67560 : DO i = 1, imax
67561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
67562 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
67563 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
67564 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
67565 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
67566 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
67567 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
67568 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
67569 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
67570 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
67571 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
67572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
67573 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
67574 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
67575 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
67576 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
67577 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
67578 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
67579 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
67580 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
67581 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
67582 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
67583 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
67584 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
67585 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
67586 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
67587 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
67588 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
67589 : END DO
67590 : imax = 7*1*9
67591 : kmax = 10
67592 : i = 0
67593 : DO i1 = 1, 9
67594 : DO i2 = 1, 1
67595 : DO i3 = 1, 7
67596 : i = i + 1
67597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67599 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
67600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67602 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
67603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67605 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
67606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67608 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
67609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67611 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
67612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67614 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
67615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67617 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
67618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67620 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
67621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67623 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
67624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67626 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
67627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67629 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
67630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67632 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
67633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67635 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
67636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67638 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
67639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67641 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
67642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67644 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
67645 : END DO
67646 : END DO
67647 : END DO
67648 : s_offset_d1 = s_offset_d1 + 7
67649 : END DO
67650 : s_offset_c1 = s_offset_c1 + 9
67651 : END DO
67652 : s_offset_b1 = s_offset_b1 + 1
67653 : END DO
67654 : s_offset_a1 = s_offset_a1 + 7
67655 : END DO
67656 : END SUBROUTINE contract_fsgf
67657 : #endif
67658 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
67659 : ! **************************************************************************************************
67660 : !> \brief ...
67661 : !> \param work ...
67662 : !> \param nl_a ...
67663 : !> \param nl_b ...
67664 : !> \param nl_c ...
67665 : !> \param nl_d ...
67666 : !> \param sphi_a ...
67667 : !> \param sphi_b ...
67668 : !> \param sphi_c ...
67669 : !> \param sphi_d ...
67670 : !> \param primitives ...
67671 : !> \param buffer1 ...
67672 : !> \param buffer2 ...
67673 : ! **************************************************************************************************
67674 : SUBROUTINE contract_fsgg(work, &
67675 : nl_a, nl_b, nl_c, nl_d, &
67676 : sphi_a, sphi_b, sphi_c, sphi_d, &
67677 : primitives, &
67678 : buffer1, buffer2)
67679 : REAL(dp), DIMENSION(10*1*15*15), INTENT(IN) :: work
67680 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67681 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67682 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
67683 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
67684 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
67685 : REAL(dp), &
67686 : DIMENSION(7*nl_a, 1*nl_b, 9*nl_c, 9*nl_d) :: primitives
67687 : REAL(dp), DIMENSION(10*1*15*15) :: buffer1, buffer2
67688 :
67689 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67690 : kmax, s_offset_a1, s_offset_b1, &
67691 : s_offset_c1, s_offset_d1
67692 :
67693 : s_offset_a1 = 0
67694 : DO ia = 1, nl_a
67695 : s_offset_b1 = 0
67696 : DO ib = 1, nl_b
67697 : s_offset_c1 = 0
67698 : DO ic = 1, nl_c
67699 : s_offset_d1 = 0
67700 : DO id = 1, nl_d
67701 : buffer1 = 0.0_dp
67702 : imax = 1*15*15
67703 : kmax = 10
67704 : DO i = 1, imax
67705 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67706 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67707 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67708 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67709 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67710 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67711 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67712 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67713 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67714 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67715 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67716 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67717 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67718 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67719 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67720 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67721 : END DO
67722 : buffer2 = 0.0_dp
67723 : imax = 7*15*15
67724 : kmax = 1
67725 : DO i = 1, imax
67726 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
67727 : END DO
67728 : buffer1 = 0.0_dp
67729 : imax = 7*1*15
67730 : kmax = 15
67731 : DO i = 1, imax
67732 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
67733 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
67734 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
67735 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
67736 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
67737 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
67738 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
67739 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
67740 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
67741 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
67742 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
67743 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
67744 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
67745 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
67746 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
67747 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
67748 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
67749 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
67750 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
67751 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
67752 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
67753 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
67754 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
67755 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
67756 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
67757 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
67758 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
67759 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
67760 : END DO
67761 : imax = 7*1*9
67762 : kmax = 15
67763 : i = 0
67764 : DO i1 = 1, 9
67765 : DO i2 = 1, 1
67766 : DO i3 = 1, 7
67767 : i = i + 1
67768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67770 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
67771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67773 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
67774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
67775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
67776 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
67777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67779 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
67780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67782 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
67783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67785 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
67786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
67787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
67788 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
67789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67791 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
67792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
67793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
67794 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
67795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67797 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
67798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67800 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
67801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67803 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
67804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67806 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
67807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
67809 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
67810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67812 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
67813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67815 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
67816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
67817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
67818 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
67819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
67820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
67821 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
67822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
67823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
67824 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
67825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67827 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
67828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67830 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
67831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
67832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
67833 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
67834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
67835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
67836 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
67837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67839 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
67840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67842 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
67843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
67844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
67845 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
67846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
67847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
67848 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
67849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
67850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
67851 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
67852 : END DO
67853 : END DO
67854 : END DO
67855 : s_offset_d1 = s_offset_d1 + 9
67856 : END DO
67857 : s_offset_c1 = s_offset_c1 + 9
67858 : END DO
67859 : s_offset_b1 = s_offset_b1 + 1
67860 : END DO
67861 : s_offset_a1 = s_offset_a1 + 7
67862 : END DO
67863 : END SUBROUTINE contract_fsgg
67864 : #endif
67865 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
67866 : ! **************************************************************************************************
67867 : !> \brief ...
67868 : !> \param work ...
67869 : !> \param nl_a ...
67870 : !> \param nl_b ...
67871 : !> \param nl_c ...
67872 : !> \param nl_d ...
67873 : !> \param sphi_a ...
67874 : !> \param sphi_b ...
67875 : !> \param sphi_c ...
67876 : !> \param sphi_d ...
67877 : !> \param primitives ...
67878 : !> \param buffer1 ...
67879 : !> \param buffer2 ...
67880 : ! **************************************************************************************************
67881 : SUBROUTINE contract_fpss(work, &
67882 : nl_a, nl_b, nl_c, nl_d, &
67883 : sphi_a, sphi_b, sphi_c, sphi_d, &
67884 : primitives, &
67885 : buffer1, buffer2)
67886 : REAL(dp), DIMENSION(10*3*1*1), INTENT(IN) :: work
67887 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67888 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67889 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
67890 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
67891 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
67892 : REAL(dp), &
67893 : DIMENSION(7*nl_a, 3*nl_b, 1*nl_c, 1*nl_d) :: primitives
67894 : REAL(dp), DIMENSION(10*3*1*1) :: buffer1, buffer2
67895 :
67896 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67897 : kmax, s_offset_a1, s_offset_b1, &
67898 : s_offset_c1, s_offset_d1
67899 :
67900 : s_offset_a1 = 0
67901 : DO ia = 1, nl_a
67902 : s_offset_b1 = 0
67903 : DO ib = 1, nl_b
67904 : s_offset_c1 = 0
67905 : DO ic = 1, nl_c
67906 : s_offset_d1 = 0
67907 : DO id = 1, nl_d
67908 : buffer1 = 0.0_dp
67909 : imax = 3*1*1
67910 : kmax = 10
67911 : DO i = 1, imax
67912 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
67913 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
67914 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
67915 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
67916 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
67917 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
67918 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
67919 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
67920 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
67921 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
67922 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
67923 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
67924 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
67925 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
67926 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
67927 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
67928 : END DO
67929 : buffer2 = 0.0_dp
67930 : imax = 7*1*1
67931 : kmax = 3
67932 : DO i = 1, imax
67933 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
67934 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
67935 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
67936 : END DO
67937 : buffer1 = 0.0_dp
67938 : imax = 7*3*1
67939 : kmax = 1
67940 : DO i = 1, imax
67941 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
67942 : END DO
67943 : imax = 7*3*1
67944 : kmax = 1
67945 : i = 0
67946 : DO i1 = 1, 1
67947 : DO i2 = 1, 3
67948 : DO i3 = 1, 7
67949 : i = i + 1
67950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
67951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
67952 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
67953 : END DO
67954 : END DO
67955 : END DO
67956 : s_offset_d1 = s_offset_d1 + 1
67957 : END DO
67958 : s_offset_c1 = s_offset_c1 + 1
67959 : END DO
67960 : s_offset_b1 = s_offset_b1 + 3
67961 : END DO
67962 : s_offset_a1 = s_offset_a1 + 7
67963 : END DO
67964 : END SUBROUTINE contract_fpss
67965 : #endif
67966 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
67967 : ! **************************************************************************************************
67968 : !> \brief ...
67969 : !> \param work ...
67970 : !> \param nl_a ...
67971 : !> \param nl_b ...
67972 : !> \param nl_c ...
67973 : !> \param nl_d ...
67974 : !> \param sphi_a ...
67975 : !> \param sphi_b ...
67976 : !> \param sphi_c ...
67977 : !> \param sphi_d ...
67978 : !> \param primitives ...
67979 : !> \param buffer1 ...
67980 : !> \param buffer2 ...
67981 : ! **************************************************************************************************
67982 : SUBROUTINE contract_fpsp(work, &
67983 : nl_a, nl_b, nl_c, nl_d, &
67984 : sphi_a, sphi_b, sphi_c, sphi_d, &
67985 : primitives, &
67986 : buffer1, buffer2)
67987 : REAL(dp), DIMENSION(10*3*1*3), INTENT(IN) :: work
67988 : INTEGER :: nl_a, nl_b, nl_c, nl_d
67989 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
67990 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
67991 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
67992 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
67993 : REAL(dp), &
67994 : DIMENSION(7*nl_a, 3*nl_b, 1*nl_c, 3*nl_d) :: primitives
67995 : REAL(dp), DIMENSION(10*3*1*3) :: buffer1, buffer2
67996 :
67997 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
67998 : kmax, s_offset_a1, s_offset_b1, &
67999 : s_offset_c1, s_offset_d1
68000 :
68001 : s_offset_a1 = 0
68002 : DO ia = 1, nl_a
68003 : s_offset_b1 = 0
68004 : DO ib = 1, nl_b
68005 : s_offset_c1 = 0
68006 : DO ic = 1, nl_c
68007 : s_offset_d1 = 0
68008 : DO id = 1, nl_d
68009 : buffer1 = 0.0_dp
68010 : imax = 3*1*3
68011 : kmax = 10
68012 : DO i = 1, imax
68013 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68014 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68015 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68016 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68017 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68018 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68019 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68020 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68021 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68022 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68023 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68025 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68026 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68027 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68028 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68029 : END DO
68030 : buffer2 = 0.0_dp
68031 : imax = 7*1*3
68032 : kmax = 3
68033 : DO i = 1, imax
68034 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68035 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68036 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68037 : END DO
68038 : buffer1 = 0.0_dp
68039 : imax = 7*3*3
68040 : kmax = 1
68041 : DO i = 1, imax
68042 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
68043 : END DO
68044 : imax = 7*3*1
68045 : kmax = 3
68046 : i = 0
68047 : DO i1 = 1, 1
68048 : DO i2 = 1, 3
68049 : DO i3 = 1, 7
68050 : i = i + 1
68051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
68053 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
68054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
68056 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
68059 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
68060 : END DO
68061 : END DO
68062 : END DO
68063 : s_offset_d1 = s_offset_d1 + 3
68064 : END DO
68065 : s_offset_c1 = s_offset_c1 + 1
68066 : END DO
68067 : s_offset_b1 = s_offset_b1 + 3
68068 : END DO
68069 : s_offset_a1 = s_offset_a1 + 7
68070 : END DO
68071 : END SUBROUTINE contract_fpsp
68072 : #endif
68073 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68074 : ! **************************************************************************************************
68075 : !> \brief ...
68076 : !> \param work ...
68077 : !> \param nl_a ...
68078 : !> \param nl_b ...
68079 : !> \param nl_c ...
68080 : !> \param nl_d ...
68081 : !> \param sphi_a ...
68082 : !> \param sphi_b ...
68083 : !> \param sphi_c ...
68084 : !> \param sphi_d ...
68085 : !> \param primitives ...
68086 : !> \param buffer1 ...
68087 : !> \param buffer2 ...
68088 : ! **************************************************************************************************
68089 : SUBROUTINE contract_fpsd(work, &
68090 : nl_a, nl_b, nl_c, nl_d, &
68091 : sphi_a, sphi_b, sphi_c, sphi_d, &
68092 : primitives, &
68093 : buffer1, buffer2)
68094 : REAL(dp), DIMENSION(10*3*1*6), INTENT(IN) :: work
68095 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68096 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68097 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68098 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
68099 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
68100 : REAL(dp), &
68101 : DIMENSION(7*nl_a, 3*nl_b, 1*nl_c, 5*nl_d) :: primitives
68102 : REAL(dp), DIMENSION(10*3*1*6) :: buffer1, buffer2
68103 :
68104 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68105 : kmax, s_offset_a1, s_offset_b1, &
68106 : s_offset_c1, s_offset_d1
68107 :
68108 : s_offset_a1 = 0
68109 : DO ia = 1, nl_a
68110 : s_offset_b1 = 0
68111 : DO ib = 1, nl_b
68112 : s_offset_c1 = 0
68113 : DO ic = 1, nl_c
68114 : s_offset_d1 = 0
68115 : DO id = 1, nl_d
68116 : buffer1 = 0.0_dp
68117 : imax = 3*1*6
68118 : kmax = 10
68119 : DO i = 1, imax
68120 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68121 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68122 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68123 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68124 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68125 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68126 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68127 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68128 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68130 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68131 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68132 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68133 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68134 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68135 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68136 : END DO
68137 : buffer2 = 0.0_dp
68138 : imax = 7*1*6
68139 : kmax = 3
68140 : DO i = 1, imax
68141 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68142 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68143 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68144 : END DO
68145 : buffer1 = 0.0_dp
68146 : imax = 7*3*6
68147 : kmax = 1
68148 : DO i = 1, imax
68149 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
68150 : END DO
68151 : imax = 7*3*1
68152 : kmax = 6
68153 : i = 0
68154 : DO i1 = 1, 1
68155 : DO i2 = 1, 3
68156 : DO i3 = 1, 7
68157 : i = i + 1
68158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68160 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
68161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68163 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
68164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68166 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68169 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
68170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68172 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
68173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68175 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
68176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68178 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
68179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68181 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
68182 : END DO
68183 : END DO
68184 : END DO
68185 : s_offset_d1 = s_offset_d1 + 5
68186 : END DO
68187 : s_offset_c1 = s_offset_c1 + 1
68188 : END DO
68189 : s_offset_b1 = s_offset_b1 + 3
68190 : END DO
68191 : s_offset_a1 = s_offset_a1 + 7
68192 : END DO
68193 : END SUBROUTINE contract_fpsd
68194 : #endif
68195 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68196 : ! **************************************************************************************************
68197 : !> \brief ...
68198 : !> \param work ...
68199 : !> \param nl_a ...
68200 : !> \param nl_b ...
68201 : !> \param nl_c ...
68202 : !> \param nl_d ...
68203 : !> \param sphi_a ...
68204 : !> \param sphi_b ...
68205 : !> \param sphi_c ...
68206 : !> \param sphi_d ...
68207 : !> \param primitives ...
68208 : !> \param buffer1 ...
68209 : !> \param buffer2 ...
68210 : ! **************************************************************************************************
68211 : SUBROUTINE contract_fpsf(work, &
68212 : nl_a, nl_b, nl_c, nl_d, &
68213 : sphi_a, sphi_b, sphi_c, sphi_d, &
68214 : primitives, &
68215 : buffer1, buffer2)
68216 : REAL(dp), DIMENSION(10*3*1*10), INTENT(IN) :: work
68217 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68218 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68219 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68220 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
68221 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
68222 : REAL(dp), &
68223 : DIMENSION(7*nl_a, 3*nl_b, 1*nl_c, 7*nl_d) :: primitives
68224 : REAL(dp), DIMENSION(10*3*1*10) :: buffer1, buffer2
68225 :
68226 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68227 : kmax, s_offset_a1, s_offset_b1, &
68228 : s_offset_c1, s_offset_d1
68229 :
68230 : s_offset_a1 = 0
68231 : DO ia = 1, nl_a
68232 : s_offset_b1 = 0
68233 : DO ib = 1, nl_b
68234 : s_offset_c1 = 0
68235 : DO ic = 1, nl_c
68236 : s_offset_d1 = 0
68237 : DO id = 1, nl_d
68238 : buffer1 = 0.0_dp
68239 : imax = 3*1*10
68240 : kmax = 10
68241 : DO i = 1, imax
68242 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68243 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68244 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68246 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68247 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68250 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68251 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68252 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68253 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68254 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68256 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68257 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68258 : END DO
68259 : buffer2 = 0.0_dp
68260 : imax = 7*1*10
68261 : kmax = 3
68262 : DO i = 1, imax
68263 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68264 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68265 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68266 : END DO
68267 : buffer1 = 0.0_dp
68268 : imax = 7*3*10
68269 : kmax = 1
68270 : DO i = 1, imax
68271 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
68272 : END DO
68273 : imax = 7*3*1
68274 : kmax = 10
68275 : i = 0
68276 : DO i1 = 1, 1
68277 : DO i2 = 1, 3
68278 : DO i3 = 1, 7
68279 : i = i + 1
68280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68282 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
68283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68285 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
68286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68288 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68291 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
68292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68294 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
68295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68297 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
68298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68300 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
68301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68303 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
68304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68306 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
68307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68309 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
68310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68312 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
68313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68315 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
68316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68318 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
68319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68321 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
68322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68324 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
68325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68327 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
68328 : END DO
68329 : END DO
68330 : END DO
68331 : s_offset_d1 = s_offset_d1 + 7
68332 : END DO
68333 : s_offset_c1 = s_offset_c1 + 1
68334 : END DO
68335 : s_offset_b1 = s_offset_b1 + 3
68336 : END DO
68337 : s_offset_a1 = s_offset_a1 + 7
68338 : END DO
68339 : END SUBROUTINE contract_fpsf
68340 : #endif
68341 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
68342 : ! **************************************************************************************************
68343 : !> \brief ...
68344 : !> \param work ...
68345 : !> \param nl_a ...
68346 : !> \param nl_b ...
68347 : !> \param nl_c ...
68348 : !> \param nl_d ...
68349 : !> \param sphi_a ...
68350 : !> \param sphi_b ...
68351 : !> \param sphi_c ...
68352 : !> \param sphi_d ...
68353 : !> \param primitives ...
68354 : !> \param buffer1 ...
68355 : !> \param buffer2 ...
68356 : ! **************************************************************************************************
68357 : SUBROUTINE contract_fpsg(work, &
68358 : nl_a, nl_b, nl_c, nl_d, &
68359 : sphi_a, sphi_b, sphi_c, sphi_d, &
68360 : primitives, &
68361 : buffer1, buffer2)
68362 : REAL(dp), DIMENSION(10*3*1*15), INTENT(IN) :: work
68363 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68364 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68365 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68366 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
68367 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
68368 : REAL(dp), &
68369 : DIMENSION(7*nl_a, 3*nl_b, 1*nl_c, 9*nl_d) :: primitives
68370 : REAL(dp), DIMENSION(10*3*1*15) :: buffer1, buffer2
68371 :
68372 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68373 : kmax, s_offset_a1, s_offset_b1, &
68374 : s_offset_c1, s_offset_d1
68375 :
68376 : s_offset_a1 = 0
68377 : DO ia = 1, nl_a
68378 : s_offset_b1 = 0
68379 : DO ib = 1, nl_b
68380 : s_offset_c1 = 0
68381 : DO ic = 1, nl_c
68382 : s_offset_d1 = 0
68383 : DO id = 1, nl_d
68384 : buffer1 = 0.0_dp
68385 : imax = 3*1*15
68386 : kmax = 10
68387 : DO i = 1, imax
68388 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68389 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68390 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68391 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68392 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68393 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68394 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68395 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68396 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68397 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68398 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68399 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68400 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68401 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68402 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68403 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68404 : END DO
68405 : buffer2 = 0.0_dp
68406 : imax = 7*1*15
68407 : kmax = 3
68408 : DO i = 1, imax
68409 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68410 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68411 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68412 : END DO
68413 : buffer1 = 0.0_dp
68414 : imax = 7*3*15
68415 : kmax = 1
68416 : DO i = 1, imax
68417 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
68418 : END DO
68419 : imax = 7*3*1
68420 : kmax = 15
68421 : i = 0
68422 : DO i1 = 1, 1
68423 : DO i2 = 1, 3
68424 : DO i3 = 1, 7
68425 : i = i + 1
68426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68428 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
68429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68431 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
68432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
68433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
68434 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
68435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68437 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68440 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
68441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68443 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
68444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
68445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
68446 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
68447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68449 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
68450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
68451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
68452 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
68453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68455 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
68456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68458 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
68459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68461 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
68462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68464 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
68465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68467 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
68468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68470 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
68471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68473 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
68474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
68475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
68476 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
68477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68479 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
68480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68482 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
68483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68485 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
68486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68488 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
68489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
68490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
68491 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
68492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68494 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
68495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68497 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
68498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68500 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
68501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68503 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
68504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68506 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
68507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68509 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
68510 : END DO
68511 : END DO
68512 : END DO
68513 : s_offset_d1 = s_offset_d1 + 9
68514 : END DO
68515 : s_offset_c1 = s_offset_c1 + 1
68516 : END DO
68517 : s_offset_b1 = s_offset_b1 + 3
68518 : END DO
68519 : s_offset_a1 = s_offset_a1 + 7
68520 : END DO
68521 : END SUBROUTINE contract_fpsg
68522 : #endif
68523 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68524 : ! **************************************************************************************************
68525 : !> \brief ...
68526 : !> \param work ...
68527 : !> \param nl_a ...
68528 : !> \param nl_b ...
68529 : !> \param nl_c ...
68530 : !> \param nl_d ...
68531 : !> \param sphi_a ...
68532 : !> \param sphi_b ...
68533 : !> \param sphi_c ...
68534 : !> \param sphi_d ...
68535 : !> \param primitives ...
68536 : !> \param buffer1 ...
68537 : !> \param buffer2 ...
68538 : ! **************************************************************************************************
68539 : SUBROUTINE contract_fpps(work, &
68540 : nl_a, nl_b, nl_c, nl_d, &
68541 : sphi_a, sphi_b, sphi_c, sphi_d, &
68542 : primitives, &
68543 : buffer1, buffer2)
68544 : REAL(dp), DIMENSION(10*3*3*1), INTENT(IN) :: work
68545 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68546 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68547 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68548 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
68549 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
68550 : REAL(dp), &
68551 : DIMENSION(7*nl_a, 3*nl_b, 3*nl_c, 1*nl_d) :: primitives
68552 : REAL(dp), DIMENSION(10*3*3*1) :: buffer1, buffer2
68553 :
68554 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68555 : kmax, s_offset_a1, s_offset_b1, &
68556 : s_offset_c1, s_offset_d1
68557 :
68558 : s_offset_a1 = 0
68559 : DO ia = 1, nl_a
68560 : s_offset_b1 = 0
68561 : DO ib = 1, nl_b
68562 : s_offset_c1 = 0
68563 : DO ic = 1, nl_c
68564 : s_offset_d1 = 0
68565 : DO id = 1, nl_d
68566 : buffer1 = 0.0_dp
68567 : imax = 3*3*1
68568 : kmax = 10
68569 : DO i = 1, imax
68570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68571 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68572 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68573 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68574 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68575 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68576 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68577 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68578 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68580 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68581 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68582 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68583 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68586 : END DO
68587 : buffer2 = 0.0_dp
68588 : imax = 7*3*1
68589 : kmax = 3
68590 : DO i = 1, imax
68591 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68592 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68593 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68594 : END DO
68595 : buffer1 = 0.0_dp
68596 : imax = 7*3*1
68597 : kmax = 3
68598 : DO i = 1, imax
68599 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
68600 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
68601 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
68602 : END DO
68603 : imax = 7*3*3
68604 : kmax = 1
68605 : i = 0
68606 : DO i1 = 1, 3
68607 : DO i2 = 1, 3
68608 : DO i3 = 1, 7
68609 : i = i + 1
68610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
68612 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
68613 : END DO
68614 : END DO
68615 : END DO
68616 : s_offset_d1 = s_offset_d1 + 1
68617 : END DO
68618 : s_offset_c1 = s_offset_c1 + 3
68619 : END DO
68620 : s_offset_b1 = s_offset_b1 + 3
68621 : END DO
68622 : s_offset_a1 = s_offset_a1 + 7
68623 : END DO
68624 : END SUBROUTINE contract_fpps
68625 : #endif
68626 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68627 : ! **************************************************************************************************
68628 : !> \brief ...
68629 : !> \param work ...
68630 : !> \param nl_a ...
68631 : !> \param nl_b ...
68632 : !> \param nl_c ...
68633 : !> \param nl_d ...
68634 : !> \param sphi_a ...
68635 : !> \param sphi_b ...
68636 : !> \param sphi_c ...
68637 : !> \param sphi_d ...
68638 : !> \param primitives ...
68639 : !> \param buffer1 ...
68640 : !> \param buffer2 ...
68641 : ! **************************************************************************************************
68642 : SUBROUTINE contract_fppp(work, &
68643 : nl_a, nl_b, nl_c, nl_d, &
68644 : sphi_a, sphi_b, sphi_c, sphi_d, &
68645 : primitives, &
68646 : buffer1, buffer2)
68647 : REAL(dp), DIMENSION(10*3*3*3), INTENT(IN) :: work
68648 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68649 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68650 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68651 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
68652 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
68653 : REAL(dp), &
68654 : DIMENSION(7*nl_a, 3*nl_b, 3*nl_c, 3*nl_d) :: primitives
68655 : REAL(dp), DIMENSION(10*3*3*3) :: buffer1, buffer2
68656 :
68657 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68658 : kmax, s_offset_a1, s_offset_b1, &
68659 : s_offset_c1, s_offset_d1
68660 :
68661 : s_offset_a1 = 0
68662 : DO ia = 1, nl_a
68663 : s_offset_b1 = 0
68664 : DO ib = 1, nl_b
68665 : s_offset_c1 = 0
68666 : DO ic = 1, nl_c
68667 : s_offset_d1 = 0
68668 : DO id = 1, nl_d
68669 : buffer1 = 0.0_dp
68670 : imax = 3*3*3
68671 : kmax = 10
68672 : DO i = 1, imax
68673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68674 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68675 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68676 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68677 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68678 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68679 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68680 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68681 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68682 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68683 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68685 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68686 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68688 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68689 : END DO
68690 : buffer2 = 0.0_dp
68691 : imax = 7*3*3
68692 : kmax = 3
68693 : DO i = 1, imax
68694 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68695 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68696 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68697 : END DO
68698 : buffer1 = 0.0_dp
68699 : imax = 7*3*3
68700 : kmax = 3
68701 : DO i = 1, imax
68702 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
68703 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
68704 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
68705 : END DO
68706 : imax = 7*3*3
68707 : kmax = 3
68708 : i = 0
68709 : DO i1 = 1, 3
68710 : DO i2 = 1, 3
68711 : DO i3 = 1, 7
68712 : i = i + 1
68713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
68715 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
68716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
68718 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
68721 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
68722 : END DO
68723 : END DO
68724 : END DO
68725 : s_offset_d1 = s_offset_d1 + 3
68726 : END DO
68727 : s_offset_c1 = s_offset_c1 + 3
68728 : END DO
68729 : s_offset_b1 = s_offset_b1 + 3
68730 : END DO
68731 : s_offset_a1 = s_offset_a1 + 7
68732 : END DO
68733 : END SUBROUTINE contract_fppp
68734 : #endif
68735 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68736 : ! **************************************************************************************************
68737 : !> \brief ...
68738 : !> \param work ...
68739 : !> \param nl_a ...
68740 : !> \param nl_b ...
68741 : !> \param nl_c ...
68742 : !> \param nl_d ...
68743 : !> \param sphi_a ...
68744 : !> \param sphi_b ...
68745 : !> \param sphi_c ...
68746 : !> \param sphi_d ...
68747 : !> \param primitives ...
68748 : !> \param buffer1 ...
68749 : !> \param buffer2 ...
68750 : ! **************************************************************************************************
68751 : SUBROUTINE contract_fppd(work, &
68752 : nl_a, nl_b, nl_c, nl_d, &
68753 : sphi_a, sphi_b, sphi_c, sphi_d, &
68754 : primitives, &
68755 : buffer1, buffer2)
68756 : REAL(dp), DIMENSION(10*3*3*6), INTENT(IN) :: work
68757 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68758 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68759 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68760 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
68761 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
68762 : REAL(dp), &
68763 : DIMENSION(7*nl_a, 3*nl_b, 3*nl_c, 5*nl_d) :: primitives
68764 : REAL(dp), DIMENSION(10*3*3*6) :: buffer1, buffer2
68765 :
68766 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68767 : kmax, s_offset_a1, s_offset_b1, &
68768 : s_offset_c1, s_offset_d1
68769 :
68770 : s_offset_a1 = 0
68771 : DO ia = 1, nl_a
68772 : s_offset_b1 = 0
68773 : DO ib = 1, nl_b
68774 : s_offset_c1 = 0
68775 : DO ic = 1, nl_c
68776 : s_offset_d1 = 0
68777 : DO id = 1, nl_d
68778 : buffer1 = 0.0_dp
68779 : imax = 3*3*6
68780 : kmax = 10
68781 : DO i = 1, imax
68782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68783 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68784 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68785 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68786 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68787 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68788 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68789 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68790 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68791 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68792 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68793 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68794 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68795 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68796 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68797 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68798 : END DO
68799 : buffer2 = 0.0_dp
68800 : imax = 7*3*6
68801 : kmax = 3
68802 : DO i = 1, imax
68803 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68804 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68805 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68806 : END DO
68807 : buffer1 = 0.0_dp
68808 : imax = 7*3*6
68809 : kmax = 3
68810 : DO i = 1, imax
68811 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
68812 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
68813 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
68814 : END DO
68815 : imax = 7*3*3
68816 : kmax = 6
68817 : i = 0
68818 : DO i1 = 1, 3
68819 : DO i2 = 1, 3
68820 : DO i3 = 1, 7
68821 : i = i + 1
68822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68824 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
68825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68827 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
68828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68830 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68833 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
68834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68836 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
68837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68839 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
68840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68842 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
68843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68845 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
68846 : END DO
68847 : END DO
68848 : END DO
68849 : s_offset_d1 = s_offset_d1 + 5
68850 : END DO
68851 : s_offset_c1 = s_offset_c1 + 3
68852 : END DO
68853 : s_offset_b1 = s_offset_b1 + 3
68854 : END DO
68855 : s_offset_a1 = s_offset_a1 + 7
68856 : END DO
68857 : END SUBROUTINE contract_fppd
68858 : #endif
68859 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
68860 : ! **************************************************************************************************
68861 : !> \brief ...
68862 : !> \param work ...
68863 : !> \param nl_a ...
68864 : !> \param nl_b ...
68865 : !> \param nl_c ...
68866 : !> \param nl_d ...
68867 : !> \param sphi_a ...
68868 : !> \param sphi_b ...
68869 : !> \param sphi_c ...
68870 : !> \param sphi_d ...
68871 : !> \param primitives ...
68872 : !> \param buffer1 ...
68873 : !> \param buffer2 ...
68874 : ! **************************************************************************************************
68875 : SUBROUTINE contract_fppf(work, &
68876 : nl_a, nl_b, nl_c, nl_d, &
68877 : sphi_a, sphi_b, sphi_c, sphi_d, &
68878 : primitives, &
68879 : buffer1, buffer2)
68880 : REAL(dp), DIMENSION(10*3*3*10), INTENT(IN) :: work
68881 : INTEGER :: nl_a, nl_b, nl_c, nl_d
68882 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
68883 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
68884 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
68885 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
68886 : REAL(dp), &
68887 : DIMENSION(7*nl_a, 3*nl_b, 3*nl_c, 7*nl_d) :: primitives
68888 : REAL(dp), DIMENSION(10*3*3*10) :: buffer1, buffer2
68889 :
68890 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
68891 : kmax, s_offset_a1, s_offset_b1, &
68892 : s_offset_c1, s_offset_d1
68893 :
68894 : s_offset_a1 = 0
68895 : DO ia = 1, nl_a
68896 : s_offset_b1 = 0
68897 : DO ib = 1, nl_b
68898 : s_offset_c1 = 0
68899 : DO ic = 1, nl_c
68900 : s_offset_d1 = 0
68901 : DO id = 1, nl_d
68902 : buffer1 = 0.0_dp
68903 : imax = 3*3*10
68904 : kmax = 10
68905 : DO i = 1, imax
68906 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
68907 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
68908 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
68909 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
68910 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
68911 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
68912 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
68913 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
68914 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
68915 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
68916 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
68917 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
68918 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
68919 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
68920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
68921 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
68922 : END DO
68923 : buffer2 = 0.0_dp
68924 : imax = 7*3*10
68925 : kmax = 3
68926 : DO i = 1, imax
68927 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
68928 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
68929 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
68930 : END DO
68931 : buffer1 = 0.0_dp
68932 : imax = 7*3*10
68933 : kmax = 3
68934 : DO i = 1, imax
68935 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
68936 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
68937 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
68938 : END DO
68939 : imax = 7*3*3
68940 : kmax = 10
68941 : i = 0
68942 : DO i1 = 1, 3
68943 : DO i2 = 1, 3
68944 : DO i3 = 1, 7
68945 : i = i + 1
68946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68948 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
68949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68951 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
68952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68954 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
68955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68957 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
68958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68960 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
68961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68963 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
68964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68966 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
68967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
68968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
68969 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
68970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
68971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
68972 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
68973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
68974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
68975 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
68976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
68977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
68978 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
68979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68981 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
68982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68984 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
68985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
68986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
68987 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
68988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
68989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
68990 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
68991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
68992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
68993 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
68994 : END DO
68995 : END DO
68996 : END DO
68997 : s_offset_d1 = s_offset_d1 + 7
68998 : END DO
68999 : s_offset_c1 = s_offset_c1 + 3
69000 : END DO
69001 : s_offset_b1 = s_offset_b1 + 3
69002 : END DO
69003 : s_offset_a1 = s_offset_a1 + 7
69004 : END DO
69005 : END SUBROUTINE contract_fppf
69006 : #endif
69007 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
69008 : ! **************************************************************************************************
69009 : !> \brief ...
69010 : !> \param work ...
69011 : !> \param nl_a ...
69012 : !> \param nl_b ...
69013 : !> \param nl_c ...
69014 : !> \param nl_d ...
69015 : !> \param sphi_a ...
69016 : !> \param sphi_b ...
69017 : !> \param sphi_c ...
69018 : !> \param sphi_d ...
69019 : !> \param primitives ...
69020 : !> \param buffer1 ...
69021 : !> \param buffer2 ...
69022 : ! **************************************************************************************************
69023 : SUBROUTINE contract_fppg(work, &
69024 : nl_a, nl_b, nl_c, nl_d, &
69025 : sphi_a, sphi_b, sphi_c, sphi_d, &
69026 : primitives, &
69027 : buffer1, buffer2)
69028 : REAL(dp), DIMENSION(10*3*3*15), INTENT(IN) :: work
69029 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69030 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69031 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69032 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
69033 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
69034 : REAL(dp), &
69035 : DIMENSION(7*nl_a, 3*nl_b, 3*nl_c, 9*nl_d) :: primitives
69036 : REAL(dp), DIMENSION(10*3*3*15) :: buffer1, buffer2
69037 :
69038 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69039 : kmax, s_offset_a1, s_offset_b1, &
69040 : s_offset_c1, s_offset_d1
69041 :
69042 : s_offset_a1 = 0
69043 : DO ia = 1, nl_a
69044 : s_offset_b1 = 0
69045 : DO ib = 1, nl_b
69046 : s_offset_c1 = 0
69047 : DO ic = 1, nl_c
69048 : s_offset_d1 = 0
69049 : DO id = 1, nl_d
69050 : buffer1 = 0.0_dp
69051 : imax = 3*3*15
69052 : kmax = 10
69053 : DO i = 1, imax
69054 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69055 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69056 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69057 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69058 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69059 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69060 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69061 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69062 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69063 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69064 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69065 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69066 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69067 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69068 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69069 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69070 : END DO
69071 : buffer2 = 0.0_dp
69072 : imax = 7*3*15
69073 : kmax = 3
69074 : DO i = 1, imax
69075 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69076 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69077 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69078 : END DO
69079 : buffer1 = 0.0_dp
69080 : imax = 7*3*15
69081 : kmax = 3
69082 : DO i = 1, imax
69083 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69084 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69085 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
69086 : END DO
69087 : imax = 7*3*3
69088 : kmax = 15
69089 : i = 0
69090 : DO i1 = 1, 3
69091 : DO i2 = 1, 3
69092 : DO i3 = 1, 7
69093 : i = i + 1
69094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69096 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
69097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69099 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
69100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69102 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
69103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69105 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
69106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69108 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
69109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69111 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
69112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
69113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
69114 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
69115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69117 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
69118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69120 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
69121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69123 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
69124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69126 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
69127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69129 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
69130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69132 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
69133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69135 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
69136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69138 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
69139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69141 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
69142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
69143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
69144 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
69145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69147 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
69148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69150 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
69151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69153 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
69154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69156 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
69157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69159 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
69160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69162 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
69163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69165 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
69166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69168 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
69169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69171 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
69172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69174 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
69175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69177 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
69178 : END DO
69179 : END DO
69180 : END DO
69181 : s_offset_d1 = s_offset_d1 + 9
69182 : END DO
69183 : s_offset_c1 = s_offset_c1 + 3
69184 : END DO
69185 : s_offset_b1 = s_offset_b1 + 3
69186 : END DO
69187 : s_offset_a1 = s_offset_a1 + 7
69188 : END DO
69189 : END SUBROUTINE contract_fppg
69190 : #endif
69191 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
69192 : ! **************************************************************************************************
69193 : !> \brief ...
69194 : !> \param work ...
69195 : !> \param nl_a ...
69196 : !> \param nl_b ...
69197 : !> \param nl_c ...
69198 : !> \param nl_d ...
69199 : !> \param sphi_a ...
69200 : !> \param sphi_b ...
69201 : !> \param sphi_c ...
69202 : !> \param sphi_d ...
69203 : !> \param primitives ...
69204 : !> \param buffer1 ...
69205 : !> \param buffer2 ...
69206 : ! **************************************************************************************************
69207 : SUBROUTINE contract_fpds(work, &
69208 : nl_a, nl_b, nl_c, nl_d, &
69209 : sphi_a, sphi_b, sphi_c, sphi_d, &
69210 : primitives, &
69211 : buffer1, buffer2)
69212 : REAL(dp), DIMENSION(10*3*6*1), INTENT(IN) :: work
69213 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69214 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69215 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69216 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
69217 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
69218 : REAL(dp), &
69219 : DIMENSION(7*nl_a, 3*nl_b, 5*nl_c, 1*nl_d) :: primitives
69220 : REAL(dp), DIMENSION(10*3*6*1) :: buffer1, buffer2
69221 :
69222 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69223 : kmax, s_offset_a1, s_offset_b1, &
69224 : s_offset_c1, s_offset_d1
69225 :
69226 : s_offset_a1 = 0
69227 : DO ia = 1, nl_a
69228 : s_offset_b1 = 0
69229 : DO ib = 1, nl_b
69230 : s_offset_c1 = 0
69231 : DO ic = 1, nl_c
69232 : s_offset_d1 = 0
69233 : DO id = 1, nl_d
69234 : buffer1 = 0.0_dp
69235 : imax = 3*6*1
69236 : kmax = 10
69237 : DO i = 1, imax
69238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69239 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69240 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69241 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69242 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69243 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69244 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69245 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69246 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69248 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69249 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69250 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69251 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69252 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69253 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69254 : END DO
69255 : buffer2 = 0.0_dp
69256 : imax = 7*6*1
69257 : kmax = 3
69258 : DO i = 1, imax
69259 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69260 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69261 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69262 : END DO
69263 : buffer1 = 0.0_dp
69264 : imax = 7*3*1
69265 : kmax = 6
69266 : DO i = 1, imax
69267 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69269 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69270 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
69272 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69273 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69274 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
69275 : END DO
69276 : imax = 7*3*5
69277 : kmax = 1
69278 : i = 0
69279 : DO i1 = 1, 5
69280 : DO i2 = 1, 3
69281 : DO i3 = 1, 7
69282 : i = i + 1
69283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
69285 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
69286 : END DO
69287 : END DO
69288 : END DO
69289 : s_offset_d1 = s_offset_d1 + 1
69290 : END DO
69291 : s_offset_c1 = s_offset_c1 + 5
69292 : END DO
69293 : s_offset_b1 = s_offset_b1 + 3
69294 : END DO
69295 : s_offset_a1 = s_offset_a1 + 7
69296 : END DO
69297 : END SUBROUTINE contract_fpds
69298 : #endif
69299 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
69300 : ! **************************************************************************************************
69301 : !> \brief ...
69302 : !> \param work ...
69303 : !> \param nl_a ...
69304 : !> \param nl_b ...
69305 : !> \param nl_c ...
69306 : !> \param nl_d ...
69307 : !> \param sphi_a ...
69308 : !> \param sphi_b ...
69309 : !> \param sphi_c ...
69310 : !> \param sphi_d ...
69311 : !> \param primitives ...
69312 : !> \param buffer1 ...
69313 : !> \param buffer2 ...
69314 : ! **************************************************************************************************
69315 : SUBROUTINE contract_fpdp(work, &
69316 : nl_a, nl_b, nl_c, nl_d, &
69317 : sphi_a, sphi_b, sphi_c, sphi_d, &
69318 : primitives, &
69319 : buffer1, buffer2)
69320 : REAL(dp), DIMENSION(10*3*6*3), INTENT(IN) :: work
69321 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69322 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69323 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69324 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
69325 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
69326 : REAL(dp), &
69327 : DIMENSION(7*nl_a, 3*nl_b, 5*nl_c, 3*nl_d) :: primitives
69328 : REAL(dp), DIMENSION(10*3*6*3) :: buffer1, buffer2
69329 :
69330 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69331 : kmax, s_offset_a1, s_offset_b1, &
69332 : s_offset_c1, s_offset_d1
69333 :
69334 : s_offset_a1 = 0
69335 : DO ia = 1, nl_a
69336 : s_offset_b1 = 0
69337 : DO ib = 1, nl_b
69338 : s_offset_c1 = 0
69339 : DO ic = 1, nl_c
69340 : s_offset_d1 = 0
69341 : DO id = 1, nl_d
69342 : buffer1 = 0.0_dp
69343 : imax = 3*6*3
69344 : kmax = 10
69345 : DO i = 1, imax
69346 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69347 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69348 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69349 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69350 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69351 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69352 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69353 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69354 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69355 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69356 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69358 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69359 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69361 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69362 : END DO
69363 : buffer2 = 0.0_dp
69364 : imax = 7*6*3
69365 : kmax = 3
69366 : DO i = 1, imax
69367 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69368 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69369 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69370 : END DO
69371 : buffer1 = 0.0_dp
69372 : imax = 7*3*3
69373 : kmax = 6
69374 : DO i = 1, imax
69375 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69376 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69377 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69378 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69379 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
69380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69381 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69382 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
69383 : END DO
69384 : imax = 7*3*5
69385 : kmax = 3
69386 : i = 0
69387 : DO i1 = 1, 5
69388 : DO i2 = 1, 3
69389 : DO i3 = 1, 7
69390 : i = i + 1
69391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
69393 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
69394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
69396 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
69397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
69399 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
69400 : END DO
69401 : END DO
69402 : END DO
69403 : s_offset_d1 = s_offset_d1 + 3
69404 : END DO
69405 : s_offset_c1 = s_offset_c1 + 5
69406 : END DO
69407 : s_offset_b1 = s_offset_b1 + 3
69408 : END DO
69409 : s_offset_a1 = s_offset_a1 + 7
69410 : END DO
69411 : END SUBROUTINE contract_fpdp
69412 : #endif
69413 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
69414 : ! **************************************************************************************************
69415 : !> \brief ...
69416 : !> \param work ...
69417 : !> \param nl_a ...
69418 : !> \param nl_b ...
69419 : !> \param nl_c ...
69420 : !> \param nl_d ...
69421 : !> \param sphi_a ...
69422 : !> \param sphi_b ...
69423 : !> \param sphi_c ...
69424 : !> \param sphi_d ...
69425 : !> \param primitives ...
69426 : !> \param buffer1 ...
69427 : !> \param buffer2 ...
69428 : ! **************************************************************************************************
69429 : SUBROUTINE contract_fpdd(work, &
69430 : nl_a, nl_b, nl_c, nl_d, &
69431 : sphi_a, sphi_b, sphi_c, sphi_d, &
69432 : primitives, &
69433 : buffer1, buffer2)
69434 : REAL(dp), DIMENSION(10*3*6*6), INTENT(IN) :: work
69435 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69436 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69437 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69438 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
69439 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
69440 : REAL(dp), &
69441 : DIMENSION(7*nl_a, 3*nl_b, 5*nl_c, 5*nl_d) :: primitives
69442 : REAL(dp), DIMENSION(10*3*6*6) :: buffer1, buffer2
69443 :
69444 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69445 : kmax, s_offset_a1, s_offset_b1, &
69446 : s_offset_c1, s_offset_d1
69447 :
69448 : s_offset_a1 = 0
69449 : DO ia = 1, nl_a
69450 : s_offset_b1 = 0
69451 : DO ib = 1, nl_b
69452 : s_offset_c1 = 0
69453 : DO ic = 1, nl_c
69454 : s_offset_d1 = 0
69455 : DO id = 1, nl_d
69456 : buffer1 = 0.0_dp
69457 : imax = 3*6*6
69458 : kmax = 10
69459 : DO i = 1, imax
69460 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69461 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69462 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69463 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69464 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69465 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69467 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69468 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69469 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69470 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69471 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69472 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69473 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69474 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69475 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69476 : END DO
69477 : buffer2 = 0.0_dp
69478 : imax = 7*6*6
69479 : kmax = 3
69480 : DO i = 1, imax
69481 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69482 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69483 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69484 : END DO
69485 : buffer1 = 0.0_dp
69486 : imax = 7*3*6
69487 : kmax = 6
69488 : DO i = 1, imax
69489 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69490 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69491 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69492 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69493 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
69494 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69495 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69496 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
69497 : END DO
69498 : imax = 7*3*5
69499 : kmax = 6
69500 : i = 0
69501 : DO i1 = 1, 5
69502 : DO i2 = 1, 3
69503 : DO i3 = 1, 7
69504 : i = i + 1
69505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69507 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
69508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69510 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
69511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69513 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
69514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69516 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
69517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69519 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
69520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69522 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
69523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69525 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
69526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69528 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
69529 : END DO
69530 : END DO
69531 : END DO
69532 : s_offset_d1 = s_offset_d1 + 5
69533 : END DO
69534 : s_offset_c1 = s_offset_c1 + 5
69535 : END DO
69536 : s_offset_b1 = s_offset_b1 + 3
69537 : END DO
69538 : s_offset_a1 = s_offset_a1 + 7
69539 : END DO
69540 : END SUBROUTINE contract_fpdd
69541 : #endif
69542 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
69543 : ! **************************************************************************************************
69544 : !> \brief ...
69545 : !> \param work ...
69546 : !> \param nl_a ...
69547 : !> \param nl_b ...
69548 : !> \param nl_c ...
69549 : !> \param nl_d ...
69550 : !> \param sphi_a ...
69551 : !> \param sphi_b ...
69552 : !> \param sphi_c ...
69553 : !> \param sphi_d ...
69554 : !> \param primitives ...
69555 : !> \param buffer1 ...
69556 : !> \param buffer2 ...
69557 : ! **************************************************************************************************
69558 : SUBROUTINE contract_fpdf(work, &
69559 : nl_a, nl_b, nl_c, nl_d, &
69560 : sphi_a, sphi_b, sphi_c, sphi_d, &
69561 : primitives, &
69562 : buffer1, buffer2)
69563 : REAL(dp), DIMENSION(10*3*6*10), INTENT(IN) :: work
69564 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69565 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69566 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69567 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
69568 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
69569 : REAL(dp), &
69570 : DIMENSION(7*nl_a, 3*nl_b, 5*nl_c, 7*nl_d) :: primitives
69571 : REAL(dp), DIMENSION(10*3*6*10) :: buffer1, buffer2
69572 :
69573 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69574 : kmax, s_offset_a1, s_offset_b1, &
69575 : s_offset_c1, s_offset_d1
69576 :
69577 : s_offset_a1 = 0
69578 : DO ia = 1, nl_a
69579 : s_offset_b1 = 0
69580 : DO ib = 1, nl_b
69581 : s_offset_c1 = 0
69582 : DO ic = 1, nl_c
69583 : s_offset_d1 = 0
69584 : DO id = 1, nl_d
69585 : buffer1 = 0.0_dp
69586 : imax = 3*6*10
69587 : kmax = 10
69588 : DO i = 1, imax
69589 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69590 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69591 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69592 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69593 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69594 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69595 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69596 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69597 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69598 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69599 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69601 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69602 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69603 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69604 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69605 : END DO
69606 : buffer2 = 0.0_dp
69607 : imax = 7*6*10
69608 : kmax = 3
69609 : DO i = 1, imax
69610 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69611 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69612 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69613 : END DO
69614 : buffer1 = 0.0_dp
69615 : imax = 7*3*10
69616 : kmax = 6
69617 : DO i = 1, imax
69618 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69619 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69620 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69621 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69622 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
69623 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69624 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69625 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
69626 : END DO
69627 : imax = 7*3*5
69628 : kmax = 10
69629 : i = 0
69630 : DO i1 = 1, 5
69631 : DO i2 = 1, 3
69632 : DO i3 = 1, 7
69633 : i = i + 1
69634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69636 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
69637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69639 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
69640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69642 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
69643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69645 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
69646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69648 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
69649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69651 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
69652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69654 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
69655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69657 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
69658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69660 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
69661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69663 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
69664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69666 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
69667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69669 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
69670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69672 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
69673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69675 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
69676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69678 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
69679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69681 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
69682 : END DO
69683 : END DO
69684 : END DO
69685 : s_offset_d1 = s_offset_d1 + 7
69686 : END DO
69687 : s_offset_c1 = s_offset_c1 + 5
69688 : END DO
69689 : s_offset_b1 = s_offset_b1 + 3
69690 : END DO
69691 : s_offset_a1 = s_offset_a1 + 7
69692 : END DO
69693 : END SUBROUTINE contract_fpdf
69694 : #endif
69695 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
69696 : ! **************************************************************************************************
69697 : !> \brief ...
69698 : !> \param work ...
69699 : !> \param nl_a ...
69700 : !> \param nl_b ...
69701 : !> \param nl_c ...
69702 : !> \param nl_d ...
69703 : !> \param sphi_a ...
69704 : !> \param sphi_b ...
69705 : !> \param sphi_c ...
69706 : !> \param sphi_d ...
69707 : !> \param primitives ...
69708 : !> \param buffer1 ...
69709 : !> \param buffer2 ...
69710 : ! **************************************************************************************************
69711 : SUBROUTINE contract_fpdg(work, &
69712 : nl_a, nl_b, nl_c, nl_d, &
69713 : sphi_a, sphi_b, sphi_c, sphi_d, &
69714 : primitives, &
69715 : buffer1, buffer2)
69716 : REAL(dp), DIMENSION(10*3*6*15), INTENT(IN) :: work
69717 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69718 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69719 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69720 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
69721 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
69722 : REAL(dp), &
69723 : DIMENSION(7*nl_a, 3*nl_b, 5*nl_c, 9*nl_d) :: primitives
69724 : REAL(dp), DIMENSION(10*3*6*15) :: buffer1, buffer2
69725 :
69726 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69727 : kmax, s_offset_a1, s_offset_b1, &
69728 : s_offset_c1, s_offset_d1
69729 :
69730 : s_offset_a1 = 0
69731 : DO ia = 1, nl_a
69732 : s_offset_b1 = 0
69733 : DO ib = 1, nl_b
69734 : s_offset_c1 = 0
69735 : DO ic = 1, nl_c
69736 : s_offset_d1 = 0
69737 : DO id = 1, nl_d
69738 : buffer1 = 0.0_dp
69739 : imax = 3*6*15
69740 : kmax = 10
69741 : DO i = 1, imax
69742 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69743 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69744 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69745 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69746 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69747 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69748 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69749 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69750 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69751 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69752 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69753 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69754 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69755 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69756 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69757 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69758 : END DO
69759 : buffer2 = 0.0_dp
69760 : imax = 7*6*15
69761 : kmax = 3
69762 : DO i = 1, imax
69763 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69764 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69765 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69766 : END DO
69767 : buffer1 = 0.0_dp
69768 : imax = 7*3*15
69769 : kmax = 6
69770 : DO i = 1, imax
69771 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
69772 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69773 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69774 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69775 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
69776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69777 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
69779 : END DO
69780 : imax = 7*3*5
69781 : kmax = 15
69782 : i = 0
69783 : DO i1 = 1, 5
69784 : DO i2 = 1, 3
69785 : DO i3 = 1, 7
69786 : i = i + 1
69787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69789 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
69790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69792 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
69793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69795 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
69796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69798 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
69799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69801 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
69802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69804 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
69805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
69806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
69807 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
69808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69810 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
69811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69813 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
69814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69816 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
69817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69819 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
69820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69822 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
69823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69825 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
69826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
69828 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
69829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69831 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
69832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69834 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
69835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
69836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
69837 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
69838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
69839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
69840 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
69841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
69842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
69843 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
69844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69846 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
69847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69849 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
69850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
69851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
69852 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
69853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
69854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
69855 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
69856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69858 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
69859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69861 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
69862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
69863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
69864 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
69865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
69866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
69867 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
69868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
69869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
69870 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
69871 : END DO
69872 : END DO
69873 : END DO
69874 : s_offset_d1 = s_offset_d1 + 9
69875 : END DO
69876 : s_offset_c1 = s_offset_c1 + 5
69877 : END DO
69878 : s_offset_b1 = s_offset_b1 + 3
69879 : END DO
69880 : s_offset_a1 = s_offset_a1 + 7
69881 : END DO
69882 : END SUBROUTINE contract_fpdg
69883 : #endif
69884 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
69885 : ! **************************************************************************************************
69886 : !> \brief ...
69887 : !> \param work ...
69888 : !> \param nl_a ...
69889 : !> \param nl_b ...
69890 : !> \param nl_c ...
69891 : !> \param nl_d ...
69892 : !> \param sphi_a ...
69893 : !> \param sphi_b ...
69894 : !> \param sphi_c ...
69895 : !> \param sphi_d ...
69896 : !> \param primitives ...
69897 : !> \param buffer1 ...
69898 : !> \param buffer2 ...
69899 : ! **************************************************************************************************
69900 : SUBROUTINE contract_fpfs(work, &
69901 : nl_a, nl_b, nl_c, nl_d, &
69902 : sphi_a, sphi_b, sphi_c, sphi_d, &
69903 : primitives, &
69904 : buffer1, buffer2)
69905 : REAL(dp), DIMENSION(10*3*10*1), INTENT(IN) :: work
69906 : INTEGER :: nl_a, nl_b, nl_c, nl_d
69907 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
69908 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
69909 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
69910 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
69911 : REAL(dp), &
69912 : DIMENSION(7*nl_a, 3*nl_b, 7*nl_c, 1*nl_d) :: primitives
69913 : REAL(dp), DIMENSION(10*3*10*1) :: buffer1, buffer2
69914 :
69915 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
69916 : kmax, s_offset_a1, s_offset_b1, &
69917 : s_offset_c1, s_offset_d1
69918 :
69919 : s_offset_a1 = 0
69920 : DO ia = 1, nl_a
69921 : s_offset_b1 = 0
69922 : DO ib = 1, nl_b
69923 : s_offset_c1 = 0
69924 : DO ic = 1, nl_c
69925 : s_offset_d1 = 0
69926 : DO id = 1, nl_d
69927 : buffer1 = 0.0_dp
69928 : imax = 3*10*1
69929 : kmax = 10
69930 : DO i = 1, imax
69931 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
69932 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
69933 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
69934 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
69935 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
69936 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
69937 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
69938 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
69939 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
69940 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
69941 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
69942 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
69943 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
69944 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
69945 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
69946 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
69947 : END DO
69948 : buffer2 = 0.0_dp
69949 : imax = 7*10*1
69950 : kmax = 3
69951 : DO i = 1, imax
69952 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
69953 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
69954 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
69955 : END DO
69956 : buffer1 = 0.0_dp
69957 : imax = 7*3*1
69958 : kmax = 10
69959 : DO i = 1, imax
69960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
69961 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
69962 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
69963 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
69964 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
69965 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
69966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
69967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
69968 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
69969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
69970 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
69971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
69972 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
69973 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
69974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
69975 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
69976 : END DO
69977 : imax = 7*3*7
69978 : kmax = 1
69979 : i = 0
69980 : DO i1 = 1, 7
69981 : DO i2 = 1, 3
69982 : DO i3 = 1, 7
69983 : i = i + 1
69984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
69985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
69986 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
69987 : END DO
69988 : END DO
69989 : END DO
69990 : s_offset_d1 = s_offset_d1 + 1
69991 : END DO
69992 : s_offset_c1 = s_offset_c1 + 7
69993 : END DO
69994 : s_offset_b1 = s_offset_b1 + 3
69995 : END DO
69996 : s_offset_a1 = s_offset_a1 + 7
69997 : END DO
69998 : END SUBROUTINE contract_fpfs
69999 : #endif
70000 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
70001 : ! **************************************************************************************************
70002 : !> \brief ...
70003 : !> \param work ...
70004 : !> \param nl_a ...
70005 : !> \param nl_b ...
70006 : !> \param nl_c ...
70007 : !> \param nl_d ...
70008 : !> \param sphi_a ...
70009 : !> \param sphi_b ...
70010 : !> \param sphi_c ...
70011 : !> \param sphi_d ...
70012 : !> \param primitives ...
70013 : !> \param buffer1 ...
70014 : !> \param buffer2 ...
70015 : ! **************************************************************************************************
70016 : SUBROUTINE contract_fpfp(work, &
70017 : nl_a, nl_b, nl_c, nl_d, &
70018 : sphi_a, sphi_b, sphi_c, sphi_d, &
70019 : primitives, &
70020 : buffer1, buffer2)
70021 : REAL(dp), DIMENSION(10*3*10*3), INTENT(IN) :: work
70022 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70023 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70024 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70025 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
70026 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
70027 : REAL(dp), &
70028 : DIMENSION(7*nl_a, 3*nl_b, 7*nl_c, 3*nl_d) :: primitives
70029 : REAL(dp), DIMENSION(10*3*10*3) :: buffer1, buffer2
70030 :
70031 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70032 : kmax, s_offset_a1, s_offset_b1, &
70033 : s_offset_c1, s_offset_d1
70034 :
70035 : s_offset_a1 = 0
70036 : DO ia = 1, nl_a
70037 : s_offset_b1 = 0
70038 : DO ib = 1, nl_b
70039 : s_offset_c1 = 0
70040 : DO ic = 1, nl_c
70041 : s_offset_d1 = 0
70042 : DO id = 1, nl_d
70043 : buffer1 = 0.0_dp
70044 : imax = 3*10*3
70045 : kmax = 10
70046 : DO i = 1, imax
70047 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70048 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70049 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70050 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70051 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70052 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70053 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70054 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70055 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70056 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70057 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70058 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70059 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70060 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70061 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70062 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70063 : END DO
70064 : buffer2 = 0.0_dp
70065 : imax = 7*10*3
70066 : kmax = 3
70067 : DO i = 1, imax
70068 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70069 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70070 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70071 : END DO
70072 : buffer1 = 0.0_dp
70073 : imax = 7*3*3
70074 : kmax = 10
70075 : DO i = 1, imax
70076 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70077 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70078 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70080 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
70081 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70082 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70083 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
70084 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70085 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70086 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70087 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70088 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
70089 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70090 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70091 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
70092 : END DO
70093 : imax = 7*3*7
70094 : kmax = 3
70095 : i = 0
70096 : DO i1 = 1, 7
70097 : DO i2 = 1, 3
70098 : DO i3 = 1, 7
70099 : i = i + 1
70100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
70102 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
70103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
70105 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
70106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
70108 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
70109 : END DO
70110 : END DO
70111 : END DO
70112 : s_offset_d1 = s_offset_d1 + 3
70113 : END DO
70114 : s_offset_c1 = s_offset_c1 + 7
70115 : END DO
70116 : s_offset_b1 = s_offset_b1 + 3
70117 : END DO
70118 : s_offset_a1 = s_offset_a1 + 7
70119 : END DO
70120 : END SUBROUTINE contract_fpfp
70121 : #endif
70122 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
70123 : ! **************************************************************************************************
70124 : !> \brief ...
70125 : !> \param work ...
70126 : !> \param nl_a ...
70127 : !> \param nl_b ...
70128 : !> \param nl_c ...
70129 : !> \param nl_d ...
70130 : !> \param sphi_a ...
70131 : !> \param sphi_b ...
70132 : !> \param sphi_c ...
70133 : !> \param sphi_d ...
70134 : !> \param primitives ...
70135 : !> \param buffer1 ...
70136 : !> \param buffer2 ...
70137 : ! **************************************************************************************************
70138 : SUBROUTINE contract_fpfd(work, &
70139 : nl_a, nl_b, nl_c, nl_d, &
70140 : sphi_a, sphi_b, sphi_c, sphi_d, &
70141 : primitives, &
70142 : buffer1, buffer2)
70143 : REAL(dp), DIMENSION(10*3*10*6), INTENT(IN) :: work
70144 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70145 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70146 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70147 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
70148 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
70149 : REAL(dp), &
70150 : DIMENSION(7*nl_a, 3*nl_b, 7*nl_c, 5*nl_d) :: primitives
70151 : REAL(dp), DIMENSION(10*3*10*6) :: buffer1, buffer2
70152 :
70153 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70154 : kmax, s_offset_a1, s_offset_b1, &
70155 : s_offset_c1, s_offset_d1
70156 :
70157 : s_offset_a1 = 0
70158 : DO ia = 1, nl_a
70159 : s_offset_b1 = 0
70160 : DO ib = 1, nl_b
70161 : s_offset_c1 = 0
70162 : DO ic = 1, nl_c
70163 : s_offset_d1 = 0
70164 : DO id = 1, nl_d
70165 : buffer1 = 0.0_dp
70166 : imax = 3*10*6
70167 : kmax = 10
70168 : DO i = 1, imax
70169 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70170 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70171 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70172 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70173 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70174 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70175 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70176 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70177 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70178 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70179 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70180 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70182 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70183 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70184 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70185 : END DO
70186 : buffer2 = 0.0_dp
70187 : imax = 7*10*6
70188 : kmax = 3
70189 : DO i = 1, imax
70190 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70191 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70192 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70193 : END DO
70194 : buffer1 = 0.0_dp
70195 : imax = 7*3*6
70196 : kmax = 10
70197 : DO i = 1, imax
70198 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70199 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70200 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70201 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70202 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
70203 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70204 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70205 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
70206 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70207 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70208 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70209 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70210 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
70211 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70212 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70213 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
70214 : END DO
70215 : imax = 7*3*7
70216 : kmax = 6
70217 : i = 0
70218 : DO i1 = 1, 7
70219 : DO i2 = 1, 3
70220 : DO i3 = 1, 7
70221 : i = i + 1
70222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70224 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
70225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70227 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
70228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70230 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
70231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70233 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
70234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70236 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
70237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70239 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
70240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
70242 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
70243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70245 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
70246 : END DO
70247 : END DO
70248 : END DO
70249 : s_offset_d1 = s_offset_d1 + 5
70250 : END DO
70251 : s_offset_c1 = s_offset_c1 + 7
70252 : END DO
70253 : s_offset_b1 = s_offset_b1 + 3
70254 : END DO
70255 : s_offset_a1 = s_offset_a1 + 7
70256 : END DO
70257 : END SUBROUTINE contract_fpfd
70258 : #endif
70259 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
70260 : ! **************************************************************************************************
70261 : !> \brief ...
70262 : !> \param work ...
70263 : !> \param nl_a ...
70264 : !> \param nl_b ...
70265 : !> \param nl_c ...
70266 : !> \param nl_d ...
70267 : !> \param sphi_a ...
70268 : !> \param sphi_b ...
70269 : !> \param sphi_c ...
70270 : !> \param sphi_d ...
70271 : !> \param primitives ...
70272 : !> \param buffer1 ...
70273 : !> \param buffer2 ...
70274 : ! **************************************************************************************************
70275 : SUBROUTINE contract_fpff(work, &
70276 : nl_a, nl_b, nl_c, nl_d, &
70277 : sphi_a, sphi_b, sphi_c, sphi_d, &
70278 : primitives, &
70279 : buffer1, buffer2)
70280 : REAL(dp), DIMENSION(10*3*10*10), INTENT(IN) :: work
70281 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70282 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70283 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70284 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
70285 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
70286 : REAL(dp), &
70287 : DIMENSION(7*nl_a, 3*nl_b, 7*nl_c, 7*nl_d) :: primitives
70288 : REAL(dp), DIMENSION(10*3*10*10) :: buffer1, buffer2
70289 :
70290 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70291 : kmax, s_offset_a1, s_offset_b1, &
70292 : s_offset_c1, s_offset_d1
70293 :
70294 : s_offset_a1 = 0
70295 : DO ia = 1, nl_a
70296 : s_offset_b1 = 0
70297 : DO ib = 1, nl_b
70298 : s_offset_c1 = 0
70299 : DO ic = 1, nl_c
70300 : s_offset_d1 = 0
70301 : DO id = 1, nl_d
70302 : buffer1 = 0.0_dp
70303 : imax = 3*10*10
70304 : kmax = 10
70305 : DO i = 1, imax
70306 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70307 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70308 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70309 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70310 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70311 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70312 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70313 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70314 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70315 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70316 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70317 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70318 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70319 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70320 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70321 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70322 : END DO
70323 : buffer2 = 0.0_dp
70324 : imax = 7*10*10
70325 : kmax = 3
70326 : DO i = 1, imax
70327 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70328 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70329 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70330 : END DO
70331 : buffer1 = 0.0_dp
70332 : imax = 7*3*10
70333 : kmax = 10
70334 : DO i = 1, imax
70335 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70336 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70337 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70338 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70339 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
70340 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70341 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70342 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
70343 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70344 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70345 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70346 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70347 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
70348 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70349 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70350 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
70351 : END DO
70352 : imax = 7*3*7
70353 : kmax = 10
70354 : i = 0
70355 : DO i1 = 1, 7
70356 : DO i2 = 1, 3
70357 : DO i3 = 1, 7
70358 : i = i + 1
70359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70361 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
70362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70363 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70364 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
70365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70367 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
70368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70369 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70370 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
70371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70372 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70373 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
70374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
70375 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
70376 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
70377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70379 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
70380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70382 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
70383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
70385 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
70386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70388 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
70389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70391 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
70392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70394 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
70395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70397 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
70398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
70399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
70400 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
70401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70403 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
70404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70406 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
70407 : END DO
70408 : END DO
70409 : END DO
70410 : s_offset_d1 = s_offset_d1 + 7
70411 : END DO
70412 : s_offset_c1 = s_offset_c1 + 7
70413 : END DO
70414 : s_offset_b1 = s_offset_b1 + 3
70415 : END DO
70416 : s_offset_a1 = s_offset_a1 + 7
70417 : END DO
70418 : END SUBROUTINE contract_fpff
70419 : #endif
70420 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
70421 : ! **************************************************************************************************
70422 : !> \brief ...
70423 : !> \param work ...
70424 : !> \param nl_a ...
70425 : !> \param nl_b ...
70426 : !> \param nl_c ...
70427 : !> \param nl_d ...
70428 : !> \param sphi_a ...
70429 : !> \param sphi_b ...
70430 : !> \param sphi_c ...
70431 : !> \param sphi_d ...
70432 : !> \param primitives ...
70433 : !> \param buffer1 ...
70434 : !> \param buffer2 ...
70435 : ! **************************************************************************************************
70436 : SUBROUTINE contract_fpfg(work, &
70437 : nl_a, nl_b, nl_c, nl_d, &
70438 : sphi_a, sphi_b, sphi_c, sphi_d, &
70439 : primitives, &
70440 : buffer1, buffer2)
70441 : REAL(dp), DIMENSION(10*3*10*15), INTENT(IN) :: work
70442 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70443 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70444 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70445 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
70446 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
70447 : REAL(dp), &
70448 : DIMENSION(7*nl_a, 3*nl_b, 7*nl_c, 9*nl_d) :: primitives
70449 : REAL(dp), DIMENSION(10*3*10*15) :: buffer1, buffer2
70450 :
70451 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70452 : kmax, s_offset_a1, s_offset_b1, &
70453 : s_offset_c1, s_offset_d1
70454 :
70455 : s_offset_a1 = 0
70456 : DO ia = 1, nl_a
70457 : s_offset_b1 = 0
70458 : DO ib = 1, nl_b
70459 : s_offset_c1 = 0
70460 : DO ic = 1, nl_c
70461 : s_offset_d1 = 0
70462 : DO id = 1, nl_d
70463 : buffer1 = 0.0_dp
70464 : imax = 3*10*15
70465 : kmax = 10
70466 : DO i = 1, imax
70467 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70468 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70469 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70470 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70471 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70472 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70473 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70474 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70475 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70476 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70477 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70478 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70480 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70481 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70482 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70483 : END DO
70484 : buffer2 = 0.0_dp
70485 : imax = 7*10*15
70486 : kmax = 3
70487 : DO i = 1, imax
70488 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70489 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70490 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70491 : END DO
70492 : buffer1 = 0.0_dp
70493 : imax = 7*3*15
70494 : kmax = 10
70495 : DO i = 1, imax
70496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70497 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70498 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70499 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70500 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
70501 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70502 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70503 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
70504 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70506 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70507 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70508 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
70509 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70510 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70511 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
70512 : END DO
70513 : imax = 7*3*7
70514 : kmax = 15
70515 : i = 0
70516 : DO i1 = 1, 7
70517 : DO i2 = 1, 3
70518 : DO i3 = 1, 7
70519 : i = i + 1
70520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70522 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
70523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70525 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
70526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
70527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
70528 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
70529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70531 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
70532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70534 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
70535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
70536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
70537 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
70538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
70539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
70540 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
70541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70543 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
70544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
70545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
70546 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
70547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
70549 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
70550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70552 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
70553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70555 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
70556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70558 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
70559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70561 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
70562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70564 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
70565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
70566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
70567 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
70568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
70569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
70570 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
70571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70573 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
70574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
70575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
70576 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
70577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70579 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
70580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70582 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
70583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
70584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
70585 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
70586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
70588 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
70589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70591 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
70592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70594 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
70595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
70596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
70597 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
70598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
70599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
70600 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
70601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70603 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
70604 : END DO
70605 : END DO
70606 : END DO
70607 : s_offset_d1 = s_offset_d1 + 9
70608 : END DO
70609 : s_offset_c1 = s_offset_c1 + 7
70610 : END DO
70611 : s_offset_b1 = s_offset_b1 + 3
70612 : END DO
70613 : s_offset_a1 = s_offset_a1 + 7
70614 : END DO
70615 : END SUBROUTINE contract_fpfg
70616 : #endif
70617 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
70618 : ! **************************************************************************************************
70619 : !> \brief ...
70620 : !> \param work ...
70621 : !> \param nl_a ...
70622 : !> \param nl_b ...
70623 : !> \param nl_c ...
70624 : !> \param nl_d ...
70625 : !> \param sphi_a ...
70626 : !> \param sphi_b ...
70627 : !> \param sphi_c ...
70628 : !> \param sphi_d ...
70629 : !> \param primitives ...
70630 : !> \param buffer1 ...
70631 : !> \param buffer2 ...
70632 : ! **************************************************************************************************
70633 : SUBROUTINE contract_fpgs(work, &
70634 : nl_a, nl_b, nl_c, nl_d, &
70635 : sphi_a, sphi_b, sphi_c, sphi_d, &
70636 : primitives, &
70637 : buffer1, buffer2)
70638 : REAL(dp), DIMENSION(10*3*15*1), INTENT(IN) :: work
70639 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70640 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70641 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70642 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
70643 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
70644 : REAL(dp), &
70645 : DIMENSION(7*nl_a, 3*nl_b, 9*nl_c, 1*nl_d) :: primitives
70646 : REAL(dp), DIMENSION(10*3*15*1) :: buffer1, buffer2
70647 :
70648 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70649 : kmax, s_offset_a1, s_offset_b1, &
70650 : s_offset_c1, s_offset_d1
70651 :
70652 : s_offset_a1 = 0
70653 : DO ia = 1, nl_a
70654 : s_offset_b1 = 0
70655 : DO ib = 1, nl_b
70656 : s_offset_c1 = 0
70657 : DO ic = 1, nl_c
70658 : s_offset_d1 = 0
70659 : DO id = 1, nl_d
70660 : buffer1 = 0.0_dp
70661 : imax = 3*15*1
70662 : kmax = 10
70663 : DO i = 1, imax
70664 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70665 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70666 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70667 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70668 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70669 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70671 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70672 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70674 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70676 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70677 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70679 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70680 : END DO
70681 : buffer2 = 0.0_dp
70682 : imax = 7*15*1
70683 : kmax = 3
70684 : DO i = 1, imax
70685 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70686 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70687 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70688 : END DO
70689 : buffer1 = 0.0_dp
70690 : imax = 7*3*1
70691 : kmax = 15
70692 : DO i = 1, imax
70693 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70694 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70695 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
70696 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70697 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70698 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70699 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
70700 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70701 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
70702 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70703 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
70704 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70705 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
70706 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70707 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70708 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70709 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
70710 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70711 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
70712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
70713 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
70714 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
70715 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
70716 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
70717 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
70718 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
70719 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
70720 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
70721 : END DO
70722 : imax = 7*3*9
70723 : kmax = 1
70724 : i = 0
70725 : DO i1 = 1, 9
70726 : DO i2 = 1, 3
70727 : DO i3 = 1, 7
70728 : i = i + 1
70729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
70731 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
70732 : END DO
70733 : END DO
70734 : END DO
70735 : s_offset_d1 = s_offset_d1 + 1
70736 : END DO
70737 : s_offset_c1 = s_offset_c1 + 9
70738 : END DO
70739 : s_offset_b1 = s_offset_b1 + 3
70740 : END DO
70741 : s_offset_a1 = s_offset_a1 + 7
70742 : END DO
70743 : END SUBROUTINE contract_fpgs
70744 : #endif
70745 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
70746 : ! **************************************************************************************************
70747 : !> \brief ...
70748 : !> \param work ...
70749 : !> \param nl_a ...
70750 : !> \param nl_b ...
70751 : !> \param nl_c ...
70752 : !> \param nl_d ...
70753 : !> \param sphi_a ...
70754 : !> \param sphi_b ...
70755 : !> \param sphi_c ...
70756 : !> \param sphi_d ...
70757 : !> \param primitives ...
70758 : !> \param buffer1 ...
70759 : !> \param buffer2 ...
70760 : ! **************************************************************************************************
70761 : SUBROUTINE contract_fpgp(work, &
70762 : nl_a, nl_b, nl_c, nl_d, &
70763 : sphi_a, sphi_b, sphi_c, sphi_d, &
70764 : primitives, &
70765 : buffer1, buffer2)
70766 : REAL(dp), DIMENSION(10*3*15*3), INTENT(IN) :: work
70767 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70768 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70769 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70770 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
70771 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
70772 : REAL(dp), &
70773 : DIMENSION(7*nl_a, 3*nl_b, 9*nl_c, 3*nl_d) :: primitives
70774 : REAL(dp), DIMENSION(10*3*15*3) :: buffer1, buffer2
70775 :
70776 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70777 : kmax, s_offset_a1, s_offset_b1, &
70778 : s_offset_c1, s_offset_d1
70779 :
70780 : s_offset_a1 = 0
70781 : DO ia = 1, nl_a
70782 : s_offset_b1 = 0
70783 : DO ib = 1, nl_b
70784 : s_offset_c1 = 0
70785 : DO ic = 1, nl_c
70786 : s_offset_d1 = 0
70787 : DO id = 1, nl_d
70788 : buffer1 = 0.0_dp
70789 : imax = 3*15*3
70790 : kmax = 10
70791 : DO i = 1, imax
70792 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70793 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70794 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70795 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70796 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70797 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70798 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70799 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70800 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70802 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70803 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70804 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70805 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70806 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70807 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70808 : END DO
70809 : buffer2 = 0.0_dp
70810 : imax = 7*15*3
70811 : kmax = 3
70812 : DO i = 1, imax
70813 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70814 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70815 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70816 : END DO
70817 : buffer1 = 0.0_dp
70818 : imax = 7*3*3
70819 : kmax = 15
70820 : DO i = 1, imax
70821 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70822 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70823 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
70824 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70825 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70826 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70827 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
70828 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70829 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
70830 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70831 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
70832 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70833 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
70834 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70835 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70836 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70837 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
70838 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70839 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
70840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
70841 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
70842 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
70843 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
70844 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
70845 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
70846 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
70847 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
70848 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
70849 : END DO
70850 : imax = 7*3*9
70851 : kmax = 3
70852 : i = 0
70853 : DO i1 = 1, 9
70854 : DO i2 = 1, 3
70855 : DO i3 = 1, 7
70856 : i = i + 1
70857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
70859 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
70860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
70862 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
70863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
70864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
70865 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
70866 : END DO
70867 : END DO
70868 : END DO
70869 : s_offset_d1 = s_offset_d1 + 3
70870 : END DO
70871 : s_offset_c1 = s_offset_c1 + 9
70872 : END DO
70873 : s_offset_b1 = s_offset_b1 + 3
70874 : END DO
70875 : s_offset_a1 = s_offset_a1 + 7
70876 : END DO
70877 : END SUBROUTINE contract_fpgp
70878 : #endif
70879 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
70880 : ! **************************************************************************************************
70881 : !> \brief ...
70882 : !> \param work ...
70883 : !> \param nl_a ...
70884 : !> \param nl_b ...
70885 : !> \param nl_c ...
70886 : !> \param nl_d ...
70887 : !> \param sphi_a ...
70888 : !> \param sphi_b ...
70889 : !> \param sphi_c ...
70890 : !> \param sphi_d ...
70891 : !> \param primitives ...
70892 : !> \param buffer1 ...
70893 : !> \param buffer2 ...
70894 : ! **************************************************************************************************
70895 : SUBROUTINE contract_fpgd(work, &
70896 : nl_a, nl_b, nl_c, nl_d, &
70897 : sphi_a, sphi_b, sphi_c, sphi_d, &
70898 : primitives, &
70899 : buffer1, buffer2)
70900 : REAL(dp), DIMENSION(10*3*15*6), INTENT(IN) :: work
70901 : INTEGER :: nl_a, nl_b, nl_c, nl_d
70902 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
70903 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
70904 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
70905 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
70906 : REAL(dp), &
70907 : DIMENSION(7*nl_a, 3*nl_b, 9*nl_c, 5*nl_d) :: primitives
70908 : REAL(dp), DIMENSION(10*3*15*6) :: buffer1, buffer2
70909 :
70910 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
70911 : kmax, s_offset_a1, s_offset_b1, &
70912 : s_offset_c1, s_offset_d1
70913 :
70914 : s_offset_a1 = 0
70915 : DO ia = 1, nl_a
70916 : s_offset_b1 = 0
70917 : DO ib = 1, nl_b
70918 : s_offset_c1 = 0
70919 : DO ic = 1, nl_c
70920 : s_offset_d1 = 0
70921 : DO id = 1, nl_d
70922 : buffer1 = 0.0_dp
70923 : imax = 3*15*6
70924 : kmax = 10
70925 : DO i = 1, imax
70926 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
70927 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
70928 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
70929 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
70930 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
70931 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
70932 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
70933 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
70934 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
70935 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
70936 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
70937 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
70938 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
70939 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
70940 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
70941 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
70942 : END DO
70943 : buffer2 = 0.0_dp
70944 : imax = 7*15*6
70945 : kmax = 3
70946 : DO i = 1, imax
70947 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
70948 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
70949 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
70950 : END DO
70951 : buffer1 = 0.0_dp
70952 : imax = 7*3*6
70953 : kmax = 15
70954 : DO i = 1, imax
70955 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
70956 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
70957 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
70958 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
70959 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
70960 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
70961 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
70962 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
70963 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
70964 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
70965 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
70966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
70967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
70968 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
70969 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
70970 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
70971 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
70972 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
70973 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
70974 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
70975 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
70976 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
70977 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
70978 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
70979 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
70980 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
70981 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
70982 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
70983 : END DO
70984 : imax = 7*3*9
70985 : kmax = 6
70986 : i = 0
70987 : DO i1 = 1, 9
70988 : DO i2 = 1, 3
70989 : DO i3 = 1, 7
70990 : i = i + 1
70991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
70992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
70993 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
70994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
70995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
70996 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
70997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
70998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
70999 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71002 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
71003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71005 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
71006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71008 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
71009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71011 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
71012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71014 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
71015 : END DO
71016 : END DO
71017 : END DO
71018 : s_offset_d1 = s_offset_d1 + 5
71019 : END DO
71020 : s_offset_c1 = s_offset_c1 + 9
71021 : END DO
71022 : s_offset_b1 = s_offset_b1 + 3
71023 : END DO
71024 : s_offset_a1 = s_offset_a1 + 7
71025 : END DO
71026 : END SUBROUTINE contract_fpgd
71027 : #endif
71028 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
71029 : ! **************************************************************************************************
71030 : !> \brief ...
71031 : !> \param work ...
71032 : !> \param nl_a ...
71033 : !> \param nl_b ...
71034 : !> \param nl_c ...
71035 : !> \param nl_d ...
71036 : !> \param sphi_a ...
71037 : !> \param sphi_b ...
71038 : !> \param sphi_c ...
71039 : !> \param sphi_d ...
71040 : !> \param primitives ...
71041 : !> \param buffer1 ...
71042 : !> \param buffer2 ...
71043 : ! **************************************************************************************************
71044 : SUBROUTINE contract_fpgf(work, &
71045 : nl_a, nl_b, nl_c, nl_d, &
71046 : sphi_a, sphi_b, sphi_c, sphi_d, &
71047 : primitives, &
71048 : buffer1, buffer2)
71049 : REAL(dp), DIMENSION(10*3*15*10), INTENT(IN) :: work
71050 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71051 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71052 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
71053 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
71054 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
71055 : REAL(dp), &
71056 : DIMENSION(7*nl_a, 3*nl_b, 9*nl_c, 7*nl_d) :: primitives
71057 : REAL(dp), DIMENSION(10*3*15*10) :: buffer1, buffer2
71058 :
71059 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71060 : kmax, s_offset_a1, s_offset_b1, &
71061 : s_offset_c1, s_offset_d1
71062 :
71063 : s_offset_a1 = 0
71064 : DO ia = 1, nl_a
71065 : s_offset_b1 = 0
71066 : DO ib = 1, nl_b
71067 : s_offset_c1 = 0
71068 : DO ic = 1, nl_c
71069 : s_offset_d1 = 0
71070 : DO id = 1, nl_d
71071 : buffer1 = 0.0_dp
71072 : imax = 3*15*10
71073 : kmax = 10
71074 : DO i = 1, imax
71075 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71076 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71077 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71078 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71079 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71080 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71082 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71083 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71084 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71085 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71086 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71087 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71088 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71089 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71090 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71091 : END DO
71092 : buffer2 = 0.0_dp
71093 : imax = 7*15*10
71094 : kmax = 3
71095 : DO i = 1, imax
71096 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71097 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71098 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
71099 : END DO
71100 : buffer1 = 0.0_dp
71101 : imax = 7*3*10
71102 : kmax = 15
71103 : DO i = 1, imax
71104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
71105 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
71106 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
71107 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
71108 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
71109 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
71110 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
71111 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
71112 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
71113 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
71114 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
71115 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
71116 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
71117 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
71118 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
71119 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
71120 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
71121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
71122 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
71123 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
71124 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
71125 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
71126 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
71127 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
71128 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
71129 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
71130 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
71131 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
71132 : END DO
71133 : imax = 7*3*9
71134 : kmax = 10
71135 : i = 0
71136 : DO i1 = 1, 9
71137 : DO i2 = 1, 3
71138 : DO i3 = 1, 7
71139 : i = i + 1
71140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71142 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
71143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71145 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
71146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71148 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71151 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
71152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71154 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
71155 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71157 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
71158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71160 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
71161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71163 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
71164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71166 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
71167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71169 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
71170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71172 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
71173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71175 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
71176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71178 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
71179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71181 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
71182 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71184 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
71185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71187 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
71188 : END DO
71189 : END DO
71190 : END DO
71191 : s_offset_d1 = s_offset_d1 + 7
71192 : END DO
71193 : s_offset_c1 = s_offset_c1 + 9
71194 : END DO
71195 : s_offset_b1 = s_offset_b1 + 3
71196 : END DO
71197 : s_offset_a1 = s_offset_a1 + 7
71198 : END DO
71199 : END SUBROUTINE contract_fpgf
71200 : #endif
71201 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
71202 : ! **************************************************************************************************
71203 : !> \brief ...
71204 : !> \param work ...
71205 : !> \param nl_a ...
71206 : !> \param nl_b ...
71207 : !> \param nl_c ...
71208 : !> \param nl_d ...
71209 : !> \param sphi_a ...
71210 : !> \param sphi_b ...
71211 : !> \param sphi_c ...
71212 : !> \param sphi_d ...
71213 : !> \param primitives ...
71214 : !> \param buffer1 ...
71215 : !> \param buffer2 ...
71216 : ! **************************************************************************************************
71217 : SUBROUTINE contract_fpgg(work, &
71218 : nl_a, nl_b, nl_c, nl_d, &
71219 : sphi_a, sphi_b, sphi_c, sphi_d, &
71220 : primitives, &
71221 : buffer1, buffer2)
71222 : REAL(dp), DIMENSION(10*3*15*15), INTENT(IN) :: work
71223 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71224 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71225 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
71226 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
71227 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
71228 : REAL(dp), &
71229 : DIMENSION(7*nl_a, 3*nl_b, 9*nl_c, 9*nl_d) :: primitives
71230 : REAL(dp), DIMENSION(10*3*15*15) :: buffer1, buffer2
71231 :
71232 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71233 : kmax, s_offset_a1, s_offset_b1, &
71234 : s_offset_c1, s_offset_d1
71235 :
71236 : s_offset_a1 = 0
71237 : DO ia = 1, nl_a
71238 : s_offset_b1 = 0
71239 : DO ib = 1, nl_b
71240 : s_offset_c1 = 0
71241 : DO ic = 1, nl_c
71242 : s_offset_d1 = 0
71243 : DO id = 1, nl_d
71244 : buffer1 = 0.0_dp
71245 : imax = 3*15*15
71246 : kmax = 10
71247 : DO i = 1, imax
71248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71251 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71252 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71253 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71254 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71255 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71256 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71257 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71258 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71259 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71260 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71261 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71262 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71264 : END DO
71265 : buffer2 = 0.0_dp
71266 : imax = 7*15*15
71267 : kmax = 3
71268 : DO i = 1, imax
71269 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71270 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71271 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
71272 : END DO
71273 : buffer1 = 0.0_dp
71274 : imax = 7*3*15
71275 : kmax = 15
71276 : DO i = 1, imax
71277 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
71278 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
71279 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
71280 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
71281 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
71282 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
71283 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
71284 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
71285 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
71286 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
71287 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
71288 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
71289 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
71290 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
71291 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
71292 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
71293 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
71294 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
71295 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
71296 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
71297 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
71298 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
71299 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
71300 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
71301 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
71302 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
71303 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
71304 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
71305 : END DO
71306 : imax = 7*3*9
71307 : kmax = 15
71308 : i = 0
71309 : DO i1 = 1, 9
71310 : DO i2 = 1, 3
71311 : DO i3 = 1, 7
71312 : i = i + 1
71313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71315 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
71316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71318 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
71319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
71320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
71321 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
71322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71324 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71327 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
71328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71330 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
71331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
71332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
71333 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
71334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71336 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
71337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
71338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
71339 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
71340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71342 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
71343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71345 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
71346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71348 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
71349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71351 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
71352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71354 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
71355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71357 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
71358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71360 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
71361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
71362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
71363 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
71364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71366 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
71367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71369 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
71370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71372 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
71373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71375 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
71376 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
71377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
71378 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
71379 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71381 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
71382 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71384 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
71385 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71387 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
71388 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71390 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
71391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71393 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
71394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71396 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
71397 : END DO
71398 : END DO
71399 : END DO
71400 : s_offset_d1 = s_offset_d1 + 9
71401 : END DO
71402 : s_offset_c1 = s_offset_c1 + 9
71403 : END DO
71404 : s_offset_b1 = s_offset_b1 + 3
71405 : END DO
71406 : s_offset_a1 = s_offset_a1 + 7
71407 : END DO
71408 : END SUBROUTINE contract_fpgg
71409 : #endif
71410 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
71411 : ! **************************************************************************************************
71412 : !> \brief ...
71413 : !> \param work ...
71414 : !> \param nl_a ...
71415 : !> \param nl_b ...
71416 : !> \param nl_c ...
71417 : !> \param nl_d ...
71418 : !> \param sphi_a ...
71419 : !> \param sphi_b ...
71420 : !> \param sphi_c ...
71421 : !> \param sphi_d ...
71422 : !> \param primitives ...
71423 : !> \param buffer1 ...
71424 : !> \param buffer2 ...
71425 : ! **************************************************************************************************
71426 : SUBROUTINE contract_fdss(work, &
71427 : nl_a, nl_b, nl_c, nl_d, &
71428 : sphi_a, sphi_b, sphi_c, sphi_d, &
71429 : primitives, &
71430 : buffer1, buffer2)
71431 : REAL(dp), DIMENSION(10*6*1*1), INTENT(IN) :: work
71432 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71433 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71434 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
71435 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
71436 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
71437 : REAL(dp), &
71438 : DIMENSION(7*nl_a, 5*nl_b, 1*nl_c, 1*nl_d) :: primitives
71439 : REAL(dp), DIMENSION(10*6*1*1) :: buffer1, buffer2
71440 :
71441 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71442 : kmax, s_offset_a1, s_offset_b1, &
71443 : s_offset_c1, s_offset_d1
71444 :
71445 : s_offset_a1 = 0
71446 : DO ia = 1, nl_a
71447 : s_offset_b1 = 0
71448 : DO ib = 1, nl_b
71449 : s_offset_c1 = 0
71450 : DO ic = 1, nl_c
71451 : s_offset_d1 = 0
71452 : DO id = 1, nl_d
71453 : buffer1 = 0.0_dp
71454 : imax = 6*1*1
71455 : kmax = 10
71456 : DO i = 1, imax
71457 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71458 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71459 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71460 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71461 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71462 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71463 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71464 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71465 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71467 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71468 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71469 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71470 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71471 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71472 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71473 : END DO
71474 : buffer2 = 0.0_dp
71475 : imax = 7*1*1
71476 : kmax = 6
71477 : DO i = 1, imax
71478 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71479 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
71480 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71481 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
71482 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
71483 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
71484 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
71485 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
71486 : END DO
71487 : buffer1 = 0.0_dp
71488 : imax = 7*5*1
71489 : kmax = 1
71490 : DO i = 1, imax
71491 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
71492 : END DO
71493 : imax = 7*5*1
71494 : kmax = 1
71495 : i = 0
71496 : DO i1 = 1, 1
71497 : DO i2 = 1, 5
71498 : DO i3 = 1, 7
71499 : i = i + 1
71500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
71502 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
71503 : END DO
71504 : END DO
71505 : END DO
71506 : s_offset_d1 = s_offset_d1 + 1
71507 : END DO
71508 : s_offset_c1 = s_offset_c1 + 1
71509 : END DO
71510 : s_offset_b1 = s_offset_b1 + 5
71511 : END DO
71512 : s_offset_a1 = s_offset_a1 + 7
71513 : END DO
71514 : END SUBROUTINE contract_fdss
71515 : #endif
71516 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
71517 : ! **************************************************************************************************
71518 : !> \brief ...
71519 : !> \param work ...
71520 : !> \param nl_a ...
71521 : !> \param nl_b ...
71522 : !> \param nl_c ...
71523 : !> \param nl_d ...
71524 : !> \param sphi_a ...
71525 : !> \param sphi_b ...
71526 : !> \param sphi_c ...
71527 : !> \param sphi_d ...
71528 : !> \param primitives ...
71529 : !> \param buffer1 ...
71530 : !> \param buffer2 ...
71531 : ! **************************************************************************************************
71532 : SUBROUTINE contract_fdsp(work, &
71533 : nl_a, nl_b, nl_c, nl_d, &
71534 : sphi_a, sphi_b, sphi_c, sphi_d, &
71535 : primitives, &
71536 : buffer1, buffer2)
71537 : REAL(dp), DIMENSION(10*6*1*3), INTENT(IN) :: work
71538 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71539 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71540 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
71541 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
71542 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
71543 : REAL(dp), &
71544 : DIMENSION(7*nl_a, 5*nl_b, 1*nl_c, 3*nl_d) :: primitives
71545 : REAL(dp), DIMENSION(10*6*1*3) :: buffer1, buffer2
71546 :
71547 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71548 : kmax, s_offset_a1, s_offset_b1, &
71549 : s_offset_c1, s_offset_d1
71550 :
71551 : s_offset_a1 = 0
71552 : DO ia = 1, nl_a
71553 : s_offset_b1 = 0
71554 : DO ib = 1, nl_b
71555 : s_offset_c1 = 0
71556 : DO ic = 1, nl_c
71557 : s_offset_d1 = 0
71558 : DO id = 1, nl_d
71559 : buffer1 = 0.0_dp
71560 : imax = 6*1*3
71561 : kmax = 10
71562 : DO i = 1, imax
71563 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71564 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71565 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71566 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71567 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71568 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71570 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71571 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71573 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71574 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71575 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71576 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71577 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71578 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71579 : END DO
71580 : buffer2 = 0.0_dp
71581 : imax = 7*1*3
71582 : kmax = 6
71583 : DO i = 1, imax
71584 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71585 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
71586 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71587 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
71588 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
71589 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
71590 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
71591 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
71592 : END DO
71593 : buffer1 = 0.0_dp
71594 : imax = 7*5*3
71595 : kmax = 1
71596 : DO i = 1, imax
71597 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
71598 : END DO
71599 : imax = 7*5*1
71600 : kmax = 3
71601 : i = 0
71602 : DO i1 = 1, 1
71603 : DO i2 = 1, 5
71604 : DO i3 = 1, 7
71605 : i = i + 1
71606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
71608 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
71609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
71611 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
71614 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
71615 : END DO
71616 : END DO
71617 : END DO
71618 : s_offset_d1 = s_offset_d1 + 3
71619 : END DO
71620 : s_offset_c1 = s_offset_c1 + 1
71621 : END DO
71622 : s_offset_b1 = s_offset_b1 + 5
71623 : END DO
71624 : s_offset_a1 = s_offset_a1 + 7
71625 : END DO
71626 : END SUBROUTINE contract_fdsp
71627 : #endif
71628 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
71629 : ! **************************************************************************************************
71630 : !> \brief ...
71631 : !> \param work ...
71632 : !> \param nl_a ...
71633 : !> \param nl_b ...
71634 : !> \param nl_c ...
71635 : !> \param nl_d ...
71636 : !> \param sphi_a ...
71637 : !> \param sphi_b ...
71638 : !> \param sphi_c ...
71639 : !> \param sphi_d ...
71640 : !> \param primitives ...
71641 : !> \param buffer1 ...
71642 : !> \param buffer2 ...
71643 : ! **************************************************************************************************
71644 : SUBROUTINE contract_fdsd(work, &
71645 : nl_a, nl_b, nl_c, nl_d, &
71646 : sphi_a, sphi_b, sphi_c, sphi_d, &
71647 : primitives, &
71648 : buffer1, buffer2)
71649 : REAL(dp), DIMENSION(10*6*1*6), INTENT(IN) :: work
71650 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71651 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71652 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
71653 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
71654 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
71655 : REAL(dp), &
71656 : DIMENSION(7*nl_a, 5*nl_b, 1*nl_c, 5*nl_d) :: primitives
71657 : REAL(dp), DIMENSION(10*6*1*6) :: buffer1, buffer2
71658 :
71659 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71660 : kmax, s_offset_a1, s_offset_b1, &
71661 : s_offset_c1, s_offset_d1
71662 :
71663 : s_offset_a1 = 0
71664 : DO ia = 1, nl_a
71665 : s_offset_b1 = 0
71666 : DO ib = 1, nl_b
71667 : s_offset_c1 = 0
71668 : DO ic = 1, nl_c
71669 : s_offset_d1 = 0
71670 : DO id = 1, nl_d
71671 : buffer1 = 0.0_dp
71672 : imax = 6*1*6
71673 : kmax = 10
71674 : DO i = 1, imax
71675 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71676 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71677 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71679 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71680 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71682 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71683 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71684 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71685 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71686 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71687 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71688 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71689 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71690 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71691 : END DO
71692 : buffer2 = 0.0_dp
71693 : imax = 7*1*6
71694 : kmax = 6
71695 : DO i = 1, imax
71696 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71697 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
71698 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71699 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
71700 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
71701 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
71702 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
71703 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
71704 : END DO
71705 : buffer1 = 0.0_dp
71706 : imax = 7*5*6
71707 : kmax = 1
71708 : DO i = 1, imax
71709 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
71710 : END DO
71711 : imax = 7*5*1
71712 : kmax = 6
71713 : i = 0
71714 : DO i1 = 1, 1
71715 : DO i2 = 1, 5
71716 : DO i3 = 1, 7
71717 : i = i + 1
71718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71720 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
71721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71723 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
71724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71726 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71729 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
71730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71732 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
71733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71735 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
71736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71738 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
71739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71741 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
71742 : END DO
71743 : END DO
71744 : END DO
71745 : s_offset_d1 = s_offset_d1 + 5
71746 : END DO
71747 : s_offset_c1 = s_offset_c1 + 1
71748 : END DO
71749 : s_offset_b1 = s_offset_b1 + 5
71750 : END DO
71751 : s_offset_a1 = s_offset_a1 + 7
71752 : END DO
71753 : END SUBROUTINE contract_fdsd
71754 : #endif
71755 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
71756 : ! **************************************************************************************************
71757 : !> \brief ...
71758 : !> \param work ...
71759 : !> \param nl_a ...
71760 : !> \param nl_b ...
71761 : !> \param nl_c ...
71762 : !> \param nl_d ...
71763 : !> \param sphi_a ...
71764 : !> \param sphi_b ...
71765 : !> \param sphi_c ...
71766 : !> \param sphi_d ...
71767 : !> \param primitives ...
71768 : !> \param buffer1 ...
71769 : !> \param buffer2 ...
71770 : ! **************************************************************************************************
71771 : SUBROUTINE contract_fdsf(work, &
71772 : nl_a, nl_b, nl_c, nl_d, &
71773 : sphi_a, sphi_b, sphi_c, sphi_d, &
71774 : primitives, &
71775 : buffer1, buffer2)
71776 : REAL(dp), DIMENSION(10*6*1*10), INTENT(IN) :: work
71777 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71778 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71779 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
71780 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
71781 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
71782 : REAL(dp), &
71783 : DIMENSION(7*nl_a, 5*nl_b, 1*nl_c, 7*nl_d) :: primitives
71784 : REAL(dp), DIMENSION(10*6*1*10) :: buffer1, buffer2
71785 :
71786 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71787 : kmax, s_offset_a1, s_offset_b1, &
71788 : s_offset_c1, s_offset_d1
71789 :
71790 : s_offset_a1 = 0
71791 : DO ia = 1, nl_a
71792 : s_offset_b1 = 0
71793 : DO ib = 1, nl_b
71794 : s_offset_c1 = 0
71795 : DO ic = 1, nl_c
71796 : s_offset_d1 = 0
71797 : DO id = 1, nl_d
71798 : buffer1 = 0.0_dp
71799 : imax = 6*1*10
71800 : kmax = 10
71801 : DO i = 1, imax
71802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71803 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71804 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71805 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71806 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71807 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71808 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71809 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71810 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71811 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71812 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71813 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71815 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71816 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71817 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71818 : END DO
71819 : buffer2 = 0.0_dp
71820 : imax = 7*1*10
71821 : kmax = 6
71822 : DO i = 1, imax
71823 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71824 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
71825 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71826 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
71827 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
71828 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
71829 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
71830 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
71831 : END DO
71832 : buffer1 = 0.0_dp
71833 : imax = 7*5*10
71834 : kmax = 1
71835 : DO i = 1, imax
71836 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
71837 : END DO
71838 : imax = 7*5*1
71839 : kmax = 10
71840 : i = 0
71841 : DO i1 = 1, 1
71842 : DO i2 = 1, 5
71843 : DO i3 = 1, 7
71844 : i = i + 1
71845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71847 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
71848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71850 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
71851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71853 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
71854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71856 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
71857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71859 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
71860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71862 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
71863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71865 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
71866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
71867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
71868 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
71869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
71870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
71871 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
71872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71874 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
71875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
71876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
71877 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
71878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71880 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
71881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71883 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
71884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
71885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
71886 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
71887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
71888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
71889 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
71890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
71891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
71892 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
71893 : END DO
71894 : END DO
71895 : END DO
71896 : s_offset_d1 = s_offset_d1 + 7
71897 : END DO
71898 : s_offset_c1 = s_offset_c1 + 1
71899 : END DO
71900 : s_offset_b1 = s_offset_b1 + 5
71901 : END DO
71902 : s_offset_a1 = s_offset_a1 + 7
71903 : END DO
71904 : END SUBROUTINE contract_fdsf
71905 : #endif
71906 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
71907 : ! **************************************************************************************************
71908 : !> \brief ...
71909 : !> \param work ...
71910 : !> \param nl_a ...
71911 : !> \param nl_b ...
71912 : !> \param nl_c ...
71913 : !> \param nl_d ...
71914 : !> \param sphi_a ...
71915 : !> \param sphi_b ...
71916 : !> \param sphi_c ...
71917 : !> \param sphi_d ...
71918 : !> \param primitives ...
71919 : !> \param buffer1 ...
71920 : !> \param buffer2 ...
71921 : ! **************************************************************************************************
71922 : SUBROUTINE contract_fdsg(work, &
71923 : nl_a, nl_b, nl_c, nl_d, &
71924 : sphi_a, sphi_b, sphi_c, sphi_d, &
71925 : primitives, &
71926 : buffer1, buffer2)
71927 : REAL(dp), DIMENSION(10*6*1*15), INTENT(IN) :: work
71928 : INTEGER :: nl_a, nl_b, nl_c, nl_d
71929 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
71930 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
71931 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
71932 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
71933 : REAL(dp), &
71934 : DIMENSION(7*nl_a, 5*nl_b, 1*nl_c, 9*nl_d) :: primitives
71935 : REAL(dp), DIMENSION(10*6*1*15) :: buffer1, buffer2
71936 :
71937 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
71938 : kmax, s_offset_a1, s_offset_b1, &
71939 : s_offset_c1, s_offset_d1
71940 :
71941 : s_offset_a1 = 0
71942 : DO ia = 1, nl_a
71943 : s_offset_b1 = 0
71944 : DO ib = 1, nl_b
71945 : s_offset_c1 = 0
71946 : DO ic = 1, nl_c
71947 : s_offset_d1 = 0
71948 : DO id = 1, nl_d
71949 : buffer1 = 0.0_dp
71950 : imax = 6*1*15
71951 : kmax = 10
71952 : DO i = 1, imax
71953 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
71954 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
71955 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
71956 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
71957 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
71958 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
71959 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
71960 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
71961 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
71962 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
71963 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
71964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
71965 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
71966 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
71967 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
71968 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
71969 : END DO
71970 : buffer2 = 0.0_dp
71971 : imax = 7*1*15
71972 : kmax = 6
71973 : DO i = 1, imax
71974 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
71975 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
71976 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
71977 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
71978 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
71979 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
71980 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
71981 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
71982 : END DO
71983 : buffer1 = 0.0_dp
71984 : imax = 7*5*15
71985 : kmax = 1
71986 : DO i = 1, imax
71987 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
71988 : END DO
71989 : imax = 7*5*1
71990 : kmax = 15
71991 : i = 0
71992 : DO i1 = 1, 1
71993 : DO i2 = 1, 5
71994 : DO i3 = 1, 7
71995 : i = i + 1
71996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
71997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
71998 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
71999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72001 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
72002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72004 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
72005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72007 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
72008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72010 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
72011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72013 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
72014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
72015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
72016 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
72017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72019 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
72020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72022 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
72023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72025 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
72026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72028 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
72029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72031 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
72032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72034 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
72035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72037 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
72038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72040 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
72041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72043 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
72044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
72045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
72046 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
72047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72049 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
72050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72052 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
72053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72055 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
72056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72058 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
72059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72061 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
72062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72064 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
72065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72067 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
72068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72070 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
72071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72073 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
72074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72076 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
72077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72079 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
72080 : END DO
72081 : END DO
72082 : END DO
72083 : s_offset_d1 = s_offset_d1 + 9
72084 : END DO
72085 : s_offset_c1 = s_offset_c1 + 1
72086 : END DO
72087 : s_offset_b1 = s_offset_b1 + 5
72088 : END DO
72089 : s_offset_a1 = s_offset_a1 + 7
72090 : END DO
72091 : END SUBROUTINE contract_fdsg
72092 : #endif
72093 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72094 : ! **************************************************************************************************
72095 : !> \brief ...
72096 : !> \param work ...
72097 : !> \param nl_a ...
72098 : !> \param nl_b ...
72099 : !> \param nl_c ...
72100 : !> \param nl_d ...
72101 : !> \param sphi_a ...
72102 : !> \param sphi_b ...
72103 : !> \param sphi_c ...
72104 : !> \param sphi_d ...
72105 : !> \param primitives ...
72106 : !> \param buffer1 ...
72107 : !> \param buffer2 ...
72108 : ! **************************************************************************************************
72109 : SUBROUTINE contract_fdps(work, &
72110 : nl_a, nl_b, nl_c, nl_d, &
72111 : sphi_a, sphi_b, sphi_c, sphi_d, &
72112 : primitives, &
72113 : buffer1, buffer2)
72114 : REAL(dp), DIMENSION(10*6*3*1), INTENT(IN) :: work
72115 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72116 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72117 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72118 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
72119 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
72120 : REAL(dp), &
72121 : DIMENSION(7*nl_a, 5*nl_b, 3*nl_c, 1*nl_d) :: primitives
72122 : REAL(dp), DIMENSION(10*6*3*1) :: buffer1, buffer2
72123 :
72124 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72125 : kmax, s_offset_a1, s_offset_b1, &
72126 : s_offset_c1, s_offset_d1
72127 :
72128 : s_offset_a1 = 0
72129 : DO ia = 1, nl_a
72130 : s_offset_b1 = 0
72131 : DO ib = 1, nl_b
72132 : s_offset_c1 = 0
72133 : DO ic = 1, nl_c
72134 : s_offset_d1 = 0
72135 : DO id = 1, nl_d
72136 : buffer1 = 0.0_dp
72137 : imax = 6*3*1
72138 : kmax = 10
72139 : DO i = 1, imax
72140 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72141 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72142 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72143 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72144 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72145 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72146 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72147 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72148 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72149 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72150 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72151 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72152 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72153 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72154 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72155 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72156 : END DO
72157 : buffer2 = 0.0_dp
72158 : imax = 7*3*1
72159 : kmax = 6
72160 : DO i = 1, imax
72161 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72162 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72163 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72164 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72165 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72166 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72167 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72168 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72169 : END DO
72170 : buffer1 = 0.0_dp
72171 : imax = 7*5*1
72172 : kmax = 3
72173 : DO i = 1, imax
72174 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72175 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72176 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
72177 : END DO
72178 : imax = 7*5*3
72179 : kmax = 1
72180 : i = 0
72181 : DO i1 = 1, 3
72182 : DO i2 = 1, 5
72183 : DO i3 = 1, 7
72184 : i = i + 1
72185 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
72187 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
72188 : END DO
72189 : END DO
72190 : END DO
72191 : s_offset_d1 = s_offset_d1 + 1
72192 : END DO
72193 : s_offset_c1 = s_offset_c1 + 3
72194 : END DO
72195 : s_offset_b1 = s_offset_b1 + 5
72196 : END DO
72197 : s_offset_a1 = s_offset_a1 + 7
72198 : END DO
72199 : END SUBROUTINE contract_fdps
72200 : #endif
72201 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72202 : ! **************************************************************************************************
72203 : !> \brief ...
72204 : !> \param work ...
72205 : !> \param nl_a ...
72206 : !> \param nl_b ...
72207 : !> \param nl_c ...
72208 : !> \param nl_d ...
72209 : !> \param sphi_a ...
72210 : !> \param sphi_b ...
72211 : !> \param sphi_c ...
72212 : !> \param sphi_d ...
72213 : !> \param primitives ...
72214 : !> \param buffer1 ...
72215 : !> \param buffer2 ...
72216 : ! **************************************************************************************************
72217 : SUBROUTINE contract_fdpp(work, &
72218 : nl_a, nl_b, nl_c, nl_d, &
72219 : sphi_a, sphi_b, sphi_c, sphi_d, &
72220 : primitives, &
72221 : buffer1, buffer2)
72222 : REAL(dp), DIMENSION(10*6*3*3), INTENT(IN) :: work
72223 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72224 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72225 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72226 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
72227 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
72228 : REAL(dp), &
72229 : DIMENSION(7*nl_a, 5*nl_b, 3*nl_c, 3*nl_d) :: primitives
72230 : REAL(dp), DIMENSION(10*6*3*3) :: buffer1, buffer2
72231 :
72232 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72233 : kmax, s_offset_a1, s_offset_b1, &
72234 : s_offset_c1, s_offset_d1
72235 :
72236 : s_offset_a1 = 0
72237 : DO ia = 1, nl_a
72238 : s_offset_b1 = 0
72239 : DO ib = 1, nl_b
72240 : s_offset_c1 = 0
72241 : DO ic = 1, nl_c
72242 : s_offset_d1 = 0
72243 : DO id = 1, nl_d
72244 : buffer1 = 0.0_dp
72245 : imax = 6*3*3
72246 : kmax = 10
72247 : DO i = 1, imax
72248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72251 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72252 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72253 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72254 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72255 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72256 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72257 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72258 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72259 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72260 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72261 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72262 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72264 : END DO
72265 : buffer2 = 0.0_dp
72266 : imax = 7*3*3
72267 : kmax = 6
72268 : DO i = 1, imax
72269 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72270 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72271 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72272 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72273 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72274 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72275 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72276 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72277 : END DO
72278 : buffer1 = 0.0_dp
72279 : imax = 7*5*3
72280 : kmax = 3
72281 : DO i = 1, imax
72282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72283 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72284 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
72285 : END DO
72286 : imax = 7*5*3
72287 : kmax = 3
72288 : i = 0
72289 : DO i1 = 1, 3
72290 : DO i2 = 1, 5
72291 : DO i3 = 1, 7
72292 : i = i + 1
72293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
72295 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
72296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
72298 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
72299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
72301 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
72302 : END DO
72303 : END DO
72304 : END DO
72305 : s_offset_d1 = s_offset_d1 + 3
72306 : END DO
72307 : s_offset_c1 = s_offset_c1 + 3
72308 : END DO
72309 : s_offset_b1 = s_offset_b1 + 5
72310 : END DO
72311 : s_offset_a1 = s_offset_a1 + 7
72312 : END DO
72313 : END SUBROUTINE contract_fdpp
72314 : #endif
72315 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72316 : ! **************************************************************************************************
72317 : !> \brief ...
72318 : !> \param work ...
72319 : !> \param nl_a ...
72320 : !> \param nl_b ...
72321 : !> \param nl_c ...
72322 : !> \param nl_d ...
72323 : !> \param sphi_a ...
72324 : !> \param sphi_b ...
72325 : !> \param sphi_c ...
72326 : !> \param sphi_d ...
72327 : !> \param primitives ...
72328 : !> \param buffer1 ...
72329 : !> \param buffer2 ...
72330 : ! **************************************************************************************************
72331 : SUBROUTINE contract_fdpd(work, &
72332 : nl_a, nl_b, nl_c, nl_d, &
72333 : sphi_a, sphi_b, sphi_c, sphi_d, &
72334 : primitives, &
72335 : buffer1, buffer2)
72336 : REAL(dp), DIMENSION(10*6*3*6), INTENT(IN) :: work
72337 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72338 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72339 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72340 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
72341 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
72342 : REAL(dp), &
72343 : DIMENSION(7*nl_a, 5*nl_b, 3*nl_c, 5*nl_d) :: primitives
72344 : REAL(dp), DIMENSION(10*6*3*6) :: buffer1, buffer2
72345 :
72346 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72347 : kmax, s_offset_a1, s_offset_b1, &
72348 : s_offset_c1, s_offset_d1
72349 :
72350 : s_offset_a1 = 0
72351 : DO ia = 1, nl_a
72352 : s_offset_b1 = 0
72353 : DO ib = 1, nl_b
72354 : s_offset_c1 = 0
72355 : DO ic = 1, nl_c
72356 : s_offset_d1 = 0
72357 : DO id = 1, nl_d
72358 : buffer1 = 0.0_dp
72359 : imax = 6*3*6
72360 : kmax = 10
72361 : DO i = 1, imax
72362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72363 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72364 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72365 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72366 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72367 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72368 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72369 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72370 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72371 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72372 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72373 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72374 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72375 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72376 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72377 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72378 : END DO
72379 : buffer2 = 0.0_dp
72380 : imax = 7*3*6
72381 : kmax = 6
72382 : DO i = 1, imax
72383 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72384 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72385 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72386 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72387 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72388 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72389 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72390 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72391 : END DO
72392 : buffer1 = 0.0_dp
72393 : imax = 7*5*6
72394 : kmax = 3
72395 : DO i = 1, imax
72396 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72397 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72398 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
72399 : END DO
72400 : imax = 7*5*3
72401 : kmax = 6
72402 : i = 0
72403 : DO i1 = 1, 3
72404 : DO i2 = 1, 5
72405 : DO i3 = 1, 7
72406 : i = i + 1
72407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72409 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
72410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72412 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
72413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72415 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
72416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72418 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
72419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72421 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
72422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72424 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
72425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72427 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
72428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72430 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
72431 : END DO
72432 : END DO
72433 : END DO
72434 : s_offset_d1 = s_offset_d1 + 5
72435 : END DO
72436 : s_offset_c1 = s_offset_c1 + 3
72437 : END DO
72438 : s_offset_b1 = s_offset_b1 + 5
72439 : END DO
72440 : s_offset_a1 = s_offset_a1 + 7
72441 : END DO
72442 : END SUBROUTINE contract_fdpd
72443 : #endif
72444 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72445 : ! **************************************************************************************************
72446 : !> \brief ...
72447 : !> \param work ...
72448 : !> \param nl_a ...
72449 : !> \param nl_b ...
72450 : !> \param nl_c ...
72451 : !> \param nl_d ...
72452 : !> \param sphi_a ...
72453 : !> \param sphi_b ...
72454 : !> \param sphi_c ...
72455 : !> \param sphi_d ...
72456 : !> \param primitives ...
72457 : !> \param buffer1 ...
72458 : !> \param buffer2 ...
72459 : ! **************************************************************************************************
72460 : SUBROUTINE contract_fdpf(work, &
72461 : nl_a, nl_b, nl_c, nl_d, &
72462 : sphi_a, sphi_b, sphi_c, sphi_d, &
72463 : primitives, &
72464 : buffer1, buffer2)
72465 : REAL(dp), DIMENSION(10*6*3*10), INTENT(IN) :: work
72466 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72467 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72468 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72469 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
72470 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
72471 : REAL(dp), &
72472 : DIMENSION(7*nl_a, 5*nl_b, 3*nl_c, 7*nl_d) :: primitives
72473 : REAL(dp), DIMENSION(10*6*3*10) :: buffer1, buffer2
72474 :
72475 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72476 : kmax, s_offset_a1, s_offset_b1, &
72477 : s_offset_c1, s_offset_d1
72478 :
72479 : s_offset_a1 = 0
72480 : DO ia = 1, nl_a
72481 : s_offset_b1 = 0
72482 : DO ib = 1, nl_b
72483 : s_offset_c1 = 0
72484 : DO ic = 1, nl_c
72485 : s_offset_d1 = 0
72486 : DO id = 1, nl_d
72487 : buffer1 = 0.0_dp
72488 : imax = 6*3*10
72489 : kmax = 10
72490 : DO i = 1, imax
72491 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72492 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72493 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72494 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72495 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72496 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72497 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72498 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72499 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72500 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72501 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72502 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72503 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72504 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72505 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72506 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72507 : END DO
72508 : buffer2 = 0.0_dp
72509 : imax = 7*3*10
72510 : kmax = 6
72511 : DO i = 1, imax
72512 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72513 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72514 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72515 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72516 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72517 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72518 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72519 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72520 : END DO
72521 : buffer1 = 0.0_dp
72522 : imax = 7*5*10
72523 : kmax = 3
72524 : DO i = 1, imax
72525 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72526 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72527 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
72528 : END DO
72529 : imax = 7*5*3
72530 : kmax = 10
72531 : i = 0
72532 : DO i1 = 1, 3
72533 : DO i2 = 1, 5
72534 : DO i3 = 1, 7
72535 : i = i + 1
72536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72538 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
72539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72541 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
72542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72544 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
72545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72547 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
72548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72550 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
72551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72553 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
72554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72556 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
72557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72559 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
72560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72562 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
72563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72565 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
72566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72568 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
72569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72571 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
72572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72574 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
72575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72577 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
72578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72580 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
72581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72583 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
72584 : END DO
72585 : END DO
72586 : END DO
72587 : s_offset_d1 = s_offset_d1 + 7
72588 : END DO
72589 : s_offset_c1 = s_offset_c1 + 3
72590 : END DO
72591 : s_offset_b1 = s_offset_b1 + 5
72592 : END DO
72593 : s_offset_a1 = s_offset_a1 + 7
72594 : END DO
72595 : END SUBROUTINE contract_fdpf
72596 : #endif
72597 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
72598 : ! **************************************************************************************************
72599 : !> \brief ...
72600 : !> \param work ...
72601 : !> \param nl_a ...
72602 : !> \param nl_b ...
72603 : !> \param nl_c ...
72604 : !> \param nl_d ...
72605 : !> \param sphi_a ...
72606 : !> \param sphi_b ...
72607 : !> \param sphi_c ...
72608 : !> \param sphi_d ...
72609 : !> \param primitives ...
72610 : !> \param buffer1 ...
72611 : !> \param buffer2 ...
72612 : ! **************************************************************************************************
72613 : SUBROUTINE contract_fdpg(work, &
72614 : nl_a, nl_b, nl_c, nl_d, &
72615 : sphi_a, sphi_b, sphi_c, sphi_d, &
72616 : primitives, &
72617 : buffer1, buffer2)
72618 : REAL(dp), DIMENSION(10*6*3*15), INTENT(IN) :: work
72619 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72620 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72621 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72622 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
72623 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
72624 : REAL(dp), &
72625 : DIMENSION(7*nl_a, 5*nl_b, 3*nl_c, 9*nl_d) :: primitives
72626 : REAL(dp), DIMENSION(10*6*3*15) :: buffer1, buffer2
72627 :
72628 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72629 : kmax, s_offset_a1, s_offset_b1, &
72630 : s_offset_c1, s_offset_d1
72631 :
72632 : s_offset_a1 = 0
72633 : DO ia = 1, nl_a
72634 : s_offset_b1 = 0
72635 : DO ib = 1, nl_b
72636 : s_offset_c1 = 0
72637 : DO ic = 1, nl_c
72638 : s_offset_d1 = 0
72639 : DO id = 1, nl_d
72640 : buffer1 = 0.0_dp
72641 : imax = 6*3*15
72642 : kmax = 10
72643 : DO i = 1, imax
72644 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72645 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72646 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72647 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72648 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72649 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72650 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72651 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72652 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72653 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72654 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72655 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72656 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72657 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72659 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72660 : END DO
72661 : buffer2 = 0.0_dp
72662 : imax = 7*3*15
72663 : kmax = 6
72664 : DO i = 1, imax
72665 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72666 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72667 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72668 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72669 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72670 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72671 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72672 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72673 : END DO
72674 : buffer1 = 0.0_dp
72675 : imax = 7*5*15
72676 : kmax = 3
72677 : DO i = 1, imax
72678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72679 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72680 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
72681 : END DO
72682 : imax = 7*5*3
72683 : kmax = 15
72684 : i = 0
72685 : DO i1 = 1, 3
72686 : DO i2 = 1, 5
72687 : DO i3 = 1, 7
72688 : i = i + 1
72689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72691 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
72692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72694 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
72695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72697 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
72698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72700 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
72701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72703 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
72704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72706 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
72707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
72708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
72709 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
72710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72712 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
72713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72715 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
72716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72718 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
72719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72721 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
72722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72724 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
72725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72727 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
72728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
72730 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
72731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72733 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
72734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72736 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
72737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
72738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
72739 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
72740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
72742 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
72743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
72744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
72745 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
72746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72748 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
72749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72751 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
72752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
72753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
72754 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
72755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
72756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
72757 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
72758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72760 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
72761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72763 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
72764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
72765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
72766 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
72767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
72768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
72769 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
72770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
72771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
72772 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
72773 : END DO
72774 : END DO
72775 : END DO
72776 : s_offset_d1 = s_offset_d1 + 9
72777 : END DO
72778 : s_offset_c1 = s_offset_c1 + 3
72779 : END DO
72780 : s_offset_b1 = s_offset_b1 + 5
72781 : END DO
72782 : s_offset_a1 = s_offset_a1 + 7
72783 : END DO
72784 : END SUBROUTINE contract_fdpg
72785 : #endif
72786 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72787 : ! **************************************************************************************************
72788 : !> \brief ...
72789 : !> \param work ...
72790 : !> \param nl_a ...
72791 : !> \param nl_b ...
72792 : !> \param nl_c ...
72793 : !> \param nl_d ...
72794 : !> \param sphi_a ...
72795 : !> \param sphi_b ...
72796 : !> \param sphi_c ...
72797 : !> \param sphi_d ...
72798 : !> \param primitives ...
72799 : !> \param buffer1 ...
72800 : !> \param buffer2 ...
72801 : ! **************************************************************************************************
72802 : SUBROUTINE contract_fdds(work, &
72803 : nl_a, nl_b, nl_c, nl_d, &
72804 : sphi_a, sphi_b, sphi_c, sphi_d, &
72805 : primitives, &
72806 : buffer1, buffer2)
72807 : REAL(dp), DIMENSION(10*6*6*1), INTENT(IN) :: work
72808 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72809 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72810 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72811 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
72812 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
72813 : REAL(dp), &
72814 : DIMENSION(7*nl_a, 5*nl_b, 5*nl_c, 1*nl_d) :: primitives
72815 : REAL(dp), DIMENSION(10*6*6*1) :: buffer1, buffer2
72816 :
72817 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72818 : kmax, s_offset_a1, s_offset_b1, &
72819 : s_offset_c1, s_offset_d1
72820 :
72821 : s_offset_a1 = 0
72822 : DO ia = 1, nl_a
72823 : s_offset_b1 = 0
72824 : DO ib = 1, nl_b
72825 : s_offset_c1 = 0
72826 : DO ic = 1, nl_c
72827 : s_offset_d1 = 0
72828 : DO id = 1, nl_d
72829 : buffer1 = 0.0_dp
72830 : imax = 6*6*1
72831 : kmax = 10
72832 : DO i = 1, imax
72833 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72834 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72835 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72836 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72837 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72838 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72839 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72840 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72841 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72842 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72843 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72844 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72845 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72846 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72847 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72848 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72849 : END DO
72850 : buffer2 = 0.0_dp
72851 : imax = 7*6*1
72852 : kmax = 6
72853 : DO i = 1, imax
72854 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72855 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72856 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72857 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72858 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72859 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72860 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72861 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72862 : END DO
72863 : buffer1 = 0.0_dp
72864 : imax = 7*5*1
72865 : kmax = 6
72866 : DO i = 1, imax
72867 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
72869 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72870 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
72871 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
72872 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
72873 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
72874 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
72875 : END DO
72876 : imax = 7*5*5
72877 : kmax = 1
72878 : i = 0
72879 : DO i1 = 1, 5
72880 : DO i2 = 1, 5
72881 : DO i3 = 1, 7
72882 : i = i + 1
72883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
72884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
72885 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
72886 : END DO
72887 : END DO
72888 : END DO
72889 : s_offset_d1 = s_offset_d1 + 1
72890 : END DO
72891 : s_offset_c1 = s_offset_c1 + 5
72892 : END DO
72893 : s_offset_b1 = s_offset_b1 + 5
72894 : END DO
72895 : s_offset_a1 = s_offset_a1 + 7
72896 : END DO
72897 : END SUBROUTINE contract_fdds
72898 : #endif
72899 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
72900 : ! **************************************************************************************************
72901 : !> \brief ...
72902 : !> \param work ...
72903 : !> \param nl_a ...
72904 : !> \param nl_b ...
72905 : !> \param nl_c ...
72906 : !> \param nl_d ...
72907 : !> \param sphi_a ...
72908 : !> \param sphi_b ...
72909 : !> \param sphi_c ...
72910 : !> \param sphi_d ...
72911 : !> \param primitives ...
72912 : !> \param buffer1 ...
72913 : !> \param buffer2 ...
72914 : ! **************************************************************************************************
72915 : SUBROUTINE contract_fddp(work, &
72916 : nl_a, nl_b, nl_c, nl_d, &
72917 : sphi_a, sphi_b, sphi_c, sphi_d, &
72918 : primitives, &
72919 : buffer1, buffer2)
72920 : REAL(dp), DIMENSION(10*6*6*3), INTENT(IN) :: work
72921 : INTEGER :: nl_a, nl_b, nl_c, nl_d
72922 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
72923 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
72924 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
72925 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
72926 : REAL(dp), &
72927 : DIMENSION(7*nl_a, 5*nl_b, 5*nl_c, 3*nl_d) :: primitives
72928 : REAL(dp), DIMENSION(10*6*6*3) :: buffer1, buffer2
72929 :
72930 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
72931 : kmax, s_offset_a1, s_offset_b1, &
72932 : s_offset_c1, s_offset_d1
72933 :
72934 : s_offset_a1 = 0
72935 : DO ia = 1, nl_a
72936 : s_offset_b1 = 0
72937 : DO ib = 1, nl_b
72938 : s_offset_c1 = 0
72939 : DO ic = 1, nl_c
72940 : s_offset_d1 = 0
72941 : DO id = 1, nl_d
72942 : buffer1 = 0.0_dp
72943 : imax = 6*6*3
72944 : kmax = 10
72945 : DO i = 1, imax
72946 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
72947 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
72948 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
72949 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
72950 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
72951 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
72952 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
72953 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
72954 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
72955 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
72956 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
72957 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
72958 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
72959 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
72960 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
72961 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
72962 : END DO
72963 : buffer2 = 0.0_dp
72964 : imax = 7*6*3
72965 : kmax = 6
72966 : DO i = 1, imax
72967 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
72968 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
72969 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
72970 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
72971 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
72972 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
72973 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
72974 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
72975 : END DO
72976 : buffer1 = 0.0_dp
72977 : imax = 7*5*3
72978 : kmax = 6
72979 : DO i = 1, imax
72980 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
72981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
72982 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
72983 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
72984 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
72985 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
72986 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
72987 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
72988 : END DO
72989 : imax = 7*5*5
72990 : kmax = 3
72991 : i = 0
72992 : DO i1 = 1, 5
72993 : DO i2 = 1, 5
72994 : DO i3 = 1, 7
72995 : i = i + 1
72996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
72997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
72998 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
72999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
73001 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
73004 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
73005 : END DO
73006 : END DO
73007 : END DO
73008 : s_offset_d1 = s_offset_d1 + 3
73009 : END DO
73010 : s_offset_c1 = s_offset_c1 + 5
73011 : END DO
73012 : s_offset_b1 = s_offset_b1 + 5
73013 : END DO
73014 : s_offset_a1 = s_offset_a1 + 7
73015 : END DO
73016 : END SUBROUTINE contract_fddp
73017 : #endif
73018 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73019 : ! **************************************************************************************************
73020 : !> \brief ...
73021 : !> \param work ...
73022 : !> \param nl_a ...
73023 : !> \param nl_b ...
73024 : !> \param nl_c ...
73025 : !> \param nl_d ...
73026 : !> \param sphi_a ...
73027 : !> \param sphi_b ...
73028 : !> \param sphi_c ...
73029 : !> \param sphi_d ...
73030 : !> \param primitives ...
73031 : !> \param buffer1 ...
73032 : !> \param buffer2 ...
73033 : ! **************************************************************************************************
73034 : SUBROUTINE contract_fddd(work, &
73035 : nl_a, nl_b, nl_c, nl_d, &
73036 : sphi_a, sphi_b, sphi_c, sphi_d, &
73037 : primitives, &
73038 : buffer1, buffer2)
73039 : REAL(dp), DIMENSION(10*6*6*6), INTENT(IN) :: work
73040 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73041 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73042 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73043 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
73044 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
73045 : REAL(dp), &
73046 : DIMENSION(7*nl_a, 5*nl_b, 5*nl_c, 5*nl_d) :: primitives
73047 : REAL(dp), DIMENSION(10*6*6*6) :: buffer1, buffer2
73048 :
73049 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73050 : kmax, s_offset_a1, s_offset_b1, &
73051 : s_offset_c1, s_offset_d1
73052 :
73053 : s_offset_a1 = 0
73054 : DO ia = 1, nl_a
73055 : s_offset_b1 = 0
73056 : DO ib = 1, nl_b
73057 : s_offset_c1 = 0
73058 : DO ic = 1, nl_c
73059 : s_offset_d1 = 0
73060 : DO id = 1, nl_d
73061 : buffer1 = 0.0_dp
73062 : imax = 6*6*6
73063 : kmax = 10
73064 : DO i = 1, imax
73065 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73066 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73067 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73068 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73069 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73070 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73072 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73073 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73074 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73075 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73077 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73078 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73080 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73081 : END DO
73082 : buffer2 = 0.0_dp
73083 : imax = 7*6*6
73084 : kmax = 6
73085 : DO i = 1, imax
73086 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73087 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73088 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73089 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73090 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73091 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73092 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73093 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73094 : END DO
73095 : buffer1 = 0.0_dp
73096 : imax = 7*5*6
73097 : kmax = 6
73098 : DO i = 1, imax
73099 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
73100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73101 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73102 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73103 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
73104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73105 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
73107 : END DO
73108 : imax = 7*5*5
73109 : kmax = 6
73110 : i = 0
73111 : DO i1 = 1, 5
73112 : DO i2 = 1, 5
73113 : DO i3 = 1, 7
73114 : i = i + 1
73115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73117 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
73118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73120 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
73121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73123 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73126 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
73127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73129 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
73130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73132 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
73133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
73135 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
73136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73138 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
73139 : END DO
73140 : END DO
73141 : END DO
73142 : s_offset_d1 = s_offset_d1 + 5
73143 : END DO
73144 : s_offset_c1 = s_offset_c1 + 5
73145 : END DO
73146 : s_offset_b1 = s_offset_b1 + 5
73147 : END DO
73148 : s_offset_a1 = s_offset_a1 + 7
73149 : END DO
73150 : END SUBROUTINE contract_fddd
73151 : #endif
73152 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73153 : ! **************************************************************************************************
73154 : !> \brief ...
73155 : !> \param work ...
73156 : !> \param nl_a ...
73157 : !> \param nl_b ...
73158 : !> \param nl_c ...
73159 : !> \param nl_d ...
73160 : !> \param sphi_a ...
73161 : !> \param sphi_b ...
73162 : !> \param sphi_c ...
73163 : !> \param sphi_d ...
73164 : !> \param primitives ...
73165 : !> \param buffer1 ...
73166 : !> \param buffer2 ...
73167 : ! **************************************************************************************************
73168 : SUBROUTINE contract_fddf(work, &
73169 : nl_a, nl_b, nl_c, nl_d, &
73170 : sphi_a, sphi_b, sphi_c, sphi_d, &
73171 : primitives, &
73172 : buffer1, buffer2)
73173 : REAL(dp), DIMENSION(10*6*6*10), INTENT(IN) :: work
73174 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73175 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73176 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73177 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
73178 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
73179 : REAL(dp), &
73180 : DIMENSION(7*nl_a, 5*nl_b, 5*nl_c, 7*nl_d) :: primitives
73181 : REAL(dp), DIMENSION(10*6*6*10) :: buffer1, buffer2
73182 :
73183 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73184 : kmax, s_offset_a1, s_offset_b1, &
73185 : s_offset_c1, s_offset_d1
73186 :
73187 : s_offset_a1 = 0
73188 : DO ia = 1, nl_a
73189 : s_offset_b1 = 0
73190 : DO ib = 1, nl_b
73191 : s_offset_c1 = 0
73192 : DO ic = 1, nl_c
73193 : s_offset_d1 = 0
73194 : DO id = 1, nl_d
73195 : buffer1 = 0.0_dp
73196 : imax = 6*6*10
73197 : kmax = 10
73198 : DO i = 1, imax
73199 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73200 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73201 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73202 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73203 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73204 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73205 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73206 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73207 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73208 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73209 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73210 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73211 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73212 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73213 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73214 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73215 : END DO
73216 : buffer2 = 0.0_dp
73217 : imax = 7*6*10
73218 : kmax = 6
73219 : DO i = 1, imax
73220 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73221 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73222 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73223 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73224 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73225 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73226 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73227 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73228 : END DO
73229 : buffer1 = 0.0_dp
73230 : imax = 7*5*10
73231 : kmax = 6
73232 : DO i = 1, imax
73233 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
73234 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73236 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73237 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
73238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73239 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73240 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
73241 : END DO
73242 : imax = 7*5*5
73243 : kmax = 10
73244 : i = 0
73245 : DO i1 = 1, 5
73246 : DO i2 = 1, 5
73247 : DO i3 = 1, 7
73248 : i = i + 1
73249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73251 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
73252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73254 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
73255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73257 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73260 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
73261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73263 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
73264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
73265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
73266 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
73267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73269 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
73270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73272 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
73273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
73275 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
73276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73278 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
73279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73281 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
73282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73284 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
73285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73287 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
73288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
73289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
73290 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
73291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73293 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
73294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73296 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
73297 : END DO
73298 : END DO
73299 : END DO
73300 : s_offset_d1 = s_offset_d1 + 7
73301 : END DO
73302 : s_offset_c1 = s_offset_c1 + 5
73303 : END DO
73304 : s_offset_b1 = s_offset_b1 + 5
73305 : END DO
73306 : s_offset_a1 = s_offset_a1 + 7
73307 : END DO
73308 : END SUBROUTINE contract_fddf
73309 : #endif
73310 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
73311 : ! **************************************************************************************************
73312 : !> \brief ...
73313 : !> \param work ...
73314 : !> \param nl_a ...
73315 : !> \param nl_b ...
73316 : !> \param nl_c ...
73317 : !> \param nl_d ...
73318 : !> \param sphi_a ...
73319 : !> \param sphi_b ...
73320 : !> \param sphi_c ...
73321 : !> \param sphi_d ...
73322 : !> \param primitives ...
73323 : !> \param buffer1 ...
73324 : !> \param buffer2 ...
73325 : ! **************************************************************************************************
73326 : SUBROUTINE contract_fddg(work, &
73327 : nl_a, nl_b, nl_c, nl_d, &
73328 : sphi_a, sphi_b, sphi_c, sphi_d, &
73329 : primitives, &
73330 : buffer1, buffer2)
73331 : REAL(dp), DIMENSION(10*6*6*15), INTENT(IN) :: work
73332 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73333 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73334 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73335 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
73336 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
73337 : REAL(dp), &
73338 : DIMENSION(7*nl_a, 5*nl_b, 5*nl_c, 9*nl_d) :: primitives
73339 : REAL(dp), DIMENSION(10*6*6*15) :: buffer1, buffer2
73340 :
73341 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73342 : kmax, s_offset_a1, s_offset_b1, &
73343 : s_offset_c1, s_offset_d1
73344 :
73345 : s_offset_a1 = 0
73346 : DO ia = 1, nl_a
73347 : s_offset_b1 = 0
73348 : DO ib = 1, nl_b
73349 : s_offset_c1 = 0
73350 : DO ic = 1, nl_c
73351 : s_offset_d1 = 0
73352 : DO id = 1, nl_d
73353 : buffer1 = 0.0_dp
73354 : imax = 6*6*15
73355 : kmax = 10
73356 : DO i = 1, imax
73357 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73358 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73359 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73361 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73362 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73363 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73364 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73365 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73367 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73368 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73369 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73370 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73371 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73372 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73373 : END DO
73374 : buffer2 = 0.0_dp
73375 : imax = 7*6*15
73376 : kmax = 6
73377 : DO i = 1, imax
73378 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73379 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73380 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73381 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73382 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73383 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73384 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73385 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73386 : END DO
73387 : buffer1 = 0.0_dp
73388 : imax = 7*5*15
73389 : kmax = 6
73390 : DO i = 1, imax
73391 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
73392 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73393 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73394 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73395 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
73396 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73397 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73398 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
73399 : END DO
73400 : imax = 7*5*5
73401 : kmax = 15
73402 : i = 0
73403 : DO i1 = 1, 5
73404 : DO i2 = 1, 5
73405 : DO i3 = 1, 7
73406 : i = i + 1
73407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73409 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
73410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73412 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
73413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
73414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
73415 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
73416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73418 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73421 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
73422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
73423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
73424 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
73425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
73426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
73427 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
73428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73430 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
73431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
73432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
73433 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
73434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
73436 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
73437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73439 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
73440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73442 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
73443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73445 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
73446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73448 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
73449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73451 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
73452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
73453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
73454 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
73455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
73456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
73457 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
73458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73460 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
73461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
73462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
73463 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
73464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73466 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
73467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73469 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
73470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
73471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
73472 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
73473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
73475 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
73476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73478 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
73479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73481 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
73482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
73483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
73484 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
73485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73487 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
73488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73490 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
73491 : END DO
73492 : END DO
73493 : END DO
73494 : s_offset_d1 = s_offset_d1 + 9
73495 : END DO
73496 : s_offset_c1 = s_offset_c1 + 5
73497 : END DO
73498 : s_offset_b1 = s_offset_b1 + 5
73499 : END DO
73500 : s_offset_a1 = s_offset_a1 + 7
73501 : END DO
73502 : END SUBROUTINE contract_fddg
73503 : #endif
73504 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73505 : ! **************************************************************************************************
73506 : !> \brief ...
73507 : !> \param work ...
73508 : !> \param nl_a ...
73509 : !> \param nl_b ...
73510 : !> \param nl_c ...
73511 : !> \param nl_d ...
73512 : !> \param sphi_a ...
73513 : !> \param sphi_b ...
73514 : !> \param sphi_c ...
73515 : !> \param sphi_d ...
73516 : !> \param primitives ...
73517 : !> \param buffer1 ...
73518 : !> \param buffer2 ...
73519 : ! **************************************************************************************************
73520 : SUBROUTINE contract_fdfs(work, &
73521 : nl_a, nl_b, nl_c, nl_d, &
73522 : sphi_a, sphi_b, sphi_c, sphi_d, &
73523 : primitives, &
73524 : buffer1, buffer2)
73525 : REAL(dp), DIMENSION(10*6*10*1), INTENT(IN) :: work
73526 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73527 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73528 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73529 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
73530 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
73531 : REAL(dp), &
73532 : DIMENSION(7*nl_a, 5*nl_b, 7*nl_c, 1*nl_d) :: primitives
73533 : REAL(dp), DIMENSION(10*6*10*1) :: buffer1, buffer2
73534 :
73535 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73536 : kmax, s_offset_a1, s_offset_b1, &
73537 : s_offset_c1, s_offset_d1
73538 :
73539 : s_offset_a1 = 0
73540 : DO ia = 1, nl_a
73541 : s_offset_b1 = 0
73542 : DO ib = 1, nl_b
73543 : s_offset_c1 = 0
73544 : DO ic = 1, nl_c
73545 : s_offset_d1 = 0
73546 : DO id = 1, nl_d
73547 : buffer1 = 0.0_dp
73548 : imax = 6*10*1
73549 : kmax = 10
73550 : DO i = 1, imax
73551 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73552 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73553 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73554 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73555 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73556 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73557 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73558 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73559 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73560 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73561 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73562 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73563 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73564 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73565 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73566 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73567 : END DO
73568 : buffer2 = 0.0_dp
73569 : imax = 7*10*1
73570 : kmax = 6
73571 : DO i = 1, imax
73572 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73573 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73574 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73575 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73576 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73577 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73578 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73579 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73580 : END DO
73581 : buffer1 = 0.0_dp
73582 : imax = 7*5*1
73583 : kmax = 10
73584 : DO i = 1, imax
73585 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73586 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
73587 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73588 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
73589 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73590 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
73591 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73592 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
73593 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73594 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
73595 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
73596 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
73597 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
73598 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
73599 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
73600 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
73601 : END DO
73602 : imax = 7*5*7
73603 : kmax = 1
73604 : i = 0
73605 : DO i1 = 1, 7
73606 : DO i2 = 1, 5
73607 : DO i3 = 1, 7
73608 : i = i + 1
73609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
73611 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
73612 : END DO
73613 : END DO
73614 : END DO
73615 : s_offset_d1 = s_offset_d1 + 1
73616 : END DO
73617 : s_offset_c1 = s_offset_c1 + 7
73618 : END DO
73619 : s_offset_b1 = s_offset_b1 + 5
73620 : END DO
73621 : s_offset_a1 = s_offset_a1 + 7
73622 : END DO
73623 : END SUBROUTINE contract_fdfs
73624 : #endif
73625 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73626 : ! **************************************************************************************************
73627 : !> \brief ...
73628 : !> \param work ...
73629 : !> \param nl_a ...
73630 : !> \param nl_b ...
73631 : !> \param nl_c ...
73632 : !> \param nl_d ...
73633 : !> \param sphi_a ...
73634 : !> \param sphi_b ...
73635 : !> \param sphi_c ...
73636 : !> \param sphi_d ...
73637 : !> \param primitives ...
73638 : !> \param buffer1 ...
73639 : !> \param buffer2 ...
73640 : ! **************************************************************************************************
73641 : SUBROUTINE contract_fdfp(work, &
73642 : nl_a, nl_b, nl_c, nl_d, &
73643 : sphi_a, sphi_b, sphi_c, sphi_d, &
73644 : primitives, &
73645 : buffer1, buffer2)
73646 : REAL(dp), DIMENSION(10*6*10*3), INTENT(IN) :: work
73647 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73648 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73649 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73650 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
73651 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
73652 : REAL(dp), &
73653 : DIMENSION(7*nl_a, 5*nl_b, 7*nl_c, 3*nl_d) :: primitives
73654 : REAL(dp), DIMENSION(10*6*10*3) :: buffer1, buffer2
73655 :
73656 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73657 : kmax, s_offset_a1, s_offset_b1, &
73658 : s_offset_c1, s_offset_d1
73659 :
73660 : s_offset_a1 = 0
73661 : DO ia = 1, nl_a
73662 : s_offset_b1 = 0
73663 : DO ib = 1, nl_b
73664 : s_offset_c1 = 0
73665 : DO ic = 1, nl_c
73666 : s_offset_d1 = 0
73667 : DO id = 1, nl_d
73668 : buffer1 = 0.0_dp
73669 : imax = 6*10*3
73670 : kmax = 10
73671 : DO i = 1, imax
73672 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73673 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73674 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73675 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73676 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73677 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73678 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73679 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73680 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73682 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73683 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73684 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73685 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73686 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73687 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73688 : END DO
73689 : buffer2 = 0.0_dp
73690 : imax = 7*10*3
73691 : kmax = 6
73692 : DO i = 1, imax
73693 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73694 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73695 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73696 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73697 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73698 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73699 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73700 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73701 : END DO
73702 : buffer1 = 0.0_dp
73703 : imax = 7*5*3
73704 : kmax = 10
73705 : DO i = 1, imax
73706 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73707 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
73708 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73709 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
73710 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73711 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
73712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73713 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
73714 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73715 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
73716 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
73717 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
73718 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
73719 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
73720 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
73721 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
73722 : END DO
73723 : imax = 7*5*7
73724 : kmax = 3
73725 : i = 0
73726 : DO i1 = 1, 7
73727 : DO i2 = 1, 5
73728 : DO i3 = 1, 7
73729 : i = i + 1
73730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
73732 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
73733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
73735 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
73738 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
73739 : END DO
73740 : END DO
73741 : END DO
73742 : s_offset_d1 = s_offset_d1 + 3
73743 : END DO
73744 : s_offset_c1 = s_offset_c1 + 7
73745 : END DO
73746 : s_offset_b1 = s_offset_b1 + 5
73747 : END DO
73748 : s_offset_a1 = s_offset_a1 + 7
73749 : END DO
73750 : END SUBROUTINE contract_fdfp
73751 : #endif
73752 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73753 : ! **************************************************************************************************
73754 : !> \brief ...
73755 : !> \param work ...
73756 : !> \param nl_a ...
73757 : !> \param nl_b ...
73758 : !> \param nl_c ...
73759 : !> \param nl_d ...
73760 : !> \param sphi_a ...
73761 : !> \param sphi_b ...
73762 : !> \param sphi_c ...
73763 : !> \param sphi_d ...
73764 : !> \param primitives ...
73765 : !> \param buffer1 ...
73766 : !> \param buffer2 ...
73767 : ! **************************************************************************************************
73768 : SUBROUTINE contract_fdfd(work, &
73769 : nl_a, nl_b, nl_c, nl_d, &
73770 : sphi_a, sphi_b, sphi_c, sphi_d, &
73771 : primitives, &
73772 : buffer1, buffer2)
73773 : REAL(dp), DIMENSION(10*6*10*6), INTENT(IN) :: work
73774 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73775 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73776 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73777 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
73778 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
73779 : REAL(dp), &
73780 : DIMENSION(7*nl_a, 5*nl_b, 7*nl_c, 5*nl_d) :: primitives
73781 : REAL(dp), DIMENSION(10*6*10*6) :: buffer1, buffer2
73782 :
73783 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73784 : kmax, s_offset_a1, s_offset_b1, &
73785 : s_offset_c1, s_offset_d1
73786 :
73787 : s_offset_a1 = 0
73788 : DO ia = 1, nl_a
73789 : s_offset_b1 = 0
73790 : DO ib = 1, nl_b
73791 : s_offset_c1 = 0
73792 : DO ic = 1, nl_c
73793 : s_offset_d1 = 0
73794 : DO id = 1, nl_d
73795 : buffer1 = 0.0_dp
73796 : imax = 6*10*6
73797 : kmax = 10
73798 : DO i = 1, imax
73799 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73800 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73801 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73802 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73803 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73804 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73805 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73806 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73807 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73808 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73809 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73811 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73812 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73813 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73815 : END DO
73816 : buffer2 = 0.0_dp
73817 : imax = 7*10*6
73818 : kmax = 6
73819 : DO i = 1, imax
73820 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73821 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73822 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73823 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73824 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73825 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73826 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73827 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73828 : END DO
73829 : buffer1 = 0.0_dp
73830 : imax = 7*5*6
73831 : kmax = 10
73832 : DO i = 1, imax
73833 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73834 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
73835 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73836 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
73837 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73838 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
73839 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73840 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
73841 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73842 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
73843 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
73844 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
73845 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
73846 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
73847 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
73848 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
73849 : END DO
73850 : imax = 7*5*7
73851 : kmax = 6
73852 : i = 0
73853 : DO i1 = 1, 7
73854 : DO i2 = 1, 5
73855 : DO i3 = 1, 7
73856 : i = i + 1
73857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73859 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
73860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73862 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
73863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
73864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
73865 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
73866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
73867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
73868 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
73869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73871 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
73872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
73873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
73874 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
73875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
73876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
73877 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
73878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
73879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
73880 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
73881 : END DO
73882 : END DO
73883 : END DO
73884 : s_offset_d1 = s_offset_d1 + 5
73885 : END DO
73886 : s_offset_c1 = s_offset_c1 + 7
73887 : END DO
73888 : s_offset_b1 = s_offset_b1 + 5
73889 : END DO
73890 : s_offset_a1 = s_offset_a1 + 7
73891 : END DO
73892 : END SUBROUTINE contract_fdfd
73893 : #endif
73894 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
73895 : ! **************************************************************************************************
73896 : !> \brief ...
73897 : !> \param work ...
73898 : !> \param nl_a ...
73899 : !> \param nl_b ...
73900 : !> \param nl_c ...
73901 : !> \param nl_d ...
73902 : !> \param sphi_a ...
73903 : !> \param sphi_b ...
73904 : !> \param sphi_c ...
73905 : !> \param sphi_d ...
73906 : !> \param primitives ...
73907 : !> \param buffer1 ...
73908 : !> \param buffer2 ...
73909 : ! **************************************************************************************************
73910 : SUBROUTINE contract_fdff(work, &
73911 : nl_a, nl_b, nl_c, nl_d, &
73912 : sphi_a, sphi_b, sphi_c, sphi_d, &
73913 : primitives, &
73914 : buffer1, buffer2)
73915 : REAL(dp), DIMENSION(10*6*10*10), INTENT(IN) :: work
73916 : INTEGER :: nl_a, nl_b, nl_c, nl_d
73917 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
73918 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
73919 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
73920 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
73921 : REAL(dp), &
73922 : DIMENSION(7*nl_a, 5*nl_b, 7*nl_c, 7*nl_d) :: primitives
73923 : REAL(dp), DIMENSION(10*6*10*10) :: buffer1, buffer2
73924 :
73925 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
73926 : kmax, s_offset_a1, s_offset_b1, &
73927 : s_offset_c1, s_offset_d1
73928 :
73929 : s_offset_a1 = 0
73930 : DO ia = 1, nl_a
73931 : s_offset_b1 = 0
73932 : DO ib = 1, nl_b
73933 : s_offset_c1 = 0
73934 : DO ic = 1, nl_c
73935 : s_offset_d1 = 0
73936 : DO id = 1, nl_d
73937 : buffer1 = 0.0_dp
73938 : imax = 6*10*10
73939 : kmax = 10
73940 : DO i = 1, imax
73941 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
73942 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
73943 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
73944 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
73945 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
73946 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
73947 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
73948 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
73949 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
73950 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
73951 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
73952 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
73953 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
73954 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
73955 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
73956 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
73957 : END DO
73958 : buffer2 = 0.0_dp
73959 : imax = 7*10*10
73960 : kmax = 6
73961 : DO i = 1, imax
73962 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
73963 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
73964 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
73965 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
73966 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
73967 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
73968 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
73969 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
73970 : END DO
73971 : buffer1 = 0.0_dp
73972 : imax = 7*5*10
73973 : kmax = 10
73974 : DO i = 1, imax
73975 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
73976 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
73977 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
73978 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
73979 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
73980 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
73981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
73982 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
73983 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
73984 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
73985 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
73986 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
73987 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
73988 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
73989 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
73990 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
73991 : END DO
73992 : imax = 7*5*7
73993 : kmax = 10
73994 : i = 0
73995 : DO i1 = 1, 7
73996 : DO i2 = 1, 5
73997 : DO i3 = 1, 7
73998 : i = i + 1
73999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74001 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
74002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74004 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
74005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74007 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74010 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
74011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74013 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
74014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74016 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
74017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74019 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
74020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74022 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
74023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
74025 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
74026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74028 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
74029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74031 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
74032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74034 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
74035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74037 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
74038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74040 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
74041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74043 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
74044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74046 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
74047 : END DO
74048 : END DO
74049 : END DO
74050 : s_offset_d1 = s_offset_d1 + 7
74051 : END DO
74052 : s_offset_c1 = s_offset_c1 + 7
74053 : END DO
74054 : s_offset_b1 = s_offset_b1 + 5
74055 : END DO
74056 : s_offset_a1 = s_offset_a1 + 7
74057 : END DO
74058 : END SUBROUTINE contract_fdff
74059 : #endif
74060 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74061 : ! **************************************************************************************************
74062 : !> \brief ...
74063 : !> \param work ...
74064 : !> \param nl_a ...
74065 : !> \param nl_b ...
74066 : !> \param nl_c ...
74067 : !> \param nl_d ...
74068 : !> \param sphi_a ...
74069 : !> \param sphi_b ...
74070 : !> \param sphi_c ...
74071 : !> \param sphi_d ...
74072 : !> \param primitives ...
74073 : !> \param buffer1 ...
74074 : !> \param buffer2 ...
74075 : ! **************************************************************************************************
74076 : SUBROUTINE contract_fdfg(work, &
74077 : nl_a, nl_b, nl_c, nl_d, &
74078 : sphi_a, sphi_b, sphi_c, sphi_d, &
74079 : primitives, &
74080 : buffer1, buffer2)
74081 : REAL(dp), DIMENSION(10*6*10*15), INTENT(IN) :: work
74082 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74083 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74084 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74085 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
74086 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
74087 : REAL(dp), &
74088 : DIMENSION(7*nl_a, 5*nl_b, 7*nl_c, 9*nl_d) :: primitives
74089 : REAL(dp), DIMENSION(10*6*10*15) :: buffer1, buffer2
74090 :
74091 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74092 : kmax, s_offset_a1, s_offset_b1, &
74093 : s_offset_c1, s_offset_d1
74094 :
74095 : s_offset_a1 = 0
74096 : DO ia = 1, nl_a
74097 : s_offset_b1 = 0
74098 : DO ib = 1, nl_b
74099 : s_offset_c1 = 0
74100 : DO ic = 1, nl_c
74101 : s_offset_d1 = 0
74102 : DO id = 1, nl_d
74103 : buffer1 = 0.0_dp
74104 : imax = 6*10*15
74105 : kmax = 10
74106 : DO i = 1, imax
74107 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74108 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74109 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74110 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74111 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74112 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74113 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74114 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74115 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74116 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74117 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74118 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74119 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74120 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74122 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74123 : END DO
74124 : buffer2 = 0.0_dp
74125 : imax = 7*10*15
74126 : kmax = 6
74127 : DO i = 1, imax
74128 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74129 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74130 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74131 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74132 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74133 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74134 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74135 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74136 : END DO
74137 : buffer1 = 0.0_dp
74138 : imax = 7*5*15
74139 : kmax = 10
74140 : DO i = 1, imax
74141 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74142 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74143 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74144 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74145 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
74146 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74147 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74148 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
74149 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74150 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74151 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74152 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74153 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
74154 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74155 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74156 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
74157 : END DO
74158 : imax = 7*5*7
74159 : kmax = 15
74160 : i = 0
74161 : DO i1 = 1, 7
74162 : DO i2 = 1, 5
74163 : DO i3 = 1, 7
74164 : i = i + 1
74165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74167 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
74168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74170 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
74171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
74172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
74173 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
74174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74176 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74179 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
74180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74182 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
74183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
74184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
74185 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
74186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74188 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
74189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
74190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
74191 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
74192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
74194 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
74195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74197 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
74198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74200 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
74201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74203 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
74204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74206 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
74207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74209 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
74210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74212 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
74213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
74214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
74215 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
74216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74218 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
74219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74221 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
74222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74224 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
74225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74227 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
74228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
74229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
74230 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
74231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
74233 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
74234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74236 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
74237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74239 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
74240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74242 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
74243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74245 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
74246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74248 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
74249 : END DO
74250 : END DO
74251 : END DO
74252 : s_offset_d1 = s_offset_d1 + 9
74253 : END DO
74254 : s_offset_c1 = s_offset_c1 + 7
74255 : END DO
74256 : s_offset_b1 = s_offset_b1 + 5
74257 : END DO
74258 : s_offset_a1 = s_offset_a1 + 7
74259 : END DO
74260 : END SUBROUTINE contract_fdfg
74261 : #endif
74262 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74263 : ! **************************************************************************************************
74264 : !> \brief ...
74265 : !> \param work ...
74266 : !> \param nl_a ...
74267 : !> \param nl_b ...
74268 : !> \param nl_c ...
74269 : !> \param nl_d ...
74270 : !> \param sphi_a ...
74271 : !> \param sphi_b ...
74272 : !> \param sphi_c ...
74273 : !> \param sphi_d ...
74274 : !> \param primitives ...
74275 : !> \param buffer1 ...
74276 : !> \param buffer2 ...
74277 : ! **************************************************************************************************
74278 : SUBROUTINE contract_fdgs(work, &
74279 : nl_a, nl_b, nl_c, nl_d, &
74280 : sphi_a, sphi_b, sphi_c, sphi_d, &
74281 : primitives, &
74282 : buffer1, buffer2)
74283 : REAL(dp), DIMENSION(10*6*15*1), INTENT(IN) :: work
74284 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74285 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74286 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74287 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
74288 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
74289 : REAL(dp), &
74290 : DIMENSION(7*nl_a, 5*nl_b, 9*nl_c, 1*nl_d) :: primitives
74291 : REAL(dp), DIMENSION(10*6*15*1) :: buffer1, buffer2
74292 :
74293 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74294 : kmax, s_offset_a1, s_offset_b1, &
74295 : s_offset_c1, s_offset_d1
74296 :
74297 : s_offset_a1 = 0
74298 : DO ia = 1, nl_a
74299 : s_offset_b1 = 0
74300 : DO ib = 1, nl_b
74301 : s_offset_c1 = 0
74302 : DO ic = 1, nl_c
74303 : s_offset_d1 = 0
74304 : DO id = 1, nl_d
74305 : buffer1 = 0.0_dp
74306 : imax = 6*15*1
74307 : kmax = 10
74308 : DO i = 1, imax
74309 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74310 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74311 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74312 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74313 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74314 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74315 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74316 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74317 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74318 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74319 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74320 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74321 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74322 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74323 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74324 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74325 : END DO
74326 : buffer2 = 0.0_dp
74327 : imax = 7*15*1
74328 : kmax = 6
74329 : DO i = 1, imax
74330 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74331 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74332 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74333 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74334 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74335 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74336 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74337 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74338 : END DO
74339 : buffer1 = 0.0_dp
74340 : imax = 7*5*1
74341 : kmax = 15
74342 : DO i = 1, imax
74343 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74344 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74345 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
74346 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74347 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74348 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74349 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
74350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74351 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
74352 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74353 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
74354 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74355 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
74356 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74358 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74359 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
74360 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74361 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
74362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
74363 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
74364 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
74365 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
74366 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
74367 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
74368 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
74369 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
74370 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
74371 : END DO
74372 : imax = 7*5*9
74373 : kmax = 1
74374 : i = 0
74375 : DO i1 = 1, 9
74376 : DO i2 = 1, 5
74377 : DO i3 = 1, 7
74378 : i = i + 1
74379 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
74381 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
74382 : END DO
74383 : END DO
74384 : END DO
74385 : s_offset_d1 = s_offset_d1 + 1
74386 : END DO
74387 : s_offset_c1 = s_offset_c1 + 9
74388 : END DO
74389 : s_offset_b1 = s_offset_b1 + 5
74390 : END DO
74391 : s_offset_a1 = s_offset_a1 + 7
74392 : END DO
74393 : END SUBROUTINE contract_fdgs
74394 : #endif
74395 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74396 : ! **************************************************************************************************
74397 : !> \brief ...
74398 : !> \param work ...
74399 : !> \param nl_a ...
74400 : !> \param nl_b ...
74401 : !> \param nl_c ...
74402 : !> \param nl_d ...
74403 : !> \param sphi_a ...
74404 : !> \param sphi_b ...
74405 : !> \param sphi_c ...
74406 : !> \param sphi_d ...
74407 : !> \param primitives ...
74408 : !> \param buffer1 ...
74409 : !> \param buffer2 ...
74410 : ! **************************************************************************************************
74411 : SUBROUTINE contract_fdgp(work, &
74412 : nl_a, nl_b, nl_c, nl_d, &
74413 : sphi_a, sphi_b, sphi_c, sphi_d, &
74414 : primitives, &
74415 : buffer1, buffer2)
74416 : REAL(dp), DIMENSION(10*6*15*3), INTENT(IN) :: work
74417 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74418 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74419 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74420 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
74421 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
74422 : REAL(dp), &
74423 : DIMENSION(7*nl_a, 5*nl_b, 9*nl_c, 3*nl_d) :: primitives
74424 : REAL(dp), DIMENSION(10*6*15*3) :: buffer1, buffer2
74425 :
74426 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74427 : kmax, s_offset_a1, s_offset_b1, &
74428 : s_offset_c1, s_offset_d1
74429 :
74430 : s_offset_a1 = 0
74431 : DO ia = 1, nl_a
74432 : s_offset_b1 = 0
74433 : DO ib = 1, nl_b
74434 : s_offset_c1 = 0
74435 : DO ic = 1, nl_c
74436 : s_offset_d1 = 0
74437 : DO id = 1, nl_d
74438 : buffer1 = 0.0_dp
74439 : imax = 6*15*3
74440 : kmax = 10
74441 : DO i = 1, imax
74442 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74443 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74444 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74445 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74446 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74447 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74448 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74449 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74450 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74452 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74453 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74454 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74455 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74456 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74457 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74458 : END DO
74459 : buffer2 = 0.0_dp
74460 : imax = 7*15*3
74461 : kmax = 6
74462 : DO i = 1, imax
74463 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74464 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74465 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74466 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74467 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74468 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74469 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74470 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74471 : END DO
74472 : buffer1 = 0.0_dp
74473 : imax = 7*5*3
74474 : kmax = 15
74475 : DO i = 1, imax
74476 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74477 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74478 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
74479 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74480 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74481 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74482 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
74483 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74484 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
74485 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74486 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
74487 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74488 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
74489 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74490 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74491 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74492 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
74493 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74494 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
74495 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
74496 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
74497 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
74498 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
74499 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
74500 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
74501 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
74502 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
74503 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
74504 : END DO
74505 : imax = 7*5*9
74506 : kmax = 3
74507 : i = 0
74508 : DO i1 = 1, 9
74509 : DO i2 = 1, 5
74510 : DO i3 = 1, 7
74511 : i = i + 1
74512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
74514 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
74515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
74517 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
74520 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
74521 : END DO
74522 : END DO
74523 : END DO
74524 : s_offset_d1 = s_offset_d1 + 3
74525 : END DO
74526 : s_offset_c1 = s_offset_c1 + 9
74527 : END DO
74528 : s_offset_b1 = s_offset_b1 + 5
74529 : END DO
74530 : s_offset_a1 = s_offset_a1 + 7
74531 : END DO
74532 : END SUBROUTINE contract_fdgp
74533 : #endif
74534 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74535 : ! **************************************************************************************************
74536 : !> \brief ...
74537 : !> \param work ...
74538 : !> \param nl_a ...
74539 : !> \param nl_b ...
74540 : !> \param nl_c ...
74541 : !> \param nl_d ...
74542 : !> \param sphi_a ...
74543 : !> \param sphi_b ...
74544 : !> \param sphi_c ...
74545 : !> \param sphi_d ...
74546 : !> \param primitives ...
74547 : !> \param buffer1 ...
74548 : !> \param buffer2 ...
74549 : ! **************************************************************************************************
74550 : SUBROUTINE contract_fdgd(work, &
74551 : nl_a, nl_b, nl_c, nl_d, &
74552 : sphi_a, sphi_b, sphi_c, sphi_d, &
74553 : primitives, &
74554 : buffer1, buffer2)
74555 : REAL(dp), DIMENSION(10*6*15*6), INTENT(IN) :: work
74556 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74557 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74558 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74559 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
74560 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
74561 : REAL(dp), &
74562 : DIMENSION(7*nl_a, 5*nl_b, 9*nl_c, 5*nl_d) :: primitives
74563 : REAL(dp), DIMENSION(10*6*15*6) :: buffer1, buffer2
74564 :
74565 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74566 : kmax, s_offset_a1, s_offset_b1, &
74567 : s_offset_c1, s_offset_d1
74568 :
74569 : s_offset_a1 = 0
74570 : DO ia = 1, nl_a
74571 : s_offset_b1 = 0
74572 : DO ib = 1, nl_b
74573 : s_offset_c1 = 0
74574 : DO ic = 1, nl_c
74575 : s_offset_d1 = 0
74576 : DO id = 1, nl_d
74577 : buffer1 = 0.0_dp
74578 : imax = 6*15*6
74579 : kmax = 10
74580 : DO i = 1, imax
74581 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74582 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74583 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74586 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74587 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74588 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74589 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74590 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74591 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74592 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74593 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74594 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74595 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74596 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74597 : END DO
74598 : buffer2 = 0.0_dp
74599 : imax = 7*15*6
74600 : kmax = 6
74601 : DO i = 1, imax
74602 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74603 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74604 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74605 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74606 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74607 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74608 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74609 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74610 : END DO
74611 : buffer1 = 0.0_dp
74612 : imax = 7*5*6
74613 : kmax = 15
74614 : DO i = 1, imax
74615 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74616 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74617 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
74618 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74619 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74620 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74621 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
74622 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74623 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
74624 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74625 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
74626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74627 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
74628 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74629 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74630 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74631 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
74632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74633 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
74634 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
74635 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
74636 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
74637 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
74638 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
74639 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
74640 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
74641 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
74642 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
74643 : END DO
74644 : imax = 7*5*9
74645 : kmax = 6
74646 : i = 0
74647 : DO i1 = 1, 9
74648 : DO i2 = 1, 5
74649 : DO i3 = 1, 7
74650 : i = i + 1
74651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74653 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
74654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74656 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
74657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74659 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74662 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
74663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74665 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
74666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74668 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
74669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
74671 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
74672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74674 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
74675 : END DO
74676 : END DO
74677 : END DO
74678 : s_offset_d1 = s_offset_d1 + 5
74679 : END DO
74680 : s_offset_c1 = s_offset_c1 + 9
74681 : END DO
74682 : s_offset_b1 = s_offset_b1 + 5
74683 : END DO
74684 : s_offset_a1 = s_offset_a1 + 7
74685 : END DO
74686 : END SUBROUTINE contract_fdgd
74687 : #endif
74688 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74689 : ! **************************************************************************************************
74690 : !> \brief ...
74691 : !> \param work ...
74692 : !> \param nl_a ...
74693 : !> \param nl_b ...
74694 : !> \param nl_c ...
74695 : !> \param nl_d ...
74696 : !> \param sphi_a ...
74697 : !> \param sphi_b ...
74698 : !> \param sphi_c ...
74699 : !> \param sphi_d ...
74700 : !> \param primitives ...
74701 : !> \param buffer1 ...
74702 : !> \param buffer2 ...
74703 : ! **************************************************************************************************
74704 : SUBROUTINE contract_fdgf(work, &
74705 : nl_a, nl_b, nl_c, nl_d, &
74706 : sphi_a, sphi_b, sphi_c, sphi_d, &
74707 : primitives, &
74708 : buffer1, buffer2)
74709 : REAL(dp), DIMENSION(10*6*15*10), INTENT(IN) :: work
74710 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74711 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74712 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74713 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
74714 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
74715 : REAL(dp), &
74716 : DIMENSION(7*nl_a, 5*nl_b, 9*nl_c, 7*nl_d) :: primitives
74717 : REAL(dp), DIMENSION(10*6*15*10) :: buffer1, buffer2
74718 :
74719 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74720 : kmax, s_offset_a1, s_offset_b1, &
74721 : s_offset_c1, s_offset_d1
74722 :
74723 : s_offset_a1 = 0
74724 : DO ia = 1, nl_a
74725 : s_offset_b1 = 0
74726 : DO ib = 1, nl_b
74727 : s_offset_c1 = 0
74728 : DO ic = 1, nl_c
74729 : s_offset_d1 = 0
74730 : DO id = 1, nl_d
74731 : buffer1 = 0.0_dp
74732 : imax = 6*15*10
74733 : kmax = 10
74734 : DO i = 1, imax
74735 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74736 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74737 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74738 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74739 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74740 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74742 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74743 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74744 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74745 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74746 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74747 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74748 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74749 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74750 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74751 : END DO
74752 : buffer2 = 0.0_dp
74753 : imax = 7*15*10
74754 : kmax = 6
74755 : DO i = 1, imax
74756 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74757 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74758 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74759 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74760 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74761 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74762 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74763 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74764 : END DO
74765 : buffer1 = 0.0_dp
74766 : imax = 7*5*10
74767 : kmax = 15
74768 : DO i = 1, imax
74769 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74770 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74771 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
74772 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74773 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74774 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74775 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
74776 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74777 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
74778 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
74780 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74781 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
74782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74783 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74784 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74785 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
74786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74787 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
74788 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
74789 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
74790 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
74791 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
74792 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
74793 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
74794 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
74795 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
74796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
74797 : END DO
74798 : imax = 7*5*9
74799 : kmax = 10
74800 : i = 0
74801 : DO i1 = 1, 9
74802 : DO i2 = 1, 5
74803 : DO i3 = 1, 7
74804 : i = i + 1
74805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74807 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
74808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74810 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
74811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74813 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74816 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
74817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74819 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
74820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74822 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
74823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74825 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
74826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74828 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
74829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
74830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
74831 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
74832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74834 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
74835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74837 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
74838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74840 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
74841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74843 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
74844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
74846 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
74847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74849 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
74850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
74851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
74852 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
74853 : END DO
74854 : END DO
74855 : END DO
74856 : s_offset_d1 = s_offset_d1 + 7
74857 : END DO
74858 : s_offset_c1 = s_offset_c1 + 9
74859 : END DO
74860 : s_offset_b1 = s_offset_b1 + 5
74861 : END DO
74862 : s_offset_a1 = s_offset_a1 + 7
74863 : END DO
74864 : END SUBROUTINE contract_fdgf
74865 : #endif
74866 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
74867 : ! **************************************************************************************************
74868 : !> \brief ...
74869 : !> \param work ...
74870 : !> \param nl_a ...
74871 : !> \param nl_b ...
74872 : !> \param nl_c ...
74873 : !> \param nl_d ...
74874 : !> \param sphi_a ...
74875 : !> \param sphi_b ...
74876 : !> \param sphi_c ...
74877 : !> \param sphi_d ...
74878 : !> \param primitives ...
74879 : !> \param buffer1 ...
74880 : !> \param buffer2 ...
74881 : ! **************************************************************************************************
74882 : SUBROUTINE contract_fdgg(work, &
74883 : nl_a, nl_b, nl_c, nl_d, &
74884 : sphi_a, sphi_b, sphi_c, sphi_d, &
74885 : primitives, &
74886 : buffer1, buffer2)
74887 : REAL(dp), DIMENSION(10*6*15*15), INTENT(IN) :: work
74888 : INTEGER :: nl_a, nl_b, nl_c, nl_d
74889 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
74890 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
74891 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
74892 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
74893 : REAL(dp), &
74894 : DIMENSION(7*nl_a, 5*nl_b, 9*nl_c, 9*nl_d) :: primitives
74895 : REAL(dp), DIMENSION(10*6*15*15) :: buffer1, buffer2
74896 :
74897 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
74898 : kmax, s_offset_a1, s_offset_b1, &
74899 : s_offset_c1, s_offset_d1
74900 :
74901 : s_offset_a1 = 0
74902 : DO ia = 1, nl_a
74903 : s_offset_b1 = 0
74904 : DO ib = 1, nl_b
74905 : s_offset_c1 = 0
74906 : DO ic = 1, nl_c
74907 : s_offset_d1 = 0
74908 : DO id = 1, nl_d
74909 : buffer1 = 0.0_dp
74910 : imax = 6*15*15
74911 : kmax = 10
74912 : DO i = 1, imax
74913 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
74914 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
74915 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
74916 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
74917 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
74918 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
74919 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
74920 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
74921 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
74922 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
74923 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
74924 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
74925 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
74926 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
74927 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
74928 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
74929 : END DO
74930 : buffer2 = 0.0_dp
74931 : imax = 7*15*15
74932 : kmax = 6
74933 : DO i = 1, imax
74934 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
74935 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
74936 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
74937 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
74938 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
74939 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
74940 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
74941 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
74942 : END DO
74943 : buffer1 = 0.0_dp
74944 : imax = 7*5*15
74945 : kmax = 15
74946 : DO i = 1, imax
74947 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
74948 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
74949 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
74950 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
74951 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
74952 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
74953 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
74954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
74955 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
74956 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
74957 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
74958 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
74959 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
74960 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
74961 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
74962 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
74963 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
74964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
74965 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
74966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
74967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
74968 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
74969 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
74970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
74971 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
74972 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
74973 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
74974 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
74975 : END DO
74976 : imax = 7*5*9
74977 : kmax = 15
74978 : i = 0
74979 : DO i1 = 1, 9
74980 : DO i2 = 1, 5
74981 : DO i3 = 1, 7
74982 : i = i + 1
74983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
74984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
74985 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
74986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
74987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
74988 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
74989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
74990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
74991 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
74992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
74993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
74994 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
74995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
74996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
74997 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
74998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
74999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75000 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
75001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
75002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
75003 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
75004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75006 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
75007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
75008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
75009 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
75010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75012 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
75013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75015 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
75016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75018 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
75019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75021 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
75022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75024 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
75025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75027 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
75028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75030 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
75031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
75032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
75033 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
75034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75036 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
75037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75039 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
75040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75042 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
75043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75045 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
75046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
75047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
75048 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
75049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75051 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
75052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75054 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
75055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75057 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
75058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75060 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
75061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75063 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
75064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75066 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
75067 : END DO
75068 : END DO
75069 : END DO
75070 : s_offset_d1 = s_offset_d1 + 9
75071 : END DO
75072 : s_offset_c1 = s_offset_c1 + 9
75073 : END DO
75074 : s_offset_b1 = s_offset_b1 + 5
75075 : END DO
75076 : s_offset_a1 = s_offset_a1 + 7
75077 : END DO
75078 : END SUBROUTINE contract_fdgg
75079 : #endif
75080 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75081 : ! **************************************************************************************************
75082 : !> \brief ...
75083 : !> \param work ...
75084 : !> \param nl_a ...
75085 : !> \param nl_b ...
75086 : !> \param nl_c ...
75087 : !> \param nl_d ...
75088 : !> \param sphi_a ...
75089 : !> \param sphi_b ...
75090 : !> \param sphi_c ...
75091 : !> \param sphi_d ...
75092 : !> \param primitives ...
75093 : !> \param buffer1 ...
75094 : !> \param buffer2 ...
75095 : ! **************************************************************************************************
75096 : SUBROUTINE contract_ffss(work, &
75097 : nl_a, nl_b, nl_c, nl_d, &
75098 : sphi_a, sphi_b, sphi_c, sphi_d, &
75099 : primitives, &
75100 : buffer1, buffer2)
75101 : REAL(dp), DIMENSION(10*10*1*1), INTENT(IN) :: work
75102 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75103 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75104 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75105 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
75106 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
75107 : REAL(dp), &
75108 : DIMENSION(7*nl_a, 7*nl_b, 1*nl_c, 1*nl_d) :: primitives
75109 : REAL(dp), DIMENSION(10*10*1*1) :: buffer1, buffer2
75110 :
75111 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75112 : kmax, s_offset_a1, s_offset_b1, &
75113 : s_offset_c1, s_offset_d1
75114 :
75115 : s_offset_a1 = 0
75116 : DO ia = 1, nl_a
75117 : s_offset_b1 = 0
75118 : DO ib = 1, nl_b
75119 : s_offset_c1 = 0
75120 : DO ic = 1, nl_c
75121 : s_offset_d1 = 0
75122 : DO id = 1, nl_d
75123 : buffer1 = 0.0_dp
75124 : imax = 10*1*1
75125 : kmax = 10
75126 : DO i = 1, imax
75127 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75128 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75129 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75130 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75131 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75132 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75133 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75134 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75135 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75136 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75137 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75138 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75139 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75140 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75141 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75142 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75143 : END DO
75144 : buffer2 = 0.0_dp
75145 : imax = 7*1*1
75146 : kmax = 10
75147 : DO i = 1, imax
75148 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75149 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75150 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75151 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75152 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75153 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75154 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75155 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75156 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75157 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75158 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75159 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75160 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75161 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75162 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75163 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75164 : END DO
75165 : buffer1 = 0.0_dp
75166 : imax = 7*7*1
75167 : kmax = 1
75168 : DO i = 1, imax
75169 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
75170 : END DO
75171 : imax = 7*7*1
75172 : kmax = 1
75173 : i = 0
75174 : DO i1 = 1, 1
75175 : DO i2 = 1, 7
75176 : DO i3 = 1, 7
75177 : i = i + 1
75178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
75180 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
75181 : END DO
75182 : END DO
75183 : END DO
75184 : s_offset_d1 = s_offset_d1 + 1
75185 : END DO
75186 : s_offset_c1 = s_offset_c1 + 1
75187 : END DO
75188 : s_offset_b1 = s_offset_b1 + 7
75189 : END DO
75190 : s_offset_a1 = s_offset_a1 + 7
75191 : END DO
75192 : END SUBROUTINE contract_ffss
75193 : #endif
75194 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75195 : ! **************************************************************************************************
75196 : !> \brief ...
75197 : !> \param work ...
75198 : !> \param nl_a ...
75199 : !> \param nl_b ...
75200 : !> \param nl_c ...
75201 : !> \param nl_d ...
75202 : !> \param sphi_a ...
75203 : !> \param sphi_b ...
75204 : !> \param sphi_c ...
75205 : !> \param sphi_d ...
75206 : !> \param primitives ...
75207 : !> \param buffer1 ...
75208 : !> \param buffer2 ...
75209 : ! **************************************************************************************************
75210 : SUBROUTINE contract_ffsp(work, &
75211 : nl_a, nl_b, nl_c, nl_d, &
75212 : sphi_a, sphi_b, sphi_c, sphi_d, &
75213 : primitives, &
75214 : buffer1, buffer2)
75215 : REAL(dp), DIMENSION(10*10*1*3), INTENT(IN) :: work
75216 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75217 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75218 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75219 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
75220 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
75221 : REAL(dp), &
75222 : DIMENSION(7*nl_a, 7*nl_b, 1*nl_c, 3*nl_d) :: primitives
75223 : REAL(dp), DIMENSION(10*10*1*3) :: buffer1, buffer2
75224 :
75225 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75226 : kmax, s_offset_a1, s_offset_b1, &
75227 : s_offset_c1, s_offset_d1
75228 :
75229 : s_offset_a1 = 0
75230 : DO ia = 1, nl_a
75231 : s_offset_b1 = 0
75232 : DO ib = 1, nl_b
75233 : s_offset_c1 = 0
75234 : DO ic = 1, nl_c
75235 : s_offset_d1 = 0
75236 : DO id = 1, nl_d
75237 : buffer1 = 0.0_dp
75238 : imax = 10*1*3
75239 : kmax = 10
75240 : DO i = 1, imax
75241 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75242 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75243 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75244 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75245 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75246 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75248 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75249 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75250 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75251 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75252 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75253 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75254 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75255 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75256 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75257 : END DO
75258 : buffer2 = 0.0_dp
75259 : imax = 7*1*3
75260 : kmax = 10
75261 : DO i = 1, imax
75262 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75263 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75264 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75265 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75266 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75267 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75268 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75269 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75270 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75271 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75272 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75273 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75274 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75275 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75276 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75277 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75278 : END DO
75279 : buffer1 = 0.0_dp
75280 : imax = 7*7*3
75281 : kmax = 1
75282 : DO i = 1, imax
75283 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
75284 : END DO
75285 : imax = 7*7*1
75286 : kmax = 3
75287 : i = 0
75288 : DO i1 = 1, 1
75289 : DO i2 = 1, 7
75290 : DO i3 = 1, 7
75291 : i = i + 1
75292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
75294 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
75295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
75297 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
75298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
75300 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
75301 : END DO
75302 : END DO
75303 : END DO
75304 : s_offset_d1 = s_offset_d1 + 3
75305 : END DO
75306 : s_offset_c1 = s_offset_c1 + 1
75307 : END DO
75308 : s_offset_b1 = s_offset_b1 + 7
75309 : END DO
75310 : s_offset_a1 = s_offset_a1 + 7
75311 : END DO
75312 : END SUBROUTINE contract_ffsp
75313 : #endif
75314 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75315 : ! **************************************************************************************************
75316 : !> \brief ...
75317 : !> \param work ...
75318 : !> \param nl_a ...
75319 : !> \param nl_b ...
75320 : !> \param nl_c ...
75321 : !> \param nl_d ...
75322 : !> \param sphi_a ...
75323 : !> \param sphi_b ...
75324 : !> \param sphi_c ...
75325 : !> \param sphi_d ...
75326 : !> \param primitives ...
75327 : !> \param buffer1 ...
75328 : !> \param buffer2 ...
75329 : ! **************************************************************************************************
75330 : SUBROUTINE contract_ffsd(work, &
75331 : nl_a, nl_b, nl_c, nl_d, &
75332 : sphi_a, sphi_b, sphi_c, sphi_d, &
75333 : primitives, &
75334 : buffer1, buffer2)
75335 : REAL(dp), DIMENSION(10*10*1*6), INTENT(IN) :: work
75336 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75337 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75338 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75339 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
75340 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
75341 : REAL(dp), &
75342 : DIMENSION(7*nl_a, 7*nl_b, 1*nl_c, 5*nl_d) :: primitives
75343 : REAL(dp), DIMENSION(10*10*1*6) :: buffer1, buffer2
75344 :
75345 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75346 : kmax, s_offset_a1, s_offset_b1, &
75347 : s_offset_c1, s_offset_d1
75348 :
75349 : s_offset_a1 = 0
75350 : DO ia = 1, nl_a
75351 : s_offset_b1 = 0
75352 : DO ib = 1, nl_b
75353 : s_offset_c1 = 0
75354 : DO ic = 1, nl_c
75355 : s_offset_d1 = 0
75356 : DO id = 1, nl_d
75357 : buffer1 = 0.0_dp
75358 : imax = 10*1*6
75359 : kmax = 10
75360 : DO i = 1, imax
75361 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75362 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75363 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75364 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75365 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75366 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75367 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75368 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75369 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75370 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75371 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75372 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75373 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75374 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75375 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75377 : END DO
75378 : buffer2 = 0.0_dp
75379 : imax = 7*1*6
75380 : kmax = 10
75381 : DO i = 1, imax
75382 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75383 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75384 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75385 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75386 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75387 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75388 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75389 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75391 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75392 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75393 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75394 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75395 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75396 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75397 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75398 : END DO
75399 : buffer1 = 0.0_dp
75400 : imax = 7*7*6
75401 : kmax = 1
75402 : DO i = 1, imax
75403 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
75404 : END DO
75405 : imax = 7*7*1
75406 : kmax = 6
75407 : i = 0
75408 : DO i1 = 1, 1
75409 : DO i2 = 1, 7
75410 : DO i3 = 1, 7
75411 : i = i + 1
75412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75414 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
75415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75417 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
75418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75420 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
75421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75423 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
75424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75426 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
75427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75429 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
75430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75432 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
75433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75435 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
75436 : END DO
75437 : END DO
75438 : END DO
75439 : s_offset_d1 = s_offset_d1 + 5
75440 : END DO
75441 : s_offset_c1 = s_offset_c1 + 1
75442 : END DO
75443 : s_offset_b1 = s_offset_b1 + 7
75444 : END DO
75445 : s_offset_a1 = s_offset_a1 + 7
75446 : END DO
75447 : END SUBROUTINE contract_ffsd
75448 : #endif
75449 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75450 : ! **************************************************************************************************
75451 : !> \brief ...
75452 : !> \param work ...
75453 : !> \param nl_a ...
75454 : !> \param nl_b ...
75455 : !> \param nl_c ...
75456 : !> \param nl_d ...
75457 : !> \param sphi_a ...
75458 : !> \param sphi_b ...
75459 : !> \param sphi_c ...
75460 : !> \param sphi_d ...
75461 : !> \param primitives ...
75462 : !> \param buffer1 ...
75463 : !> \param buffer2 ...
75464 : ! **************************************************************************************************
75465 : SUBROUTINE contract_ffsf(work, &
75466 : nl_a, nl_b, nl_c, nl_d, &
75467 : sphi_a, sphi_b, sphi_c, sphi_d, &
75468 : primitives, &
75469 : buffer1, buffer2)
75470 : REAL(dp), DIMENSION(10*10*1*10), INTENT(IN) :: work
75471 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75472 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75473 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75474 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
75475 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
75476 : REAL(dp), &
75477 : DIMENSION(7*nl_a, 7*nl_b, 1*nl_c, 7*nl_d) :: primitives
75478 : REAL(dp), DIMENSION(10*10*1*10) :: buffer1, buffer2
75479 :
75480 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75481 : kmax, s_offset_a1, s_offset_b1, &
75482 : s_offset_c1, s_offset_d1
75483 :
75484 : s_offset_a1 = 0
75485 : DO ia = 1, nl_a
75486 : s_offset_b1 = 0
75487 : DO ib = 1, nl_b
75488 : s_offset_c1 = 0
75489 : DO ic = 1, nl_c
75490 : s_offset_d1 = 0
75491 : DO id = 1, nl_d
75492 : buffer1 = 0.0_dp
75493 : imax = 10*1*10
75494 : kmax = 10
75495 : DO i = 1, imax
75496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75497 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75498 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75499 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75500 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75501 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75502 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75503 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75504 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75506 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75507 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75508 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75509 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75510 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75511 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75512 : END DO
75513 : buffer2 = 0.0_dp
75514 : imax = 7*1*10
75515 : kmax = 10
75516 : DO i = 1, imax
75517 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75518 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75519 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75520 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75521 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75522 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75523 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75524 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75525 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75526 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75527 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75528 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75529 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75530 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75531 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75532 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75533 : END DO
75534 : buffer1 = 0.0_dp
75535 : imax = 7*7*10
75536 : kmax = 1
75537 : DO i = 1, imax
75538 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
75539 : END DO
75540 : imax = 7*7*1
75541 : kmax = 10
75542 : i = 0
75543 : DO i1 = 1, 1
75544 : DO i2 = 1, 7
75545 : DO i3 = 1, 7
75546 : i = i + 1
75547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75549 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
75550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75552 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
75553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75555 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
75556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75558 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
75559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75561 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
75562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75564 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
75565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75567 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
75568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75570 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
75571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75573 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
75574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75576 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
75577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75579 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
75580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75582 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
75583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75585 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
75586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75588 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
75589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75591 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
75592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75594 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
75595 : END DO
75596 : END DO
75597 : END DO
75598 : s_offset_d1 = s_offset_d1 + 7
75599 : END DO
75600 : s_offset_c1 = s_offset_c1 + 1
75601 : END DO
75602 : s_offset_b1 = s_offset_b1 + 7
75603 : END DO
75604 : s_offset_a1 = s_offset_a1 + 7
75605 : END DO
75606 : END SUBROUTINE contract_ffsf
75607 : #endif
75608 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
75609 : ! **************************************************************************************************
75610 : !> \brief ...
75611 : !> \param work ...
75612 : !> \param nl_a ...
75613 : !> \param nl_b ...
75614 : !> \param nl_c ...
75615 : !> \param nl_d ...
75616 : !> \param sphi_a ...
75617 : !> \param sphi_b ...
75618 : !> \param sphi_c ...
75619 : !> \param sphi_d ...
75620 : !> \param primitives ...
75621 : !> \param buffer1 ...
75622 : !> \param buffer2 ...
75623 : ! **************************************************************************************************
75624 : SUBROUTINE contract_ffsg(work, &
75625 : nl_a, nl_b, nl_c, nl_d, &
75626 : sphi_a, sphi_b, sphi_c, sphi_d, &
75627 : primitives, &
75628 : buffer1, buffer2)
75629 : REAL(dp), DIMENSION(10*10*1*15), INTENT(IN) :: work
75630 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75631 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75632 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75633 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
75634 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
75635 : REAL(dp), &
75636 : DIMENSION(7*nl_a, 7*nl_b, 1*nl_c, 9*nl_d) :: primitives
75637 : REAL(dp), DIMENSION(10*10*1*15) :: buffer1, buffer2
75638 :
75639 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75640 : kmax, s_offset_a1, s_offset_b1, &
75641 : s_offset_c1, s_offset_d1
75642 :
75643 : s_offset_a1 = 0
75644 : DO ia = 1, nl_a
75645 : s_offset_b1 = 0
75646 : DO ib = 1, nl_b
75647 : s_offset_c1 = 0
75648 : DO ic = 1, nl_c
75649 : s_offset_d1 = 0
75650 : DO id = 1, nl_d
75651 : buffer1 = 0.0_dp
75652 : imax = 10*1*15
75653 : kmax = 10
75654 : DO i = 1, imax
75655 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75656 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75657 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75659 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75660 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75661 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75662 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75663 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75664 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75665 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75666 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75667 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75668 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75669 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75670 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75671 : END DO
75672 : buffer2 = 0.0_dp
75673 : imax = 7*1*15
75674 : kmax = 10
75675 : DO i = 1, imax
75676 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75677 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75678 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75679 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75680 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75681 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75682 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75683 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75684 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75685 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75686 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75687 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75688 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75689 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75690 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75691 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75692 : END DO
75693 : buffer1 = 0.0_dp
75694 : imax = 7*7*15
75695 : kmax = 1
75696 : DO i = 1, imax
75697 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
75698 : END DO
75699 : imax = 7*7*1
75700 : kmax = 15
75701 : i = 0
75702 : DO i1 = 1, 1
75703 : DO i2 = 1, 7
75704 : DO i3 = 1, 7
75705 : i = i + 1
75706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75708 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
75709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75711 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
75712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
75713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
75714 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
75715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75717 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
75718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75720 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
75721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75723 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
75724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
75725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
75726 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
75727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75729 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
75730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
75731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
75732 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
75733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75735 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
75736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75738 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
75739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75741 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
75742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75744 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
75745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
75747 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
75748 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75750 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
75751 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75753 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
75754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
75755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
75756 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
75757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
75758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
75759 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
75760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
75761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
75762 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
75763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75765 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
75766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75768 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
75769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
75770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
75771 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
75772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
75773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
75774 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
75775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75777 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
75778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75780 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
75781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
75782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
75783 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
75784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
75785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
75786 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
75787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
75788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
75789 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
75790 : END DO
75791 : END DO
75792 : END DO
75793 : s_offset_d1 = s_offset_d1 + 9
75794 : END DO
75795 : s_offset_c1 = s_offset_c1 + 1
75796 : END DO
75797 : s_offset_b1 = s_offset_b1 + 7
75798 : END DO
75799 : s_offset_a1 = s_offset_a1 + 7
75800 : END DO
75801 : END SUBROUTINE contract_ffsg
75802 : #endif
75803 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75804 : ! **************************************************************************************************
75805 : !> \brief ...
75806 : !> \param work ...
75807 : !> \param nl_a ...
75808 : !> \param nl_b ...
75809 : !> \param nl_c ...
75810 : !> \param nl_d ...
75811 : !> \param sphi_a ...
75812 : !> \param sphi_b ...
75813 : !> \param sphi_c ...
75814 : !> \param sphi_d ...
75815 : !> \param primitives ...
75816 : !> \param buffer1 ...
75817 : !> \param buffer2 ...
75818 : ! **************************************************************************************************
75819 : SUBROUTINE contract_ffps(work, &
75820 : nl_a, nl_b, nl_c, nl_d, &
75821 : sphi_a, sphi_b, sphi_c, sphi_d, &
75822 : primitives, &
75823 : buffer1, buffer2)
75824 : REAL(dp), DIMENSION(10*10*3*1), INTENT(IN) :: work
75825 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75826 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75827 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75828 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
75829 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
75830 : REAL(dp), &
75831 : DIMENSION(7*nl_a, 7*nl_b, 3*nl_c, 1*nl_d) :: primitives
75832 : REAL(dp), DIMENSION(10*10*3*1) :: buffer1, buffer2
75833 :
75834 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75835 : kmax, s_offset_a1, s_offset_b1, &
75836 : s_offset_c1, s_offset_d1
75837 :
75838 : s_offset_a1 = 0
75839 : DO ia = 1, nl_a
75840 : s_offset_b1 = 0
75841 : DO ib = 1, nl_b
75842 : s_offset_c1 = 0
75843 : DO ic = 1, nl_c
75844 : s_offset_d1 = 0
75845 : DO id = 1, nl_d
75846 : buffer1 = 0.0_dp
75847 : imax = 10*3*1
75848 : kmax = 10
75849 : DO i = 1, imax
75850 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75851 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75852 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75853 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75854 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75855 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75856 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75857 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75858 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75859 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75860 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75862 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75863 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75864 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75865 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75866 : END DO
75867 : buffer2 = 0.0_dp
75868 : imax = 7*3*1
75869 : kmax = 10
75870 : DO i = 1, imax
75871 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75872 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75873 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75874 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75875 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75876 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75877 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75878 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75879 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75880 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75881 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75882 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75883 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
75884 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
75885 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
75886 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
75887 : END DO
75888 : buffer1 = 0.0_dp
75889 : imax = 7*7*1
75890 : kmax = 3
75891 : DO i = 1, imax
75892 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
75893 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
75894 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
75895 : END DO
75896 : imax = 7*7*3
75897 : kmax = 1
75898 : i = 0
75899 : DO i1 = 1, 3
75900 : DO i2 = 1, 7
75901 : DO i3 = 1, 7
75902 : i = i + 1
75903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
75904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
75905 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
75906 : END DO
75907 : END DO
75908 : END DO
75909 : s_offset_d1 = s_offset_d1 + 1
75910 : END DO
75911 : s_offset_c1 = s_offset_c1 + 3
75912 : END DO
75913 : s_offset_b1 = s_offset_b1 + 7
75914 : END DO
75915 : s_offset_a1 = s_offset_a1 + 7
75916 : END DO
75917 : END SUBROUTINE contract_ffps
75918 : #endif
75919 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
75920 : ! **************************************************************************************************
75921 : !> \brief ...
75922 : !> \param work ...
75923 : !> \param nl_a ...
75924 : !> \param nl_b ...
75925 : !> \param nl_c ...
75926 : !> \param nl_d ...
75927 : !> \param sphi_a ...
75928 : !> \param sphi_b ...
75929 : !> \param sphi_c ...
75930 : !> \param sphi_d ...
75931 : !> \param primitives ...
75932 : !> \param buffer1 ...
75933 : !> \param buffer2 ...
75934 : ! **************************************************************************************************
75935 : SUBROUTINE contract_ffpp(work, &
75936 : nl_a, nl_b, nl_c, nl_d, &
75937 : sphi_a, sphi_b, sphi_c, sphi_d, &
75938 : primitives, &
75939 : buffer1, buffer2)
75940 : REAL(dp), DIMENSION(10*10*3*3), INTENT(IN) :: work
75941 : INTEGER :: nl_a, nl_b, nl_c, nl_d
75942 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
75943 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
75944 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
75945 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
75946 : REAL(dp), &
75947 : DIMENSION(7*nl_a, 7*nl_b, 3*nl_c, 3*nl_d) :: primitives
75948 : REAL(dp), DIMENSION(10*10*3*3) :: buffer1, buffer2
75949 :
75950 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
75951 : kmax, s_offset_a1, s_offset_b1, &
75952 : s_offset_c1, s_offset_d1
75953 :
75954 : s_offset_a1 = 0
75955 : DO ia = 1, nl_a
75956 : s_offset_b1 = 0
75957 : DO ib = 1, nl_b
75958 : s_offset_c1 = 0
75959 : DO ic = 1, nl_c
75960 : s_offset_d1 = 0
75961 : DO id = 1, nl_d
75962 : buffer1 = 0.0_dp
75963 : imax = 10*3*3
75964 : kmax = 10
75965 : DO i = 1, imax
75966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
75967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
75968 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
75969 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
75970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
75971 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
75972 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
75973 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
75974 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
75975 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
75976 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
75977 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
75978 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
75979 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
75980 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
75981 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
75982 : END DO
75983 : buffer2 = 0.0_dp
75984 : imax = 7*3*3
75985 : kmax = 10
75986 : DO i = 1, imax
75987 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
75988 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
75989 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
75990 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
75991 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
75992 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
75993 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
75994 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
75995 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
75996 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
75997 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
75998 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
75999 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76000 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76001 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76002 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76003 : END DO
76004 : buffer1 = 0.0_dp
76005 : imax = 7*7*3
76006 : kmax = 3
76007 : DO i = 1, imax
76008 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76009 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76010 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
76011 : END DO
76012 : imax = 7*7*3
76013 : kmax = 3
76014 : i = 0
76015 : DO i1 = 1, 3
76016 : DO i2 = 1, 7
76017 : DO i3 = 1, 7
76018 : i = i + 1
76019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
76021 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
76022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
76024 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
76027 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
76028 : END DO
76029 : END DO
76030 : END DO
76031 : s_offset_d1 = s_offset_d1 + 3
76032 : END DO
76033 : s_offset_c1 = s_offset_c1 + 3
76034 : END DO
76035 : s_offset_b1 = s_offset_b1 + 7
76036 : END DO
76037 : s_offset_a1 = s_offset_a1 + 7
76038 : END DO
76039 : END SUBROUTINE contract_ffpp
76040 : #endif
76041 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76042 : ! **************************************************************************************************
76043 : !> \brief ...
76044 : !> \param work ...
76045 : !> \param nl_a ...
76046 : !> \param nl_b ...
76047 : !> \param nl_c ...
76048 : !> \param nl_d ...
76049 : !> \param sphi_a ...
76050 : !> \param sphi_b ...
76051 : !> \param sphi_c ...
76052 : !> \param sphi_d ...
76053 : !> \param primitives ...
76054 : !> \param buffer1 ...
76055 : !> \param buffer2 ...
76056 : ! **************************************************************************************************
76057 : SUBROUTINE contract_ffpd(work, &
76058 : nl_a, nl_b, nl_c, nl_d, &
76059 : sphi_a, sphi_b, sphi_c, sphi_d, &
76060 : primitives, &
76061 : buffer1, buffer2)
76062 : REAL(dp), DIMENSION(10*10*3*6), INTENT(IN) :: work
76063 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76064 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76065 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76066 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
76067 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
76068 : REAL(dp), &
76069 : DIMENSION(7*nl_a, 7*nl_b, 3*nl_c, 5*nl_d) :: primitives
76070 : REAL(dp), DIMENSION(10*10*3*6) :: buffer1, buffer2
76071 :
76072 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76073 : kmax, s_offset_a1, s_offset_b1, &
76074 : s_offset_c1, s_offset_d1
76075 :
76076 : s_offset_a1 = 0
76077 : DO ia = 1, nl_a
76078 : s_offset_b1 = 0
76079 : DO ib = 1, nl_b
76080 : s_offset_c1 = 0
76081 : DO ic = 1, nl_c
76082 : s_offset_d1 = 0
76083 : DO id = 1, nl_d
76084 : buffer1 = 0.0_dp
76085 : imax = 10*3*6
76086 : kmax = 10
76087 : DO i = 1, imax
76088 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76089 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76090 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76091 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76092 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76093 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76094 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76095 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76096 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76097 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76098 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76099 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76100 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76101 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76102 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76103 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76104 : END DO
76105 : buffer2 = 0.0_dp
76106 : imax = 7*3*6
76107 : kmax = 10
76108 : DO i = 1, imax
76109 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76110 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76111 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76112 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76113 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76114 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76115 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76116 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76117 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76118 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76119 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76120 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76121 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76122 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76123 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76124 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76125 : END DO
76126 : buffer1 = 0.0_dp
76127 : imax = 7*7*6
76128 : kmax = 3
76129 : DO i = 1, imax
76130 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76131 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76132 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
76133 : END DO
76134 : imax = 7*7*3
76135 : kmax = 6
76136 : i = 0
76137 : DO i1 = 1, 3
76138 : DO i2 = 1, 7
76139 : DO i3 = 1, 7
76140 : i = i + 1
76141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76143 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
76144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76146 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
76147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76149 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76152 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
76153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76155 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
76156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76158 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
76159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
76161 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
76162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76164 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
76165 : END DO
76166 : END DO
76167 : END DO
76168 : s_offset_d1 = s_offset_d1 + 5
76169 : END DO
76170 : s_offset_c1 = s_offset_c1 + 3
76171 : END DO
76172 : s_offset_b1 = s_offset_b1 + 7
76173 : END DO
76174 : s_offset_a1 = s_offset_a1 + 7
76175 : END DO
76176 : END SUBROUTINE contract_ffpd
76177 : #endif
76178 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76179 : ! **************************************************************************************************
76180 : !> \brief ...
76181 : !> \param work ...
76182 : !> \param nl_a ...
76183 : !> \param nl_b ...
76184 : !> \param nl_c ...
76185 : !> \param nl_d ...
76186 : !> \param sphi_a ...
76187 : !> \param sphi_b ...
76188 : !> \param sphi_c ...
76189 : !> \param sphi_d ...
76190 : !> \param primitives ...
76191 : !> \param buffer1 ...
76192 : !> \param buffer2 ...
76193 : ! **************************************************************************************************
76194 : SUBROUTINE contract_ffpf(work, &
76195 : nl_a, nl_b, nl_c, nl_d, &
76196 : sphi_a, sphi_b, sphi_c, sphi_d, &
76197 : primitives, &
76198 : buffer1, buffer2)
76199 : REAL(dp), DIMENSION(10*10*3*10), INTENT(IN) :: work
76200 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76201 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76202 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76203 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
76204 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
76205 : REAL(dp), &
76206 : DIMENSION(7*nl_a, 7*nl_b, 3*nl_c, 7*nl_d) :: primitives
76207 : REAL(dp), DIMENSION(10*10*3*10) :: buffer1, buffer2
76208 :
76209 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76210 : kmax, s_offset_a1, s_offset_b1, &
76211 : s_offset_c1, s_offset_d1
76212 :
76213 : s_offset_a1 = 0
76214 : DO ia = 1, nl_a
76215 : s_offset_b1 = 0
76216 : DO ib = 1, nl_b
76217 : s_offset_c1 = 0
76218 : DO ic = 1, nl_c
76219 : s_offset_d1 = 0
76220 : DO id = 1, nl_d
76221 : buffer1 = 0.0_dp
76222 : imax = 10*3*10
76223 : kmax = 10
76224 : DO i = 1, imax
76225 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76226 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76227 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76228 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76229 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76230 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76231 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76232 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76233 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76234 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76236 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76237 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76238 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76239 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76240 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76241 : END DO
76242 : buffer2 = 0.0_dp
76243 : imax = 7*3*10
76244 : kmax = 10
76245 : DO i = 1, imax
76246 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76247 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76248 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76249 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76250 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76251 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76252 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76253 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76254 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76255 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76256 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76257 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76258 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76259 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76260 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76261 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76262 : END DO
76263 : buffer1 = 0.0_dp
76264 : imax = 7*7*10
76265 : kmax = 3
76266 : DO i = 1, imax
76267 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76268 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76269 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
76270 : END DO
76271 : imax = 7*7*3
76272 : kmax = 10
76273 : i = 0
76274 : DO i1 = 1, 3
76275 : DO i2 = 1, 7
76276 : DO i3 = 1, 7
76277 : i = i + 1
76278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76280 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
76281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76283 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
76284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76286 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76289 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
76290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76292 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
76293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
76294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
76295 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
76296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76298 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
76299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76301 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
76302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
76304 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
76305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76307 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
76308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76310 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
76311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76313 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
76314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76316 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
76317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
76318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
76319 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
76320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76322 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
76323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76325 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
76326 : END DO
76327 : END DO
76328 : END DO
76329 : s_offset_d1 = s_offset_d1 + 7
76330 : END DO
76331 : s_offset_c1 = s_offset_c1 + 3
76332 : END DO
76333 : s_offset_b1 = s_offset_b1 + 7
76334 : END DO
76335 : s_offset_a1 = s_offset_a1 + 7
76336 : END DO
76337 : END SUBROUTINE contract_ffpf
76338 : #endif
76339 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
76340 : ! **************************************************************************************************
76341 : !> \brief ...
76342 : !> \param work ...
76343 : !> \param nl_a ...
76344 : !> \param nl_b ...
76345 : !> \param nl_c ...
76346 : !> \param nl_d ...
76347 : !> \param sphi_a ...
76348 : !> \param sphi_b ...
76349 : !> \param sphi_c ...
76350 : !> \param sphi_d ...
76351 : !> \param primitives ...
76352 : !> \param buffer1 ...
76353 : !> \param buffer2 ...
76354 : ! **************************************************************************************************
76355 : SUBROUTINE contract_ffpg(work, &
76356 : nl_a, nl_b, nl_c, nl_d, &
76357 : sphi_a, sphi_b, sphi_c, sphi_d, &
76358 : primitives, &
76359 : buffer1, buffer2)
76360 : REAL(dp), DIMENSION(10*10*3*15), INTENT(IN) :: work
76361 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76362 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76363 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76364 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
76365 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
76366 : REAL(dp), &
76367 : DIMENSION(7*nl_a, 7*nl_b, 3*nl_c, 9*nl_d) :: primitives
76368 : REAL(dp), DIMENSION(10*10*3*15) :: buffer1, buffer2
76369 :
76370 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76371 : kmax, s_offset_a1, s_offset_b1, &
76372 : s_offset_c1, s_offset_d1
76373 :
76374 : s_offset_a1 = 0
76375 : DO ia = 1, nl_a
76376 : s_offset_b1 = 0
76377 : DO ib = 1, nl_b
76378 : s_offset_c1 = 0
76379 : DO ic = 1, nl_c
76380 : s_offset_d1 = 0
76381 : DO id = 1, nl_d
76382 : buffer1 = 0.0_dp
76383 : imax = 10*3*15
76384 : kmax = 10
76385 : DO i = 1, imax
76386 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76387 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76388 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76390 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76391 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76392 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76393 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76394 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76396 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76397 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76398 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76399 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76400 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76401 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76402 : END DO
76403 : buffer2 = 0.0_dp
76404 : imax = 7*3*15
76405 : kmax = 10
76406 : DO i = 1, imax
76407 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76408 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76409 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76410 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76411 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76412 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76413 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76414 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76415 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76416 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76417 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76418 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76419 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76420 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76421 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76422 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76423 : END DO
76424 : buffer1 = 0.0_dp
76425 : imax = 7*7*15
76426 : kmax = 3
76427 : DO i = 1, imax
76428 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76429 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76430 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
76431 : END DO
76432 : imax = 7*7*3
76433 : kmax = 15
76434 : i = 0
76435 : DO i1 = 1, 3
76436 : DO i2 = 1, 7
76437 : DO i3 = 1, 7
76438 : i = i + 1
76439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76441 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
76442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76444 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
76445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
76446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
76447 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
76448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76450 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76453 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
76454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
76455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
76456 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
76457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
76458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
76459 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
76460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76462 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
76463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
76464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
76465 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
76466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
76468 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
76469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76471 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
76472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76474 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
76475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76477 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
76478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76480 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
76481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76483 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
76484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
76485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
76486 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
76487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
76488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
76489 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
76490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76492 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
76493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
76494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
76495 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
76496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76498 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
76499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76501 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
76502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
76503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
76504 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
76505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
76507 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
76508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76510 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
76511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76513 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
76514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
76515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
76516 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
76517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76519 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
76520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76522 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
76523 : END DO
76524 : END DO
76525 : END DO
76526 : s_offset_d1 = s_offset_d1 + 9
76527 : END DO
76528 : s_offset_c1 = s_offset_c1 + 3
76529 : END DO
76530 : s_offset_b1 = s_offset_b1 + 7
76531 : END DO
76532 : s_offset_a1 = s_offset_a1 + 7
76533 : END DO
76534 : END SUBROUTINE contract_ffpg
76535 : #endif
76536 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76537 : ! **************************************************************************************************
76538 : !> \brief ...
76539 : !> \param work ...
76540 : !> \param nl_a ...
76541 : !> \param nl_b ...
76542 : !> \param nl_c ...
76543 : !> \param nl_d ...
76544 : !> \param sphi_a ...
76545 : !> \param sphi_b ...
76546 : !> \param sphi_c ...
76547 : !> \param sphi_d ...
76548 : !> \param primitives ...
76549 : !> \param buffer1 ...
76550 : !> \param buffer2 ...
76551 : ! **************************************************************************************************
76552 : SUBROUTINE contract_ffds(work, &
76553 : nl_a, nl_b, nl_c, nl_d, &
76554 : sphi_a, sphi_b, sphi_c, sphi_d, &
76555 : primitives, &
76556 : buffer1, buffer2)
76557 : REAL(dp), DIMENSION(10*10*6*1), INTENT(IN) :: work
76558 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76559 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76560 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76561 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
76562 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
76563 : REAL(dp), &
76564 : DIMENSION(7*nl_a, 7*nl_b, 5*nl_c, 1*nl_d) :: primitives
76565 : REAL(dp), DIMENSION(10*10*6*1) :: buffer1, buffer2
76566 :
76567 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76568 : kmax, s_offset_a1, s_offset_b1, &
76569 : s_offset_c1, s_offset_d1
76570 :
76571 : s_offset_a1 = 0
76572 : DO ia = 1, nl_a
76573 : s_offset_b1 = 0
76574 : DO ib = 1, nl_b
76575 : s_offset_c1 = 0
76576 : DO ic = 1, nl_c
76577 : s_offset_d1 = 0
76578 : DO id = 1, nl_d
76579 : buffer1 = 0.0_dp
76580 : imax = 10*6*1
76581 : kmax = 10
76582 : DO i = 1, imax
76583 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76584 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76585 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76586 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76587 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76588 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76589 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76590 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76591 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76592 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76593 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76594 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76595 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76596 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76597 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76598 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76599 : END DO
76600 : buffer2 = 0.0_dp
76601 : imax = 7*6*1
76602 : kmax = 10
76603 : DO i = 1, imax
76604 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76605 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76606 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76607 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76608 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76609 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76610 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76611 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76612 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76613 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76614 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76615 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76616 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76617 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76618 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76619 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76620 : END DO
76621 : buffer1 = 0.0_dp
76622 : imax = 7*7*1
76623 : kmax = 6
76624 : DO i = 1, imax
76625 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
76627 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76628 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
76629 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
76630 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
76631 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
76632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
76633 : END DO
76634 : imax = 7*7*5
76635 : kmax = 1
76636 : i = 0
76637 : DO i1 = 1, 5
76638 : DO i2 = 1, 7
76639 : DO i3 = 1, 7
76640 : i = i + 1
76641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
76643 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
76644 : END DO
76645 : END DO
76646 : END DO
76647 : s_offset_d1 = s_offset_d1 + 1
76648 : END DO
76649 : s_offset_c1 = s_offset_c1 + 5
76650 : END DO
76651 : s_offset_b1 = s_offset_b1 + 7
76652 : END DO
76653 : s_offset_a1 = s_offset_a1 + 7
76654 : END DO
76655 : END SUBROUTINE contract_ffds
76656 : #endif
76657 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76658 : ! **************************************************************************************************
76659 : !> \brief ...
76660 : !> \param work ...
76661 : !> \param nl_a ...
76662 : !> \param nl_b ...
76663 : !> \param nl_c ...
76664 : !> \param nl_d ...
76665 : !> \param sphi_a ...
76666 : !> \param sphi_b ...
76667 : !> \param sphi_c ...
76668 : !> \param sphi_d ...
76669 : !> \param primitives ...
76670 : !> \param buffer1 ...
76671 : !> \param buffer2 ...
76672 : ! **************************************************************************************************
76673 : SUBROUTINE contract_ffdp(work, &
76674 : nl_a, nl_b, nl_c, nl_d, &
76675 : sphi_a, sphi_b, sphi_c, sphi_d, &
76676 : primitives, &
76677 : buffer1, buffer2)
76678 : REAL(dp), DIMENSION(10*10*6*3), INTENT(IN) :: work
76679 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76680 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76681 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76682 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
76683 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
76684 : REAL(dp), &
76685 : DIMENSION(7*nl_a, 7*nl_b, 5*nl_c, 3*nl_d) :: primitives
76686 : REAL(dp), DIMENSION(10*10*6*3) :: buffer1, buffer2
76687 :
76688 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76689 : kmax, s_offset_a1, s_offset_b1, &
76690 : s_offset_c1, s_offset_d1
76691 :
76692 : s_offset_a1 = 0
76693 : DO ia = 1, nl_a
76694 : s_offset_b1 = 0
76695 : DO ib = 1, nl_b
76696 : s_offset_c1 = 0
76697 : DO ic = 1, nl_c
76698 : s_offset_d1 = 0
76699 : DO id = 1, nl_d
76700 : buffer1 = 0.0_dp
76701 : imax = 10*6*3
76702 : kmax = 10
76703 : DO i = 1, imax
76704 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76705 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76706 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76707 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76708 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76709 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76710 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76711 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76712 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76713 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76714 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76715 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76716 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76717 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76718 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76719 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76720 : END DO
76721 : buffer2 = 0.0_dp
76722 : imax = 7*6*3
76723 : kmax = 10
76724 : DO i = 1, imax
76725 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76726 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76727 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76728 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76729 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76730 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76731 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76732 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76733 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76734 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76735 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76736 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76737 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76738 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76739 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76740 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76741 : END DO
76742 : buffer1 = 0.0_dp
76743 : imax = 7*7*3
76744 : kmax = 6
76745 : DO i = 1, imax
76746 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76747 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
76748 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76749 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
76750 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
76751 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
76752 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
76753 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
76754 : END DO
76755 : imax = 7*7*5
76756 : kmax = 3
76757 : i = 0
76758 : DO i1 = 1, 5
76759 : DO i2 = 1, 7
76760 : DO i3 = 1, 7
76761 : i = i + 1
76762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
76764 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
76765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
76767 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
76770 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
76771 : END DO
76772 : END DO
76773 : END DO
76774 : s_offset_d1 = s_offset_d1 + 3
76775 : END DO
76776 : s_offset_c1 = s_offset_c1 + 5
76777 : END DO
76778 : s_offset_b1 = s_offset_b1 + 7
76779 : END DO
76780 : s_offset_a1 = s_offset_a1 + 7
76781 : END DO
76782 : END SUBROUTINE contract_ffdp
76783 : #endif
76784 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76785 : ! **************************************************************************************************
76786 : !> \brief ...
76787 : !> \param work ...
76788 : !> \param nl_a ...
76789 : !> \param nl_b ...
76790 : !> \param nl_c ...
76791 : !> \param nl_d ...
76792 : !> \param sphi_a ...
76793 : !> \param sphi_b ...
76794 : !> \param sphi_c ...
76795 : !> \param sphi_d ...
76796 : !> \param primitives ...
76797 : !> \param buffer1 ...
76798 : !> \param buffer2 ...
76799 : ! **************************************************************************************************
76800 : SUBROUTINE contract_ffdd(work, &
76801 : nl_a, nl_b, nl_c, nl_d, &
76802 : sphi_a, sphi_b, sphi_c, sphi_d, &
76803 : primitives, &
76804 : buffer1, buffer2)
76805 : REAL(dp), DIMENSION(10*10*6*6), INTENT(IN) :: work
76806 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76807 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76808 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76809 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
76810 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
76811 : REAL(dp), &
76812 : DIMENSION(7*nl_a, 7*nl_b, 5*nl_c, 5*nl_d) :: primitives
76813 : REAL(dp), DIMENSION(10*10*6*6) :: buffer1, buffer2
76814 :
76815 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76816 : kmax, s_offset_a1, s_offset_b1, &
76817 : s_offset_c1, s_offset_d1
76818 :
76819 : s_offset_a1 = 0
76820 : DO ia = 1, nl_a
76821 : s_offset_b1 = 0
76822 : DO ib = 1, nl_b
76823 : s_offset_c1 = 0
76824 : DO ic = 1, nl_c
76825 : s_offset_d1 = 0
76826 : DO id = 1, nl_d
76827 : buffer1 = 0.0_dp
76828 : imax = 10*6*6
76829 : kmax = 10
76830 : DO i = 1, imax
76831 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76832 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76833 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76834 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76835 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76836 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76837 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76838 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76839 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76841 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76842 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76843 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76844 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76845 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76846 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76847 : END DO
76848 : buffer2 = 0.0_dp
76849 : imax = 7*6*6
76850 : kmax = 10
76851 : DO i = 1, imax
76852 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76853 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76854 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76855 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76856 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76857 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
76858 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
76859 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
76860 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
76861 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
76862 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
76863 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
76864 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
76865 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
76866 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
76867 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
76868 : END DO
76869 : buffer1 = 0.0_dp
76870 : imax = 7*7*6
76871 : kmax = 6
76872 : DO i = 1, imax
76873 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
76874 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
76875 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
76876 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
76877 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
76878 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
76879 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
76880 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
76881 : END DO
76882 : imax = 7*7*5
76883 : kmax = 6
76884 : i = 0
76885 : DO i1 = 1, 5
76886 : DO i2 = 1, 7
76887 : DO i3 = 1, 7
76888 : i = i + 1
76889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76891 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
76892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76894 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
76895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
76896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
76897 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
76898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
76899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
76900 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
76901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76903 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
76904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
76905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
76906 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
76907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
76908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
76909 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
76910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
76911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
76912 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
76913 : END DO
76914 : END DO
76915 : END DO
76916 : s_offset_d1 = s_offset_d1 + 5
76917 : END DO
76918 : s_offset_c1 = s_offset_c1 + 5
76919 : END DO
76920 : s_offset_b1 = s_offset_b1 + 7
76921 : END DO
76922 : s_offset_a1 = s_offset_a1 + 7
76923 : END DO
76924 : END SUBROUTINE contract_ffdd
76925 : #endif
76926 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
76927 : ! **************************************************************************************************
76928 : !> \brief ...
76929 : !> \param work ...
76930 : !> \param nl_a ...
76931 : !> \param nl_b ...
76932 : !> \param nl_c ...
76933 : !> \param nl_d ...
76934 : !> \param sphi_a ...
76935 : !> \param sphi_b ...
76936 : !> \param sphi_c ...
76937 : !> \param sphi_d ...
76938 : !> \param primitives ...
76939 : !> \param buffer1 ...
76940 : !> \param buffer2 ...
76941 : ! **************************************************************************************************
76942 : SUBROUTINE contract_ffdf(work, &
76943 : nl_a, nl_b, nl_c, nl_d, &
76944 : sphi_a, sphi_b, sphi_c, sphi_d, &
76945 : primitives, &
76946 : buffer1, buffer2)
76947 : REAL(dp), DIMENSION(10*10*6*10), INTENT(IN) :: work
76948 : INTEGER :: nl_a, nl_b, nl_c, nl_d
76949 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
76950 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
76951 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
76952 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
76953 : REAL(dp), &
76954 : DIMENSION(7*nl_a, 7*nl_b, 5*nl_c, 7*nl_d) :: primitives
76955 : REAL(dp), DIMENSION(10*10*6*10) :: buffer1, buffer2
76956 :
76957 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
76958 : kmax, s_offset_a1, s_offset_b1, &
76959 : s_offset_c1, s_offset_d1
76960 :
76961 : s_offset_a1 = 0
76962 : DO ia = 1, nl_a
76963 : s_offset_b1 = 0
76964 : DO ib = 1, nl_b
76965 : s_offset_c1 = 0
76966 : DO ic = 1, nl_c
76967 : s_offset_d1 = 0
76968 : DO id = 1, nl_d
76969 : buffer1 = 0.0_dp
76970 : imax = 10*6*10
76971 : kmax = 10
76972 : DO i = 1, imax
76973 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
76974 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
76975 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
76976 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
76977 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
76978 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
76979 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
76980 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
76981 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
76982 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
76983 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
76984 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
76985 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
76986 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
76987 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
76988 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
76989 : END DO
76990 : buffer2 = 0.0_dp
76991 : imax = 7*6*10
76992 : kmax = 10
76993 : DO i = 1, imax
76994 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
76995 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
76996 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
76997 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
76998 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
76999 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77000 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77001 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77002 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77003 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77004 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77005 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77006 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77007 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77008 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77009 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77010 : END DO
77011 : buffer1 = 0.0_dp
77012 : imax = 7*7*10
77013 : kmax = 6
77014 : DO i = 1, imax
77015 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
77016 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77017 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77018 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77019 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
77020 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77021 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77022 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
77023 : END DO
77024 : imax = 7*7*5
77025 : kmax = 10
77026 : i = 0
77027 : DO i1 = 1, 5
77028 : DO i2 = 1, 7
77029 : DO i3 = 1, 7
77030 : i = i + 1
77031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77033 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
77034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77036 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
77037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77039 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
77040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77042 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
77043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77045 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
77046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77048 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
77049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77051 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
77052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77054 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
77055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
77057 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
77058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77060 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
77061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77063 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
77064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77066 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
77067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77069 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
77070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77072 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
77073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77075 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
77076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77078 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
77079 : END DO
77080 : END DO
77081 : END DO
77082 : s_offset_d1 = s_offset_d1 + 7
77083 : END DO
77084 : s_offset_c1 = s_offset_c1 + 5
77085 : END DO
77086 : s_offset_b1 = s_offset_b1 + 7
77087 : END DO
77088 : s_offset_a1 = s_offset_a1 + 7
77089 : END DO
77090 : END SUBROUTINE contract_ffdf
77091 : #endif
77092 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
77093 : ! **************************************************************************************************
77094 : !> \brief ...
77095 : !> \param work ...
77096 : !> \param nl_a ...
77097 : !> \param nl_b ...
77098 : !> \param nl_c ...
77099 : !> \param nl_d ...
77100 : !> \param sphi_a ...
77101 : !> \param sphi_b ...
77102 : !> \param sphi_c ...
77103 : !> \param sphi_d ...
77104 : !> \param primitives ...
77105 : !> \param buffer1 ...
77106 : !> \param buffer2 ...
77107 : ! **************************************************************************************************
77108 : SUBROUTINE contract_ffdg(work, &
77109 : nl_a, nl_b, nl_c, nl_d, &
77110 : sphi_a, sphi_b, sphi_c, sphi_d, &
77111 : primitives, &
77112 : buffer1, buffer2)
77113 : REAL(dp), DIMENSION(10*10*6*15), INTENT(IN) :: work
77114 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77115 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77116 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77117 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
77118 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
77119 : REAL(dp), &
77120 : DIMENSION(7*nl_a, 7*nl_b, 5*nl_c, 9*nl_d) :: primitives
77121 : REAL(dp), DIMENSION(10*10*6*15) :: buffer1, buffer2
77122 :
77123 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77124 : kmax, s_offset_a1, s_offset_b1, &
77125 : s_offset_c1, s_offset_d1
77126 :
77127 : s_offset_a1 = 0
77128 : DO ia = 1, nl_a
77129 : s_offset_b1 = 0
77130 : DO ib = 1, nl_b
77131 : s_offset_c1 = 0
77132 : DO ic = 1, nl_c
77133 : s_offset_d1 = 0
77134 : DO id = 1, nl_d
77135 : buffer1 = 0.0_dp
77136 : imax = 10*6*15
77137 : kmax = 10
77138 : DO i = 1, imax
77139 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77140 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77141 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77142 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77143 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77144 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77145 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77146 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77147 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77149 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77150 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77151 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77152 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77153 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77154 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77155 : END DO
77156 : buffer2 = 0.0_dp
77157 : imax = 7*6*15
77158 : kmax = 10
77159 : DO i = 1, imax
77160 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77161 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77162 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77163 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77164 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77165 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77166 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77167 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77168 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77169 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77170 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77171 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77172 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77173 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77174 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77175 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77176 : END DO
77177 : buffer1 = 0.0_dp
77178 : imax = 7*7*15
77179 : kmax = 6
77180 : DO i = 1, imax
77181 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
77182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77183 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77184 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77185 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
77186 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77187 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77188 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
77189 : END DO
77190 : imax = 7*7*5
77191 : kmax = 15
77192 : i = 0
77193 : DO i1 = 1, 5
77194 : DO i2 = 1, 7
77195 : DO i3 = 1, 7
77196 : i = i + 1
77197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77199 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
77200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77202 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
77203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
77204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
77205 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
77206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77208 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
77209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77211 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
77212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77214 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
77215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
77216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
77217 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
77218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77220 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
77221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
77222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
77223 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
77224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
77226 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
77227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77229 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
77230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77232 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
77233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77235 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
77236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77238 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
77239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77241 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
77242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77244 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
77245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
77246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
77247 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
77248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77250 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
77251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77253 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
77254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77256 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
77257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77259 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
77260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
77261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
77262 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
77263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
77265 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
77266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77268 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
77269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77271 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
77272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77274 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
77275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77277 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
77278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77280 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
77281 : END DO
77282 : END DO
77283 : END DO
77284 : s_offset_d1 = s_offset_d1 + 9
77285 : END DO
77286 : s_offset_c1 = s_offset_c1 + 5
77287 : END DO
77288 : s_offset_b1 = s_offset_b1 + 7
77289 : END DO
77290 : s_offset_a1 = s_offset_a1 + 7
77291 : END DO
77292 : END SUBROUTINE contract_ffdg
77293 : #endif
77294 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
77295 : ! **************************************************************************************************
77296 : !> \brief ...
77297 : !> \param work ...
77298 : !> \param nl_a ...
77299 : !> \param nl_b ...
77300 : !> \param nl_c ...
77301 : !> \param nl_d ...
77302 : !> \param sphi_a ...
77303 : !> \param sphi_b ...
77304 : !> \param sphi_c ...
77305 : !> \param sphi_d ...
77306 : !> \param primitives ...
77307 : !> \param buffer1 ...
77308 : !> \param buffer2 ...
77309 : ! **************************************************************************************************
77310 : SUBROUTINE contract_fffs(work, &
77311 : nl_a, nl_b, nl_c, nl_d, &
77312 : sphi_a, sphi_b, sphi_c, sphi_d, &
77313 : primitives, &
77314 : buffer1, buffer2)
77315 : REAL(dp), DIMENSION(10*10*10*1), INTENT(IN) :: work
77316 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77317 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77318 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77319 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
77320 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
77321 : REAL(dp), &
77322 : DIMENSION(7*nl_a, 7*nl_b, 7*nl_c, 1*nl_d) :: primitives
77323 : REAL(dp), DIMENSION(10*10*10*1) :: buffer1, buffer2
77324 :
77325 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77326 : kmax, s_offset_a1, s_offset_b1, &
77327 : s_offset_c1, s_offset_d1
77328 :
77329 : s_offset_a1 = 0
77330 : DO ia = 1, nl_a
77331 : s_offset_b1 = 0
77332 : DO ib = 1, nl_b
77333 : s_offset_c1 = 0
77334 : DO ic = 1, nl_c
77335 : s_offset_d1 = 0
77336 : DO id = 1, nl_d
77337 : buffer1 = 0.0_dp
77338 : imax = 10*10*1
77339 : kmax = 10
77340 : DO i = 1, imax
77341 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77342 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77343 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77344 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77346 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77347 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77348 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77349 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77351 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77352 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77353 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77354 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77355 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77356 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77357 : END DO
77358 : buffer2 = 0.0_dp
77359 : imax = 7*10*1
77360 : kmax = 10
77361 : DO i = 1, imax
77362 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77363 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77364 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77365 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77366 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77367 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77368 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77369 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77370 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77371 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77372 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77373 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77374 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77375 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77376 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77377 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77378 : END DO
77379 : buffer1 = 0.0_dp
77380 : imax = 7*7*1
77381 : kmax = 10
77382 : DO i = 1, imax
77383 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77384 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
77385 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77386 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
77387 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77388 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
77389 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77390 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
77391 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77392 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
77393 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
77394 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
77395 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
77396 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
77397 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
77398 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
77399 : END DO
77400 : imax = 7*7*7
77401 : kmax = 1
77402 : i = 0
77403 : DO i1 = 1, 7
77404 : DO i2 = 1, 7
77405 : DO i3 = 1, 7
77406 : i = i + 1
77407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
77409 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
77410 : END DO
77411 : END DO
77412 : END DO
77413 : s_offset_d1 = s_offset_d1 + 1
77414 : END DO
77415 : s_offset_c1 = s_offset_c1 + 7
77416 : END DO
77417 : s_offset_b1 = s_offset_b1 + 7
77418 : END DO
77419 : s_offset_a1 = s_offset_a1 + 7
77420 : END DO
77421 : END SUBROUTINE contract_fffs
77422 : #endif
77423 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
77424 : ! **************************************************************************************************
77425 : !> \brief ...
77426 : !> \param work ...
77427 : !> \param nl_a ...
77428 : !> \param nl_b ...
77429 : !> \param nl_c ...
77430 : !> \param nl_d ...
77431 : !> \param sphi_a ...
77432 : !> \param sphi_b ...
77433 : !> \param sphi_c ...
77434 : !> \param sphi_d ...
77435 : !> \param primitives ...
77436 : !> \param buffer1 ...
77437 : !> \param buffer2 ...
77438 : ! **************************************************************************************************
77439 : SUBROUTINE contract_fffp(work, &
77440 : nl_a, nl_b, nl_c, nl_d, &
77441 : sphi_a, sphi_b, sphi_c, sphi_d, &
77442 : primitives, &
77443 : buffer1, buffer2)
77444 : REAL(dp), DIMENSION(10*10*10*3), INTENT(IN) :: work
77445 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77446 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77447 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77448 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
77449 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
77450 : REAL(dp), &
77451 : DIMENSION(7*nl_a, 7*nl_b, 7*nl_c, 3*nl_d) :: primitives
77452 : REAL(dp), DIMENSION(10*10*10*3) :: buffer1, buffer2
77453 :
77454 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77455 : kmax, s_offset_a1, s_offset_b1, &
77456 : s_offset_c1, s_offset_d1
77457 :
77458 : s_offset_a1 = 0
77459 : DO ia = 1, nl_a
77460 : s_offset_b1 = 0
77461 : DO ib = 1, nl_b
77462 : s_offset_c1 = 0
77463 : DO ic = 1, nl_c
77464 : s_offset_d1 = 0
77465 : DO id = 1, nl_d
77466 : buffer1 = 0.0_dp
77467 : imax = 10*10*3
77468 : kmax = 10
77469 : DO i = 1, imax
77470 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77471 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77472 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77474 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77475 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77476 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77477 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77478 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77479 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77480 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77481 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77482 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77483 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77484 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77485 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77486 : END DO
77487 : buffer2 = 0.0_dp
77488 : imax = 7*10*3
77489 : kmax = 10
77490 : DO i = 1, imax
77491 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77492 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77493 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77494 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77495 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77496 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77497 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77498 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77499 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77500 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77501 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77502 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77503 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77504 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77505 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77506 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77507 : END DO
77508 : buffer1 = 0.0_dp
77509 : imax = 7*7*3
77510 : kmax = 10
77511 : DO i = 1, imax
77512 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77513 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
77514 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77515 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
77516 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77517 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
77518 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77519 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
77520 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77521 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
77522 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
77523 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
77524 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
77525 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
77526 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
77527 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
77528 : END DO
77529 : imax = 7*7*7
77530 : kmax = 3
77531 : i = 0
77532 : DO i1 = 1, 7
77533 : DO i2 = 1, 7
77534 : DO i3 = 1, 7
77535 : i = i + 1
77536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
77538 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
77539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
77541 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
77542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
77544 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
77545 : END DO
77546 : END DO
77547 : END DO
77548 : s_offset_d1 = s_offset_d1 + 3
77549 : END DO
77550 : s_offset_c1 = s_offset_c1 + 7
77551 : END DO
77552 : s_offset_b1 = s_offset_b1 + 7
77553 : END DO
77554 : s_offset_a1 = s_offset_a1 + 7
77555 : END DO
77556 : END SUBROUTINE contract_fffp
77557 : #endif
77558 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
77559 : ! **************************************************************************************************
77560 : !> \brief ...
77561 : !> \param work ...
77562 : !> \param nl_a ...
77563 : !> \param nl_b ...
77564 : !> \param nl_c ...
77565 : !> \param nl_d ...
77566 : !> \param sphi_a ...
77567 : !> \param sphi_b ...
77568 : !> \param sphi_c ...
77569 : !> \param sphi_d ...
77570 : !> \param primitives ...
77571 : !> \param buffer1 ...
77572 : !> \param buffer2 ...
77573 : ! **************************************************************************************************
77574 : SUBROUTINE contract_fffd(work, &
77575 : nl_a, nl_b, nl_c, nl_d, &
77576 : sphi_a, sphi_b, sphi_c, sphi_d, &
77577 : primitives, &
77578 : buffer1, buffer2)
77579 : REAL(dp), DIMENSION(10*10*10*6), INTENT(IN) :: work
77580 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77581 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77582 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77583 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
77584 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
77585 : REAL(dp), &
77586 : DIMENSION(7*nl_a, 7*nl_b, 7*nl_c, 5*nl_d) :: primitives
77587 : REAL(dp), DIMENSION(10*10*10*6) :: buffer1, buffer2
77588 :
77589 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77590 : kmax, s_offset_a1, s_offset_b1, &
77591 : s_offset_c1, s_offset_d1
77592 :
77593 : s_offset_a1 = 0
77594 : DO ia = 1, nl_a
77595 : s_offset_b1 = 0
77596 : DO ib = 1, nl_b
77597 : s_offset_c1 = 0
77598 : DO ic = 1, nl_c
77599 : s_offset_d1 = 0
77600 : DO id = 1, nl_d
77601 : buffer1 = 0.0_dp
77602 : imax = 10*10*6
77603 : kmax = 10
77604 : DO i = 1, imax
77605 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77606 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77607 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77608 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77609 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77610 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77611 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77612 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77613 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77614 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77615 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77616 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77617 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77618 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77619 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77620 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77621 : END DO
77622 : buffer2 = 0.0_dp
77623 : imax = 7*10*6
77624 : kmax = 10
77625 : DO i = 1, imax
77626 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77627 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77628 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77629 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77630 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77631 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77632 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77633 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77634 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77635 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77636 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77637 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77638 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77639 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77640 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77641 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77642 : END DO
77643 : buffer1 = 0.0_dp
77644 : imax = 7*7*6
77645 : kmax = 10
77646 : DO i = 1, imax
77647 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77648 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
77649 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77650 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
77651 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77652 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
77653 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77654 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
77655 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77656 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
77657 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
77658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
77659 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
77660 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
77661 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
77662 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
77663 : END DO
77664 : imax = 7*7*7
77665 : kmax = 6
77666 : i = 0
77667 : DO i1 = 1, 7
77668 : DO i2 = 1, 7
77669 : DO i3 = 1, 7
77670 : i = i + 1
77671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77673 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
77674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77676 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
77677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77679 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
77680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77682 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
77683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77685 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
77686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77688 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
77689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
77691 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
77692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77694 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
77695 : END DO
77696 : END DO
77697 : END DO
77698 : s_offset_d1 = s_offset_d1 + 5
77699 : END DO
77700 : s_offset_c1 = s_offset_c1 + 7
77701 : END DO
77702 : s_offset_b1 = s_offset_b1 + 7
77703 : END DO
77704 : s_offset_a1 = s_offset_a1 + 7
77705 : END DO
77706 : END SUBROUTINE contract_fffd
77707 : #endif
77708 : #if __MAX_CONTR > 3 || __MAX_CONTR == 3
77709 : ! **************************************************************************************************
77710 : !> \brief ...
77711 : !> \param work ...
77712 : !> \param nl_a ...
77713 : !> \param nl_b ...
77714 : !> \param nl_c ...
77715 : !> \param nl_d ...
77716 : !> \param sphi_a ...
77717 : !> \param sphi_b ...
77718 : !> \param sphi_c ...
77719 : !> \param sphi_d ...
77720 : !> \param primitives ...
77721 : !> \param buffer1 ...
77722 : !> \param buffer2 ...
77723 : ! **************************************************************************************************
77724 : SUBROUTINE contract_ffff(work, &
77725 : nl_a, nl_b, nl_c, nl_d, &
77726 : sphi_a, sphi_b, sphi_c, sphi_d, &
77727 : primitives, &
77728 : buffer1, buffer2)
77729 : REAL(dp), DIMENSION(10*10*10*10), INTENT(IN) :: work
77730 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77731 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77732 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77733 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
77734 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
77735 : REAL(dp), &
77736 : DIMENSION(7*nl_a, 7*nl_b, 7*nl_c, 7*nl_d) :: primitives
77737 : REAL(dp), DIMENSION(10*10*10*10) :: buffer1, buffer2
77738 :
77739 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77740 : kmax, s_offset_a1, s_offset_b1, &
77741 : s_offset_c1, s_offset_d1
77742 :
77743 : s_offset_a1 = 0
77744 : DO ia = 1, nl_a
77745 : s_offset_b1 = 0
77746 : DO ib = 1, nl_b
77747 : s_offset_c1 = 0
77748 : DO ic = 1, nl_c
77749 : s_offset_d1 = 0
77750 : DO id = 1, nl_d
77751 : buffer1 = 0.0_dp
77752 : imax = 10*10*10
77753 : kmax = 10
77754 : DO i = 1, imax
77755 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77756 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77757 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77758 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77759 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77760 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77761 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77762 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77763 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77764 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77765 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77766 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77767 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77768 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77769 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77770 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77771 : END DO
77772 : buffer2 = 0.0_dp
77773 : imax = 7*10*10
77774 : kmax = 10
77775 : DO i = 1, imax
77776 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77777 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77778 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77779 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77780 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77781 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77782 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77783 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77784 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77785 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77786 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77787 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77788 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77789 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77790 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77791 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77792 : END DO
77793 : buffer1 = 0.0_dp
77794 : imax = 7*7*10
77795 : kmax = 10
77796 : DO i = 1, imax
77797 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77798 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
77799 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77800 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
77801 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77802 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
77803 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77804 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
77805 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
77807 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
77808 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
77809 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
77810 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
77811 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
77812 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
77813 : END DO
77814 : imax = 7*7*7
77815 : kmax = 10
77816 : i = 0
77817 : DO i1 = 1, 7
77818 : DO i2 = 1, 7
77819 : DO i3 = 1, 7
77820 : i = i + 1
77821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77823 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
77824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77826 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
77827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77829 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
77830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77832 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
77833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77835 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
77836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77838 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
77839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77841 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
77842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
77844 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
77845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
77846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
77847 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
77848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77850 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
77851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
77852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
77853 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
77854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77856 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
77857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77859 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
77860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
77861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
77862 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
77863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
77864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
77865 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
77866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
77867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
77868 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
77869 : END DO
77870 : END DO
77871 : END DO
77872 : s_offset_d1 = s_offset_d1 + 7
77873 : END DO
77874 : s_offset_c1 = s_offset_c1 + 7
77875 : END DO
77876 : s_offset_b1 = s_offset_b1 + 7
77877 : END DO
77878 : s_offset_a1 = s_offset_a1 + 7
77879 : END DO
77880 : END SUBROUTINE contract_ffff
77881 : #endif
77882 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
77883 : ! **************************************************************************************************
77884 : !> \brief ...
77885 : !> \param work ...
77886 : !> \param nl_a ...
77887 : !> \param nl_b ...
77888 : !> \param nl_c ...
77889 : !> \param nl_d ...
77890 : !> \param sphi_a ...
77891 : !> \param sphi_b ...
77892 : !> \param sphi_c ...
77893 : !> \param sphi_d ...
77894 : !> \param primitives ...
77895 : !> \param buffer1 ...
77896 : !> \param buffer2 ...
77897 : ! **************************************************************************************************
77898 : SUBROUTINE contract_fffg(work, &
77899 : nl_a, nl_b, nl_c, nl_d, &
77900 : sphi_a, sphi_b, sphi_c, sphi_d, &
77901 : primitives, &
77902 : buffer1, buffer2)
77903 : REAL(dp), DIMENSION(10*10*10*15), INTENT(IN) :: work
77904 : INTEGER :: nl_a, nl_b, nl_c, nl_d
77905 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
77906 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
77907 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
77908 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
77909 : REAL(dp), &
77910 : DIMENSION(7*nl_a, 7*nl_b, 7*nl_c, 9*nl_d) :: primitives
77911 : REAL(dp), DIMENSION(10*10*10*15) :: buffer1, buffer2
77912 :
77913 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
77914 : kmax, s_offset_a1, s_offset_b1, &
77915 : s_offset_c1, s_offset_d1
77916 :
77917 : s_offset_a1 = 0
77918 : DO ia = 1, nl_a
77919 : s_offset_b1 = 0
77920 : DO ib = 1, nl_b
77921 : s_offset_c1 = 0
77922 : DO ic = 1, nl_c
77923 : s_offset_d1 = 0
77924 : DO id = 1, nl_d
77925 : buffer1 = 0.0_dp
77926 : imax = 10*10*15
77927 : kmax = 10
77928 : DO i = 1, imax
77929 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
77930 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
77931 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
77932 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
77933 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
77934 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
77935 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
77936 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
77937 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
77938 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
77939 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
77940 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
77941 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
77942 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
77943 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
77944 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
77945 : END DO
77946 : buffer2 = 0.0_dp
77947 : imax = 7*10*15
77948 : kmax = 10
77949 : DO i = 1, imax
77950 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
77951 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
77952 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
77953 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
77954 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
77955 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
77956 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
77957 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
77958 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
77959 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
77960 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
77961 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
77962 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
77963 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
77964 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
77965 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
77966 : END DO
77967 : buffer1 = 0.0_dp
77968 : imax = 7*7*15
77969 : kmax = 10
77970 : DO i = 1, imax
77971 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
77972 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
77973 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
77974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
77975 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
77976 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
77977 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
77978 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
77979 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
77980 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
77981 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
77982 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
77983 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
77984 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
77985 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
77986 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
77987 : END DO
77988 : imax = 7*7*7
77989 : kmax = 15
77990 : i = 0
77991 : DO i1 = 1, 7
77992 : DO i2 = 1, 7
77993 : DO i3 = 1, 7
77994 : i = i + 1
77995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
77996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
77997 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
77998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
77999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78000 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
78001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78003 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
78004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78006 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
78007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78009 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
78010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78012 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
78013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
78014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
78015 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
78016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78018 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
78019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78021 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
78022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78024 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
78025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78027 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
78028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78030 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
78031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78033 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
78034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78036 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
78037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78039 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
78040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78042 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
78043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
78044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
78045 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
78046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78048 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
78049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78051 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
78052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78054 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
78055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78057 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
78058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78060 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
78061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78063 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
78064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78066 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
78067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78069 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
78070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78072 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
78073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78075 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
78076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78078 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
78079 : END DO
78080 : END DO
78081 : END DO
78082 : s_offset_d1 = s_offset_d1 + 9
78083 : END DO
78084 : s_offset_c1 = s_offset_c1 + 7
78085 : END DO
78086 : s_offset_b1 = s_offset_b1 + 7
78087 : END DO
78088 : s_offset_a1 = s_offset_a1 + 7
78089 : END DO
78090 : END SUBROUTINE contract_fffg
78091 : #endif
78092 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78093 : ! **************************************************************************************************
78094 : !> \brief ...
78095 : !> \param work ...
78096 : !> \param nl_a ...
78097 : !> \param nl_b ...
78098 : !> \param nl_c ...
78099 : !> \param nl_d ...
78100 : !> \param sphi_a ...
78101 : !> \param sphi_b ...
78102 : !> \param sphi_c ...
78103 : !> \param sphi_d ...
78104 : !> \param primitives ...
78105 : !> \param buffer1 ...
78106 : !> \param buffer2 ...
78107 : ! **************************************************************************************************
78108 : SUBROUTINE contract_ffgs(work, &
78109 : nl_a, nl_b, nl_c, nl_d, &
78110 : sphi_a, sphi_b, sphi_c, sphi_d, &
78111 : primitives, &
78112 : buffer1, buffer2)
78113 : REAL(dp), DIMENSION(10*10*15*1), INTENT(IN) :: work
78114 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78115 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78116 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
78117 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
78118 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
78119 : REAL(dp), &
78120 : DIMENSION(7*nl_a, 7*nl_b, 9*nl_c, 1*nl_d) :: primitives
78121 : REAL(dp), DIMENSION(10*10*15*1) :: buffer1, buffer2
78122 :
78123 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78124 : kmax, s_offset_a1, s_offset_b1, &
78125 : s_offset_c1, s_offset_d1
78126 :
78127 : s_offset_a1 = 0
78128 : DO ia = 1, nl_a
78129 : s_offset_b1 = 0
78130 : DO ib = 1, nl_b
78131 : s_offset_c1 = 0
78132 : DO ic = 1, nl_c
78133 : s_offset_d1 = 0
78134 : DO id = 1, nl_d
78135 : buffer1 = 0.0_dp
78136 : imax = 10*15*1
78137 : kmax = 10
78138 : DO i = 1, imax
78139 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78140 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78141 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
78142 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
78143 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
78144 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
78145 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
78146 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
78147 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
78148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
78149 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
78150 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
78151 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
78152 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
78153 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
78154 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
78155 : END DO
78156 : buffer2 = 0.0_dp
78157 : imax = 7*15*1
78158 : kmax = 10
78159 : DO i = 1, imax
78160 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
78161 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
78162 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
78163 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
78164 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
78165 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
78166 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
78167 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
78168 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
78169 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
78170 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
78171 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
78172 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
78173 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
78174 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
78175 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
78176 : END DO
78177 : buffer1 = 0.0_dp
78178 : imax = 7*7*1
78179 : kmax = 15
78180 : DO i = 1, imax
78181 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
78182 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
78183 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
78184 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
78185 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
78186 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
78187 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
78188 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
78189 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
78190 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
78191 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
78192 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
78193 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
78194 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
78195 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
78196 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
78197 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
78198 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
78199 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
78200 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
78201 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
78202 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
78203 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
78204 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
78205 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
78206 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
78207 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
78208 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
78209 : END DO
78210 : imax = 7*7*9
78211 : kmax = 1
78212 : i = 0
78213 : DO i1 = 1, 9
78214 : DO i2 = 1, 7
78215 : DO i3 = 1, 7
78216 : i = i + 1
78217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
78219 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
78220 : END DO
78221 : END DO
78222 : END DO
78223 : s_offset_d1 = s_offset_d1 + 1
78224 : END DO
78225 : s_offset_c1 = s_offset_c1 + 9
78226 : END DO
78227 : s_offset_b1 = s_offset_b1 + 7
78228 : END DO
78229 : s_offset_a1 = s_offset_a1 + 7
78230 : END DO
78231 : END SUBROUTINE contract_ffgs
78232 : #endif
78233 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78234 : ! **************************************************************************************************
78235 : !> \brief ...
78236 : !> \param work ...
78237 : !> \param nl_a ...
78238 : !> \param nl_b ...
78239 : !> \param nl_c ...
78240 : !> \param nl_d ...
78241 : !> \param sphi_a ...
78242 : !> \param sphi_b ...
78243 : !> \param sphi_c ...
78244 : !> \param sphi_d ...
78245 : !> \param primitives ...
78246 : !> \param buffer1 ...
78247 : !> \param buffer2 ...
78248 : ! **************************************************************************************************
78249 : SUBROUTINE contract_ffgp(work, &
78250 : nl_a, nl_b, nl_c, nl_d, &
78251 : sphi_a, sphi_b, sphi_c, sphi_d, &
78252 : primitives, &
78253 : buffer1, buffer2)
78254 : REAL(dp), DIMENSION(10*10*15*3), INTENT(IN) :: work
78255 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78256 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78257 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
78258 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
78259 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
78260 : REAL(dp), &
78261 : DIMENSION(7*nl_a, 7*nl_b, 9*nl_c, 3*nl_d) :: primitives
78262 : REAL(dp), DIMENSION(10*10*15*3) :: buffer1, buffer2
78263 :
78264 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78265 : kmax, s_offset_a1, s_offset_b1, &
78266 : s_offset_c1, s_offset_d1
78267 :
78268 : s_offset_a1 = 0
78269 : DO ia = 1, nl_a
78270 : s_offset_b1 = 0
78271 : DO ib = 1, nl_b
78272 : s_offset_c1 = 0
78273 : DO ic = 1, nl_c
78274 : s_offset_d1 = 0
78275 : DO id = 1, nl_d
78276 : buffer1 = 0.0_dp
78277 : imax = 10*15*3
78278 : kmax = 10
78279 : DO i = 1, imax
78280 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78281 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78282 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
78283 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
78284 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
78285 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
78286 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
78287 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
78288 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
78289 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
78290 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
78291 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
78292 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
78293 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
78294 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
78295 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
78296 : END DO
78297 : buffer2 = 0.0_dp
78298 : imax = 7*15*3
78299 : kmax = 10
78300 : DO i = 1, imax
78301 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
78302 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
78303 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
78304 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
78305 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
78306 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
78307 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
78308 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
78309 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
78310 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
78311 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
78312 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
78313 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
78314 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
78315 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
78316 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
78317 : END DO
78318 : buffer1 = 0.0_dp
78319 : imax = 7*7*3
78320 : kmax = 15
78321 : DO i = 1, imax
78322 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
78323 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
78324 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
78325 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
78326 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
78327 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
78328 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
78329 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
78330 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
78331 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
78332 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
78333 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
78334 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
78335 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
78336 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
78337 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
78338 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
78339 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
78340 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
78341 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
78342 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
78343 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
78344 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
78345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
78346 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
78347 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
78348 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
78349 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
78350 : END DO
78351 : imax = 7*7*9
78352 : kmax = 3
78353 : i = 0
78354 : DO i1 = 1, 9
78355 : DO i2 = 1, 7
78356 : DO i3 = 1, 7
78357 : i = i + 1
78358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
78360 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
78361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
78363 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
78364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
78366 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
78367 : END DO
78368 : END DO
78369 : END DO
78370 : s_offset_d1 = s_offset_d1 + 3
78371 : END DO
78372 : s_offset_c1 = s_offset_c1 + 9
78373 : END DO
78374 : s_offset_b1 = s_offset_b1 + 7
78375 : END DO
78376 : s_offset_a1 = s_offset_a1 + 7
78377 : END DO
78378 : END SUBROUTINE contract_ffgp
78379 : #endif
78380 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78381 : ! **************************************************************************************************
78382 : !> \brief ...
78383 : !> \param work ...
78384 : !> \param nl_a ...
78385 : !> \param nl_b ...
78386 : !> \param nl_c ...
78387 : !> \param nl_d ...
78388 : !> \param sphi_a ...
78389 : !> \param sphi_b ...
78390 : !> \param sphi_c ...
78391 : !> \param sphi_d ...
78392 : !> \param primitives ...
78393 : !> \param buffer1 ...
78394 : !> \param buffer2 ...
78395 : ! **************************************************************************************************
78396 : SUBROUTINE contract_ffgd(work, &
78397 : nl_a, nl_b, nl_c, nl_d, &
78398 : sphi_a, sphi_b, sphi_c, sphi_d, &
78399 : primitives, &
78400 : buffer1, buffer2)
78401 : REAL(dp), DIMENSION(10*10*15*6), INTENT(IN) :: work
78402 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78403 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78404 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
78405 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
78406 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
78407 : REAL(dp), &
78408 : DIMENSION(7*nl_a, 7*nl_b, 9*nl_c, 5*nl_d) :: primitives
78409 : REAL(dp), DIMENSION(10*10*15*6) :: buffer1, buffer2
78410 :
78411 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78412 : kmax, s_offset_a1, s_offset_b1, &
78413 : s_offset_c1, s_offset_d1
78414 :
78415 : s_offset_a1 = 0
78416 : DO ia = 1, nl_a
78417 : s_offset_b1 = 0
78418 : DO ib = 1, nl_b
78419 : s_offset_c1 = 0
78420 : DO ic = 1, nl_c
78421 : s_offset_d1 = 0
78422 : DO id = 1, nl_d
78423 : buffer1 = 0.0_dp
78424 : imax = 10*15*6
78425 : kmax = 10
78426 : DO i = 1, imax
78427 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78428 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78429 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
78430 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
78431 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
78432 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
78433 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
78434 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
78435 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
78436 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
78437 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
78438 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
78439 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
78440 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
78441 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
78442 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
78443 : END DO
78444 : buffer2 = 0.0_dp
78445 : imax = 7*15*6
78446 : kmax = 10
78447 : DO i = 1, imax
78448 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
78449 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
78450 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
78451 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
78452 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
78453 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
78454 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
78455 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
78456 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
78457 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
78458 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
78459 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
78460 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
78461 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
78462 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
78463 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
78464 : END DO
78465 : buffer1 = 0.0_dp
78466 : imax = 7*7*6
78467 : kmax = 15
78468 : DO i = 1, imax
78469 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
78470 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
78471 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
78472 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
78473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
78474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
78475 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
78476 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
78477 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
78478 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
78479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
78480 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
78481 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
78482 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
78483 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
78484 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
78485 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
78486 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
78487 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
78488 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
78489 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
78490 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
78491 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
78492 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
78493 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
78494 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
78495 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
78496 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
78497 : END DO
78498 : imax = 7*7*9
78499 : kmax = 6
78500 : i = 0
78501 : DO i1 = 1, 9
78502 : DO i2 = 1, 7
78503 : DO i3 = 1, 7
78504 : i = i + 1
78505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78507 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
78508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78510 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
78511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78513 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
78514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78516 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
78517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78519 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
78520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78522 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
78523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78525 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
78526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78528 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
78529 : END DO
78530 : END DO
78531 : END DO
78532 : s_offset_d1 = s_offset_d1 + 5
78533 : END DO
78534 : s_offset_c1 = s_offset_c1 + 9
78535 : END DO
78536 : s_offset_b1 = s_offset_b1 + 7
78537 : END DO
78538 : s_offset_a1 = s_offset_a1 + 7
78539 : END DO
78540 : END SUBROUTINE contract_ffgd
78541 : #endif
78542 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78543 : ! **************************************************************************************************
78544 : !> \brief ...
78545 : !> \param work ...
78546 : !> \param nl_a ...
78547 : !> \param nl_b ...
78548 : !> \param nl_c ...
78549 : !> \param nl_d ...
78550 : !> \param sphi_a ...
78551 : !> \param sphi_b ...
78552 : !> \param sphi_c ...
78553 : !> \param sphi_d ...
78554 : !> \param primitives ...
78555 : !> \param buffer1 ...
78556 : !> \param buffer2 ...
78557 : ! **************************************************************************************************
78558 : SUBROUTINE contract_ffgf(work, &
78559 : nl_a, nl_b, nl_c, nl_d, &
78560 : sphi_a, sphi_b, sphi_c, sphi_d, &
78561 : primitives, &
78562 : buffer1, buffer2)
78563 : REAL(dp), DIMENSION(10*10*15*10), INTENT(IN) :: work
78564 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78565 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78566 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
78567 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
78568 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
78569 : REAL(dp), &
78570 : DIMENSION(7*nl_a, 7*nl_b, 9*nl_c, 7*nl_d) :: primitives
78571 : REAL(dp), DIMENSION(10*10*15*10) :: buffer1, buffer2
78572 :
78573 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78574 : kmax, s_offset_a1, s_offset_b1, &
78575 : s_offset_c1, s_offset_d1
78576 :
78577 : s_offset_a1 = 0
78578 : DO ia = 1, nl_a
78579 : s_offset_b1 = 0
78580 : DO ib = 1, nl_b
78581 : s_offset_c1 = 0
78582 : DO ic = 1, nl_c
78583 : s_offset_d1 = 0
78584 : DO id = 1, nl_d
78585 : buffer1 = 0.0_dp
78586 : imax = 10*15*10
78587 : kmax = 10
78588 : DO i = 1, imax
78589 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78590 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78591 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
78592 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
78593 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
78594 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
78595 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
78596 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
78597 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
78598 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
78599 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
78600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
78601 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
78602 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
78603 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
78604 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
78605 : END DO
78606 : buffer2 = 0.0_dp
78607 : imax = 7*15*10
78608 : kmax = 10
78609 : DO i = 1, imax
78610 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
78611 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
78612 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
78613 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
78614 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
78615 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
78616 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
78617 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
78618 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
78619 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
78620 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
78621 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
78622 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
78623 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
78624 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
78625 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
78626 : END DO
78627 : buffer1 = 0.0_dp
78628 : imax = 7*7*10
78629 : kmax = 15
78630 : DO i = 1, imax
78631 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
78632 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
78633 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
78634 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
78635 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
78636 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
78637 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
78638 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
78639 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
78640 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
78641 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
78642 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
78643 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
78644 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
78645 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
78646 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
78647 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
78648 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
78649 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
78650 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
78651 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
78652 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
78653 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
78654 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
78655 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
78656 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
78657 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
78658 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
78659 : END DO
78660 : imax = 7*7*9
78661 : kmax = 10
78662 : i = 0
78663 : DO i1 = 1, 9
78664 : DO i2 = 1, 7
78665 : DO i3 = 1, 7
78666 : i = i + 1
78667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78669 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
78670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78672 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
78673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78675 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
78676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78678 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
78679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78681 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
78682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78684 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
78685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78687 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
78688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78690 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
78691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78693 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
78694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78696 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
78697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78699 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
78700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78702 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
78703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78705 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
78706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78708 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
78709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78711 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
78712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78714 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
78715 : END DO
78716 : END DO
78717 : END DO
78718 : s_offset_d1 = s_offset_d1 + 7
78719 : END DO
78720 : s_offset_c1 = s_offset_c1 + 9
78721 : END DO
78722 : s_offset_b1 = s_offset_b1 + 7
78723 : END DO
78724 : s_offset_a1 = s_offset_a1 + 7
78725 : END DO
78726 : END SUBROUTINE contract_ffgf
78727 : #endif
78728 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78729 : ! **************************************************************************************************
78730 : !> \brief ...
78731 : !> \param work ...
78732 : !> \param nl_a ...
78733 : !> \param nl_b ...
78734 : !> \param nl_c ...
78735 : !> \param nl_d ...
78736 : !> \param sphi_a ...
78737 : !> \param sphi_b ...
78738 : !> \param sphi_c ...
78739 : !> \param sphi_d ...
78740 : !> \param primitives ...
78741 : !> \param buffer1 ...
78742 : !> \param buffer2 ...
78743 : ! **************************************************************************************************
78744 : SUBROUTINE contract_ffgg(work, &
78745 : nl_a, nl_b, nl_c, nl_d, &
78746 : sphi_a, sphi_b, sphi_c, sphi_d, &
78747 : primitives, &
78748 : buffer1, buffer2)
78749 : REAL(dp), DIMENSION(10*10*15*15), INTENT(IN) :: work
78750 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78751 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78752 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
78753 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
78754 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
78755 : REAL(dp), &
78756 : DIMENSION(7*nl_a, 7*nl_b, 9*nl_c, 9*nl_d) :: primitives
78757 : REAL(dp), DIMENSION(10*10*15*15) :: buffer1, buffer2
78758 :
78759 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78760 : kmax, s_offset_a1, s_offset_b1, &
78761 : s_offset_c1, s_offset_d1
78762 :
78763 : s_offset_a1 = 0
78764 : DO ia = 1, nl_a
78765 : s_offset_b1 = 0
78766 : DO ib = 1, nl_b
78767 : s_offset_c1 = 0
78768 : DO ic = 1, nl_c
78769 : s_offset_d1 = 0
78770 : DO id = 1, nl_d
78771 : buffer1 = 0.0_dp
78772 : imax = 10*15*15
78773 : kmax = 10
78774 : DO i = 1, imax
78775 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78776 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78777 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
78778 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
78779 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
78780 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
78781 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
78782 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
78783 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
78784 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
78785 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
78786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
78787 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
78788 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
78789 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
78790 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
78791 : END DO
78792 : buffer2 = 0.0_dp
78793 : imax = 7*15*15
78794 : kmax = 10
78795 : DO i = 1, imax
78796 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
78797 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
78798 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
78799 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
78800 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
78801 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
78802 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
78803 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
78804 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
78805 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
78806 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
78807 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
78808 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
78809 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
78810 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
78811 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
78812 : END DO
78813 : buffer1 = 0.0_dp
78814 : imax = 7*7*15
78815 : kmax = 15
78816 : DO i = 1, imax
78817 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
78818 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
78819 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
78820 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
78821 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
78822 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
78823 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
78824 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
78825 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
78826 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
78827 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
78828 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
78829 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
78830 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
78831 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
78832 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
78833 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
78834 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
78835 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
78836 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
78837 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
78838 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
78839 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
78840 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
78841 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
78842 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
78843 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
78844 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
78845 : END DO
78846 : imax = 7*7*9
78847 : kmax = 15
78848 : i = 0
78849 : DO i1 = 1, 9
78850 : DO i2 = 1, 7
78851 : DO i3 = 1, 7
78852 : i = i + 1
78853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78855 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
78856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78858 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
78859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78861 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
78862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78864 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
78865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78867 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
78868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78870 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
78871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
78872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
78873 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
78874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78876 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
78877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78879 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
78880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78882 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
78883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78885 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
78886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78888 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
78889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78891 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
78892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
78893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
78894 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
78895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78897 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
78898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78900 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
78901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
78902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
78903 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
78904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
78905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
78906 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
78907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
78908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
78909 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
78910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78912 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
78913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78914 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78915 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
78916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
78917 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
78918 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
78919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
78920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
78921 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
78922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78924 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
78925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78927 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
78928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
78929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
78930 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
78931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
78932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
78933 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
78934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
78935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
78936 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
78937 : END DO
78938 : END DO
78939 : END DO
78940 : s_offset_d1 = s_offset_d1 + 9
78941 : END DO
78942 : s_offset_c1 = s_offset_c1 + 9
78943 : END DO
78944 : s_offset_b1 = s_offset_b1 + 7
78945 : END DO
78946 : s_offset_a1 = s_offset_a1 + 7
78947 : END DO
78948 : END SUBROUTINE contract_ffgg
78949 : #endif
78950 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
78951 : ! **************************************************************************************************
78952 : !> \brief ...
78953 : !> \param work ...
78954 : !> \param nl_a ...
78955 : !> \param nl_b ...
78956 : !> \param nl_c ...
78957 : !> \param nl_d ...
78958 : !> \param sphi_a ...
78959 : !> \param sphi_b ...
78960 : !> \param sphi_c ...
78961 : !> \param sphi_d ...
78962 : !> \param primitives ...
78963 : !> \param buffer1 ...
78964 : !> \param buffer2 ...
78965 : ! **************************************************************************************************
78966 : SUBROUTINE contract_fgss(work, &
78967 : nl_a, nl_b, nl_c, nl_d, &
78968 : sphi_a, sphi_b, sphi_c, sphi_d, &
78969 : primitives, &
78970 : buffer1, buffer2)
78971 : REAL(dp), DIMENSION(10*15*1*1), INTENT(IN) :: work
78972 : INTEGER :: nl_a, nl_b, nl_c, nl_d
78973 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
78974 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
78975 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
78976 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
78977 : REAL(dp), &
78978 : DIMENSION(7*nl_a, 9*nl_b, 1*nl_c, 1*nl_d) :: primitives
78979 : REAL(dp), DIMENSION(10*15*1*1) :: buffer1, buffer2
78980 :
78981 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
78982 : kmax, s_offset_a1, s_offset_b1, &
78983 : s_offset_c1, s_offset_d1
78984 :
78985 : s_offset_a1 = 0
78986 : DO ia = 1, nl_a
78987 : s_offset_b1 = 0
78988 : DO ib = 1, nl_b
78989 : s_offset_c1 = 0
78990 : DO ic = 1, nl_c
78991 : s_offset_d1 = 0
78992 : DO id = 1, nl_d
78993 : buffer1 = 0.0_dp
78994 : imax = 15*1*1
78995 : kmax = 10
78996 : DO i = 1, imax
78997 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
78998 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
78999 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79000 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79001 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79002 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79003 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79004 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79005 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79007 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79008 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79009 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79010 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79011 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79012 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79013 : END DO
79014 : buffer2 = 0.0_dp
79015 : imax = 7*1*1
79016 : kmax = 15
79017 : DO i = 1, imax
79018 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79019 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79020 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79021 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79022 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79023 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79024 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79025 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79026 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79027 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79028 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79029 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79030 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79031 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79032 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79033 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79034 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79035 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79036 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79037 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79038 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79039 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79040 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79041 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79042 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79043 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79044 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79045 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79046 : END DO
79047 : buffer1 = 0.0_dp
79048 : imax = 7*9*1
79049 : kmax = 1
79050 : DO i = 1, imax
79051 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
79052 : END DO
79053 : imax = 7*9*1
79054 : kmax = 1
79055 : i = 0
79056 : DO i1 = 1, 1
79057 : DO i2 = 1, 9
79058 : DO i3 = 1, 7
79059 : i = i + 1
79060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
79062 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
79063 : END DO
79064 : END DO
79065 : END DO
79066 : s_offset_d1 = s_offset_d1 + 1
79067 : END DO
79068 : s_offset_c1 = s_offset_c1 + 1
79069 : END DO
79070 : s_offset_b1 = s_offset_b1 + 9
79071 : END DO
79072 : s_offset_a1 = s_offset_a1 + 7
79073 : END DO
79074 : END SUBROUTINE contract_fgss
79075 : #endif
79076 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79077 : ! **************************************************************************************************
79078 : !> \brief ...
79079 : !> \param work ...
79080 : !> \param nl_a ...
79081 : !> \param nl_b ...
79082 : !> \param nl_c ...
79083 : !> \param nl_d ...
79084 : !> \param sphi_a ...
79085 : !> \param sphi_b ...
79086 : !> \param sphi_c ...
79087 : !> \param sphi_d ...
79088 : !> \param primitives ...
79089 : !> \param buffer1 ...
79090 : !> \param buffer2 ...
79091 : ! **************************************************************************************************
79092 : SUBROUTINE contract_fgsp(work, &
79093 : nl_a, nl_b, nl_c, nl_d, &
79094 : sphi_a, sphi_b, sphi_c, sphi_d, &
79095 : primitives, &
79096 : buffer1, buffer2)
79097 : REAL(dp), DIMENSION(10*15*1*3), INTENT(IN) :: work
79098 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79099 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79100 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79101 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
79102 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
79103 : REAL(dp), &
79104 : DIMENSION(7*nl_a, 9*nl_b, 1*nl_c, 3*nl_d) :: primitives
79105 : REAL(dp), DIMENSION(10*15*1*3) :: buffer1, buffer2
79106 :
79107 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79108 : kmax, s_offset_a1, s_offset_b1, &
79109 : s_offset_c1, s_offset_d1
79110 :
79111 : s_offset_a1 = 0
79112 : DO ia = 1, nl_a
79113 : s_offset_b1 = 0
79114 : DO ib = 1, nl_b
79115 : s_offset_c1 = 0
79116 : DO ic = 1, nl_c
79117 : s_offset_d1 = 0
79118 : DO id = 1, nl_d
79119 : buffer1 = 0.0_dp
79120 : imax = 15*1*3
79121 : kmax = 10
79122 : DO i = 1, imax
79123 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79124 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79125 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79126 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79127 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79128 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79130 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79131 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79132 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79133 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79134 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79135 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79136 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79137 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79138 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79139 : END DO
79140 : buffer2 = 0.0_dp
79141 : imax = 7*1*3
79142 : kmax = 15
79143 : DO i = 1, imax
79144 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79145 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79146 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79147 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79148 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79149 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79150 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79151 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79152 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79153 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79154 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79155 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79156 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79157 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79158 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79159 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79160 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79161 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79162 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79163 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79164 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79165 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79166 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79167 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79168 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79169 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79170 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79171 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79172 : END DO
79173 : buffer1 = 0.0_dp
79174 : imax = 7*9*3
79175 : kmax = 1
79176 : DO i = 1, imax
79177 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
79178 : END DO
79179 : imax = 7*9*1
79180 : kmax = 3
79181 : i = 0
79182 : DO i1 = 1, 1
79183 : DO i2 = 1, 9
79184 : DO i3 = 1, 7
79185 : i = i + 1
79186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
79188 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
79189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
79191 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
79192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
79194 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
79195 : END DO
79196 : END DO
79197 : END DO
79198 : s_offset_d1 = s_offset_d1 + 3
79199 : END DO
79200 : s_offset_c1 = s_offset_c1 + 1
79201 : END DO
79202 : s_offset_b1 = s_offset_b1 + 9
79203 : END DO
79204 : s_offset_a1 = s_offset_a1 + 7
79205 : END DO
79206 : END SUBROUTINE contract_fgsp
79207 : #endif
79208 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79209 : ! **************************************************************************************************
79210 : !> \brief ...
79211 : !> \param work ...
79212 : !> \param nl_a ...
79213 : !> \param nl_b ...
79214 : !> \param nl_c ...
79215 : !> \param nl_d ...
79216 : !> \param sphi_a ...
79217 : !> \param sphi_b ...
79218 : !> \param sphi_c ...
79219 : !> \param sphi_d ...
79220 : !> \param primitives ...
79221 : !> \param buffer1 ...
79222 : !> \param buffer2 ...
79223 : ! **************************************************************************************************
79224 : SUBROUTINE contract_fgsd(work, &
79225 : nl_a, nl_b, nl_c, nl_d, &
79226 : sphi_a, sphi_b, sphi_c, sphi_d, &
79227 : primitives, &
79228 : buffer1, buffer2)
79229 : REAL(dp), DIMENSION(10*15*1*6), INTENT(IN) :: work
79230 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79231 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79232 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79233 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
79234 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
79235 : REAL(dp), &
79236 : DIMENSION(7*nl_a, 9*nl_b, 1*nl_c, 5*nl_d) :: primitives
79237 : REAL(dp), DIMENSION(10*15*1*6) :: buffer1, buffer2
79238 :
79239 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79240 : kmax, s_offset_a1, s_offset_b1, &
79241 : s_offset_c1, s_offset_d1
79242 :
79243 : s_offset_a1 = 0
79244 : DO ia = 1, nl_a
79245 : s_offset_b1 = 0
79246 : DO ib = 1, nl_b
79247 : s_offset_c1 = 0
79248 : DO ic = 1, nl_c
79249 : s_offset_d1 = 0
79250 : DO id = 1, nl_d
79251 : buffer1 = 0.0_dp
79252 : imax = 15*1*6
79253 : kmax = 10
79254 : DO i = 1, imax
79255 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79256 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79257 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79258 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79259 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79260 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79261 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79262 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79263 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79265 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79266 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79267 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79268 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79269 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79270 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79271 : END DO
79272 : buffer2 = 0.0_dp
79273 : imax = 7*1*6
79274 : kmax = 15
79275 : DO i = 1, imax
79276 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79277 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79278 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79279 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79280 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79281 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79282 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79283 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79284 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79285 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79286 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79287 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79288 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79289 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79290 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79291 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79292 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79293 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79294 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79295 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79296 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79297 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79298 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79299 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79300 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79301 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79302 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79303 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79304 : END DO
79305 : buffer1 = 0.0_dp
79306 : imax = 7*9*6
79307 : kmax = 1
79308 : DO i = 1, imax
79309 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
79310 : END DO
79311 : imax = 7*9*1
79312 : kmax = 6
79313 : i = 0
79314 : DO i1 = 1, 1
79315 : DO i2 = 1, 9
79316 : DO i3 = 1, 7
79317 : i = i + 1
79318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79320 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
79321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79323 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
79324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
79326 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
79327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79329 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
79330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79332 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
79333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79335 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
79336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
79338 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
79339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79341 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
79342 : END DO
79343 : END DO
79344 : END DO
79345 : s_offset_d1 = s_offset_d1 + 5
79346 : END DO
79347 : s_offset_c1 = s_offset_c1 + 1
79348 : END DO
79349 : s_offset_b1 = s_offset_b1 + 9
79350 : END DO
79351 : s_offset_a1 = s_offset_a1 + 7
79352 : END DO
79353 : END SUBROUTINE contract_fgsd
79354 : #endif
79355 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79356 : ! **************************************************************************************************
79357 : !> \brief ...
79358 : !> \param work ...
79359 : !> \param nl_a ...
79360 : !> \param nl_b ...
79361 : !> \param nl_c ...
79362 : !> \param nl_d ...
79363 : !> \param sphi_a ...
79364 : !> \param sphi_b ...
79365 : !> \param sphi_c ...
79366 : !> \param sphi_d ...
79367 : !> \param primitives ...
79368 : !> \param buffer1 ...
79369 : !> \param buffer2 ...
79370 : ! **************************************************************************************************
79371 : SUBROUTINE contract_fgsf(work, &
79372 : nl_a, nl_b, nl_c, nl_d, &
79373 : sphi_a, sphi_b, sphi_c, sphi_d, &
79374 : primitives, &
79375 : buffer1, buffer2)
79376 : REAL(dp), DIMENSION(10*15*1*10), INTENT(IN) :: work
79377 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79378 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79379 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79380 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
79381 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
79382 : REAL(dp), &
79383 : DIMENSION(7*nl_a, 9*nl_b, 1*nl_c, 7*nl_d) :: primitives
79384 : REAL(dp), DIMENSION(10*15*1*10) :: buffer1, buffer2
79385 :
79386 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79387 : kmax, s_offset_a1, s_offset_b1, &
79388 : s_offset_c1, s_offset_d1
79389 :
79390 : s_offset_a1 = 0
79391 : DO ia = 1, nl_a
79392 : s_offset_b1 = 0
79393 : DO ib = 1, nl_b
79394 : s_offset_c1 = 0
79395 : DO ic = 1, nl_c
79396 : s_offset_d1 = 0
79397 : DO id = 1, nl_d
79398 : buffer1 = 0.0_dp
79399 : imax = 15*1*10
79400 : kmax = 10
79401 : DO i = 1, imax
79402 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79403 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79404 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79406 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79407 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79409 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79410 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79411 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79412 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79414 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79415 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79417 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79418 : END DO
79419 : buffer2 = 0.0_dp
79420 : imax = 7*1*10
79421 : kmax = 15
79422 : DO i = 1, imax
79423 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79424 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79425 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79426 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79427 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79428 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79429 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79430 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79431 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79432 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79433 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79434 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79435 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79436 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79437 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79438 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79439 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79440 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79441 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79442 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79443 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79444 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79445 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79446 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79447 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79448 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79449 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79450 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79451 : END DO
79452 : buffer1 = 0.0_dp
79453 : imax = 7*9*10
79454 : kmax = 1
79455 : DO i = 1, imax
79456 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
79457 : END DO
79458 : imax = 7*9*1
79459 : kmax = 10
79460 : i = 0
79461 : DO i1 = 1, 1
79462 : DO i2 = 1, 9
79463 : DO i3 = 1, 7
79464 : i = i + 1
79465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79467 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
79468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79470 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
79471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
79473 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
79474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79476 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
79477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79479 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
79480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
79481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
79482 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
79483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79485 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
79486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79488 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
79489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
79491 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
79492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79494 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
79495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
79497 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
79498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79500 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
79501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79503 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
79504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
79505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
79506 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
79507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79509 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
79510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79512 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
79513 : END DO
79514 : END DO
79515 : END DO
79516 : s_offset_d1 = s_offset_d1 + 7
79517 : END DO
79518 : s_offset_c1 = s_offset_c1 + 1
79519 : END DO
79520 : s_offset_b1 = s_offset_b1 + 9
79521 : END DO
79522 : s_offset_a1 = s_offset_a1 + 7
79523 : END DO
79524 : END SUBROUTINE contract_fgsf
79525 : #endif
79526 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79527 : ! **************************************************************************************************
79528 : !> \brief ...
79529 : !> \param work ...
79530 : !> \param nl_a ...
79531 : !> \param nl_b ...
79532 : !> \param nl_c ...
79533 : !> \param nl_d ...
79534 : !> \param sphi_a ...
79535 : !> \param sphi_b ...
79536 : !> \param sphi_c ...
79537 : !> \param sphi_d ...
79538 : !> \param primitives ...
79539 : !> \param buffer1 ...
79540 : !> \param buffer2 ...
79541 : ! **************************************************************************************************
79542 : SUBROUTINE contract_fgsg(work, &
79543 : nl_a, nl_b, nl_c, nl_d, &
79544 : sphi_a, sphi_b, sphi_c, sphi_d, &
79545 : primitives, &
79546 : buffer1, buffer2)
79547 : REAL(dp), DIMENSION(10*15*1*15), INTENT(IN) :: work
79548 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79549 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79550 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79551 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
79552 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
79553 : REAL(dp), &
79554 : DIMENSION(7*nl_a, 9*nl_b, 1*nl_c, 9*nl_d) :: primitives
79555 : REAL(dp), DIMENSION(10*15*1*15) :: buffer1, buffer2
79556 :
79557 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79558 : kmax, s_offset_a1, s_offset_b1, &
79559 : s_offset_c1, s_offset_d1
79560 :
79561 : s_offset_a1 = 0
79562 : DO ia = 1, nl_a
79563 : s_offset_b1 = 0
79564 : DO ib = 1, nl_b
79565 : s_offset_c1 = 0
79566 : DO ic = 1, nl_c
79567 : s_offset_d1 = 0
79568 : DO id = 1, nl_d
79569 : buffer1 = 0.0_dp
79570 : imax = 15*1*15
79571 : kmax = 10
79572 : DO i = 1, imax
79573 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79574 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79575 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79577 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79578 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79580 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79581 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79583 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79586 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79587 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79588 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79589 : END DO
79590 : buffer2 = 0.0_dp
79591 : imax = 7*1*15
79592 : kmax = 15
79593 : DO i = 1, imax
79594 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79595 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79596 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79597 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79598 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79599 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79600 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79601 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79602 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79603 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79604 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79605 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79606 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79607 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79608 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79609 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79610 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79611 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79612 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79613 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79614 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79615 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79616 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79617 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79618 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79619 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79620 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79621 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79622 : END DO
79623 : buffer1 = 0.0_dp
79624 : imax = 7*9*15
79625 : kmax = 1
79626 : DO i = 1, imax
79627 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
79628 : END DO
79629 : imax = 7*9*1
79630 : kmax = 15
79631 : i = 0
79632 : DO i1 = 1, 1
79633 : DO i2 = 1, 9
79634 : DO i3 = 1, 7
79635 : i = i + 1
79636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79638 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
79639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79641 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
79642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
79643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
79644 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
79645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
79647 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
79648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79650 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
79651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
79652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
79653 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
79654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
79655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
79656 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
79657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79659 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
79660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
79661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
79662 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
79663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
79665 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
79666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79668 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
79669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79671 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
79672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79674 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
79675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
79677 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
79678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79680 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
79681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
79682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
79683 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
79684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
79685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
79686 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
79687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
79689 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
79690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
79691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
79692 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
79693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79695 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
79696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79698 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
79699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
79700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
79701 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
79702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
79704 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
79705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79707 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
79708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79710 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
79711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
79712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
79713 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
79714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
79715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
79716 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
79717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
79718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
79719 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
79720 : END DO
79721 : END DO
79722 : END DO
79723 : s_offset_d1 = s_offset_d1 + 9
79724 : END DO
79725 : s_offset_c1 = s_offset_c1 + 1
79726 : END DO
79727 : s_offset_b1 = s_offset_b1 + 9
79728 : END DO
79729 : s_offset_a1 = s_offset_a1 + 7
79730 : END DO
79731 : END SUBROUTINE contract_fgsg
79732 : #endif
79733 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79734 : ! **************************************************************************************************
79735 : !> \brief ...
79736 : !> \param work ...
79737 : !> \param nl_a ...
79738 : !> \param nl_b ...
79739 : !> \param nl_c ...
79740 : !> \param nl_d ...
79741 : !> \param sphi_a ...
79742 : !> \param sphi_b ...
79743 : !> \param sphi_c ...
79744 : !> \param sphi_d ...
79745 : !> \param primitives ...
79746 : !> \param buffer1 ...
79747 : !> \param buffer2 ...
79748 : ! **************************************************************************************************
79749 : SUBROUTINE contract_fgps(work, &
79750 : nl_a, nl_b, nl_c, nl_d, &
79751 : sphi_a, sphi_b, sphi_c, sphi_d, &
79752 : primitives, &
79753 : buffer1, buffer2)
79754 : REAL(dp), DIMENSION(10*15*3*1), INTENT(IN) :: work
79755 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79756 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79757 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79758 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
79759 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
79760 : REAL(dp), &
79761 : DIMENSION(7*nl_a, 9*nl_b, 3*nl_c, 1*nl_d) :: primitives
79762 : REAL(dp), DIMENSION(10*15*3*1) :: buffer1, buffer2
79763 :
79764 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79765 : kmax, s_offset_a1, s_offset_b1, &
79766 : s_offset_c1, s_offset_d1
79767 :
79768 : s_offset_a1 = 0
79769 : DO ia = 1, nl_a
79770 : s_offset_b1 = 0
79771 : DO ib = 1, nl_b
79772 : s_offset_c1 = 0
79773 : DO ic = 1, nl_c
79774 : s_offset_d1 = 0
79775 : DO id = 1, nl_d
79776 : buffer1 = 0.0_dp
79777 : imax = 15*3*1
79778 : kmax = 10
79779 : DO i = 1, imax
79780 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79781 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79783 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79784 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79785 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79787 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79788 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79791 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79792 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79793 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79794 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79795 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79796 : END DO
79797 : buffer2 = 0.0_dp
79798 : imax = 7*3*1
79799 : kmax = 15
79800 : DO i = 1, imax
79801 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79802 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79803 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79804 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79805 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79806 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79807 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79808 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79809 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79810 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79811 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79812 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79813 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79814 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79815 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79816 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79817 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79818 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79819 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79820 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79821 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79822 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79823 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79824 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79825 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79826 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79827 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79828 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79829 : END DO
79830 : buffer1 = 0.0_dp
79831 : imax = 7*9*1
79832 : kmax = 3
79833 : DO i = 1, imax
79834 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
79835 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
79836 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
79837 : END DO
79838 : imax = 7*9*3
79839 : kmax = 1
79840 : i = 0
79841 : DO i1 = 1, 3
79842 : DO i2 = 1, 9
79843 : DO i3 = 1, 7
79844 : i = i + 1
79845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
79847 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
79848 : END DO
79849 : END DO
79850 : END DO
79851 : s_offset_d1 = s_offset_d1 + 1
79852 : END DO
79853 : s_offset_c1 = s_offset_c1 + 3
79854 : END DO
79855 : s_offset_b1 = s_offset_b1 + 9
79856 : END DO
79857 : s_offset_a1 = s_offset_a1 + 7
79858 : END DO
79859 : END SUBROUTINE contract_fgps
79860 : #endif
79861 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79862 : ! **************************************************************************************************
79863 : !> \brief ...
79864 : !> \param work ...
79865 : !> \param nl_a ...
79866 : !> \param nl_b ...
79867 : !> \param nl_c ...
79868 : !> \param nl_d ...
79869 : !> \param sphi_a ...
79870 : !> \param sphi_b ...
79871 : !> \param sphi_c ...
79872 : !> \param sphi_d ...
79873 : !> \param primitives ...
79874 : !> \param buffer1 ...
79875 : !> \param buffer2 ...
79876 : ! **************************************************************************************************
79877 : SUBROUTINE contract_fgpp(work, &
79878 : nl_a, nl_b, nl_c, nl_d, &
79879 : sphi_a, sphi_b, sphi_c, sphi_d, &
79880 : primitives, &
79881 : buffer1, buffer2)
79882 : REAL(dp), DIMENSION(10*15*3*3), INTENT(IN) :: work
79883 : INTEGER :: nl_a, nl_b, nl_c, nl_d
79884 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
79885 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
79886 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
79887 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
79888 : REAL(dp), &
79889 : DIMENSION(7*nl_a, 9*nl_b, 3*nl_c, 3*nl_d) :: primitives
79890 : REAL(dp), DIMENSION(10*15*3*3) :: buffer1, buffer2
79891 :
79892 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
79893 : kmax, s_offset_a1, s_offset_b1, &
79894 : s_offset_c1, s_offset_d1
79895 :
79896 : s_offset_a1 = 0
79897 : DO ia = 1, nl_a
79898 : s_offset_b1 = 0
79899 : DO ib = 1, nl_b
79900 : s_offset_c1 = 0
79901 : DO ic = 1, nl_c
79902 : s_offset_d1 = 0
79903 : DO id = 1, nl_d
79904 : buffer1 = 0.0_dp
79905 : imax = 15*3*3
79906 : kmax = 10
79907 : DO i = 1, imax
79908 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
79909 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
79910 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
79911 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
79912 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
79913 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
79914 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
79915 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
79916 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
79917 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
79918 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
79919 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
79920 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
79921 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
79922 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
79923 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
79924 : END DO
79925 : buffer2 = 0.0_dp
79926 : imax = 7*3*3
79927 : kmax = 15
79928 : DO i = 1, imax
79929 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
79930 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
79931 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
79932 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
79933 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
79934 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
79935 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
79936 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
79937 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
79938 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
79939 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
79940 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
79941 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
79942 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
79943 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
79944 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
79945 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
79946 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
79947 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
79948 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
79949 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
79950 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
79951 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
79952 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
79953 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
79954 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
79955 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
79956 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
79957 : END DO
79958 : buffer1 = 0.0_dp
79959 : imax = 7*9*3
79960 : kmax = 3
79961 : DO i = 1, imax
79962 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
79963 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
79964 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
79965 : END DO
79966 : imax = 7*9*3
79967 : kmax = 3
79968 : i = 0
79969 : DO i1 = 1, 3
79970 : DO i2 = 1, 9
79971 : DO i3 = 1, 7
79972 : i = i + 1
79973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
79974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
79975 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
79976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
79977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
79978 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
79979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
79980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
79981 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
79982 : END DO
79983 : END DO
79984 : END DO
79985 : s_offset_d1 = s_offset_d1 + 3
79986 : END DO
79987 : s_offset_c1 = s_offset_c1 + 3
79988 : END DO
79989 : s_offset_b1 = s_offset_b1 + 9
79990 : END DO
79991 : s_offset_a1 = s_offset_a1 + 7
79992 : END DO
79993 : END SUBROUTINE contract_fgpp
79994 : #endif
79995 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
79996 : ! **************************************************************************************************
79997 : !> \brief ...
79998 : !> \param work ...
79999 : !> \param nl_a ...
80000 : !> \param nl_b ...
80001 : !> \param nl_c ...
80002 : !> \param nl_d ...
80003 : !> \param sphi_a ...
80004 : !> \param sphi_b ...
80005 : !> \param sphi_c ...
80006 : !> \param sphi_d ...
80007 : !> \param primitives ...
80008 : !> \param buffer1 ...
80009 : !> \param buffer2 ...
80010 : ! **************************************************************************************************
80011 : SUBROUTINE contract_fgpd(work, &
80012 : nl_a, nl_b, nl_c, nl_d, &
80013 : sphi_a, sphi_b, sphi_c, sphi_d, &
80014 : primitives, &
80015 : buffer1, buffer2)
80016 : REAL(dp), DIMENSION(10*15*3*6), INTENT(IN) :: work
80017 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80018 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80019 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80020 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
80021 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
80022 : REAL(dp), &
80023 : DIMENSION(7*nl_a, 9*nl_b, 3*nl_c, 5*nl_d) :: primitives
80024 : REAL(dp), DIMENSION(10*15*3*6) :: buffer1, buffer2
80025 :
80026 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80027 : kmax, s_offset_a1, s_offset_b1, &
80028 : s_offset_c1, s_offset_d1
80029 :
80030 : s_offset_a1 = 0
80031 : DO ia = 1, nl_a
80032 : s_offset_b1 = 0
80033 : DO ib = 1, nl_b
80034 : s_offset_c1 = 0
80035 : DO ic = 1, nl_c
80036 : s_offset_d1 = 0
80037 : DO id = 1, nl_d
80038 : buffer1 = 0.0_dp
80039 : imax = 15*3*6
80040 : kmax = 10
80041 : DO i = 1, imax
80042 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80043 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80044 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80045 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80046 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80047 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80048 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80049 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80050 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80051 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80052 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80054 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80055 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80056 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80057 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80058 : END DO
80059 : buffer2 = 0.0_dp
80060 : imax = 7*3*6
80061 : kmax = 15
80062 : DO i = 1, imax
80063 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80064 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80065 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80066 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80067 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80068 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80069 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80070 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80071 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80072 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80073 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80074 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80075 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80076 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80077 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80078 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80079 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80080 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80081 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80082 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80083 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80084 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80085 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80086 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80087 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80088 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80089 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80090 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80091 : END DO
80092 : buffer1 = 0.0_dp
80093 : imax = 7*9*6
80094 : kmax = 3
80095 : DO i = 1, imax
80096 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80097 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80098 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
80099 : END DO
80100 : imax = 7*9*3
80101 : kmax = 6
80102 : i = 0
80103 : DO i1 = 1, 3
80104 : DO i2 = 1, 9
80105 : DO i3 = 1, 7
80106 : i = i + 1
80107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80109 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
80110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80112 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
80113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80115 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
80116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80118 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
80119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80121 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
80122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80124 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
80125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
80127 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
80128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80130 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
80131 : END DO
80132 : END DO
80133 : END DO
80134 : s_offset_d1 = s_offset_d1 + 5
80135 : END DO
80136 : s_offset_c1 = s_offset_c1 + 3
80137 : END DO
80138 : s_offset_b1 = s_offset_b1 + 9
80139 : END DO
80140 : s_offset_a1 = s_offset_a1 + 7
80141 : END DO
80142 : END SUBROUTINE contract_fgpd
80143 : #endif
80144 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80145 : ! **************************************************************************************************
80146 : !> \brief ...
80147 : !> \param work ...
80148 : !> \param nl_a ...
80149 : !> \param nl_b ...
80150 : !> \param nl_c ...
80151 : !> \param nl_d ...
80152 : !> \param sphi_a ...
80153 : !> \param sphi_b ...
80154 : !> \param sphi_c ...
80155 : !> \param sphi_d ...
80156 : !> \param primitives ...
80157 : !> \param buffer1 ...
80158 : !> \param buffer2 ...
80159 : ! **************************************************************************************************
80160 : SUBROUTINE contract_fgpf(work, &
80161 : nl_a, nl_b, nl_c, nl_d, &
80162 : sphi_a, sphi_b, sphi_c, sphi_d, &
80163 : primitives, &
80164 : buffer1, buffer2)
80165 : REAL(dp), DIMENSION(10*15*3*10), INTENT(IN) :: work
80166 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80167 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80168 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80169 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
80170 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
80171 : REAL(dp), &
80172 : DIMENSION(7*nl_a, 9*nl_b, 3*nl_c, 7*nl_d) :: primitives
80173 : REAL(dp), DIMENSION(10*15*3*10) :: buffer1, buffer2
80174 :
80175 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80176 : kmax, s_offset_a1, s_offset_b1, &
80177 : s_offset_c1, s_offset_d1
80178 :
80179 : s_offset_a1 = 0
80180 : DO ia = 1, nl_a
80181 : s_offset_b1 = 0
80182 : DO ib = 1, nl_b
80183 : s_offset_c1 = 0
80184 : DO ic = 1, nl_c
80185 : s_offset_d1 = 0
80186 : DO id = 1, nl_d
80187 : buffer1 = 0.0_dp
80188 : imax = 15*3*10
80189 : kmax = 10
80190 : DO i = 1, imax
80191 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80192 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80193 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80194 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80195 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80196 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80197 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80198 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80199 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80200 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80201 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80202 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80203 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80204 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80205 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80206 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80207 : END DO
80208 : buffer2 = 0.0_dp
80209 : imax = 7*3*10
80210 : kmax = 15
80211 : DO i = 1, imax
80212 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80213 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80214 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80215 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80216 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80217 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80218 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80219 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80220 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80221 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80222 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80223 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80224 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80225 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80226 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80227 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80228 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80229 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80230 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80231 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80232 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80233 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80234 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80235 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80236 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80237 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80238 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80239 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80240 : END DO
80241 : buffer1 = 0.0_dp
80242 : imax = 7*9*10
80243 : kmax = 3
80244 : DO i = 1, imax
80245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80246 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80247 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
80248 : END DO
80249 : imax = 7*9*3
80250 : kmax = 10
80251 : i = 0
80252 : DO i1 = 1, 3
80253 : DO i2 = 1, 9
80254 : DO i3 = 1, 7
80255 : i = i + 1
80256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80258 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
80259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80261 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
80262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80264 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
80265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80267 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
80268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80270 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
80271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
80272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
80273 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
80274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80276 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
80277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80279 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
80280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
80282 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
80283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80285 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
80286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80288 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
80289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80291 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
80292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80294 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
80295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
80296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
80297 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
80298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80300 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
80301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80303 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
80304 : END DO
80305 : END DO
80306 : END DO
80307 : s_offset_d1 = s_offset_d1 + 7
80308 : END DO
80309 : s_offset_c1 = s_offset_c1 + 3
80310 : END DO
80311 : s_offset_b1 = s_offset_b1 + 9
80312 : END DO
80313 : s_offset_a1 = s_offset_a1 + 7
80314 : END DO
80315 : END SUBROUTINE contract_fgpf
80316 : #endif
80317 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80318 : ! **************************************************************************************************
80319 : !> \brief ...
80320 : !> \param work ...
80321 : !> \param nl_a ...
80322 : !> \param nl_b ...
80323 : !> \param nl_c ...
80324 : !> \param nl_d ...
80325 : !> \param sphi_a ...
80326 : !> \param sphi_b ...
80327 : !> \param sphi_c ...
80328 : !> \param sphi_d ...
80329 : !> \param primitives ...
80330 : !> \param buffer1 ...
80331 : !> \param buffer2 ...
80332 : ! **************************************************************************************************
80333 : SUBROUTINE contract_fgpg(work, &
80334 : nl_a, nl_b, nl_c, nl_d, &
80335 : sphi_a, sphi_b, sphi_c, sphi_d, &
80336 : primitives, &
80337 : buffer1, buffer2)
80338 : REAL(dp), DIMENSION(10*15*3*15), INTENT(IN) :: work
80339 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80340 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80341 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80342 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
80343 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
80344 : REAL(dp), &
80345 : DIMENSION(7*nl_a, 9*nl_b, 3*nl_c, 9*nl_d) :: primitives
80346 : REAL(dp), DIMENSION(10*15*3*15) :: buffer1, buffer2
80347 :
80348 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80349 : kmax, s_offset_a1, s_offset_b1, &
80350 : s_offset_c1, s_offset_d1
80351 :
80352 : s_offset_a1 = 0
80353 : DO ia = 1, nl_a
80354 : s_offset_b1 = 0
80355 : DO ib = 1, nl_b
80356 : s_offset_c1 = 0
80357 : DO ic = 1, nl_c
80358 : s_offset_d1 = 0
80359 : DO id = 1, nl_d
80360 : buffer1 = 0.0_dp
80361 : imax = 15*3*15
80362 : kmax = 10
80363 : DO i = 1, imax
80364 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80365 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80366 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80367 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80368 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80369 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80370 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80371 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80372 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80373 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80374 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80375 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80377 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80378 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80380 : END DO
80381 : buffer2 = 0.0_dp
80382 : imax = 7*3*15
80383 : kmax = 15
80384 : DO i = 1, imax
80385 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80386 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80387 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80388 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80389 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80390 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80391 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80392 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80393 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80394 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80395 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80396 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80397 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80398 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80399 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80400 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80401 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80402 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80403 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80404 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80405 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80406 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80407 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80408 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80409 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80410 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80411 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80412 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80413 : END DO
80414 : buffer1 = 0.0_dp
80415 : imax = 7*9*15
80416 : kmax = 3
80417 : DO i = 1, imax
80418 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80419 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80420 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
80421 : END DO
80422 : imax = 7*9*3
80423 : kmax = 15
80424 : i = 0
80425 : DO i1 = 1, 3
80426 : DO i2 = 1, 9
80427 : DO i3 = 1, 7
80428 : i = i + 1
80429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80431 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
80432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80434 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
80435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
80436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
80437 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
80438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80440 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
80441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80443 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
80444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
80445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
80446 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
80447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
80448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
80449 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
80450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80452 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
80453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
80454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
80455 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
80456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
80458 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
80459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80461 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
80462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80464 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
80465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80467 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
80468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80470 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
80471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80473 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
80474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
80475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
80476 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
80477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
80478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
80479 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
80480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80482 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
80483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
80484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
80485 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
80486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80488 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
80489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80491 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
80492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
80493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
80494 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
80495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
80497 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
80498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80500 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
80501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80503 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
80504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
80505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
80506 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
80507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80509 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
80510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80512 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
80513 : END DO
80514 : END DO
80515 : END DO
80516 : s_offset_d1 = s_offset_d1 + 9
80517 : END DO
80518 : s_offset_c1 = s_offset_c1 + 3
80519 : END DO
80520 : s_offset_b1 = s_offset_b1 + 9
80521 : END DO
80522 : s_offset_a1 = s_offset_a1 + 7
80523 : END DO
80524 : END SUBROUTINE contract_fgpg
80525 : #endif
80526 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80527 : ! **************************************************************************************************
80528 : !> \brief ...
80529 : !> \param work ...
80530 : !> \param nl_a ...
80531 : !> \param nl_b ...
80532 : !> \param nl_c ...
80533 : !> \param nl_d ...
80534 : !> \param sphi_a ...
80535 : !> \param sphi_b ...
80536 : !> \param sphi_c ...
80537 : !> \param sphi_d ...
80538 : !> \param primitives ...
80539 : !> \param buffer1 ...
80540 : !> \param buffer2 ...
80541 : ! **************************************************************************************************
80542 : SUBROUTINE contract_fgds(work, &
80543 : nl_a, nl_b, nl_c, nl_d, &
80544 : sphi_a, sphi_b, sphi_c, sphi_d, &
80545 : primitives, &
80546 : buffer1, buffer2)
80547 : REAL(dp), DIMENSION(10*15*6*1), INTENT(IN) :: work
80548 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80549 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80550 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80551 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
80552 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
80553 : REAL(dp), &
80554 : DIMENSION(7*nl_a, 9*nl_b, 5*nl_c, 1*nl_d) :: primitives
80555 : REAL(dp), DIMENSION(10*15*6*1) :: buffer1, buffer2
80556 :
80557 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80558 : kmax, s_offset_a1, s_offset_b1, &
80559 : s_offset_c1, s_offset_d1
80560 :
80561 : s_offset_a1 = 0
80562 : DO ia = 1, nl_a
80563 : s_offset_b1 = 0
80564 : DO ib = 1, nl_b
80565 : s_offset_c1 = 0
80566 : DO ic = 1, nl_c
80567 : s_offset_d1 = 0
80568 : DO id = 1, nl_d
80569 : buffer1 = 0.0_dp
80570 : imax = 15*6*1
80571 : kmax = 10
80572 : DO i = 1, imax
80573 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80574 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80575 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80577 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80578 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80580 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80581 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80583 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80584 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80586 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80587 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80588 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80589 : END DO
80590 : buffer2 = 0.0_dp
80591 : imax = 7*6*1
80592 : kmax = 15
80593 : DO i = 1, imax
80594 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80595 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80596 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80597 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80598 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80599 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80600 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80601 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80602 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80603 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80604 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80605 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80606 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80607 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80608 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80609 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80610 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80611 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80612 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80613 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80614 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80615 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80616 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80617 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80618 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80619 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80620 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80621 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80622 : END DO
80623 : buffer1 = 0.0_dp
80624 : imax = 7*9*1
80625 : kmax = 6
80626 : DO i = 1, imax
80627 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80628 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
80629 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80630 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
80631 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
80632 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
80633 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
80634 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
80635 : END DO
80636 : imax = 7*9*5
80637 : kmax = 1
80638 : i = 0
80639 : DO i1 = 1, 5
80640 : DO i2 = 1, 9
80641 : DO i3 = 1, 7
80642 : i = i + 1
80643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
80645 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
80646 : END DO
80647 : END DO
80648 : END DO
80649 : s_offset_d1 = s_offset_d1 + 1
80650 : END DO
80651 : s_offset_c1 = s_offset_c1 + 5
80652 : END DO
80653 : s_offset_b1 = s_offset_b1 + 9
80654 : END DO
80655 : s_offset_a1 = s_offset_a1 + 7
80656 : END DO
80657 : END SUBROUTINE contract_fgds
80658 : #endif
80659 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80660 : ! **************************************************************************************************
80661 : !> \brief ...
80662 : !> \param work ...
80663 : !> \param nl_a ...
80664 : !> \param nl_b ...
80665 : !> \param nl_c ...
80666 : !> \param nl_d ...
80667 : !> \param sphi_a ...
80668 : !> \param sphi_b ...
80669 : !> \param sphi_c ...
80670 : !> \param sphi_d ...
80671 : !> \param primitives ...
80672 : !> \param buffer1 ...
80673 : !> \param buffer2 ...
80674 : ! **************************************************************************************************
80675 : SUBROUTINE contract_fgdp(work, &
80676 : nl_a, nl_b, nl_c, nl_d, &
80677 : sphi_a, sphi_b, sphi_c, sphi_d, &
80678 : primitives, &
80679 : buffer1, buffer2)
80680 : REAL(dp), DIMENSION(10*15*6*3), INTENT(IN) :: work
80681 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80682 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80683 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80684 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
80685 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
80686 : REAL(dp), &
80687 : DIMENSION(7*nl_a, 9*nl_b, 5*nl_c, 3*nl_d) :: primitives
80688 : REAL(dp), DIMENSION(10*15*6*3) :: buffer1, buffer2
80689 :
80690 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80691 : kmax, s_offset_a1, s_offset_b1, &
80692 : s_offset_c1, s_offset_d1
80693 :
80694 : s_offset_a1 = 0
80695 : DO ia = 1, nl_a
80696 : s_offset_b1 = 0
80697 : DO ib = 1, nl_b
80698 : s_offset_c1 = 0
80699 : DO ic = 1, nl_c
80700 : s_offset_d1 = 0
80701 : DO id = 1, nl_d
80702 : buffer1 = 0.0_dp
80703 : imax = 15*6*3
80704 : kmax = 10
80705 : DO i = 1, imax
80706 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80707 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80708 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80709 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80710 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80711 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80713 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80714 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80715 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80716 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80717 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80718 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80719 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80720 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80721 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80722 : END DO
80723 : buffer2 = 0.0_dp
80724 : imax = 7*6*3
80725 : kmax = 15
80726 : DO i = 1, imax
80727 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80728 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80729 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80730 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80731 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80732 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80733 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80734 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80735 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80736 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80737 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80738 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80739 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80740 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80741 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80742 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80743 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80744 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80745 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80746 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80747 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80748 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80749 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80750 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80751 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80752 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80753 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80754 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80755 : END DO
80756 : buffer1 = 0.0_dp
80757 : imax = 7*9*3
80758 : kmax = 6
80759 : DO i = 1, imax
80760 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80761 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
80762 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80763 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
80764 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
80765 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
80766 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
80767 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
80768 : END DO
80769 : imax = 7*9*5
80770 : kmax = 3
80771 : i = 0
80772 : DO i1 = 1, 5
80773 : DO i2 = 1, 9
80774 : DO i3 = 1, 7
80775 : i = i + 1
80776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
80778 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
80779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
80781 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
80782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
80784 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
80785 : END DO
80786 : END DO
80787 : END DO
80788 : s_offset_d1 = s_offset_d1 + 3
80789 : END DO
80790 : s_offset_c1 = s_offset_c1 + 5
80791 : END DO
80792 : s_offset_b1 = s_offset_b1 + 9
80793 : END DO
80794 : s_offset_a1 = s_offset_a1 + 7
80795 : END DO
80796 : END SUBROUTINE contract_fgdp
80797 : #endif
80798 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80799 : ! **************************************************************************************************
80800 : !> \brief ...
80801 : !> \param work ...
80802 : !> \param nl_a ...
80803 : !> \param nl_b ...
80804 : !> \param nl_c ...
80805 : !> \param nl_d ...
80806 : !> \param sphi_a ...
80807 : !> \param sphi_b ...
80808 : !> \param sphi_c ...
80809 : !> \param sphi_d ...
80810 : !> \param primitives ...
80811 : !> \param buffer1 ...
80812 : !> \param buffer2 ...
80813 : ! **************************************************************************************************
80814 : SUBROUTINE contract_fgdd(work, &
80815 : nl_a, nl_b, nl_c, nl_d, &
80816 : sphi_a, sphi_b, sphi_c, sphi_d, &
80817 : primitives, &
80818 : buffer1, buffer2)
80819 : REAL(dp), DIMENSION(10*15*6*6), INTENT(IN) :: work
80820 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80821 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80822 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80823 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
80824 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
80825 : REAL(dp), &
80826 : DIMENSION(7*nl_a, 9*nl_b, 5*nl_c, 5*nl_d) :: primitives
80827 : REAL(dp), DIMENSION(10*15*6*6) :: buffer1, buffer2
80828 :
80829 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80830 : kmax, s_offset_a1, s_offset_b1, &
80831 : s_offset_c1, s_offset_d1
80832 :
80833 : s_offset_a1 = 0
80834 : DO ia = 1, nl_a
80835 : s_offset_b1 = 0
80836 : DO ib = 1, nl_b
80837 : s_offset_c1 = 0
80838 : DO ic = 1, nl_c
80839 : s_offset_d1 = 0
80840 : DO id = 1, nl_d
80841 : buffer1 = 0.0_dp
80842 : imax = 15*6*6
80843 : kmax = 10
80844 : DO i = 1, imax
80845 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
80846 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
80847 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
80848 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
80849 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
80850 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
80851 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
80852 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
80853 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
80854 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
80855 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
80856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
80857 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
80858 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
80859 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
80860 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
80861 : END DO
80862 : buffer2 = 0.0_dp
80863 : imax = 7*6*6
80864 : kmax = 15
80865 : DO i = 1, imax
80866 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
80867 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
80868 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
80869 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
80870 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
80871 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
80872 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
80873 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
80874 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
80875 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
80876 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
80877 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
80878 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
80879 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
80880 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
80881 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
80882 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
80883 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
80884 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
80885 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
80886 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
80887 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
80888 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
80889 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
80890 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
80891 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
80892 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
80893 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
80894 : END DO
80895 : buffer1 = 0.0_dp
80896 : imax = 7*9*6
80897 : kmax = 6
80898 : DO i = 1, imax
80899 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
80900 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
80901 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
80902 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
80903 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
80904 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
80905 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
80906 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
80907 : END DO
80908 : imax = 7*9*5
80909 : kmax = 6
80910 : i = 0
80911 : DO i1 = 1, 5
80912 : DO i2 = 1, 9
80913 : DO i3 = 1, 7
80914 : i = i + 1
80915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80917 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
80918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80920 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
80921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
80922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
80923 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
80924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
80925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
80926 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
80927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80929 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
80930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
80931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
80932 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
80933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
80934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
80935 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
80936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
80937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
80938 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
80939 : END DO
80940 : END DO
80941 : END DO
80942 : s_offset_d1 = s_offset_d1 + 5
80943 : END DO
80944 : s_offset_c1 = s_offset_c1 + 5
80945 : END DO
80946 : s_offset_b1 = s_offset_b1 + 9
80947 : END DO
80948 : s_offset_a1 = s_offset_a1 + 7
80949 : END DO
80950 : END SUBROUTINE contract_fgdd
80951 : #endif
80952 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
80953 : ! **************************************************************************************************
80954 : !> \brief ...
80955 : !> \param work ...
80956 : !> \param nl_a ...
80957 : !> \param nl_b ...
80958 : !> \param nl_c ...
80959 : !> \param nl_d ...
80960 : !> \param sphi_a ...
80961 : !> \param sphi_b ...
80962 : !> \param sphi_c ...
80963 : !> \param sphi_d ...
80964 : !> \param primitives ...
80965 : !> \param buffer1 ...
80966 : !> \param buffer2 ...
80967 : ! **************************************************************************************************
80968 : SUBROUTINE contract_fgdf(work, &
80969 : nl_a, nl_b, nl_c, nl_d, &
80970 : sphi_a, sphi_b, sphi_c, sphi_d, &
80971 : primitives, &
80972 : buffer1, buffer2)
80973 : REAL(dp), DIMENSION(10*15*6*10), INTENT(IN) :: work
80974 : INTEGER :: nl_a, nl_b, nl_c, nl_d
80975 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
80976 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
80977 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
80978 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
80979 : REAL(dp), &
80980 : DIMENSION(7*nl_a, 9*nl_b, 5*nl_c, 7*nl_d) :: primitives
80981 : REAL(dp), DIMENSION(10*15*6*10) :: buffer1, buffer2
80982 :
80983 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
80984 : kmax, s_offset_a1, s_offset_b1, &
80985 : s_offset_c1, s_offset_d1
80986 :
80987 : s_offset_a1 = 0
80988 : DO ia = 1, nl_a
80989 : s_offset_b1 = 0
80990 : DO ib = 1, nl_b
80991 : s_offset_c1 = 0
80992 : DO ic = 1, nl_c
80993 : s_offset_d1 = 0
80994 : DO id = 1, nl_d
80995 : buffer1 = 0.0_dp
80996 : imax = 15*6*10
80997 : kmax = 10
80998 : DO i = 1, imax
80999 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81000 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81001 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81002 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81003 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81004 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81005 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81006 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81007 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81008 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81009 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81010 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81011 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81012 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81013 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81014 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81015 : END DO
81016 : buffer2 = 0.0_dp
81017 : imax = 7*6*10
81018 : kmax = 15
81019 : DO i = 1, imax
81020 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81021 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81022 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81023 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81024 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81025 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81026 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81027 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81028 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81029 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81030 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81031 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81032 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81033 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81034 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81035 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81036 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81037 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81038 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81039 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81040 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81041 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81042 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81043 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81044 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81045 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81046 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81047 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81048 : END DO
81049 : buffer1 = 0.0_dp
81050 : imax = 7*9*10
81051 : kmax = 6
81052 : DO i = 1, imax
81053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
81054 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81055 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81056 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81057 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
81058 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81059 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81060 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
81061 : END DO
81062 : imax = 7*9*5
81063 : kmax = 10
81064 : i = 0
81065 : DO i1 = 1, 5
81066 : DO i2 = 1, 9
81067 : DO i3 = 1, 7
81068 : i = i + 1
81069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81071 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
81072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81074 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
81075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81077 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
81078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81080 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
81081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81083 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
81084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81086 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
81087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81089 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
81090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81092 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
81093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
81095 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
81096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81098 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
81099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81101 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
81102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81104 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
81105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81107 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
81108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81110 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
81111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81113 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
81114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81116 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
81117 : END DO
81118 : END DO
81119 : END DO
81120 : s_offset_d1 = s_offset_d1 + 7
81121 : END DO
81122 : s_offset_c1 = s_offset_c1 + 5
81123 : END DO
81124 : s_offset_b1 = s_offset_b1 + 9
81125 : END DO
81126 : s_offset_a1 = s_offset_a1 + 7
81127 : END DO
81128 : END SUBROUTINE contract_fgdf
81129 : #endif
81130 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81131 : ! **************************************************************************************************
81132 : !> \brief ...
81133 : !> \param work ...
81134 : !> \param nl_a ...
81135 : !> \param nl_b ...
81136 : !> \param nl_c ...
81137 : !> \param nl_d ...
81138 : !> \param sphi_a ...
81139 : !> \param sphi_b ...
81140 : !> \param sphi_c ...
81141 : !> \param sphi_d ...
81142 : !> \param primitives ...
81143 : !> \param buffer1 ...
81144 : !> \param buffer2 ...
81145 : ! **************************************************************************************************
81146 : SUBROUTINE contract_fgdg(work, &
81147 : nl_a, nl_b, nl_c, nl_d, &
81148 : sphi_a, sphi_b, sphi_c, sphi_d, &
81149 : primitives, &
81150 : buffer1, buffer2)
81151 : REAL(dp), DIMENSION(10*15*6*15), INTENT(IN) :: work
81152 : INTEGER :: nl_a, nl_b, nl_c, nl_d
81153 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
81154 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
81155 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
81156 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
81157 : REAL(dp), &
81158 : DIMENSION(7*nl_a, 9*nl_b, 5*nl_c, 9*nl_d) :: primitives
81159 : REAL(dp), DIMENSION(10*15*6*15) :: buffer1, buffer2
81160 :
81161 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
81162 : kmax, s_offset_a1, s_offset_b1, &
81163 : s_offset_c1, s_offset_d1
81164 :
81165 : s_offset_a1 = 0
81166 : DO ia = 1, nl_a
81167 : s_offset_b1 = 0
81168 : DO ib = 1, nl_b
81169 : s_offset_c1 = 0
81170 : DO ic = 1, nl_c
81171 : s_offset_d1 = 0
81172 : DO id = 1, nl_d
81173 : buffer1 = 0.0_dp
81174 : imax = 15*6*15
81175 : kmax = 10
81176 : DO i = 1, imax
81177 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81178 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81179 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81180 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81182 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81183 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81184 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81185 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81186 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81187 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81188 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81189 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81190 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81191 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81192 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81193 : END DO
81194 : buffer2 = 0.0_dp
81195 : imax = 7*6*15
81196 : kmax = 15
81197 : DO i = 1, imax
81198 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81199 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81200 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81201 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81202 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81203 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81204 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81205 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81206 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81207 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81208 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81209 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81210 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81211 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81212 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81213 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81214 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81215 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81216 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81217 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81218 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81219 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81220 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81221 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81222 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81223 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81224 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81225 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81226 : END DO
81227 : buffer1 = 0.0_dp
81228 : imax = 7*9*15
81229 : kmax = 6
81230 : DO i = 1, imax
81231 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
81232 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81233 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81234 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81235 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
81236 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81237 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81238 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
81239 : END DO
81240 : imax = 7*9*5
81241 : kmax = 15
81242 : i = 0
81243 : DO i1 = 1, 5
81244 : DO i2 = 1, 9
81245 : DO i3 = 1, 7
81246 : i = i + 1
81247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81249 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
81250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81252 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
81253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
81254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
81255 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
81256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81258 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
81259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81261 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
81262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81264 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
81265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
81266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
81267 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
81268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81270 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
81271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
81272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
81273 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
81274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
81276 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
81277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81279 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
81280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81282 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
81283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81285 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
81286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81288 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
81289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81291 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
81292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81294 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
81295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
81296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
81297 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
81298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81300 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
81301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81303 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
81304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81306 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
81307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81309 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
81310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
81311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
81312 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
81313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
81315 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
81316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81318 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
81319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81321 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
81322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81324 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
81325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81327 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
81328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81330 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
81331 : END DO
81332 : END DO
81333 : END DO
81334 : s_offset_d1 = s_offset_d1 + 9
81335 : END DO
81336 : s_offset_c1 = s_offset_c1 + 5
81337 : END DO
81338 : s_offset_b1 = s_offset_b1 + 9
81339 : END DO
81340 : s_offset_a1 = s_offset_a1 + 7
81341 : END DO
81342 : END SUBROUTINE contract_fgdg
81343 : #endif
81344 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81345 : ! **************************************************************************************************
81346 : !> \brief ...
81347 : !> \param work ...
81348 : !> \param nl_a ...
81349 : !> \param nl_b ...
81350 : !> \param nl_c ...
81351 : !> \param nl_d ...
81352 : !> \param sphi_a ...
81353 : !> \param sphi_b ...
81354 : !> \param sphi_c ...
81355 : !> \param sphi_d ...
81356 : !> \param primitives ...
81357 : !> \param buffer1 ...
81358 : !> \param buffer2 ...
81359 : ! **************************************************************************************************
81360 : SUBROUTINE contract_fgfs(work, &
81361 : nl_a, nl_b, nl_c, nl_d, &
81362 : sphi_a, sphi_b, sphi_c, sphi_d, &
81363 : primitives, &
81364 : buffer1, buffer2)
81365 : REAL(dp), DIMENSION(10*15*10*1), INTENT(IN) :: work
81366 : INTEGER :: nl_a, nl_b, nl_c, nl_d
81367 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
81368 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
81369 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
81370 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
81371 : REAL(dp), &
81372 : DIMENSION(7*nl_a, 9*nl_b, 7*nl_c, 1*nl_d) :: primitives
81373 : REAL(dp), DIMENSION(10*15*10*1) :: buffer1, buffer2
81374 :
81375 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
81376 : kmax, s_offset_a1, s_offset_b1, &
81377 : s_offset_c1, s_offset_d1
81378 :
81379 : s_offset_a1 = 0
81380 : DO ia = 1, nl_a
81381 : s_offset_b1 = 0
81382 : DO ib = 1, nl_b
81383 : s_offset_c1 = 0
81384 : DO ic = 1, nl_c
81385 : s_offset_d1 = 0
81386 : DO id = 1, nl_d
81387 : buffer1 = 0.0_dp
81388 : imax = 15*10*1
81389 : kmax = 10
81390 : DO i = 1, imax
81391 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81392 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81393 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81394 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81395 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81396 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81397 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81398 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81399 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81400 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81401 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81402 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81403 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81404 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81406 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81407 : END DO
81408 : buffer2 = 0.0_dp
81409 : imax = 7*10*1
81410 : kmax = 15
81411 : DO i = 1, imax
81412 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81413 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81414 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81415 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81416 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81417 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81418 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81419 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81420 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81421 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81422 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81423 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81424 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81425 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81426 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81427 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81428 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81429 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81430 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81431 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81432 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81433 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81434 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81435 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81436 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81437 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81438 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81439 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81440 : END DO
81441 : buffer1 = 0.0_dp
81442 : imax = 7*9*1
81443 : kmax = 10
81444 : DO i = 1, imax
81445 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81446 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
81447 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81448 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
81449 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81450 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
81451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81452 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
81453 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81454 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
81455 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
81456 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
81457 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
81458 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
81459 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
81460 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
81461 : END DO
81462 : imax = 7*9*7
81463 : kmax = 1
81464 : i = 0
81465 : DO i1 = 1, 7
81466 : DO i2 = 1, 9
81467 : DO i3 = 1, 7
81468 : i = i + 1
81469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
81471 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
81472 : END DO
81473 : END DO
81474 : END DO
81475 : s_offset_d1 = s_offset_d1 + 1
81476 : END DO
81477 : s_offset_c1 = s_offset_c1 + 7
81478 : END DO
81479 : s_offset_b1 = s_offset_b1 + 9
81480 : END DO
81481 : s_offset_a1 = s_offset_a1 + 7
81482 : END DO
81483 : END SUBROUTINE contract_fgfs
81484 : #endif
81485 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81486 : ! **************************************************************************************************
81487 : !> \brief ...
81488 : !> \param work ...
81489 : !> \param nl_a ...
81490 : !> \param nl_b ...
81491 : !> \param nl_c ...
81492 : !> \param nl_d ...
81493 : !> \param sphi_a ...
81494 : !> \param sphi_b ...
81495 : !> \param sphi_c ...
81496 : !> \param sphi_d ...
81497 : !> \param primitives ...
81498 : !> \param buffer1 ...
81499 : !> \param buffer2 ...
81500 : ! **************************************************************************************************
81501 : SUBROUTINE contract_fgfp(work, &
81502 : nl_a, nl_b, nl_c, nl_d, &
81503 : sphi_a, sphi_b, sphi_c, sphi_d, &
81504 : primitives, &
81505 : buffer1, buffer2)
81506 : REAL(dp), DIMENSION(10*15*10*3), INTENT(IN) :: work
81507 : INTEGER :: nl_a, nl_b, nl_c, nl_d
81508 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
81509 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
81510 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
81511 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
81512 : REAL(dp), &
81513 : DIMENSION(7*nl_a, 9*nl_b, 7*nl_c, 3*nl_d) :: primitives
81514 : REAL(dp), DIMENSION(10*15*10*3) :: buffer1, buffer2
81515 :
81516 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
81517 : kmax, s_offset_a1, s_offset_b1, &
81518 : s_offset_c1, s_offset_d1
81519 :
81520 : s_offset_a1 = 0
81521 : DO ia = 1, nl_a
81522 : s_offset_b1 = 0
81523 : DO ib = 1, nl_b
81524 : s_offset_c1 = 0
81525 : DO ic = 1, nl_c
81526 : s_offset_d1 = 0
81527 : DO id = 1, nl_d
81528 : buffer1 = 0.0_dp
81529 : imax = 15*10*3
81530 : kmax = 10
81531 : DO i = 1, imax
81532 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81533 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81534 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81535 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81536 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81537 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81538 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81539 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81540 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81541 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81542 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81543 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81544 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81545 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81546 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81547 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81548 : END DO
81549 : buffer2 = 0.0_dp
81550 : imax = 7*10*3
81551 : kmax = 15
81552 : DO i = 1, imax
81553 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81554 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81555 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81556 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81557 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81558 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81559 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81560 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81561 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81562 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81563 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81564 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81565 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81566 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81567 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81568 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81569 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81570 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81571 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81572 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81573 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81574 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81575 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81576 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81577 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81578 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81579 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81580 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81581 : END DO
81582 : buffer1 = 0.0_dp
81583 : imax = 7*9*3
81584 : kmax = 10
81585 : DO i = 1, imax
81586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81587 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
81588 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81589 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
81590 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81591 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
81592 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81593 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
81594 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81595 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
81596 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
81597 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
81598 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
81599 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
81600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
81601 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
81602 : END DO
81603 : imax = 7*9*7
81604 : kmax = 3
81605 : i = 0
81606 : DO i1 = 1, 7
81607 : DO i2 = 1, 9
81608 : DO i3 = 1, 7
81609 : i = i + 1
81610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
81612 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
81613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
81615 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
81616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
81618 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
81619 : END DO
81620 : END DO
81621 : END DO
81622 : s_offset_d1 = s_offset_d1 + 3
81623 : END DO
81624 : s_offset_c1 = s_offset_c1 + 7
81625 : END DO
81626 : s_offset_b1 = s_offset_b1 + 9
81627 : END DO
81628 : s_offset_a1 = s_offset_a1 + 7
81629 : END DO
81630 : END SUBROUTINE contract_fgfp
81631 : #endif
81632 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81633 : ! **************************************************************************************************
81634 : !> \brief ...
81635 : !> \param work ...
81636 : !> \param nl_a ...
81637 : !> \param nl_b ...
81638 : !> \param nl_c ...
81639 : !> \param nl_d ...
81640 : !> \param sphi_a ...
81641 : !> \param sphi_b ...
81642 : !> \param sphi_c ...
81643 : !> \param sphi_d ...
81644 : !> \param primitives ...
81645 : !> \param buffer1 ...
81646 : !> \param buffer2 ...
81647 : ! **************************************************************************************************
81648 : SUBROUTINE contract_fgfd(work, &
81649 : nl_a, nl_b, nl_c, nl_d, &
81650 : sphi_a, sphi_b, sphi_c, sphi_d, &
81651 : primitives, &
81652 : buffer1, buffer2)
81653 : REAL(dp), DIMENSION(10*15*10*6), INTENT(IN) :: work
81654 : INTEGER :: nl_a, nl_b, nl_c, nl_d
81655 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
81656 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
81657 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
81658 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
81659 : REAL(dp), &
81660 : DIMENSION(7*nl_a, 9*nl_b, 7*nl_c, 5*nl_d) :: primitives
81661 : REAL(dp), DIMENSION(10*15*10*6) :: buffer1, buffer2
81662 :
81663 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
81664 : kmax, s_offset_a1, s_offset_b1, &
81665 : s_offset_c1, s_offset_d1
81666 :
81667 : s_offset_a1 = 0
81668 : DO ia = 1, nl_a
81669 : s_offset_b1 = 0
81670 : DO ib = 1, nl_b
81671 : s_offset_c1 = 0
81672 : DO ic = 1, nl_c
81673 : s_offset_d1 = 0
81674 : DO id = 1, nl_d
81675 : buffer1 = 0.0_dp
81676 : imax = 15*10*6
81677 : kmax = 10
81678 : DO i = 1, imax
81679 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81680 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81681 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81682 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81683 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81684 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81686 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81687 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81688 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81689 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81690 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81691 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81692 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81693 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81694 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81695 : END DO
81696 : buffer2 = 0.0_dp
81697 : imax = 7*10*6
81698 : kmax = 15
81699 : DO i = 1, imax
81700 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81701 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81702 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81703 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81704 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81705 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81706 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81707 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81708 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81709 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81710 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81711 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81712 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81713 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81714 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81715 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81716 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81717 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81718 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81719 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81720 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81721 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81722 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81723 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81724 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81725 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81726 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81727 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81728 : END DO
81729 : buffer1 = 0.0_dp
81730 : imax = 7*9*6
81731 : kmax = 10
81732 : DO i = 1, imax
81733 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81734 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
81735 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81736 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
81737 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81738 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
81739 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81740 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
81741 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81742 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
81743 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
81744 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
81745 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
81746 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
81747 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
81748 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
81749 : END DO
81750 : imax = 7*9*7
81751 : kmax = 6
81752 : i = 0
81753 : DO i1 = 1, 7
81754 : DO i2 = 1, 9
81755 : DO i3 = 1, 7
81756 : i = i + 1
81757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81759 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
81760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81762 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
81763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81765 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
81766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81768 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
81769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81771 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
81772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81774 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
81775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
81777 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
81778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81780 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
81781 : END DO
81782 : END DO
81783 : END DO
81784 : s_offset_d1 = s_offset_d1 + 5
81785 : END DO
81786 : s_offset_c1 = s_offset_c1 + 7
81787 : END DO
81788 : s_offset_b1 = s_offset_b1 + 9
81789 : END DO
81790 : s_offset_a1 = s_offset_a1 + 7
81791 : END DO
81792 : END SUBROUTINE contract_fgfd
81793 : #endif
81794 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81795 : ! **************************************************************************************************
81796 : !> \brief ...
81797 : !> \param work ...
81798 : !> \param nl_a ...
81799 : !> \param nl_b ...
81800 : !> \param nl_c ...
81801 : !> \param nl_d ...
81802 : !> \param sphi_a ...
81803 : !> \param sphi_b ...
81804 : !> \param sphi_c ...
81805 : !> \param sphi_d ...
81806 : !> \param primitives ...
81807 : !> \param buffer1 ...
81808 : !> \param buffer2 ...
81809 : ! **************************************************************************************************
81810 : SUBROUTINE contract_fgff(work, &
81811 : nl_a, nl_b, nl_c, nl_d, &
81812 : sphi_a, sphi_b, sphi_c, sphi_d, &
81813 : primitives, &
81814 : buffer1, buffer2)
81815 : REAL(dp), DIMENSION(10*15*10*10), INTENT(IN) :: work
81816 : INTEGER :: nl_a, nl_b, nl_c, nl_d
81817 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
81818 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
81819 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
81820 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
81821 : REAL(dp), &
81822 : DIMENSION(7*nl_a, 9*nl_b, 7*nl_c, 7*nl_d) :: primitives
81823 : REAL(dp), DIMENSION(10*15*10*10) :: buffer1, buffer2
81824 :
81825 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
81826 : kmax, s_offset_a1, s_offset_b1, &
81827 : s_offset_c1, s_offset_d1
81828 :
81829 : s_offset_a1 = 0
81830 : DO ia = 1, nl_a
81831 : s_offset_b1 = 0
81832 : DO ib = 1, nl_b
81833 : s_offset_c1 = 0
81834 : DO ic = 1, nl_c
81835 : s_offset_d1 = 0
81836 : DO id = 1, nl_d
81837 : buffer1 = 0.0_dp
81838 : imax = 15*10*10
81839 : kmax = 10
81840 : DO i = 1, imax
81841 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
81842 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
81843 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
81844 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
81845 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
81846 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
81847 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
81848 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
81849 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
81850 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
81851 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
81852 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
81853 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
81854 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
81855 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
81856 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
81857 : END DO
81858 : buffer2 = 0.0_dp
81859 : imax = 7*10*10
81860 : kmax = 15
81861 : DO i = 1, imax
81862 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
81863 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
81864 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
81865 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
81866 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
81867 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
81868 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
81869 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
81870 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
81871 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
81872 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
81873 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
81874 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
81875 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
81876 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
81877 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
81878 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
81879 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
81880 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
81881 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
81882 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
81883 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
81884 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
81885 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
81886 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
81887 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
81888 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
81889 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
81890 : END DO
81891 : buffer1 = 0.0_dp
81892 : imax = 7*9*10
81893 : kmax = 10
81894 : DO i = 1, imax
81895 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
81896 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
81897 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
81898 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
81899 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
81900 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
81901 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
81902 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
81903 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
81904 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
81905 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
81906 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
81907 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
81908 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
81909 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
81910 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
81911 : END DO
81912 : imax = 7*9*7
81913 : kmax = 10
81914 : i = 0
81915 : DO i1 = 1, 7
81916 : DO i2 = 1, 9
81917 : DO i3 = 1, 7
81918 : i = i + 1
81919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81920 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81921 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
81922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81924 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
81925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81927 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
81928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81930 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
81931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81933 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
81934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81936 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
81937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81939 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
81940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
81941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
81942 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
81943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
81944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
81945 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
81946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
81947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
81948 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
81949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
81950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
81951 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
81952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81954 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
81955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81957 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
81958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
81959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
81960 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
81961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
81962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
81963 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
81964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
81965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
81966 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
81967 : END DO
81968 : END DO
81969 : END DO
81970 : s_offset_d1 = s_offset_d1 + 7
81971 : END DO
81972 : s_offset_c1 = s_offset_c1 + 7
81973 : END DO
81974 : s_offset_b1 = s_offset_b1 + 9
81975 : END DO
81976 : s_offset_a1 = s_offset_a1 + 7
81977 : END DO
81978 : END SUBROUTINE contract_fgff
81979 : #endif
81980 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
81981 : ! **************************************************************************************************
81982 : !> \brief ...
81983 : !> \param work ...
81984 : !> \param nl_a ...
81985 : !> \param nl_b ...
81986 : !> \param nl_c ...
81987 : !> \param nl_d ...
81988 : !> \param sphi_a ...
81989 : !> \param sphi_b ...
81990 : !> \param sphi_c ...
81991 : !> \param sphi_d ...
81992 : !> \param primitives ...
81993 : !> \param buffer1 ...
81994 : !> \param buffer2 ...
81995 : ! **************************************************************************************************
81996 : SUBROUTINE contract_fgfg(work, &
81997 : nl_a, nl_b, nl_c, nl_d, &
81998 : sphi_a, sphi_b, sphi_c, sphi_d, &
81999 : primitives, &
82000 : buffer1, buffer2)
82001 : REAL(dp), DIMENSION(10*15*10*15), INTENT(IN) :: work
82002 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82003 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82004 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82005 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
82006 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
82007 : REAL(dp), &
82008 : DIMENSION(7*nl_a, 9*nl_b, 7*nl_c, 9*nl_d) :: primitives
82009 : REAL(dp), DIMENSION(10*15*10*15) :: buffer1, buffer2
82010 :
82011 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82012 : kmax, s_offset_a1, s_offset_b1, &
82013 : s_offset_c1, s_offset_d1
82014 :
82015 : s_offset_a1 = 0
82016 : DO ia = 1, nl_a
82017 : s_offset_b1 = 0
82018 : DO ib = 1, nl_b
82019 : s_offset_c1 = 0
82020 : DO ic = 1, nl_c
82021 : s_offset_d1 = 0
82022 : DO id = 1, nl_d
82023 : buffer1 = 0.0_dp
82024 : imax = 15*10*15
82025 : kmax = 10
82026 : DO i = 1, imax
82027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82028 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82029 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82030 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82031 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82032 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82033 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82034 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82035 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82036 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82037 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82038 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82039 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82040 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82041 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82042 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82043 : END DO
82044 : buffer2 = 0.0_dp
82045 : imax = 7*10*15
82046 : kmax = 15
82047 : DO i = 1, imax
82048 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82049 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82050 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82051 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82052 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82053 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82054 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82055 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82056 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82057 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82058 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82059 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82060 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82061 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82062 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82063 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82064 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82065 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82066 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82067 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82068 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82069 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82070 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82071 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82072 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82073 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82074 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82075 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82076 : END DO
82077 : buffer1 = 0.0_dp
82078 : imax = 7*9*15
82079 : kmax = 10
82080 : DO i = 1, imax
82081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82082 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82083 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82084 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82085 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
82086 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82087 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82088 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
82089 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82090 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82091 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
82092 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
82093 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
82094 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
82095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
82096 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
82097 : END DO
82098 : imax = 7*9*7
82099 : kmax = 15
82100 : i = 0
82101 : DO i1 = 1, 7
82102 : DO i2 = 1, 9
82103 : DO i3 = 1, 7
82104 : i = i + 1
82105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82107 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
82108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82110 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
82111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
82112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
82113 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
82114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
82116 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
82117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82119 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
82120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
82121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
82122 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
82123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
82124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
82125 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
82126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82128 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
82129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
82130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
82131 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
82132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
82133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
82134 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
82135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82137 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
82138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82140 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
82141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82143 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
82144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82145 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
82146 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
82147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82148 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82149 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
82150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
82151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
82152 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
82153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
82154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
82155 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
82156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82158 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
82159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
82160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
82161 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
82162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82164 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
82165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82167 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
82168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
82169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
82170 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
82171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
82172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
82173 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
82174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82176 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
82177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82179 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
82180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82182 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
82183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82185 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
82186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82188 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
82189 : END DO
82190 : END DO
82191 : END DO
82192 : s_offset_d1 = s_offset_d1 + 9
82193 : END DO
82194 : s_offset_c1 = s_offset_c1 + 7
82195 : END DO
82196 : s_offset_b1 = s_offset_b1 + 9
82197 : END DO
82198 : s_offset_a1 = s_offset_a1 + 7
82199 : END DO
82200 : END SUBROUTINE contract_fgfg
82201 : #endif
82202 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
82203 : ! **************************************************************************************************
82204 : !> \brief ...
82205 : !> \param work ...
82206 : !> \param nl_a ...
82207 : !> \param nl_b ...
82208 : !> \param nl_c ...
82209 : !> \param nl_d ...
82210 : !> \param sphi_a ...
82211 : !> \param sphi_b ...
82212 : !> \param sphi_c ...
82213 : !> \param sphi_d ...
82214 : !> \param primitives ...
82215 : !> \param buffer1 ...
82216 : !> \param buffer2 ...
82217 : ! **************************************************************************************************
82218 : SUBROUTINE contract_fggs(work, &
82219 : nl_a, nl_b, nl_c, nl_d, &
82220 : sphi_a, sphi_b, sphi_c, sphi_d, &
82221 : primitives, &
82222 : buffer1, buffer2)
82223 : REAL(dp), DIMENSION(10*15*15*1), INTENT(IN) :: work
82224 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82225 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82226 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82227 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
82228 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
82229 : REAL(dp), &
82230 : DIMENSION(7*nl_a, 9*nl_b, 9*nl_c, 1*nl_d) :: primitives
82231 : REAL(dp), DIMENSION(10*15*15*1) :: buffer1, buffer2
82232 :
82233 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82234 : kmax, s_offset_a1, s_offset_b1, &
82235 : s_offset_c1, s_offset_d1
82236 :
82237 : s_offset_a1 = 0
82238 : DO ia = 1, nl_a
82239 : s_offset_b1 = 0
82240 : DO ib = 1, nl_b
82241 : s_offset_c1 = 0
82242 : DO ic = 1, nl_c
82243 : s_offset_d1 = 0
82244 : DO id = 1, nl_d
82245 : buffer1 = 0.0_dp
82246 : imax = 15*15*1
82247 : kmax = 10
82248 : DO i = 1, imax
82249 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82250 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82251 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82252 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82253 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82254 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82255 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82256 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82257 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82258 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82259 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82260 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82261 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82262 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82263 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82265 : END DO
82266 : buffer2 = 0.0_dp
82267 : imax = 7*15*1
82268 : kmax = 15
82269 : DO i = 1, imax
82270 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82271 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82272 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82273 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82274 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82275 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82276 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82277 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82278 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82279 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82280 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82281 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82282 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82283 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82284 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82285 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82286 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82287 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82288 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82289 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82290 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82291 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82292 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82293 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82294 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82295 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82296 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82297 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82298 : END DO
82299 : buffer1 = 0.0_dp
82300 : imax = 7*9*1
82301 : kmax = 15
82302 : DO i = 1, imax
82303 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82304 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82305 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
82306 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82307 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82308 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82309 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
82310 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82311 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
82312 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82313 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
82314 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82315 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
82316 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
82317 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
82318 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
82319 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
82320 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
82321 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
82322 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
82323 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
82324 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
82325 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
82326 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
82327 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
82328 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
82329 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
82330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
82331 : END DO
82332 : imax = 7*9*9
82333 : kmax = 1
82334 : i = 0
82335 : DO i1 = 1, 9
82336 : DO i2 = 1, 9
82337 : DO i3 = 1, 7
82338 : i = i + 1
82339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
82341 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
82342 : END DO
82343 : END DO
82344 : END DO
82345 : s_offset_d1 = s_offset_d1 + 1
82346 : END DO
82347 : s_offset_c1 = s_offset_c1 + 9
82348 : END DO
82349 : s_offset_b1 = s_offset_b1 + 9
82350 : END DO
82351 : s_offset_a1 = s_offset_a1 + 7
82352 : END DO
82353 : END SUBROUTINE contract_fggs
82354 : #endif
82355 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
82356 : ! **************************************************************************************************
82357 : !> \brief ...
82358 : !> \param work ...
82359 : !> \param nl_a ...
82360 : !> \param nl_b ...
82361 : !> \param nl_c ...
82362 : !> \param nl_d ...
82363 : !> \param sphi_a ...
82364 : !> \param sphi_b ...
82365 : !> \param sphi_c ...
82366 : !> \param sphi_d ...
82367 : !> \param primitives ...
82368 : !> \param buffer1 ...
82369 : !> \param buffer2 ...
82370 : ! **************************************************************************************************
82371 : SUBROUTINE contract_fggp(work, &
82372 : nl_a, nl_b, nl_c, nl_d, &
82373 : sphi_a, sphi_b, sphi_c, sphi_d, &
82374 : primitives, &
82375 : buffer1, buffer2)
82376 : REAL(dp), DIMENSION(10*15*15*3), INTENT(IN) :: work
82377 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82378 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82379 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82380 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
82381 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
82382 : REAL(dp), &
82383 : DIMENSION(7*nl_a, 9*nl_b, 9*nl_c, 3*nl_d) :: primitives
82384 : REAL(dp), DIMENSION(10*15*15*3) :: buffer1, buffer2
82385 :
82386 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82387 : kmax, s_offset_a1, s_offset_b1, &
82388 : s_offset_c1, s_offset_d1
82389 :
82390 : s_offset_a1 = 0
82391 : DO ia = 1, nl_a
82392 : s_offset_b1 = 0
82393 : DO ib = 1, nl_b
82394 : s_offset_c1 = 0
82395 : DO ic = 1, nl_c
82396 : s_offset_d1 = 0
82397 : DO id = 1, nl_d
82398 : buffer1 = 0.0_dp
82399 : imax = 15*15*3
82400 : kmax = 10
82401 : DO i = 1, imax
82402 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82403 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82404 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82406 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82407 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82409 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82410 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82411 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82412 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82414 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82415 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82417 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82418 : END DO
82419 : buffer2 = 0.0_dp
82420 : imax = 7*15*3
82421 : kmax = 15
82422 : DO i = 1, imax
82423 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82424 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82425 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82426 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82427 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82428 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82429 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82430 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82431 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82432 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82433 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82434 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82435 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82436 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82437 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82438 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82439 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82440 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82441 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82442 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82443 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82444 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82445 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82446 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82447 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82448 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82449 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82450 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82451 : END DO
82452 : buffer1 = 0.0_dp
82453 : imax = 7*9*3
82454 : kmax = 15
82455 : DO i = 1, imax
82456 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82457 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82458 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
82459 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82460 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82461 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82462 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
82463 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82464 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
82465 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82466 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
82467 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82468 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
82469 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
82470 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
82471 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
82472 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
82473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
82474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
82475 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
82476 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
82477 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
82478 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
82479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
82480 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
82481 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
82482 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
82483 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
82484 : END DO
82485 : imax = 7*9*9
82486 : kmax = 3
82487 : i = 0
82488 : DO i1 = 1, 9
82489 : DO i2 = 1, 9
82490 : DO i3 = 1, 7
82491 : i = i + 1
82492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
82494 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
82495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
82497 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
82498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
82499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
82500 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
82501 : END DO
82502 : END DO
82503 : END DO
82504 : s_offset_d1 = s_offset_d1 + 3
82505 : END DO
82506 : s_offset_c1 = s_offset_c1 + 9
82507 : END DO
82508 : s_offset_b1 = s_offset_b1 + 9
82509 : END DO
82510 : s_offset_a1 = s_offset_a1 + 7
82511 : END DO
82512 : END SUBROUTINE contract_fggp
82513 : #endif
82514 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
82515 : ! **************************************************************************************************
82516 : !> \brief ...
82517 : !> \param work ...
82518 : !> \param nl_a ...
82519 : !> \param nl_b ...
82520 : !> \param nl_c ...
82521 : !> \param nl_d ...
82522 : !> \param sphi_a ...
82523 : !> \param sphi_b ...
82524 : !> \param sphi_c ...
82525 : !> \param sphi_d ...
82526 : !> \param primitives ...
82527 : !> \param buffer1 ...
82528 : !> \param buffer2 ...
82529 : ! **************************************************************************************************
82530 : SUBROUTINE contract_fggd(work, &
82531 : nl_a, nl_b, nl_c, nl_d, &
82532 : sphi_a, sphi_b, sphi_c, sphi_d, &
82533 : primitives, &
82534 : buffer1, buffer2)
82535 : REAL(dp), DIMENSION(10*15*15*6), INTENT(IN) :: work
82536 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82537 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82538 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82539 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
82540 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
82541 : REAL(dp), &
82542 : DIMENSION(7*nl_a, 9*nl_b, 9*nl_c, 5*nl_d) :: primitives
82543 : REAL(dp), DIMENSION(10*15*15*6) :: buffer1, buffer2
82544 :
82545 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82546 : kmax, s_offset_a1, s_offset_b1, &
82547 : s_offset_c1, s_offset_d1
82548 :
82549 : s_offset_a1 = 0
82550 : DO ia = 1, nl_a
82551 : s_offset_b1 = 0
82552 : DO ib = 1, nl_b
82553 : s_offset_c1 = 0
82554 : DO ic = 1, nl_c
82555 : s_offset_d1 = 0
82556 : DO id = 1, nl_d
82557 : buffer1 = 0.0_dp
82558 : imax = 15*15*6
82559 : kmax = 10
82560 : DO i = 1, imax
82561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82562 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82564 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82565 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82566 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82567 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82568 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82569 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82571 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82572 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82573 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82574 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82575 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82576 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82577 : END DO
82578 : buffer2 = 0.0_dp
82579 : imax = 7*15*6
82580 : kmax = 15
82581 : DO i = 1, imax
82582 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82583 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82584 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82585 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82586 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82587 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82588 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82589 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82590 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82591 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82592 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82593 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82594 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82595 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82596 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82597 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82598 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82599 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82600 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82601 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82602 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82603 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82604 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82605 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82606 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82607 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82608 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82609 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82610 : END DO
82611 : buffer1 = 0.0_dp
82612 : imax = 7*9*6
82613 : kmax = 15
82614 : DO i = 1, imax
82615 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82616 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82617 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
82618 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82619 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82620 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82621 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
82622 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82623 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
82624 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82625 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
82626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82627 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
82628 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
82629 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
82630 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
82631 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
82632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
82633 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
82634 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
82635 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
82636 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
82637 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
82638 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
82639 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
82640 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
82641 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
82642 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
82643 : END DO
82644 : imax = 7*9*9
82645 : kmax = 6
82646 : i = 0
82647 : DO i1 = 1, 9
82648 : DO i2 = 1, 9
82649 : DO i3 = 1, 7
82650 : i = i + 1
82651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82653 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
82654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82656 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
82657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
82659 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
82660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82662 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
82663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82665 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
82666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82668 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
82669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
82670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
82671 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
82672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82674 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
82675 : END DO
82676 : END DO
82677 : END DO
82678 : s_offset_d1 = s_offset_d1 + 5
82679 : END DO
82680 : s_offset_c1 = s_offset_c1 + 9
82681 : END DO
82682 : s_offset_b1 = s_offset_b1 + 9
82683 : END DO
82684 : s_offset_a1 = s_offset_a1 + 7
82685 : END DO
82686 : END SUBROUTINE contract_fggd
82687 : #endif
82688 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
82689 : ! **************************************************************************************************
82690 : !> \brief ...
82691 : !> \param work ...
82692 : !> \param nl_a ...
82693 : !> \param nl_b ...
82694 : !> \param nl_c ...
82695 : !> \param nl_d ...
82696 : !> \param sphi_a ...
82697 : !> \param sphi_b ...
82698 : !> \param sphi_c ...
82699 : !> \param sphi_d ...
82700 : !> \param primitives ...
82701 : !> \param buffer1 ...
82702 : !> \param buffer2 ...
82703 : ! **************************************************************************************************
82704 : SUBROUTINE contract_fggf(work, &
82705 : nl_a, nl_b, nl_c, nl_d, &
82706 : sphi_a, sphi_b, sphi_c, sphi_d, &
82707 : primitives, &
82708 : buffer1, buffer2)
82709 : REAL(dp), DIMENSION(10*15*15*10), INTENT(IN) :: work
82710 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82711 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82712 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82713 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
82714 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
82715 : REAL(dp), &
82716 : DIMENSION(7*nl_a, 9*nl_b, 9*nl_c, 7*nl_d) :: primitives
82717 : REAL(dp), DIMENSION(10*15*15*10) :: buffer1, buffer2
82718 :
82719 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82720 : kmax, s_offset_a1, s_offset_b1, &
82721 : s_offset_c1, s_offset_d1
82722 :
82723 : s_offset_a1 = 0
82724 : DO ia = 1, nl_a
82725 : s_offset_b1 = 0
82726 : DO ib = 1, nl_b
82727 : s_offset_c1 = 0
82728 : DO ic = 1, nl_c
82729 : s_offset_d1 = 0
82730 : DO id = 1, nl_d
82731 : buffer1 = 0.0_dp
82732 : imax = 15*15*10
82733 : kmax = 10
82734 : DO i = 1, imax
82735 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82736 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82737 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82738 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82739 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82740 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82742 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82743 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82744 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82745 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82746 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82747 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82748 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82749 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82750 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82751 : END DO
82752 : buffer2 = 0.0_dp
82753 : imax = 7*15*10
82754 : kmax = 15
82755 : DO i = 1, imax
82756 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82757 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82758 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82759 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82760 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82761 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82762 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82763 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82764 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82765 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82766 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82767 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82768 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82769 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82770 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82771 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82772 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82773 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82774 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82775 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82776 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82777 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82778 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82779 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82780 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82781 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82782 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82783 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82784 : END DO
82785 : buffer1 = 0.0_dp
82786 : imax = 7*9*10
82787 : kmax = 15
82788 : DO i = 1, imax
82789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82790 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82791 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
82792 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82793 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82794 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82795 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
82796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82797 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
82798 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82799 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
82800 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82801 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
82802 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
82803 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
82804 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
82805 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
82806 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
82807 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
82808 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
82809 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
82810 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
82811 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
82812 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
82813 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
82814 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
82815 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
82816 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
82817 : END DO
82818 : imax = 7*9*9
82819 : kmax = 10
82820 : i = 0
82821 : DO i1 = 1, 9
82822 : DO i2 = 1, 9
82823 : DO i3 = 1, 7
82824 : i = i + 1
82825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82827 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
82828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82830 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
82831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
82833 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
82834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82836 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
82837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82839 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
82840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
82841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
82842 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
82843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82845 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
82846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
82847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
82848 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
82849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
82850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
82851 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
82852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
82853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
82854 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
82855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
82856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
82857 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
82858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82860 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
82861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82863 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
82864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
82865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
82866 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
82867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
82868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
82869 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
82870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
82871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
82872 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
82873 : END DO
82874 : END DO
82875 : END DO
82876 : s_offset_d1 = s_offset_d1 + 7
82877 : END DO
82878 : s_offset_c1 = s_offset_c1 + 9
82879 : END DO
82880 : s_offset_b1 = s_offset_b1 + 9
82881 : END DO
82882 : s_offset_a1 = s_offset_a1 + 7
82883 : END DO
82884 : END SUBROUTINE contract_fggf
82885 : #endif
82886 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
82887 : ! **************************************************************************************************
82888 : !> \brief ...
82889 : !> \param work ...
82890 : !> \param nl_a ...
82891 : !> \param nl_b ...
82892 : !> \param nl_c ...
82893 : !> \param nl_d ...
82894 : !> \param sphi_a ...
82895 : !> \param sphi_b ...
82896 : !> \param sphi_c ...
82897 : !> \param sphi_d ...
82898 : !> \param primitives ...
82899 : !> \param buffer1 ...
82900 : !> \param buffer2 ...
82901 : ! **************************************************************************************************
82902 : SUBROUTINE contract_fggg(work, &
82903 : nl_a, nl_b, nl_c, nl_d, &
82904 : sphi_a, sphi_b, sphi_c, sphi_d, &
82905 : primitives, &
82906 : buffer1, buffer2)
82907 : REAL(dp), DIMENSION(10*15*15*15), INTENT(IN) :: work
82908 : INTEGER :: nl_a, nl_b, nl_c, nl_d
82909 : REAL(dp), DIMENSION(10, 7*nl_a), INTENT(IN) :: sphi_a
82910 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
82911 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
82912 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
82913 : REAL(dp), &
82914 : DIMENSION(7*nl_a, 9*nl_b, 9*nl_c, 9*nl_d) :: primitives
82915 : REAL(dp), DIMENSION(10*15*15*15) :: buffer1, buffer2
82916 :
82917 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
82918 : kmax, s_offset_a1, s_offset_b1, &
82919 : s_offset_c1, s_offset_d1
82920 :
82921 : s_offset_a1 = 0
82922 : DO ia = 1, nl_a
82923 : s_offset_b1 = 0
82924 : DO ib = 1, nl_b
82925 : s_offset_c1 = 0
82926 : DO ic = 1, nl_c
82927 : s_offset_d1 = 0
82928 : DO id = 1, nl_d
82929 : buffer1 = 0.0_dp
82930 : imax = 15*15*15
82931 : kmax = 10
82932 : DO i = 1, imax
82933 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
82934 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
82935 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
82936 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
82937 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
82938 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
82939 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
82940 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
82941 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
82942 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
82943 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
82944 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
82945 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
82946 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
82947 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
82948 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
82949 : END DO
82950 : buffer2 = 0.0_dp
82951 : imax = 7*15*15
82952 : kmax = 15
82953 : DO i = 1, imax
82954 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
82955 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
82956 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
82957 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
82958 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
82959 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
82960 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
82961 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
82962 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
82963 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
82964 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
82965 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
82966 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
82967 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
82968 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
82969 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
82970 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
82971 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
82972 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
82973 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
82974 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
82975 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
82976 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
82977 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
82978 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
82979 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
82980 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
82981 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
82982 : END DO
82983 : buffer1 = 0.0_dp
82984 : imax = 7*9*15
82985 : kmax = 15
82986 : DO i = 1, imax
82987 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
82988 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
82989 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
82990 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
82991 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
82992 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
82993 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
82994 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
82995 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
82996 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
82997 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
82998 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
82999 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
83000 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
83001 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
83002 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
83003 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
83004 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
83005 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
83006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
83007 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
83008 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
83009 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
83010 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
83011 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
83012 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
83013 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
83014 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
83015 : END DO
83016 : imax = 7*9*9
83017 : kmax = 15
83018 : i = 0
83019 : DO i1 = 1, 9
83020 : DO i2 = 1, 9
83021 : DO i3 = 1, 7
83022 : i = i + 1
83023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83025 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
83026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83028 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
83029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83031 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
83032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83034 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
83035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83037 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
83038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83040 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
83041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
83042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
83043 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
83044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83046 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
83047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83049 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
83050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83052 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
83053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83055 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
83056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83058 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
83059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83061 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
83062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83064 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
83065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83067 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
83068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83070 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
83071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
83072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
83073 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
83074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83076 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
83077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83079 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
83080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83082 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
83083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83085 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
83086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83088 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
83089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83091 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
83092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83094 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
83095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83097 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
83098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83100 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
83101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83103 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
83104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83106 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
83107 : END DO
83108 : END DO
83109 : END DO
83110 : s_offset_d1 = s_offset_d1 + 9
83111 : END DO
83112 : s_offset_c1 = s_offset_c1 + 9
83113 : END DO
83114 : s_offset_b1 = s_offset_b1 + 9
83115 : END DO
83116 : s_offset_a1 = s_offset_a1 + 7
83117 : END DO
83118 : END SUBROUTINE contract_fggg
83119 : #endif
83120 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83121 : ! **************************************************************************************************
83122 : !> \brief ...
83123 : !> \param work ...
83124 : !> \param nl_a ...
83125 : !> \param nl_b ...
83126 : !> \param nl_c ...
83127 : !> \param nl_d ...
83128 : !> \param sphi_a ...
83129 : !> \param sphi_b ...
83130 : !> \param sphi_c ...
83131 : !> \param sphi_d ...
83132 : !> \param primitives ...
83133 : !> \param buffer1 ...
83134 : !> \param buffer2 ...
83135 : ! **************************************************************************************************
83136 : SUBROUTINE contract_gsss(work, &
83137 : nl_a, nl_b, nl_c, nl_d, &
83138 : sphi_a, sphi_b, sphi_c, sphi_d, &
83139 : primitives, &
83140 : buffer1, buffer2)
83141 : REAL(dp), DIMENSION(15*1*1*1), INTENT(IN) :: work
83142 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83143 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83144 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83145 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
83146 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
83147 : REAL(dp), &
83148 : DIMENSION(9*nl_a, 1*nl_b, 1*nl_c, 1*nl_d) :: primitives
83149 : REAL(dp), DIMENSION(15*1*1*1) :: buffer1, buffer2
83150 :
83151 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83152 : kmax, s_offset_a1, s_offset_b1, &
83153 : s_offset_c1, s_offset_d1
83154 :
83155 : s_offset_a1 = 0
83156 : DO ia = 1, nl_a
83157 : s_offset_b1 = 0
83158 : DO ib = 1, nl_b
83159 : s_offset_c1 = 0
83160 : DO ic = 1, nl_c
83161 : s_offset_d1 = 0
83162 : DO id = 1, nl_d
83163 : buffer1 = 0.0_dp
83164 : imax = 1*1*1
83165 : kmax = 15
83166 : DO i = 1, imax
83167 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83168 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83169 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83170 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83171 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83172 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83173 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83174 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83175 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83176 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83177 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83178 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83179 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83180 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83181 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83182 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83183 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83184 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83185 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83186 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83187 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83188 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83189 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83190 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83191 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83192 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83193 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83194 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83195 : END DO
83196 : buffer2 = 0.0_dp
83197 : imax = 9*1*1
83198 : kmax = 1
83199 : DO i = 1, imax
83200 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83201 : END DO
83202 : buffer1 = 0.0_dp
83203 : imax = 9*1*1
83204 : kmax = 1
83205 : DO i = 1, imax
83206 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
83207 : END DO
83208 : imax = 9*1*1
83209 : kmax = 1
83210 : i = 0
83211 : DO i1 = 1, 1
83212 : DO i2 = 1, 1
83213 : DO i3 = 1, 9
83214 : i = i + 1
83215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
83217 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
83218 : END DO
83219 : END DO
83220 : END DO
83221 : s_offset_d1 = s_offset_d1 + 1
83222 : END DO
83223 : s_offset_c1 = s_offset_c1 + 1
83224 : END DO
83225 : s_offset_b1 = s_offset_b1 + 1
83226 : END DO
83227 : s_offset_a1 = s_offset_a1 + 9
83228 : END DO
83229 : END SUBROUTINE contract_gsss
83230 : #endif
83231 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83232 : ! **************************************************************************************************
83233 : !> \brief ...
83234 : !> \param work ...
83235 : !> \param nl_a ...
83236 : !> \param nl_b ...
83237 : !> \param nl_c ...
83238 : !> \param nl_d ...
83239 : !> \param sphi_a ...
83240 : !> \param sphi_b ...
83241 : !> \param sphi_c ...
83242 : !> \param sphi_d ...
83243 : !> \param primitives ...
83244 : !> \param buffer1 ...
83245 : !> \param buffer2 ...
83246 : ! **************************************************************************************************
83247 : SUBROUTINE contract_gssp(work, &
83248 : nl_a, nl_b, nl_c, nl_d, &
83249 : sphi_a, sphi_b, sphi_c, sphi_d, &
83250 : primitives, &
83251 : buffer1, buffer2)
83252 : REAL(dp), DIMENSION(15*1*1*3), INTENT(IN) :: work
83253 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83254 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83255 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83256 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
83257 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
83258 : REAL(dp), &
83259 : DIMENSION(9*nl_a, 1*nl_b, 1*nl_c, 3*nl_d) :: primitives
83260 : REAL(dp), DIMENSION(15*1*1*3) :: buffer1, buffer2
83261 :
83262 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83263 : kmax, s_offset_a1, s_offset_b1, &
83264 : s_offset_c1, s_offset_d1
83265 :
83266 : s_offset_a1 = 0
83267 : DO ia = 1, nl_a
83268 : s_offset_b1 = 0
83269 : DO ib = 1, nl_b
83270 : s_offset_c1 = 0
83271 : DO ic = 1, nl_c
83272 : s_offset_d1 = 0
83273 : DO id = 1, nl_d
83274 : buffer1 = 0.0_dp
83275 : imax = 1*1*3
83276 : kmax = 15
83277 : DO i = 1, imax
83278 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83279 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83280 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83281 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83283 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83284 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83285 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83286 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83287 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83288 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83289 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83290 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83291 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83292 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83293 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83294 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83295 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83296 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83297 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83298 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83299 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83300 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83301 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83302 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83303 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83304 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83305 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83306 : END DO
83307 : buffer2 = 0.0_dp
83308 : imax = 9*1*3
83309 : kmax = 1
83310 : DO i = 1, imax
83311 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83312 : END DO
83313 : buffer1 = 0.0_dp
83314 : imax = 9*1*3
83315 : kmax = 1
83316 : DO i = 1, imax
83317 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
83318 : END DO
83319 : imax = 9*1*1
83320 : kmax = 3
83321 : i = 0
83322 : DO i1 = 1, 1
83323 : DO i2 = 1, 1
83324 : DO i3 = 1, 9
83325 : i = i + 1
83326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
83328 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
83329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
83331 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
83332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
83334 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
83335 : END DO
83336 : END DO
83337 : END DO
83338 : s_offset_d1 = s_offset_d1 + 3
83339 : END DO
83340 : s_offset_c1 = s_offset_c1 + 1
83341 : END DO
83342 : s_offset_b1 = s_offset_b1 + 1
83343 : END DO
83344 : s_offset_a1 = s_offset_a1 + 9
83345 : END DO
83346 : END SUBROUTINE contract_gssp
83347 : #endif
83348 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83349 : ! **************************************************************************************************
83350 : !> \brief ...
83351 : !> \param work ...
83352 : !> \param nl_a ...
83353 : !> \param nl_b ...
83354 : !> \param nl_c ...
83355 : !> \param nl_d ...
83356 : !> \param sphi_a ...
83357 : !> \param sphi_b ...
83358 : !> \param sphi_c ...
83359 : !> \param sphi_d ...
83360 : !> \param primitives ...
83361 : !> \param buffer1 ...
83362 : !> \param buffer2 ...
83363 : ! **************************************************************************************************
83364 : SUBROUTINE contract_gssd(work, &
83365 : nl_a, nl_b, nl_c, nl_d, &
83366 : sphi_a, sphi_b, sphi_c, sphi_d, &
83367 : primitives, &
83368 : buffer1, buffer2)
83369 : REAL(dp), DIMENSION(15*1*1*6), INTENT(IN) :: work
83370 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83371 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83372 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83373 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
83374 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
83375 : REAL(dp), &
83376 : DIMENSION(9*nl_a, 1*nl_b, 1*nl_c, 5*nl_d) :: primitives
83377 : REAL(dp), DIMENSION(15*1*1*6) :: buffer1, buffer2
83378 :
83379 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83380 : kmax, s_offset_a1, s_offset_b1, &
83381 : s_offset_c1, s_offset_d1
83382 :
83383 : s_offset_a1 = 0
83384 : DO ia = 1, nl_a
83385 : s_offset_b1 = 0
83386 : DO ib = 1, nl_b
83387 : s_offset_c1 = 0
83388 : DO ic = 1, nl_c
83389 : s_offset_d1 = 0
83390 : DO id = 1, nl_d
83391 : buffer1 = 0.0_dp
83392 : imax = 1*1*6
83393 : kmax = 15
83394 : DO i = 1, imax
83395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83396 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83397 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83398 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83399 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83400 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83401 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83402 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83403 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83404 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83405 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83406 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83407 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83408 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83409 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83410 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83411 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83412 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83413 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83414 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83415 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83416 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83417 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83418 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83419 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83420 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83421 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83422 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83423 : END DO
83424 : buffer2 = 0.0_dp
83425 : imax = 9*1*6
83426 : kmax = 1
83427 : DO i = 1, imax
83428 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83429 : END DO
83430 : buffer1 = 0.0_dp
83431 : imax = 9*1*6
83432 : kmax = 1
83433 : DO i = 1, imax
83434 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
83435 : END DO
83436 : imax = 9*1*1
83437 : kmax = 6
83438 : i = 0
83439 : DO i1 = 1, 1
83440 : DO i2 = 1, 1
83441 : DO i3 = 1, 9
83442 : i = i + 1
83443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83445 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
83446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83448 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
83449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83451 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
83452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83454 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
83455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83457 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
83458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83460 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
83461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83463 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
83464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83466 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
83467 : END DO
83468 : END DO
83469 : END DO
83470 : s_offset_d1 = s_offset_d1 + 5
83471 : END DO
83472 : s_offset_c1 = s_offset_c1 + 1
83473 : END DO
83474 : s_offset_b1 = s_offset_b1 + 1
83475 : END DO
83476 : s_offset_a1 = s_offset_a1 + 9
83477 : END DO
83478 : END SUBROUTINE contract_gssd
83479 : #endif
83480 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83481 : ! **************************************************************************************************
83482 : !> \brief ...
83483 : !> \param work ...
83484 : !> \param nl_a ...
83485 : !> \param nl_b ...
83486 : !> \param nl_c ...
83487 : !> \param nl_d ...
83488 : !> \param sphi_a ...
83489 : !> \param sphi_b ...
83490 : !> \param sphi_c ...
83491 : !> \param sphi_d ...
83492 : !> \param primitives ...
83493 : !> \param buffer1 ...
83494 : !> \param buffer2 ...
83495 : ! **************************************************************************************************
83496 : SUBROUTINE contract_gssf(work, &
83497 : nl_a, nl_b, nl_c, nl_d, &
83498 : sphi_a, sphi_b, sphi_c, sphi_d, &
83499 : primitives, &
83500 : buffer1, buffer2)
83501 : REAL(dp), DIMENSION(15*1*1*10), INTENT(IN) :: work
83502 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83503 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83504 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83505 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
83506 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
83507 : REAL(dp), &
83508 : DIMENSION(9*nl_a, 1*nl_b, 1*nl_c, 7*nl_d) :: primitives
83509 : REAL(dp), DIMENSION(15*1*1*10) :: buffer1, buffer2
83510 :
83511 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83512 : kmax, s_offset_a1, s_offset_b1, &
83513 : s_offset_c1, s_offset_d1
83514 :
83515 : s_offset_a1 = 0
83516 : DO ia = 1, nl_a
83517 : s_offset_b1 = 0
83518 : DO ib = 1, nl_b
83519 : s_offset_c1 = 0
83520 : DO ic = 1, nl_c
83521 : s_offset_d1 = 0
83522 : DO id = 1, nl_d
83523 : buffer1 = 0.0_dp
83524 : imax = 1*1*10
83525 : kmax = 15
83526 : DO i = 1, imax
83527 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83528 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83529 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83530 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83531 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83532 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83533 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83534 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83535 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83536 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83537 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83538 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83539 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83540 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83541 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83542 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83543 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83544 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83545 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83546 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83547 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83548 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83549 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83550 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83551 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83552 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83553 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83554 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83555 : END DO
83556 : buffer2 = 0.0_dp
83557 : imax = 9*1*10
83558 : kmax = 1
83559 : DO i = 1, imax
83560 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83561 : END DO
83562 : buffer1 = 0.0_dp
83563 : imax = 9*1*10
83564 : kmax = 1
83565 : DO i = 1, imax
83566 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
83567 : END DO
83568 : imax = 9*1*1
83569 : kmax = 10
83570 : i = 0
83571 : DO i1 = 1, 1
83572 : DO i2 = 1, 1
83573 : DO i3 = 1, 9
83574 : i = i + 1
83575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83577 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
83578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83580 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
83581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83583 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
83584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83586 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
83587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83589 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
83590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83592 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
83593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83595 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
83596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83598 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
83599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83601 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
83602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83604 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
83605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83607 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
83608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83610 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
83611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83613 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
83614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83616 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
83617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83619 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
83620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83622 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
83623 : END DO
83624 : END DO
83625 : END DO
83626 : s_offset_d1 = s_offset_d1 + 7
83627 : END DO
83628 : s_offset_c1 = s_offset_c1 + 1
83629 : END DO
83630 : s_offset_b1 = s_offset_b1 + 1
83631 : END DO
83632 : s_offset_a1 = s_offset_a1 + 9
83633 : END DO
83634 : END SUBROUTINE contract_gssf
83635 : #endif
83636 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83637 : ! **************************************************************************************************
83638 : !> \brief ...
83639 : !> \param work ...
83640 : !> \param nl_a ...
83641 : !> \param nl_b ...
83642 : !> \param nl_c ...
83643 : !> \param nl_d ...
83644 : !> \param sphi_a ...
83645 : !> \param sphi_b ...
83646 : !> \param sphi_c ...
83647 : !> \param sphi_d ...
83648 : !> \param primitives ...
83649 : !> \param buffer1 ...
83650 : !> \param buffer2 ...
83651 : ! **************************************************************************************************
83652 : SUBROUTINE contract_gssg(work, &
83653 : nl_a, nl_b, nl_c, nl_d, &
83654 : sphi_a, sphi_b, sphi_c, sphi_d, &
83655 : primitives, &
83656 : buffer1, buffer2)
83657 : REAL(dp), DIMENSION(15*1*1*15), INTENT(IN) :: work
83658 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83659 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83660 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83661 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
83662 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
83663 : REAL(dp), &
83664 : DIMENSION(9*nl_a, 1*nl_b, 1*nl_c, 9*nl_d) :: primitives
83665 : REAL(dp), DIMENSION(15*1*1*15) :: buffer1, buffer2
83666 :
83667 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83668 : kmax, s_offset_a1, s_offset_b1, &
83669 : s_offset_c1, s_offset_d1
83670 :
83671 : s_offset_a1 = 0
83672 : DO ia = 1, nl_a
83673 : s_offset_b1 = 0
83674 : DO ib = 1, nl_b
83675 : s_offset_c1 = 0
83676 : DO ic = 1, nl_c
83677 : s_offset_d1 = 0
83678 : DO id = 1, nl_d
83679 : buffer1 = 0.0_dp
83680 : imax = 1*1*15
83681 : kmax = 15
83682 : DO i = 1, imax
83683 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83684 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83685 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83686 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83688 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83689 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83690 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83691 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83692 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83693 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83694 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83695 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83696 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83697 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83698 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83699 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83700 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83701 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83702 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83703 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83704 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83705 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83706 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83707 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83708 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83709 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83710 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83711 : END DO
83712 : buffer2 = 0.0_dp
83713 : imax = 9*1*15
83714 : kmax = 1
83715 : DO i = 1, imax
83716 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83717 : END DO
83718 : buffer1 = 0.0_dp
83719 : imax = 9*1*15
83720 : kmax = 1
83721 : DO i = 1, imax
83722 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
83723 : END DO
83724 : imax = 9*1*1
83725 : kmax = 15
83726 : i = 0
83727 : DO i1 = 1, 1
83728 : DO i2 = 1, 1
83729 : DO i3 = 1, 9
83730 : i = i + 1
83731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83733 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
83734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83736 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
83737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83739 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
83740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83742 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
83743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83745 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
83746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83747 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83748 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
83749 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
83750 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
83751 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
83752 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83754 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
83755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83757 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
83758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83760 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
83761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83763 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
83764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83766 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
83767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83769 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
83770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
83772 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
83773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83775 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
83776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83778 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
83779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
83780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
83781 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
83782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
83783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
83784 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
83785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
83786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
83787 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
83788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83790 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
83791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83793 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
83794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
83795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
83796 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
83797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
83798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
83799 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
83800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83802 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
83803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83805 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
83806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
83807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
83808 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
83809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
83810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
83811 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
83812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
83813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
83814 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
83815 : END DO
83816 : END DO
83817 : END DO
83818 : s_offset_d1 = s_offset_d1 + 9
83819 : END DO
83820 : s_offset_c1 = s_offset_c1 + 1
83821 : END DO
83822 : s_offset_b1 = s_offset_b1 + 1
83823 : END DO
83824 : s_offset_a1 = s_offset_a1 + 9
83825 : END DO
83826 : END SUBROUTINE contract_gssg
83827 : #endif
83828 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83829 : ! **************************************************************************************************
83830 : !> \brief ...
83831 : !> \param work ...
83832 : !> \param nl_a ...
83833 : !> \param nl_b ...
83834 : !> \param nl_c ...
83835 : !> \param nl_d ...
83836 : !> \param sphi_a ...
83837 : !> \param sphi_b ...
83838 : !> \param sphi_c ...
83839 : !> \param sphi_d ...
83840 : !> \param primitives ...
83841 : !> \param buffer1 ...
83842 : !> \param buffer2 ...
83843 : ! **************************************************************************************************
83844 : SUBROUTINE contract_gsps(work, &
83845 : nl_a, nl_b, nl_c, nl_d, &
83846 : sphi_a, sphi_b, sphi_c, sphi_d, &
83847 : primitives, &
83848 : buffer1, buffer2)
83849 : REAL(dp), DIMENSION(15*1*3*1), INTENT(IN) :: work
83850 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83851 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83852 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83853 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
83854 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
83855 : REAL(dp), &
83856 : DIMENSION(9*nl_a, 1*nl_b, 3*nl_c, 1*nl_d) :: primitives
83857 : REAL(dp), DIMENSION(15*1*3*1) :: buffer1, buffer2
83858 :
83859 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83860 : kmax, s_offset_a1, s_offset_b1, &
83861 : s_offset_c1, s_offset_d1
83862 :
83863 : s_offset_a1 = 0
83864 : DO ia = 1, nl_a
83865 : s_offset_b1 = 0
83866 : DO ib = 1, nl_b
83867 : s_offset_c1 = 0
83868 : DO ic = 1, nl_c
83869 : s_offset_d1 = 0
83870 : DO id = 1, nl_d
83871 : buffer1 = 0.0_dp
83872 : imax = 1*3*1
83873 : kmax = 15
83874 : DO i = 1, imax
83875 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83876 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83877 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83878 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83879 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83880 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83881 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83882 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83883 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83884 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83885 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83886 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
83887 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
83888 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
83889 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
83890 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
83891 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
83892 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
83893 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
83894 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
83895 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
83896 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
83897 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
83898 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
83899 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
83900 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
83901 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
83902 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
83903 : END DO
83904 : buffer2 = 0.0_dp
83905 : imax = 9*3*1
83906 : kmax = 1
83907 : DO i = 1, imax
83908 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
83909 : END DO
83910 : buffer1 = 0.0_dp
83911 : imax = 9*1*1
83912 : kmax = 3
83913 : DO i = 1, imax
83914 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
83915 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
83916 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
83917 : END DO
83918 : imax = 9*1*3
83919 : kmax = 1
83920 : i = 0
83921 : DO i1 = 1, 3
83922 : DO i2 = 1, 1
83923 : DO i3 = 1, 9
83924 : i = i + 1
83925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
83926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
83927 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
83928 : END DO
83929 : END DO
83930 : END DO
83931 : s_offset_d1 = s_offset_d1 + 1
83932 : END DO
83933 : s_offset_c1 = s_offset_c1 + 3
83934 : END DO
83935 : s_offset_b1 = s_offset_b1 + 1
83936 : END DO
83937 : s_offset_a1 = s_offset_a1 + 9
83938 : END DO
83939 : END SUBROUTINE contract_gsps
83940 : #endif
83941 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
83942 : ! **************************************************************************************************
83943 : !> \brief ...
83944 : !> \param work ...
83945 : !> \param nl_a ...
83946 : !> \param nl_b ...
83947 : !> \param nl_c ...
83948 : !> \param nl_d ...
83949 : !> \param sphi_a ...
83950 : !> \param sphi_b ...
83951 : !> \param sphi_c ...
83952 : !> \param sphi_d ...
83953 : !> \param primitives ...
83954 : !> \param buffer1 ...
83955 : !> \param buffer2 ...
83956 : ! **************************************************************************************************
83957 : SUBROUTINE contract_gspp(work, &
83958 : nl_a, nl_b, nl_c, nl_d, &
83959 : sphi_a, sphi_b, sphi_c, sphi_d, &
83960 : primitives, &
83961 : buffer1, buffer2)
83962 : REAL(dp), DIMENSION(15*1*3*3), INTENT(IN) :: work
83963 : INTEGER :: nl_a, nl_b, nl_c, nl_d
83964 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
83965 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
83966 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
83967 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
83968 : REAL(dp), &
83969 : DIMENSION(9*nl_a, 1*nl_b, 3*nl_c, 3*nl_d) :: primitives
83970 : REAL(dp), DIMENSION(15*1*3*3) :: buffer1, buffer2
83971 :
83972 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
83973 : kmax, s_offset_a1, s_offset_b1, &
83974 : s_offset_c1, s_offset_d1
83975 :
83976 : s_offset_a1 = 0
83977 : DO ia = 1, nl_a
83978 : s_offset_b1 = 0
83979 : DO ib = 1, nl_b
83980 : s_offset_c1 = 0
83981 : DO ic = 1, nl_c
83982 : s_offset_d1 = 0
83983 : DO id = 1, nl_d
83984 : buffer1 = 0.0_dp
83985 : imax = 1*3*3
83986 : kmax = 15
83987 : DO i = 1, imax
83988 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
83989 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
83990 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
83991 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
83992 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
83993 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
83994 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
83995 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
83996 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
83997 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
83998 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
83999 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84000 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84001 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84002 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84003 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84004 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84005 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84006 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84007 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84008 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84009 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84010 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84011 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84012 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84013 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84014 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84015 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84016 : END DO
84017 : buffer2 = 0.0_dp
84018 : imax = 9*3*3
84019 : kmax = 1
84020 : DO i = 1, imax
84021 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84022 : END DO
84023 : buffer1 = 0.0_dp
84024 : imax = 9*1*3
84025 : kmax = 3
84026 : DO i = 1, imax
84027 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84028 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84029 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
84030 : END DO
84031 : imax = 9*1*3
84032 : kmax = 3
84033 : i = 0
84034 : DO i1 = 1, 3
84035 : DO i2 = 1, 1
84036 : DO i3 = 1, 9
84037 : i = i + 1
84038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
84040 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
84041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
84043 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
84046 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
84047 : END DO
84048 : END DO
84049 : END DO
84050 : s_offset_d1 = s_offset_d1 + 3
84051 : END DO
84052 : s_offset_c1 = s_offset_c1 + 3
84053 : END DO
84054 : s_offset_b1 = s_offset_b1 + 1
84055 : END DO
84056 : s_offset_a1 = s_offset_a1 + 9
84057 : END DO
84058 : END SUBROUTINE contract_gspp
84059 : #endif
84060 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84061 : ! **************************************************************************************************
84062 : !> \brief ...
84063 : !> \param work ...
84064 : !> \param nl_a ...
84065 : !> \param nl_b ...
84066 : !> \param nl_c ...
84067 : !> \param nl_d ...
84068 : !> \param sphi_a ...
84069 : !> \param sphi_b ...
84070 : !> \param sphi_c ...
84071 : !> \param sphi_d ...
84072 : !> \param primitives ...
84073 : !> \param buffer1 ...
84074 : !> \param buffer2 ...
84075 : ! **************************************************************************************************
84076 : SUBROUTINE contract_gspd(work, &
84077 : nl_a, nl_b, nl_c, nl_d, &
84078 : sphi_a, sphi_b, sphi_c, sphi_d, &
84079 : primitives, &
84080 : buffer1, buffer2)
84081 : REAL(dp), DIMENSION(15*1*3*6), INTENT(IN) :: work
84082 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84083 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84084 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84085 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
84086 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
84087 : REAL(dp), &
84088 : DIMENSION(9*nl_a, 1*nl_b, 3*nl_c, 5*nl_d) :: primitives
84089 : REAL(dp), DIMENSION(15*1*3*6) :: buffer1, buffer2
84090 :
84091 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84092 : kmax, s_offset_a1, s_offset_b1, &
84093 : s_offset_c1, s_offset_d1
84094 :
84095 : s_offset_a1 = 0
84096 : DO ia = 1, nl_a
84097 : s_offset_b1 = 0
84098 : DO ib = 1, nl_b
84099 : s_offset_c1 = 0
84100 : DO ic = 1, nl_c
84101 : s_offset_d1 = 0
84102 : DO id = 1, nl_d
84103 : buffer1 = 0.0_dp
84104 : imax = 1*3*6
84105 : kmax = 15
84106 : DO i = 1, imax
84107 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84108 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84109 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84110 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84111 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84112 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84113 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84114 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84115 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84116 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84117 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84118 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84119 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84120 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84121 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84122 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84123 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84124 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84125 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84126 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84127 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84128 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84129 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84130 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84131 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84132 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84133 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84134 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84135 : END DO
84136 : buffer2 = 0.0_dp
84137 : imax = 9*3*6
84138 : kmax = 1
84139 : DO i = 1, imax
84140 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84141 : END DO
84142 : buffer1 = 0.0_dp
84143 : imax = 9*1*6
84144 : kmax = 3
84145 : DO i = 1, imax
84146 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84147 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84148 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
84149 : END DO
84150 : imax = 9*1*3
84151 : kmax = 6
84152 : i = 0
84153 : DO i1 = 1, 3
84154 : DO i2 = 1, 1
84155 : DO i3 = 1, 9
84156 : i = i + 1
84157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84158 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84159 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
84160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84162 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
84163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84165 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84168 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
84169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84170 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84171 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
84172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84173 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84174 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
84175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84176 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
84177 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
84178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84179 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84180 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
84181 : END DO
84182 : END DO
84183 : END DO
84184 : s_offset_d1 = s_offset_d1 + 5
84185 : END DO
84186 : s_offset_c1 = s_offset_c1 + 3
84187 : END DO
84188 : s_offset_b1 = s_offset_b1 + 1
84189 : END DO
84190 : s_offset_a1 = s_offset_a1 + 9
84191 : END DO
84192 : END SUBROUTINE contract_gspd
84193 : #endif
84194 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84195 : ! **************************************************************************************************
84196 : !> \brief ...
84197 : !> \param work ...
84198 : !> \param nl_a ...
84199 : !> \param nl_b ...
84200 : !> \param nl_c ...
84201 : !> \param nl_d ...
84202 : !> \param sphi_a ...
84203 : !> \param sphi_b ...
84204 : !> \param sphi_c ...
84205 : !> \param sphi_d ...
84206 : !> \param primitives ...
84207 : !> \param buffer1 ...
84208 : !> \param buffer2 ...
84209 : ! **************************************************************************************************
84210 : SUBROUTINE contract_gspf(work, &
84211 : nl_a, nl_b, nl_c, nl_d, &
84212 : sphi_a, sphi_b, sphi_c, sphi_d, &
84213 : primitives, &
84214 : buffer1, buffer2)
84215 : REAL(dp), DIMENSION(15*1*3*10), INTENT(IN) :: work
84216 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84217 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84218 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84219 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
84220 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
84221 : REAL(dp), &
84222 : DIMENSION(9*nl_a, 1*nl_b, 3*nl_c, 7*nl_d) :: primitives
84223 : REAL(dp), DIMENSION(15*1*3*10) :: buffer1, buffer2
84224 :
84225 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84226 : kmax, s_offset_a1, s_offset_b1, &
84227 : s_offset_c1, s_offset_d1
84228 :
84229 : s_offset_a1 = 0
84230 : DO ia = 1, nl_a
84231 : s_offset_b1 = 0
84232 : DO ib = 1, nl_b
84233 : s_offset_c1 = 0
84234 : DO ic = 1, nl_c
84235 : s_offset_d1 = 0
84236 : DO id = 1, nl_d
84237 : buffer1 = 0.0_dp
84238 : imax = 1*3*10
84239 : kmax = 15
84240 : DO i = 1, imax
84241 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84242 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84243 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84244 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84246 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84247 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84249 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84250 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84251 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84252 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84253 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84254 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84255 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84256 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84257 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84258 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84259 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84261 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84262 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84263 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84265 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84266 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84267 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84269 : END DO
84270 : buffer2 = 0.0_dp
84271 : imax = 9*3*10
84272 : kmax = 1
84273 : DO i = 1, imax
84274 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84275 : END DO
84276 : buffer1 = 0.0_dp
84277 : imax = 9*1*10
84278 : kmax = 3
84279 : DO i = 1, imax
84280 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84281 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84282 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
84283 : END DO
84284 : imax = 9*1*3
84285 : kmax = 10
84286 : i = 0
84287 : DO i1 = 1, 3
84288 : DO i2 = 1, 1
84289 : DO i3 = 1, 9
84290 : i = i + 1
84291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84293 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
84294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84296 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
84297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84299 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84302 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
84303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84305 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
84306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
84307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
84308 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
84309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84311 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
84312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84314 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
84315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
84317 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
84318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84320 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
84321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84323 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
84324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84326 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
84327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84329 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
84330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
84331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
84332 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
84333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84335 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
84336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84338 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
84339 : END DO
84340 : END DO
84341 : END DO
84342 : s_offset_d1 = s_offset_d1 + 7
84343 : END DO
84344 : s_offset_c1 = s_offset_c1 + 3
84345 : END DO
84346 : s_offset_b1 = s_offset_b1 + 1
84347 : END DO
84348 : s_offset_a1 = s_offset_a1 + 9
84349 : END DO
84350 : END SUBROUTINE contract_gspf
84351 : #endif
84352 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84353 : ! **************************************************************************************************
84354 : !> \brief ...
84355 : !> \param work ...
84356 : !> \param nl_a ...
84357 : !> \param nl_b ...
84358 : !> \param nl_c ...
84359 : !> \param nl_d ...
84360 : !> \param sphi_a ...
84361 : !> \param sphi_b ...
84362 : !> \param sphi_c ...
84363 : !> \param sphi_d ...
84364 : !> \param primitives ...
84365 : !> \param buffer1 ...
84366 : !> \param buffer2 ...
84367 : ! **************************************************************************************************
84368 : SUBROUTINE contract_gspg(work, &
84369 : nl_a, nl_b, nl_c, nl_d, &
84370 : sphi_a, sphi_b, sphi_c, sphi_d, &
84371 : primitives, &
84372 : buffer1, buffer2)
84373 : REAL(dp), DIMENSION(15*1*3*15), INTENT(IN) :: work
84374 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84375 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84376 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84377 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
84378 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
84379 : REAL(dp), &
84380 : DIMENSION(9*nl_a, 1*nl_b, 3*nl_c, 9*nl_d) :: primitives
84381 : REAL(dp), DIMENSION(15*1*3*15) :: buffer1, buffer2
84382 :
84383 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84384 : kmax, s_offset_a1, s_offset_b1, &
84385 : s_offset_c1, s_offset_d1
84386 :
84387 : s_offset_a1 = 0
84388 : DO ia = 1, nl_a
84389 : s_offset_b1 = 0
84390 : DO ib = 1, nl_b
84391 : s_offset_c1 = 0
84392 : DO ic = 1, nl_c
84393 : s_offset_d1 = 0
84394 : DO id = 1, nl_d
84395 : buffer1 = 0.0_dp
84396 : imax = 1*3*15
84397 : kmax = 15
84398 : DO i = 1, imax
84399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84400 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84401 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84402 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84403 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84404 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84405 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84406 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84407 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84408 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84409 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84410 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84411 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84412 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84414 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84415 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84416 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84417 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84418 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84419 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84420 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84421 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84422 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84423 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84424 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84425 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84426 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84427 : END DO
84428 : buffer2 = 0.0_dp
84429 : imax = 9*3*15
84430 : kmax = 1
84431 : DO i = 1, imax
84432 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84433 : END DO
84434 : buffer1 = 0.0_dp
84435 : imax = 9*1*15
84436 : kmax = 3
84437 : DO i = 1, imax
84438 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84439 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84440 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
84441 : END DO
84442 : imax = 9*1*3
84443 : kmax = 15
84444 : i = 0
84445 : DO i1 = 1, 3
84446 : DO i2 = 1, 1
84447 : DO i3 = 1, 9
84448 : i = i + 1
84449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84451 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
84452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84454 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
84455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
84456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
84457 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
84458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84460 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84463 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
84464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
84465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
84466 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
84467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
84468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
84469 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
84470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84472 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
84473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
84474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
84475 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
84476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
84478 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
84479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84481 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
84482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84484 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
84485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84487 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
84488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84490 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
84491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84493 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
84494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
84495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
84496 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
84497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
84498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
84499 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
84500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84502 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
84503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
84504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
84505 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
84506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84508 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
84509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84511 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
84512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
84513 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
84514 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
84515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84516 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
84517 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
84518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84519 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84520 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
84521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84522 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84523 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
84524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
84525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
84526 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
84527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84529 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
84530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84532 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
84533 : END DO
84534 : END DO
84535 : END DO
84536 : s_offset_d1 = s_offset_d1 + 9
84537 : END DO
84538 : s_offset_c1 = s_offset_c1 + 3
84539 : END DO
84540 : s_offset_b1 = s_offset_b1 + 1
84541 : END DO
84542 : s_offset_a1 = s_offset_a1 + 9
84543 : END DO
84544 : END SUBROUTINE contract_gspg
84545 : #endif
84546 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84547 : ! **************************************************************************************************
84548 : !> \brief ...
84549 : !> \param work ...
84550 : !> \param nl_a ...
84551 : !> \param nl_b ...
84552 : !> \param nl_c ...
84553 : !> \param nl_d ...
84554 : !> \param sphi_a ...
84555 : !> \param sphi_b ...
84556 : !> \param sphi_c ...
84557 : !> \param sphi_d ...
84558 : !> \param primitives ...
84559 : !> \param buffer1 ...
84560 : !> \param buffer2 ...
84561 : ! **************************************************************************************************
84562 : SUBROUTINE contract_gsds(work, &
84563 : nl_a, nl_b, nl_c, nl_d, &
84564 : sphi_a, sphi_b, sphi_c, sphi_d, &
84565 : primitives, &
84566 : buffer1, buffer2)
84567 : REAL(dp), DIMENSION(15*1*6*1), INTENT(IN) :: work
84568 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84569 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84570 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84571 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
84572 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
84573 : REAL(dp), &
84574 : DIMENSION(9*nl_a, 1*nl_b, 5*nl_c, 1*nl_d) :: primitives
84575 : REAL(dp), DIMENSION(15*1*6*1) :: buffer1, buffer2
84576 :
84577 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84578 : kmax, s_offset_a1, s_offset_b1, &
84579 : s_offset_c1, s_offset_d1
84580 :
84581 : s_offset_a1 = 0
84582 : DO ia = 1, nl_a
84583 : s_offset_b1 = 0
84584 : DO ib = 1, nl_b
84585 : s_offset_c1 = 0
84586 : DO ic = 1, nl_c
84587 : s_offset_d1 = 0
84588 : DO id = 1, nl_d
84589 : buffer1 = 0.0_dp
84590 : imax = 1*6*1
84591 : kmax = 15
84592 : DO i = 1, imax
84593 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84594 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84595 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84596 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84597 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84598 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84599 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84600 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84601 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84602 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84603 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84605 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84606 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84607 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84608 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84609 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84610 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84611 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84612 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84613 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84614 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84615 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84616 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84617 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84618 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84619 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84620 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84621 : END DO
84622 : buffer2 = 0.0_dp
84623 : imax = 9*6*1
84624 : kmax = 1
84625 : DO i = 1, imax
84626 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84627 : END DO
84628 : buffer1 = 0.0_dp
84629 : imax = 9*1*1
84630 : kmax = 6
84631 : DO i = 1, imax
84632 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84633 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
84634 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84635 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
84636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
84637 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
84638 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
84639 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
84640 : END DO
84641 : imax = 9*1*5
84642 : kmax = 1
84643 : i = 0
84644 : DO i1 = 1, 5
84645 : DO i2 = 1, 1
84646 : DO i3 = 1, 9
84647 : i = i + 1
84648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
84650 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
84651 : END DO
84652 : END DO
84653 : END DO
84654 : s_offset_d1 = s_offset_d1 + 1
84655 : END DO
84656 : s_offset_c1 = s_offset_c1 + 5
84657 : END DO
84658 : s_offset_b1 = s_offset_b1 + 1
84659 : END DO
84660 : s_offset_a1 = s_offset_a1 + 9
84661 : END DO
84662 : END SUBROUTINE contract_gsds
84663 : #endif
84664 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84665 : ! **************************************************************************************************
84666 : !> \brief ...
84667 : !> \param work ...
84668 : !> \param nl_a ...
84669 : !> \param nl_b ...
84670 : !> \param nl_c ...
84671 : !> \param nl_d ...
84672 : !> \param sphi_a ...
84673 : !> \param sphi_b ...
84674 : !> \param sphi_c ...
84675 : !> \param sphi_d ...
84676 : !> \param primitives ...
84677 : !> \param buffer1 ...
84678 : !> \param buffer2 ...
84679 : ! **************************************************************************************************
84680 : SUBROUTINE contract_gsdp(work, &
84681 : nl_a, nl_b, nl_c, nl_d, &
84682 : sphi_a, sphi_b, sphi_c, sphi_d, &
84683 : primitives, &
84684 : buffer1, buffer2)
84685 : REAL(dp), DIMENSION(15*1*6*3), INTENT(IN) :: work
84686 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84687 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84688 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84689 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
84690 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
84691 : REAL(dp), &
84692 : DIMENSION(9*nl_a, 1*nl_b, 5*nl_c, 3*nl_d) :: primitives
84693 : REAL(dp), DIMENSION(15*1*6*3) :: buffer1, buffer2
84694 :
84695 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84696 : kmax, s_offset_a1, s_offset_b1, &
84697 : s_offset_c1, s_offset_d1
84698 :
84699 : s_offset_a1 = 0
84700 : DO ia = 1, nl_a
84701 : s_offset_b1 = 0
84702 : DO ib = 1, nl_b
84703 : s_offset_c1 = 0
84704 : DO ic = 1, nl_c
84705 : s_offset_d1 = 0
84706 : DO id = 1, nl_d
84707 : buffer1 = 0.0_dp
84708 : imax = 1*6*3
84709 : kmax = 15
84710 : DO i = 1, imax
84711 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84712 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84713 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84714 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84715 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84716 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84717 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84718 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84719 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84720 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84721 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84722 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84723 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84724 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84725 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84726 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84727 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84728 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84729 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84730 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84731 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84732 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84733 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84734 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84735 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84736 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84737 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84738 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84739 : END DO
84740 : buffer2 = 0.0_dp
84741 : imax = 9*6*3
84742 : kmax = 1
84743 : DO i = 1, imax
84744 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84745 : END DO
84746 : buffer1 = 0.0_dp
84747 : imax = 9*1*3
84748 : kmax = 6
84749 : DO i = 1, imax
84750 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84751 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
84752 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84753 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
84754 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
84755 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
84756 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
84757 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
84758 : END DO
84759 : imax = 9*1*5
84760 : kmax = 3
84761 : i = 0
84762 : DO i1 = 1, 5
84763 : DO i2 = 1, 1
84764 : DO i3 = 1, 9
84765 : i = i + 1
84766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
84768 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
84769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
84771 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
84774 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
84775 : END DO
84776 : END DO
84777 : END DO
84778 : s_offset_d1 = s_offset_d1 + 3
84779 : END DO
84780 : s_offset_c1 = s_offset_c1 + 5
84781 : END DO
84782 : s_offset_b1 = s_offset_b1 + 1
84783 : END DO
84784 : s_offset_a1 = s_offset_a1 + 9
84785 : END DO
84786 : END SUBROUTINE contract_gsdp
84787 : #endif
84788 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84789 : ! **************************************************************************************************
84790 : !> \brief ...
84791 : !> \param work ...
84792 : !> \param nl_a ...
84793 : !> \param nl_b ...
84794 : !> \param nl_c ...
84795 : !> \param nl_d ...
84796 : !> \param sphi_a ...
84797 : !> \param sphi_b ...
84798 : !> \param sphi_c ...
84799 : !> \param sphi_d ...
84800 : !> \param primitives ...
84801 : !> \param buffer1 ...
84802 : !> \param buffer2 ...
84803 : ! **************************************************************************************************
84804 : SUBROUTINE contract_gsdd(work, &
84805 : nl_a, nl_b, nl_c, nl_d, &
84806 : sphi_a, sphi_b, sphi_c, sphi_d, &
84807 : primitives, &
84808 : buffer1, buffer2)
84809 : REAL(dp), DIMENSION(15*1*6*6), INTENT(IN) :: work
84810 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84811 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84812 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84813 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
84814 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
84815 : REAL(dp), &
84816 : DIMENSION(9*nl_a, 1*nl_b, 5*nl_c, 5*nl_d) :: primitives
84817 : REAL(dp), DIMENSION(15*1*6*6) :: buffer1, buffer2
84818 :
84819 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84820 : kmax, s_offset_a1, s_offset_b1, &
84821 : s_offset_c1, s_offset_d1
84822 :
84823 : s_offset_a1 = 0
84824 : DO ia = 1, nl_a
84825 : s_offset_b1 = 0
84826 : DO ib = 1, nl_b
84827 : s_offset_c1 = 0
84828 : DO ic = 1, nl_c
84829 : s_offset_d1 = 0
84830 : DO id = 1, nl_d
84831 : buffer1 = 0.0_dp
84832 : imax = 1*6*6
84833 : kmax = 15
84834 : DO i = 1, imax
84835 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84836 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84837 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84838 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84839 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84840 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84841 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84842 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84843 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84844 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84845 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84846 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84847 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84848 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84849 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84850 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84851 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84852 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84853 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84854 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84855 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84856 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84857 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84858 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84859 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84860 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
84861 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
84862 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
84863 : END DO
84864 : buffer2 = 0.0_dp
84865 : imax = 9*6*6
84866 : kmax = 1
84867 : DO i = 1, imax
84868 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
84869 : END DO
84870 : buffer1 = 0.0_dp
84871 : imax = 9*1*6
84872 : kmax = 6
84873 : DO i = 1, imax
84874 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
84875 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
84876 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
84877 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
84878 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
84879 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
84880 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
84881 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
84882 : END DO
84883 : imax = 9*1*5
84884 : kmax = 6
84885 : i = 0
84886 : DO i1 = 1, 5
84887 : DO i2 = 1, 1
84888 : DO i3 = 1, 9
84889 : i = i + 1
84890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84892 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
84893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84895 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
84896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
84897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
84898 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
84899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
84900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
84901 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
84902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84904 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
84905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
84906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
84907 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
84908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
84909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
84910 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
84911 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
84912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
84913 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
84914 : END DO
84915 : END DO
84916 : END DO
84917 : s_offset_d1 = s_offset_d1 + 5
84918 : END DO
84919 : s_offset_c1 = s_offset_c1 + 5
84920 : END DO
84921 : s_offset_b1 = s_offset_b1 + 1
84922 : END DO
84923 : s_offset_a1 = s_offset_a1 + 9
84924 : END DO
84925 : END SUBROUTINE contract_gsdd
84926 : #endif
84927 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
84928 : ! **************************************************************************************************
84929 : !> \brief ...
84930 : !> \param work ...
84931 : !> \param nl_a ...
84932 : !> \param nl_b ...
84933 : !> \param nl_c ...
84934 : !> \param nl_d ...
84935 : !> \param sphi_a ...
84936 : !> \param sphi_b ...
84937 : !> \param sphi_c ...
84938 : !> \param sphi_d ...
84939 : !> \param primitives ...
84940 : !> \param buffer1 ...
84941 : !> \param buffer2 ...
84942 : ! **************************************************************************************************
84943 : SUBROUTINE contract_gsdf(work, &
84944 : nl_a, nl_b, nl_c, nl_d, &
84945 : sphi_a, sphi_b, sphi_c, sphi_d, &
84946 : primitives, &
84947 : buffer1, buffer2)
84948 : REAL(dp), DIMENSION(15*1*6*10), INTENT(IN) :: work
84949 : INTEGER :: nl_a, nl_b, nl_c, nl_d
84950 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
84951 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
84952 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
84953 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
84954 : REAL(dp), &
84955 : DIMENSION(9*nl_a, 1*nl_b, 5*nl_c, 7*nl_d) :: primitives
84956 : REAL(dp), DIMENSION(15*1*6*10) :: buffer1, buffer2
84957 :
84958 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
84959 : kmax, s_offset_a1, s_offset_b1, &
84960 : s_offset_c1, s_offset_d1
84961 :
84962 : s_offset_a1 = 0
84963 : DO ia = 1, nl_a
84964 : s_offset_b1 = 0
84965 : DO ib = 1, nl_b
84966 : s_offset_c1 = 0
84967 : DO ic = 1, nl_c
84968 : s_offset_d1 = 0
84969 : DO id = 1, nl_d
84970 : buffer1 = 0.0_dp
84971 : imax = 1*6*10
84972 : kmax = 15
84973 : DO i = 1, imax
84974 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
84975 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
84976 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
84977 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
84978 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
84979 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
84980 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
84981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
84982 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
84983 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
84984 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
84985 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
84986 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
84987 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
84988 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
84989 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
84990 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
84991 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
84992 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
84993 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
84994 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
84995 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
84996 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
84997 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
84998 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
84999 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85000 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85001 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85002 : END DO
85003 : buffer2 = 0.0_dp
85004 : imax = 9*6*10
85005 : kmax = 1
85006 : DO i = 1, imax
85007 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85008 : END DO
85009 : buffer1 = 0.0_dp
85010 : imax = 9*1*10
85011 : kmax = 6
85012 : DO i = 1, imax
85013 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
85014 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85015 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85016 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85017 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
85018 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85019 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85020 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
85021 : END DO
85022 : imax = 9*1*5
85023 : kmax = 10
85024 : i = 0
85025 : DO i1 = 1, 5
85026 : DO i2 = 1, 1
85027 : DO i3 = 1, 9
85028 : i = i + 1
85029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85031 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
85032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85034 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
85035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85037 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85040 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
85041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85043 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
85044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85046 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
85047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85049 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
85050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85052 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
85053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
85055 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
85056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85058 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
85059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85061 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
85062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85064 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
85065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85067 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
85068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85070 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
85071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85073 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
85074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85076 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
85077 : END DO
85078 : END DO
85079 : END DO
85080 : s_offset_d1 = s_offset_d1 + 7
85081 : END DO
85082 : s_offset_c1 = s_offset_c1 + 5
85083 : END DO
85084 : s_offset_b1 = s_offset_b1 + 1
85085 : END DO
85086 : s_offset_a1 = s_offset_a1 + 9
85087 : END DO
85088 : END SUBROUTINE contract_gsdf
85089 : #endif
85090 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85091 : ! **************************************************************************************************
85092 : !> \brief ...
85093 : !> \param work ...
85094 : !> \param nl_a ...
85095 : !> \param nl_b ...
85096 : !> \param nl_c ...
85097 : !> \param nl_d ...
85098 : !> \param sphi_a ...
85099 : !> \param sphi_b ...
85100 : !> \param sphi_c ...
85101 : !> \param sphi_d ...
85102 : !> \param primitives ...
85103 : !> \param buffer1 ...
85104 : !> \param buffer2 ...
85105 : ! **************************************************************************************************
85106 : SUBROUTINE contract_gsdg(work, &
85107 : nl_a, nl_b, nl_c, nl_d, &
85108 : sphi_a, sphi_b, sphi_c, sphi_d, &
85109 : primitives, &
85110 : buffer1, buffer2)
85111 : REAL(dp), DIMENSION(15*1*6*15), INTENT(IN) :: work
85112 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85113 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85114 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85115 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
85116 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
85117 : REAL(dp), &
85118 : DIMENSION(9*nl_a, 1*nl_b, 5*nl_c, 9*nl_d) :: primitives
85119 : REAL(dp), DIMENSION(15*1*6*15) :: buffer1, buffer2
85120 :
85121 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85122 : kmax, s_offset_a1, s_offset_b1, &
85123 : s_offset_c1, s_offset_d1
85124 :
85125 : s_offset_a1 = 0
85126 : DO ia = 1, nl_a
85127 : s_offset_b1 = 0
85128 : DO ib = 1, nl_b
85129 : s_offset_c1 = 0
85130 : DO ic = 1, nl_c
85131 : s_offset_d1 = 0
85132 : DO id = 1, nl_d
85133 : buffer1 = 0.0_dp
85134 : imax = 1*6*15
85135 : kmax = 15
85136 : DO i = 1, imax
85137 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85138 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85139 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85140 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85141 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85142 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85143 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85144 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85145 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85146 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85147 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85148 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85149 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85150 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85151 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85152 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85153 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85154 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85155 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85156 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85157 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85158 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85159 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85160 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85161 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85162 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85163 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85164 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85165 : END DO
85166 : buffer2 = 0.0_dp
85167 : imax = 9*6*15
85168 : kmax = 1
85169 : DO i = 1, imax
85170 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85171 : END DO
85172 : buffer1 = 0.0_dp
85173 : imax = 9*1*15
85174 : kmax = 6
85175 : DO i = 1, imax
85176 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
85177 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85178 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85179 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85180 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
85181 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85182 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85183 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
85184 : END DO
85185 : imax = 9*1*5
85186 : kmax = 15
85187 : i = 0
85188 : DO i1 = 1, 5
85189 : DO i2 = 1, 1
85190 : DO i3 = 1, 9
85191 : i = i + 1
85192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85194 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
85195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85197 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
85198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
85199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
85200 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
85201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85203 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85206 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
85207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85209 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
85210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
85211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
85212 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
85213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85215 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
85216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
85217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
85218 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
85219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
85221 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
85222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85224 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
85225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85227 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
85228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85230 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
85231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85233 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
85234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85236 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
85237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85239 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
85240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
85241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
85242 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
85243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85245 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
85246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85248 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
85249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85251 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
85252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85254 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
85255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
85256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
85257 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
85258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
85260 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
85261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85263 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
85264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85266 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
85267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85269 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
85270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85272 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
85273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85275 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
85276 : END DO
85277 : END DO
85278 : END DO
85279 : s_offset_d1 = s_offset_d1 + 9
85280 : END DO
85281 : s_offset_c1 = s_offset_c1 + 5
85282 : END DO
85283 : s_offset_b1 = s_offset_b1 + 1
85284 : END DO
85285 : s_offset_a1 = s_offset_a1 + 9
85286 : END DO
85287 : END SUBROUTINE contract_gsdg
85288 : #endif
85289 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85290 : ! **************************************************************************************************
85291 : !> \brief ...
85292 : !> \param work ...
85293 : !> \param nl_a ...
85294 : !> \param nl_b ...
85295 : !> \param nl_c ...
85296 : !> \param nl_d ...
85297 : !> \param sphi_a ...
85298 : !> \param sphi_b ...
85299 : !> \param sphi_c ...
85300 : !> \param sphi_d ...
85301 : !> \param primitives ...
85302 : !> \param buffer1 ...
85303 : !> \param buffer2 ...
85304 : ! **************************************************************************************************
85305 : SUBROUTINE contract_gsfs(work, &
85306 : nl_a, nl_b, nl_c, nl_d, &
85307 : sphi_a, sphi_b, sphi_c, sphi_d, &
85308 : primitives, &
85309 : buffer1, buffer2)
85310 : REAL(dp), DIMENSION(15*1*10*1), INTENT(IN) :: work
85311 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85312 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85313 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85314 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
85315 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
85316 : REAL(dp), &
85317 : DIMENSION(9*nl_a, 1*nl_b, 7*nl_c, 1*nl_d) :: primitives
85318 : REAL(dp), DIMENSION(15*1*10*1) :: buffer1, buffer2
85319 :
85320 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85321 : kmax, s_offset_a1, s_offset_b1, &
85322 : s_offset_c1, s_offset_d1
85323 :
85324 : s_offset_a1 = 0
85325 : DO ia = 1, nl_a
85326 : s_offset_b1 = 0
85327 : DO ib = 1, nl_b
85328 : s_offset_c1 = 0
85329 : DO ic = 1, nl_c
85330 : s_offset_d1 = 0
85331 : DO id = 1, nl_d
85332 : buffer1 = 0.0_dp
85333 : imax = 1*10*1
85334 : kmax = 15
85335 : DO i = 1, imax
85336 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85337 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85338 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85339 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85340 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85341 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85342 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85343 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85344 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85345 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85346 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85347 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85348 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85349 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85350 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85351 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85352 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85353 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85354 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85355 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85356 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85357 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85358 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85359 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85361 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85362 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85363 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85364 : END DO
85365 : buffer2 = 0.0_dp
85366 : imax = 9*10*1
85367 : kmax = 1
85368 : DO i = 1, imax
85369 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85370 : END DO
85371 : buffer1 = 0.0_dp
85372 : imax = 9*1*1
85373 : kmax = 10
85374 : DO i = 1, imax
85375 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85376 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
85377 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85378 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
85379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85380 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
85381 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85382 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
85383 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85384 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
85385 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
85386 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
85387 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
85388 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
85389 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
85390 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
85391 : END DO
85392 : imax = 9*1*7
85393 : kmax = 1
85394 : i = 0
85395 : DO i1 = 1, 7
85396 : DO i2 = 1, 1
85397 : DO i3 = 1, 9
85398 : i = i + 1
85399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85400 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
85401 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
85402 : END DO
85403 : END DO
85404 : END DO
85405 : s_offset_d1 = s_offset_d1 + 1
85406 : END DO
85407 : s_offset_c1 = s_offset_c1 + 7
85408 : END DO
85409 : s_offset_b1 = s_offset_b1 + 1
85410 : END DO
85411 : s_offset_a1 = s_offset_a1 + 9
85412 : END DO
85413 : END SUBROUTINE contract_gsfs
85414 : #endif
85415 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85416 : ! **************************************************************************************************
85417 : !> \brief ...
85418 : !> \param work ...
85419 : !> \param nl_a ...
85420 : !> \param nl_b ...
85421 : !> \param nl_c ...
85422 : !> \param nl_d ...
85423 : !> \param sphi_a ...
85424 : !> \param sphi_b ...
85425 : !> \param sphi_c ...
85426 : !> \param sphi_d ...
85427 : !> \param primitives ...
85428 : !> \param buffer1 ...
85429 : !> \param buffer2 ...
85430 : ! **************************************************************************************************
85431 : SUBROUTINE contract_gsfp(work, &
85432 : nl_a, nl_b, nl_c, nl_d, &
85433 : sphi_a, sphi_b, sphi_c, sphi_d, &
85434 : primitives, &
85435 : buffer1, buffer2)
85436 : REAL(dp), DIMENSION(15*1*10*3), INTENT(IN) :: work
85437 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85438 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85439 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85440 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
85441 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
85442 : REAL(dp), &
85443 : DIMENSION(9*nl_a, 1*nl_b, 7*nl_c, 3*nl_d) :: primitives
85444 : REAL(dp), DIMENSION(15*1*10*3) :: buffer1, buffer2
85445 :
85446 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85447 : kmax, s_offset_a1, s_offset_b1, &
85448 : s_offset_c1, s_offset_d1
85449 :
85450 : s_offset_a1 = 0
85451 : DO ia = 1, nl_a
85452 : s_offset_b1 = 0
85453 : DO ib = 1, nl_b
85454 : s_offset_c1 = 0
85455 : DO ic = 1, nl_c
85456 : s_offset_d1 = 0
85457 : DO id = 1, nl_d
85458 : buffer1 = 0.0_dp
85459 : imax = 1*10*3
85460 : kmax = 15
85461 : DO i = 1, imax
85462 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85463 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85464 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85465 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85466 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85467 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85468 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85469 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85470 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85471 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85472 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85473 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85474 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85475 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85476 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85477 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85478 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85479 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85480 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85481 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85482 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85483 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85484 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85485 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85486 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85487 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85488 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85489 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85490 : END DO
85491 : buffer2 = 0.0_dp
85492 : imax = 9*10*3
85493 : kmax = 1
85494 : DO i = 1, imax
85495 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85496 : END DO
85497 : buffer1 = 0.0_dp
85498 : imax = 9*1*3
85499 : kmax = 10
85500 : DO i = 1, imax
85501 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85502 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
85503 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85504 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
85505 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85506 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
85507 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85508 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
85509 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85510 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
85511 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
85512 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
85513 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
85514 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
85515 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
85516 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
85517 : END DO
85518 : imax = 9*1*7
85519 : kmax = 3
85520 : i = 0
85521 : DO i1 = 1, 7
85522 : DO i2 = 1, 1
85523 : DO i3 = 1, 9
85524 : i = i + 1
85525 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
85527 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
85528 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
85530 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85531 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
85533 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
85534 : END DO
85535 : END DO
85536 : END DO
85537 : s_offset_d1 = s_offset_d1 + 3
85538 : END DO
85539 : s_offset_c1 = s_offset_c1 + 7
85540 : END DO
85541 : s_offset_b1 = s_offset_b1 + 1
85542 : END DO
85543 : s_offset_a1 = s_offset_a1 + 9
85544 : END DO
85545 : END SUBROUTINE contract_gsfp
85546 : #endif
85547 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85548 : ! **************************************************************************************************
85549 : !> \brief ...
85550 : !> \param work ...
85551 : !> \param nl_a ...
85552 : !> \param nl_b ...
85553 : !> \param nl_c ...
85554 : !> \param nl_d ...
85555 : !> \param sphi_a ...
85556 : !> \param sphi_b ...
85557 : !> \param sphi_c ...
85558 : !> \param sphi_d ...
85559 : !> \param primitives ...
85560 : !> \param buffer1 ...
85561 : !> \param buffer2 ...
85562 : ! **************************************************************************************************
85563 : SUBROUTINE contract_gsfd(work, &
85564 : nl_a, nl_b, nl_c, nl_d, &
85565 : sphi_a, sphi_b, sphi_c, sphi_d, &
85566 : primitives, &
85567 : buffer1, buffer2)
85568 : REAL(dp), DIMENSION(15*1*10*6), INTENT(IN) :: work
85569 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85570 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85571 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85572 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
85573 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
85574 : REAL(dp), &
85575 : DIMENSION(9*nl_a, 1*nl_b, 7*nl_c, 5*nl_d) :: primitives
85576 : REAL(dp), DIMENSION(15*1*10*6) :: buffer1, buffer2
85577 :
85578 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85579 : kmax, s_offset_a1, s_offset_b1, &
85580 : s_offset_c1, s_offset_d1
85581 :
85582 : s_offset_a1 = 0
85583 : DO ia = 1, nl_a
85584 : s_offset_b1 = 0
85585 : DO ib = 1, nl_b
85586 : s_offset_c1 = 0
85587 : DO ic = 1, nl_c
85588 : s_offset_d1 = 0
85589 : DO id = 1, nl_d
85590 : buffer1 = 0.0_dp
85591 : imax = 1*10*6
85592 : kmax = 15
85593 : DO i = 1, imax
85594 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85595 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85596 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85597 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85598 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85599 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85600 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85601 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85602 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85603 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85604 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85605 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85606 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85607 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85608 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85609 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85610 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85611 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85612 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85613 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85614 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85615 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85616 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85617 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85618 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85619 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85620 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85621 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85622 : END DO
85623 : buffer2 = 0.0_dp
85624 : imax = 9*10*6
85625 : kmax = 1
85626 : DO i = 1, imax
85627 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85628 : END DO
85629 : buffer1 = 0.0_dp
85630 : imax = 9*1*6
85631 : kmax = 10
85632 : DO i = 1, imax
85633 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85634 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
85635 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85636 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
85637 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85638 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
85639 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85640 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
85641 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85642 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
85643 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
85644 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
85645 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
85646 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
85647 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
85648 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
85649 : END DO
85650 : imax = 9*1*7
85651 : kmax = 6
85652 : i = 0
85653 : DO i1 = 1, 7
85654 : DO i2 = 1, 1
85655 : DO i3 = 1, 9
85656 : i = i + 1
85657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85659 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
85660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85662 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
85663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85665 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85668 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
85669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85671 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
85672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85674 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
85675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
85677 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
85678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85680 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
85681 : END DO
85682 : END DO
85683 : END DO
85684 : s_offset_d1 = s_offset_d1 + 5
85685 : END DO
85686 : s_offset_c1 = s_offset_c1 + 7
85687 : END DO
85688 : s_offset_b1 = s_offset_b1 + 1
85689 : END DO
85690 : s_offset_a1 = s_offset_a1 + 9
85691 : END DO
85692 : END SUBROUTINE contract_gsfd
85693 : #endif
85694 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85695 : ! **************************************************************************************************
85696 : !> \brief ...
85697 : !> \param work ...
85698 : !> \param nl_a ...
85699 : !> \param nl_b ...
85700 : !> \param nl_c ...
85701 : !> \param nl_d ...
85702 : !> \param sphi_a ...
85703 : !> \param sphi_b ...
85704 : !> \param sphi_c ...
85705 : !> \param sphi_d ...
85706 : !> \param primitives ...
85707 : !> \param buffer1 ...
85708 : !> \param buffer2 ...
85709 : ! **************************************************************************************************
85710 : SUBROUTINE contract_gsff(work, &
85711 : nl_a, nl_b, nl_c, nl_d, &
85712 : sphi_a, sphi_b, sphi_c, sphi_d, &
85713 : primitives, &
85714 : buffer1, buffer2)
85715 : REAL(dp), DIMENSION(15*1*10*10), INTENT(IN) :: work
85716 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85717 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85718 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85719 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
85720 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
85721 : REAL(dp), &
85722 : DIMENSION(9*nl_a, 1*nl_b, 7*nl_c, 7*nl_d) :: primitives
85723 : REAL(dp), DIMENSION(15*1*10*10) :: buffer1, buffer2
85724 :
85725 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85726 : kmax, s_offset_a1, s_offset_b1, &
85727 : s_offset_c1, s_offset_d1
85728 :
85729 : s_offset_a1 = 0
85730 : DO ia = 1, nl_a
85731 : s_offset_b1 = 0
85732 : DO ib = 1, nl_b
85733 : s_offset_c1 = 0
85734 : DO ic = 1, nl_c
85735 : s_offset_d1 = 0
85736 : DO id = 1, nl_d
85737 : buffer1 = 0.0_dp
85738 : imax = 1*10*10
85739 : kmax = 15
85740 : DO i = 1, imax
85741 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85742 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85743 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85744 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85745 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85746 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85747 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85748 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85749 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85750 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85751 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85752 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85753 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85754 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85755 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85756 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85757 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85758 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85759 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85760 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85761 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85762 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85763 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85764 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85765 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85766 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85767 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85768 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85769 : END DO
85770 : buffer2 = 0.0_dp
85771 : imax = 9*10*10
85772 : kmax = 1
85773 : DO i = 1, imax
85774 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85775 : END DO
85776 : buffer1 = 0.0_dp
85777 : imax = 9*1*10
85778 : kmax = 10
85779 : DO i = 1, imax
85780 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85781 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
85782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85783 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
85784 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85785 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
85786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85787 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
85788 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
85790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
85791 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
85792 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
85793 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
85794 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
85795 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
85796 : END DO
85797 : imax = 9*1*7
85798 : kmax = 10
85799 : i = 0
85800 : DO i1 = 1, 7
85801 : DO i2 = 1, 1
85802 : DO i3 = 1, 9
85803 : i = i + 1
85804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85805 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85806 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
85807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85808 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85809 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
85810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85812 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85815 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
85816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85818 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
85819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85821 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
85822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85824 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
85825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85827 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
85828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
85829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
85830 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
85831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85833 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
85834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85836 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
85837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85839 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
85840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85842 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
85843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85845 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
85846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85848 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
85849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
85850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
85851 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
85852 : END DO
85853 : END DO
85854 : END DO
85855 : s_offset_d1 = s_offset_d1 + 7
85856 : END DO
85857 : s_offset_c1 = s_offset_c1 + 7
85858 : END DO
85859 : s_offset_b1 = s_offset_b1 + 1
85860 : END DO
85861 : s_offset_a1 = s_offset_a1 + 9
85862 : END DO
85863 : END SUBROUTINE contract_gsff
85864 : #endif
85865 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
85866 : ! **************************************************************************************************
85867 : !> \brief ...
85868 : !> \param work ...
85869 : !> \param nl_a ...
85870 : !> \param nl_b ...
85871 : !> \param nl_c ...
85872 : !> \param nl_d ...
85873 : !> \param sphi_a ...
85874 : !> \param sphi_b ...
85875 : !> \param sphi_c ...
85876 : !> \param sphi_d ...
85877 : !> \param primitives ...
85878 : !> \param buffer1 ...
85879 : !> \param buffer2 ...
85880 : ! **************************************************************************************************
85881 : SUBROUTINE contract_gsfg(work, &
85882 : nl_a, nl_b, nl_c, nl_d, &
85883 : sphi_a, sphi_b, sphi_c, sphi_d, &
85884 : primitives, &
85885 : buffer1, buffer2)
85886 : REAL(dp), DIMENSION(15*1*10*15), INTENT(IN) :: work
85887 : INTEGER :: nl_a, nl_b, nl_c, nl_d
85888 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
85889 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
85890 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
85891 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
85892 : REAL(dp), &
85893 : DIMENSION(9*nl_a, 1*nl_b, 7*nl_c, 9*nl_d) :: primitives
85894 : REAL(dp), DIMENSION(15*1*10*15) :: buffer1, buffer2
85895 :
85896 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
85897 : kmax, s_offset_a1, s_offset_b1, &
85898 : s_offset_c1, s_offset_d1
85899 :
85900 : s_offset_a1 = 0
85901 : DO ia = 1, nl_a
85902 : s_offset_b1 = 0
85903 : DO ib = 1, nl_b
85904 : s_offset_c1 = 0
85905 : DO ic = 1, nl_c
85906 : s_offset_d1 = 0
85907 : DO id = 1, nl_d
85908 : buffer1 = 0.0_dp
85909 : imax = 1*10*15
85910 : kmax = 15
85911 : DO i = 1, imax
85912 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
85913 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
85914 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
85915 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
85916 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
85917 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
85918 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
85919 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
85920 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
85921 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
85922 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
85923 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
85924 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
85925 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
85926 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
85927 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
85928 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
85929 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
85930 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
85931 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
85932 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
85933 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
85934 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
85935 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
85936 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
85937 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
85938 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
85939 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
85940 : END DO
85941 : buffer2 = 0.0_dp
85942 : imax = 9*10*15
85943 : kmax = 1
85944 : DO i = 1, imax
85945 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
85946 : END DO
85947 : buffer1 = 0.0_dp
85948 : imax = 9*1*15
85949 : kmax = 10
85950 : DO i = 1, imax
85951 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
85952 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
85953 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
85954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
85955 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
85956 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
85957 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
85958 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
85959 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
85960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
85961 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
85962 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
85963 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
85964 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
85965 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
85966 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
85967 : END DO
85968 : imax = 9*1*7
85969 : kmax = 15
85970 : i = 0
85971 : DO i1 = 1, 7
85972 : DO i2 = 1, 1
85973 : DO i3 = 1, 9
85974 : i = i + 1
85975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85977 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
85978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
85979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
85980 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
85981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
85982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
85983 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
85984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
85985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
85986 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
85987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
85988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
85989 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
85990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
85991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
85992 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
85993 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
85994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
85995 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
85996 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
85997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
85998 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
85999 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
86000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
86001 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
86002 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86004 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
86005 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86007 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
86008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86010 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
86011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86013 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
86014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86016 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
86017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86019 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
86020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86022 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
86023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
86024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
86025 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
86026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86028 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
86029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86031 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
86032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86034 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
86035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86037 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
86038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
86039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
86040 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
86041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86043 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
86044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86046 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
86047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86049 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
86050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86052 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
86053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86055 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
86056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86058 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
86059 : END DO
86060 : END DO
86061 : END DO
86062 : s_offset_d1 = s_offset_d1 + 9
86063 : END DO
86064 : s_offset_c1 = s_offset_c1 + 7
86065 : END DO
86066 : s_offset_b1 = s_offset_b1 + 1
86067 : END DO
86068 : s_offset_a1 = s_offset_a1 + 9
86069 : END DO
86070 : END SUBROUTINE contract_gsfg
86071 : #endif
86072 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86073 : ! **************************************************************************************************
86074 : !> \brief ...
86075 : !> \param work ...
86076 : !> \param nl_a ...
86077 : !> \param nl_b ...
86078 : !> \param nl_c ...
86079 : !> \param nl_d ...
86080 : !> \param sphi_a ...
86081 : !> \param sphi_b ...
86082 : !> \param sphi_c ...
86083 : !> \param sphi_d ...
86084 : !> \param primitives ...
86085 : !> \param buffer1 ...
86086 : !> \param buffer2 ...
86087 : ! **************************************************************************************************
86088 : SUBROUTINE contract_gsgs(work, &
86089 : nl_a, nl_b, nl_c, nl_d, &
86090 : sphi_a, sphi_b, sphi_c, sphi_d, &
86091 : primitives, &
86092 : buffer1, buffer2)
86093 : REAL(dp), DIMENSION(15*1*15*1), INTENT(IN) :: work
86094 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86095 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86096 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
86097 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
86098 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
86099 : REAL(dp), &
86100 : DIMENSION(9*nl_a, 1*nl_b, 9*nl_c, 1*nl_d) :: primitives
86101 : REAL(dp), DIMENSION(15*1*15*1) :: buffer1, buffer2
86102 :
86103 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86104 : kmax, s_offset_a1, s_offset_b1, &
86105 : s_offset_c1, s_offset_d1
86106 :
86107 : s_offset_a1 = 0
86108 : DO ia = 1, nl_a
86109 : s_offset_b1 = 0
86110 : DO ib = 1, nl_b
86111 : s_offset_c1 = 0
86112 : DO ic = 1, nl_c
86113 : s_offset_d1 = 0
86114 : DO id = 1, nl_d
86115 : buffer1 = 0.0_dp
86116 : imax = 1*15*1
86117 : kmax = 15
86118 : DO i = 1, imax
86119 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86120 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86121 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86122 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86123 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86124 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86125 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86126 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86127 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86128 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86129 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86130 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86131 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86132 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86133 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86134 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86135 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86136 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86137 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86138 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86139 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86140 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86141 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86142 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86143 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86144 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86145 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86146 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86147 : END DO
86148 : buffer2 = 0.0_dp
86149 : imax = 9*15*1
86150 : kmax = 1
86151 : DO i = 1, imax
86152 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
86153 : END DO
86154 : buffer1 = 0.0_dp
86155 : imax = 9*1*1
86156 : kmax = 15
86157 : DO i = 1, imax
86158 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
86159 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
86160 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
86161 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
86162 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
86163 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
86164 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
86165 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
86166 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
86167 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
86168 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
86169 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
86170 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
86171 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
86172 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
86173 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
86174 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
86175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
86176 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
86177 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
86178 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
86179 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
86180 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
86181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
86182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
86183 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
86184 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
86185 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
86186 : END DO
86187 : imax = 9*1*9
86188 : kmax = 1
86189 : i = 0
86190 : DO i1 = 1, 9
86191 : DO i2 = 1, 1
86192 : DO i3 = 1, 9
86193 : i = i + 1
86194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
86196 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
86197 : END DO
86198 : END DO
86199 : END DO
86200 : s_offset_d1 = s_offset_d1 + 1
86201 : END DO
86202 : s_offset_c1 = s_offset_c1 + 9
86203 : END DO
86204 : s_offset_b1 = s_offset_b1 + 1
86205 : END DO
86206 : s_offset_a1 = s_offset_a1 + 9
86207 : END DO
86208 : END SUBROUTINE contract_gsgs
86209 : #endif
86210 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86211 : ! **************************************************************************************************
86212 : !> \brief ...
86213 : !> \param work ...
86214 : !> \param nl_a ...
86215 : !> \param nl_b ...
86216 : !> \param nl_c ...
86217 : !> \param nl_d ...
86218 : !> \param sphi_a ...
86219 : !> \param sphi_b ...
86220 : !> \param sphi_c ...
86221 : !> \param sphi_d ...
86222 : !> \param primitives ...
86223 : !> \param buffer1 ...
86224 : !> \param buffer2 ...
86225 : ! **************************************************************************************************
86226 : SUBROUTINE contract_gsgp(work, &
86227 : nl_a, nl_b, nl_c, nl_d, &
86228 : sphi_a, sphi_b, sphi_c, sphi_d, &
86229 : primitives, &
86230 : buffer1, buffer2)
86231 : REAL(dp), DIMENSION(15*1*15*3), INTENT(IN) :: work
86232 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86233 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86234 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
86235 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
86236 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
86237 : REAL(dp), &
86238 : DIMENSION(9*nl_a, 1*nl_b, 9*nl_c, 3*nl_d) :: primitives
86239 : REAL(dp), DIMENSION(15*1*15*3) :: buffer1, buffer2
86240 :
86241 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86242 : kmax, s_offset_a1, s_offset_b1, &
86243 : s_offset_c1, s_offset_d1
86244 :
86245 : s_offset_a1 = 0
86246 : DO ia = 1, nl_a
86247 : s_offset_b1 = 0
86248 : DO ib = 1, nl_b
86249 : s_offset_c1 = 0
86250 : DO ic = 1, nl_c
86251 : s_offset_d1 = 0
86252 : DO id = 1, nl_d
86253 : buffer1 = 0.0_dp
86254 : imax = 1*15*3
86255 : kmax = 15
86256 : DO i = 1, imax
86257 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86258 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86259 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86260 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86261 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86262 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86263 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86265 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86266 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86267 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86269 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86272 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86273 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86274 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86275 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86276 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86277 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86278 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86279 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86280 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86281 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86282 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86283 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86284 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86285 : END DO
86286 : buffer2 = 0.0_dp
86287 : imax = 9*15*3
86288 : kmax = 1
86289 : DO i = 1, imax
86290 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
86291 : END DO
86292 : buffer1 = 0.0_dp
86293 : imax = 9*1*3
86294 : kmax = 15
86295 : DO i = 1, imax
86296 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
86297 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
86298 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
86299 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
86300 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
86301 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
86302 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
86303 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
86304 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
86305 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
86306 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
86307 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
86308 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
86309 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
86310 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
86311 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
86312 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
86313 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
86314 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
86315 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
86316 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
86317 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
86318 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
86319 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
86320 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
86321 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
86322 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
86323 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
86324 : END DO
86325 : imax = 9*1*9
86326 : kmax = 3
86327 : i = 0
86328 : DO i1 = 1, 9
86329 : DO i2 = 1, 1
86330 : DO i3 = 1, 9
86331 : i = i + 1
86332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
86334 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
86335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
86337 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
86338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
86340 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
86341 : END DO
86342 : END DO
86343 : END DO
86344 : s_offset_d1 = s_offset_d1 + 3
86345 : END DO
86346 : s_offset_c1 = s_offset_c1 + 9
86347 : END DO
86348 : s_offset_b1 = s_offset_b1 + 1
86349 : END DO
86350 : s_offset_a1 = s_offset_a1 + 9
86351 : END DO
86352 : END SUBROUTINE contract_gsgp
86353 : #endif
86354 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86355 : ! **************************************************************************************************
86356 : !> \brief ...
86357 : !> \param work ...
86358 : !> \param nl_a ...
86359 : !> \param nl_b ...
86360 : !> \param nl_c ...
86361 : !> \param nl_d ...
86362 : !> \param sphi_a ...
86363 : !> \param sphi_b ...
86364 : !> \param sphi_c ...
86365 : !> \param sphi_d ...
86366 : !> \param primitives ...
86367 : !> \param buffer1 ...
86368 : !> \param buffer2 ...
86369 : ! **************************************************************************************************
86370 : SUBROUTINE contract_gsgd(work, &
86371 : nl_a, nl_b, nl_c, nl_d, &
86372 : sphi_a, sphi_b, sphi_c, sphi_d, &
86373 : primitives, &
86374 : buffer1, buffer2)
86375 : REAL(dp), DIMENSION(15*1*15*6), INTENT(IN) :: work
86376 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86377 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86378 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
86379 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
86380 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
86381 : REAL(dp), &
86382 : DIMENSION(9*nl_a, 1*nl_b, 9*nl_c, 5*nl_d) :: primitives
86383 : REAL(dp), DIMENSION(15*1*15*6) :: buffer1, buffer2
86384 :
86385 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86386 : kmax, s_offset_a1, s_offset_b1, &
86387 : s_offset_c1, s_offset_d1
86388 :
86389 : s_offset_a1 = 0
86390 : DO ia = 1, nl_a
86391 : s_offset_b1 = 0
86392 : DO ib = 1, nl_b
86393 : s_offset_c1 = 0
86394 : DO ic = 1, nl_c
86395 : s_offset_d1 = 0
86396 : DO id = 1, nl_d
86397 : buffer1 = 0.0_dp
86398 : imax = 1*15*6
86399 : kmax = 15
86400 : DO i = 1, imax
86401 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86402 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86403 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86404 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86406 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86407 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86409 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86410 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86411 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86412 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86413 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86414 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86415 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86416 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86417 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86418 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86419 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86420 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86421 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86422 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86423 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86424 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86425 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86426 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86427 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86429 : END DO
86430 : buffer2 = 0.0_dp
86431 : imax = 9*15*6
86432 : kmax = 1
86433 : DO i = 1, imax
86434 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
86435 : END DO
86436 : buffer1 = 0.0_dp
86437 : imax = 9*1*6
86438 : kmax = 15
86439 : DO i = 1, imax
86440 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
86441 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
86442 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
86443 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
86444 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
86445 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
86446 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
86447 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
86448 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
86449 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
86450 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
86451 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
86452 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
86453 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
86454 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
86455 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
86456 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
86457 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
86458 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
86459 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
86460 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
86461 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
86462 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
86463 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
86464 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
86465 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
86466 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
86467 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
86468 : END DO
86469 : imax = 9*1*9
86470 : kmax = 6
86471 : i = 0
86472 : DO i1 = 1, 9
86473 : DO i2 = 1, 1
86474 : DO i3 = 1, 9
86475 : i = i + 1
86476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86478 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
86479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86481 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
86482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86484 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
86485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86487 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
86488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86490 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
86491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86493 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
86494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86496 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
86497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86499 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
86500 : END DO
86501 : END DO
86502 : END DO
86503 : s_offset_d1 = s_offset_d1 + 5
86504 : END DO
86505 : s_offset_c1 = s_offset_c1 + 9
86506 : END DO
86507 : s_offset_b1 = s_offset_b1 + 1
86508 : END DO
86509 : s_offset_a1 = s_offset_a1 + 9
86510 : END DO
86511 : END SUBROUTINE contract_gsgd
86512 : #endif
86513 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86514 : ! **************************************************************************************************
86515 : !> \brief ...
86516 : !> \param work ...
86517 : !> \param nl_a ...
86518 : !> \param nl_b ...
86519 : !> \param nl_c ...
86520 : !> \param nl_d ...
86521 : !> \param sphi_a ...
86522 : !> \param sphi_b ...
86523 : !> \param sphi_c ...
86524 : !> \param sphi_d ...
86525 : !> \param primitives ...
86526 : !> \param buffer1 ...
86527 : !> \param buffer2 ...
86528 : ! **************************************************************************************************
86529 : SUBROUTINE contract_gsgf(work, &
86530 : nl_a, nl_b, nl_c, nl_d, &
86531 : sphi_a, sphi_b, sphi_c, sphi_d, &
86532 : primitives, &
86533 : buffer1, buffer2)
86534 : REAL(dp), DIMENSION(15*1*15*10), INTENT(IN) :: work
86535 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86536 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86537 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
86538 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
86539 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
86540 : REAL(dp), &
86541 : DIMENSION(9*nl_a, 1*nl_b, 9*nl_c, 7*nl_d) :: primitives
86542 : REAL(dp), DIMENSION(15*1*15*10) :: buffer1, buffer2
86543 :
86544 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86545 : kmax, s_offset_a1, s_offset_b1, &
86546 : s_offset_c1, s_offset_d1
86547 :
86548 : s_offset_a1 = 0
86549 : DO ia = 1, nl_a
86550 : s_offset_b1 = 0
86551 : DO ib = 1, nl_b
86552 : s_offset_c1 = 0
86553 : DO ic = 1, nl_c
86554 : s_offset_d1 = 0
86555 : DO id = 1, nl_d
86556 : buffer1 = 0.0_dp
86557 : imax = 1*15*10
86558 : kmax = 15
86559 : DO i = 1, imax
86560 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86561 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86562 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86564 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86565 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86566 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86567 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86568 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86569 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86570 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86571 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86572 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86573 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86574 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86575 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86576 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86577 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86578 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86580 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86581 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86582 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86583 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86584 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86585 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86586 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86587 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86588 : END DO
86589 : buffer2 = 0.0_dp
86590 : imax = 9*15*10
86591 : kmax = 1
86592 : DO i = 1, imax
86593 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
86594 : END DO
86595 : buffer1 = 0.0_dp
86596 : imax = 9*1*10
86597 : kmax = 15
86598 : DO i = 1, imax
86599 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
86600 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
86601 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
86602 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
86603 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
86604 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
86605 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
86606 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
86607 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
86608 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
86609 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
86610 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
86611 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
86612 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
86613 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
86614 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
86615 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
86616 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
86617 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
86618 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
86619 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
86620 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
86621 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
86622 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
86623 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
86624 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
86625 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
86626 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
86627 : END DO
86628 : imax = 9*1*9
86629 : kmax = 10
86630 : i = 0
86631 : DO i1 = 1, 9
86632 : DO i2 = 1, 1
86633 : DO i3 = 1, 9
86634 : i = i + 1
86635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86637 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
86638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86640 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
86641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86643 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
86644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86646 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
86647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86649 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
86650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86652 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
86653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86655 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
86656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86658 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
86659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86661 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
86662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86664 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
86665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86667 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
86668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86670 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
86671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86673 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
86674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86676 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
86677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86679 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
86680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86682 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
86683 : END DO
86684 : END DO
86685 : END DO
86686 : s_offset_d1 = s_offset_d1 + 7
86687 : END DO
86688 : s_offset_c1 = s_offset_c1 + 9
86689 : END DO
86690 : s_offset_b1 = s_offset_b1 + 1
86691 : END DO
86692 : s_offset_a1 = s_offset_a1 + 9
86693 : END DO
86694 : END SUBROUTINE contract_gsgf
86695 : #endif
86696 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86697 : ! **************************************************************************************************
86698 : !> \brief ...
86699 : !> \param work ...
86700 : !> \param nl_a ...
86701 : !> \param nl_b ...
86702 : !> \param nl_c ...
86703 : !> \param nl_d ...
86704 : !> \param sphi_a ...
86705 : !> \param sphi_b ...
86706 : !> \param sphi_c ...
86707 : !> \param sphi_d ...
86708 : !> \param primitives ...
86709 : !> \param buffer1 ...
86710 : !> \param buffer2 ...
86711 : ! **************************************************************************************************
86712 : SUBROUTINE contract_gsgg(work, &
86713 : nl_a, nl_b, nl_c, nl_d, &
86714 : sphi_a, sphi_b, sphi_c, sphi_d, &
86715 : primitives, &
86716 : buffer1, buffer2)
86717 : REAL(dp), DIMENSION(15*1*15*15), INTENT(IN) :: work
86718 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86719 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86720 : REAL(dp), DIMENSION(1, 1*nl_b), INTENT(IN) :: sphi_b
86721 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
86722 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
86723 : REAL(dp), &
86724 : DIMENSION(9*nl_a, 1*nl_b, 9*nl_c, 9*nl_d) :: primitives
86725 : REAL(dp), DIMENSION(15*1*15*15) :: buffer1, buffer2
86726 :
86727 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86728 : kmax, s_offset_a1, s_offset_b1, &
86729 : s_offset_c1, s_offset_d1
86730 :
86731 : s_offset_a1 = 0
86732 : DO ia = 1, nl_a
86733 : s_offset_b1 = 0
86734 : DO ib = 1, nl_b
86735 : s_offset_c1 = 0
86736 : DO ic = 1, nl_c
86737 : s_offset_d1 = 0
86738 : DO id = 1, nl_d
86739 : buffer1 = 0.0_dp
86740 : imax = 1*15*15
86741 : kmax = 15
86742 : DO i = 1, imax
86743 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86744 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86745 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86746 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86747 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86748 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86749 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86750 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86751 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86752 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86753 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86754 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86755 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86756 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86757 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86758 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86759 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86760 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86761 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86762 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86763 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86764 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86765 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86766 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86767 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86768 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86769 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86770 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86771 : END DO
86772 : buffer2 = 0.0_dp
86773 : imax = 9*15*15
86774 : kmax = 1
86775 : DO i = 1, imax
86776 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
86777 : END DO
86778 : buffer1 = 0.0_dp
86779 : imax = 9*1*15
86780 : kmax = 15
86781 : DO i = 1, imax
86782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
86783 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
86784 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
86785 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
86786 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
86787 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
86788 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
86789 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
86790 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
86791 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
86792 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
86793 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
86794 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
86795 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
86796 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
86797 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
86798 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
86799 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
86800 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
86801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
86802 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
86803 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
86804 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
86805 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
86806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
86807 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
86808 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
86809 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
86810 : END DO
86811 : imax = 9*1*9
86812 : kmax = 15
86813 : i = 0
86814 : DO i1 = 1, 9
86815 : DO i2 = 1, 1
86816 : DO i3 = 1, 9
86817 : i = i + 1
86818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86820 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
86821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86823 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
86824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
86825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
86826 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
86827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86829 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
86830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86832 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
86833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86835 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
86836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
86837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
86838 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
86839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86841 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
86842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
86843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
86844 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
86845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86847 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
86848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86850 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
86851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86853 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
86854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86856 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
86857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
86858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
86859 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
86860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86862 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
86863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86865 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
86866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
86867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
86868 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
86869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
86870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
86871 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
86872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
86873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
86874 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
86875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86877 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
86878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86880 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
86881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
86882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
86883 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
86884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
86885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
86886 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
86887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86889 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
86890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86892 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
86893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
86894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
86895 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
86896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
86897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
86898 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
86899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
86900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
86901 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
86902 : END DO
86903 : END DO
86904 : END DO
86905 : s_offset_d1 = s_offset_d1 + 9
86906 : END DO
86907 : s_offset_c1 = s_offset_c1 + 9
86908 : END DO
86909 : s_offset_b1 = s_offset_b1 + 1
86910 : END DO
86911 : s_offset_a1 = s_offset_a1 + 9
86912 : END DO
86913 : END SUBROUTINE contract_gsgg
86914 : #endif
86915 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
86916 : ! **************************************************************************************************
86917 : !> \brief ...
86918 : !> \param work ...
86919 : !> \param nl_a ...
86920 : !> \param nl_b ...
86921 : !> \param nl_c ...
86922 : !> \param nl_d ...
86923 : !> \param sphi_a ...
86924 : !> \param sphi_b ...
86925 : !> \param sphi_c ...
86926 : !> \param sphi_d ...
86927 : !> \param primitives ...
86928 : !> \param buffer1 ...
86929 : !> \param buffer2 ...
86930 : ! **************************************************************************************************
86931 : SUBROUTINE contract_gpss(work, &
86932 : nl_a, nl_b, nl_c, nl_d, &
86933 : sphi_a, sphi_b, sphi_c, sphi_d, &
86934 : primitives, &
86935 : buffer1, buffer2)
86936 : REAL(dp), DIMENSION(15*3*1*1), INTENT(IN) :: work
86937 : INTEGER :: nl_a, nl_b, nl_c, nl_d
86938 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
86939 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
86940 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
86941 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
86942 : REAL(dp), &
86943 : DIMENSION(9*nl_a, 3*nl_b, 1*nl_c, 1*nl_d) :: primitives
86944 : REAL(dp), DIMENSION(15*3*1*1) :: buffer1, buffer2
86945 :
86946 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
86947 : kmax, s_offset_a1, s_offset_b1, &
86948 : s_offset_c1, s_offset_d1
86949 :
86950 : s_offset_a1 = 0
86951 : DO ia = 1, nl_a
86952 : s_offset_b1 = 0
86953 : DO ib = 1, nl_b
86954 : s_offset_c1 = 0
86955 : DO ic = 1, nl_c
86956 : s_offset_d1 = 0
86957 : DO id = 1, nl_d
86958 : buffer1 = 0.0_dp
86959 : imax = 3*1*1
86960 : kmax = 15
86961 : DO i = 1, imax
86962 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
86963 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
86964 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
86965 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
86966 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
86967 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
86968 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
86969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
86970 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
86971 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
86972 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
86973 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
86974 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
86975 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
86976 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
86977 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
86978 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
86979 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
86980 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
86981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
86982 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
86983 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
86984 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
86985 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
86986 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
86987 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
86988 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
86989 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
86990 : END DO
86991 : buffer2 = 0.0_dp
86992 : imax = 9*1*1
86993 : kmax = 3
86994 : DO i = 1, imax
86995 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
86996 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
86997 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
86998 : END DO
86999 : buffer1 = 0.0_dp
87000 : imax = 9*3*1
87001 : kmax = 1
87002 : DO i = 1, imax
87003 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
87004 : END DO
87005 : imax = 9*3*1
87006 : kmax = 1
87007 : i = 0
87008 : DO i1 = 1, 1
87009 : DO i2 = 1, 3
87010 : DO i3 = 1, 9
87011 : i = i + 1
87012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
87014 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
87015 : END DO
87016 : END DO
87017 : END DO
87018 : s_offset_d1 = s_offset_d1 + 1
87019 : END DO
87020 : s_offset_c1 = s_offset_c1 + 1
87021 : END DO
87022 : s_offset_b1 = s_offset_b1 + 3
87023 : END DO
87024 : s_offset_a1 = s_offset_a1 + 9
87025 : END DO
87026 : END SUBROUTINE contract_gpss
87027 : #endif
87028 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87029 : ! **************************************************************************************************
87030 : !> \brief ...
87031 : !> \param work ...
87032 : !> \param nl_a ...
87033 : !> \param nl_b ...
87034 : !> \param nl_c ...
87035 : !> \param nl_d ...
87036 : !> \param sphi_a ...
87037 : !> \param sphi_b ...
87038 : !> \param sphi_c ...
87039 : !> \param sphi_d ...
87040 : !> \param primitives ...
87041 : !> \param buffer1 ...
87042 : !> \param buffer2 ...
87043 : ! **************************************************************************************************
87044 : SUBROUTINE contract_gpsp(work, &
87045 : nl_a, nl_b, nl_c, nl_d, &
87046 : sphi_a, sphi_b, sphi_c, sphi_d, &
87047 : primitives, &
87048 : buffer1, buffer2)
87049 : REAL(dp), DIMENSION(15*3*1*3), INTENT(IN) :: work
87050 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87051 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87052 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87053 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
87054 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
87055 : REAL(dp), &
87056 : DIMENSION(9*nl_a, 3*nl_b, 1*nl_c, 3*nl_d) :: primitives
87057 : REAL(dp), DIMENSION(15*3*1*3) :: buffer1, buffer2
87058 :
87059 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87060 : kmax, s_offset_a1, s_offset_b1, &
87061 : s_offset_c1, s_offset_d1
87062 :
87063 : s_offset_a1 = 0
87064 : DO ia = 1, nl_a
87065 : s_offset_b1 = 0
87066 : DO ib = 1, nl_b
87067 : s_offset_c1 = 0
87068 : DO ic = 1, nl_c
87069 : s_offset_d1 = 0
87070 : DO id = 1, nl_d
87071 : buffer1 = 0.0_dp
87072 : imax = 3*1*3
87073 : kmax = 15
87074 : DO i = 1, imax
87075 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87076 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87077 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87078 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87079 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87080 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87081 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87082 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87083 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87084 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87085 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87086 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87087 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87088 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87089 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87090 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87091 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87092 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87093 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87094 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87095 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87096 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87097 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87098 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87099 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87100 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87101 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87102 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87103 : END DO
87104 : buffer2 = 0.0_dp
87105 : imax = 9*1*3
87106 : kmax = 3
87107 : DO i = 1, imax
87108 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87109 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87110 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87111 : END DO
87112 : buffer1 = 0.0_dp
87113 : imax = 9*3*3
87114 : kmax = 1
87115 : DO i = 1, imax
87116 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
87117 : END DO
87118 : imax = 9*3*1
87119 : kmax = 3
87120 : i = 0
87121 : DO i1 = 1, 1
87122 : DO i2 = 1, 3
87123 : DO i3 = 1, 9
87124 : i = i + 1
87125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
87127 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
87128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
87130 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
87133 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
87134 : END DO
87135 : END DO
87136 : END DO
87137 : s_offset_d1 = s_offset_d1 + 3
87138 : END DO
87139 : s_offset_c1 = s_offset_c1 + 1
87140 : END DO
87141 : s_offset_b1 = s_offset_b1 + 3
87142 : END DO
87143 : s_offset_a1 = s_offset_a1 + 9
87144 : END DO
87145 : END SUBROUTINE contract_gpsp
87146 : #endif
87147 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87148 : ! **************************************************************************************************
87149 : !> \brief ...
87150 : !> \param work ...
87151 : !> \param nl_a ...
87152 : !> \param nl_b ...
87153 : !> \param nl_c ...
87154 : !> \param nl_d ...
87155 : !> \param sphi_a ...
87156 : !> \param sphi_b ...
87157 : !> \param sphi_c ...
87158 : !> \param sphi_d ...
87159 : !> \param primitives ...
87160 : !> \param buffer1 ...
87161 : !> \param buffer2 ...
87162 : ! **************************************************************************************************
87163 : SUBROUTINE contract_gpsd(work, &
87164 : nl_a, nl_b, nl_c, nl_d, &
87165 : sphi_a, sphi_b, sphi_c, sphi_d, &
87166 : primitives, &
87167 : buffer1, buffer2)
87168 : REAL(dp), DIMENSION(15*3*1*6), INTENT(IN) :: work
87169 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87170 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87171 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87172 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
87173 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
87174 : REAL(dp), &
87175 : DIMENSION(9*nl_a, 3*nl_b, 1*nl_c, 5*nl_d) :: primitives
87176 : REAL(dp), DIMENSION(15*3*1*6) :: buffer1, buffer2
87177 :
87178 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87179 : kmax, s_offset_a1, s_offset_b1, &
87180 : s_offset_c1, s_offset_d1
87181 :
87182 : s_offset_a1 = 0
87183 : DO ia = 1, nl_a
87184 : s_offset_b1 = 0
87185 : DO ib = 1, nl_b
87186 : s_offset_c1 = 0
87187 : DO ic = 1, nl_c
87188 : s_offset_d1 = 0
87189 : DO id = 1, nl_d
87190 : buffer1 = 0.0_dp
87191 : imax = 3*1*6
87192 : kmax = 15
87193 : DO i = 1, imax
87194 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87195 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87196 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87197 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87198 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87199 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87200 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87201 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87202 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87203 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87204 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87205 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87206 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87207 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87208 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87209 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87210 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87211 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87212 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87213 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87214 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87215 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87216 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87217 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87218 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87219 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87220 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87221 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87222 : END DO
87223 : buffer2 = 0.0_dp
87224 : imax = 9*1*6
87225 : kmax = 3
87226 : DO i = 1, imax
87227 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87228 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87229 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87230 : END DO
87231 : buffer1 = 0.0_dp
87232 : imax = 9*3*6
87233 : kmax = 1
87234 : DO i = 1, imax
87235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
87236 : END DO
87237 : imax = 9*3*1
87238 : kmax = 6
87239 : i = 0
87240 : DO i1 = 1, 1
87241 : DO i2 = 1, 3
87242 : DO i3 = 1, 9
87243 : i = i + 1
87244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87246 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
87247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87249 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
87250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87252 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87255 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
87256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87258 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
87259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87261 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
87262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
87264 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
87265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87267 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
87268 : END DO
87269 : END DO
87270 : END DO
87271 : s_offset_d1 = s_offset_d1 + 5
87272 : END DO
87273 : s_offset_c1 = s_offset_c1 + 1
87274 : END DO
87275 : s_offset_b1 = s_offset_b1 + 3
87276 : END DO
87277 : s_offset_a1 = s_offset_a1 + 9
87278 : END DO
87279 : END SUBROUTINE contract_gpsd
87280 : #endif
87281 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87282 : ! **************************************************************************************************
87283 : !> \brief ...
87284 : !> \param work ...
87285 : !> \param nl_a ...
87286 : !> \param nl_b ...
87287 : !> \param nl_c ...
87288 : !> \param nl_d ...
87289 : !> \param sphi_a ...
87290 : !> \param sphi_b ...
87291 : !> \param sphi_c ...
87292 : !> \param sphi_d ...
87293 : !> \param primitives ...
87294 : !> \param buffer1 ...
87295 : !> \param buffer2 ...
87296 : ! **************************************************************************************************
87297 : SUBROUTINE contract_gpsf(work, &
87298 : nl_a, nl_b, nl_c, nl_d, &
87299 : sphi_a, sphi_b, sphi_c, sphi_d, &
87300 : primitives, &
87301 : buffer1, buffer2)
87302 : REAL(dp), DIMENSION(15*3*1*10), INTENT(IN) :: work
87303 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87304 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87305 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87306 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
87307 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
87308 : REAL(dp), &
87309 : DIMENSION(9*nl_a, 3*nl_b, 1*nl_c, 7*nl_d) :: primitives
87310 : REAL(dp), DIMENSION(15*3*1*10) :: buffer1, buffer2
87311 :
87312 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87313 : kmax, s_offset_a1, s_offset_b1, &
87314 : s_offset_c1, s_offset_d1
87315 :
87316 : s_offset_a1 = 0
87317 : DO ia = 1, nl_a
87318 : s_offset_b1 = 0
87319 : DO ib = 1, nl_b
87320 : s_offset_c1 = 0
87321 : DO ic = 1, nl_c
87322 : s_offset_d1 = 0
87323 : DO id = 1, nl_d
87324 : buffer1 = 0.0_dp
87325 : imax = 3*1*10
87326 : kmax = 15
87327 : DO i = 1, imax
87328 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87329 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87330 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87331 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87332 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87333 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87334 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87335 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87336 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87337 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87338 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87339 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87340 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87341 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87342 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87343 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87344 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87345 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87346 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87347 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87348 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87349 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87350 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87351 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87352 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87353 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87354 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87355 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87356 : END DO
87357 : buffer2 = 0.0_dp
87358 : imax = 9*1*10
87359 : kmax = 3
87360 : DO i = 1, imax
87361 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87362 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87363 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87364 : END DO
87365 : buffer1 = 0.0_dp
87366 : imax = 9*3*10
87367 : kmax = 1
87368 : DO i = 1, imax
87369 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
87370 : END DO
87371 : imax = 9*3*1
87372 : kmax = 10
87373 : i = 0
87374 : DO i1 = 1, 1
87375 : DO i2 = 1, 3
87376 : DO i3 = 1, 9
87377 : i = i + 1
87378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87379 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87380 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
87381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87382 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87383 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
87384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87385 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87386 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87388 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87389 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
87390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87392 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
87393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
87394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
87395 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
87396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87398 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
87399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87400 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87401 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
87402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87403 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
87404 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
87405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87407 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
87408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87410 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
87411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87413 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
87414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87416 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
87417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
87418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
87419 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
87420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87422 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
87423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87425 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
87426 : END DO
87427 : END DO
87428 : END DO
87429 : s_offset_d1 = s_offset_d1 + 7
87430 : END DO
87431 : s_offset_c1 = s_offset_c1 + 1
87432 : END DO
87433 : s_offset_b1 = s_offset_b1 + 3
87434 : END DO
87435 : s_offset_a1 = s_offset_a1 + 9
87436 : END DO
87437 : END SUBROUTINE contract_gpsf
87438 : #endif
87439 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87440 : ! **************************************************************************************************
87441 : !> \brief ...
87442 : !> \param work ...
87443 : !> \param nl_a ...
87444 : !> \param nl_b ...
87445 : !> \param nl_c ...
87446 : !> \param nl_d ...
87447 : !> \param sphi_a ...
87448 : !> \param sphi_b ...
87449 : !> \param sphi_c ...
87450 : !> \param sphi_d ...
87451 : !> \param primitives ...
87452 : !> \param buffer1 ...
87453 : !> \param buffer2 ...
87454 : ! **************************************************************************************************
87455 : SUBROUTINE contract_gpsg(work, &
87456 : nl_a, nl_b, nl_c, nl_d, &
87457 : sphi_a, sphi_b, sphi_c, sphi_d, &
87458 : primitives, &
87459 : buffer1, buffer2)
87460 : REAL(dp), DIMENSION(15*3*1*15), INTENT(IN) :: work
87461 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87462 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87463 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87464 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
87465 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
87466 : REAL(dp), &
87467 : DIMENSION(9*nl_a, 3*nl_b, 1*nl_c, 9*nl_d) :: primitives
87468 : REAL(dp), DIMENSION(15*3*1*15) :: buffer1, buffer2
87469 :
87470 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87471 : kmax, s_offset_a1, s_offset_b1, &
87472 : s_offset_c1, s_offset_d1
87473 :
87474 : s_offset_a1 = 0
87475 : DO ia = 1, nl_a
87476 : s_offset_b1 = 0
87477 : DO ib = 1, nl_b
87478 : s_offset_c1 = 0
87479 : DO ic = 1, nl_c
87480 : s_offset_d1 = 0
87481 : DO id = 1, nl_d
87482 : buffer1 = 0.0_dp
87483 : imax = 3*1*15
87484 : kmax = 15
87485 : DO i = 1, imax
87486 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87487 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87488 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87489 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87490 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87491 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87492 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87493 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87494 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87495 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87496 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87497 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87498 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87499 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87500 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87501 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87502 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87503 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87504 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87506 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87507 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87508 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87509 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87510 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87511 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87512 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87513 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87514 : END DO
87515 : buffer2 = 0.0_dp
87516 : imax = 9*1*15
87517 : kmax = 3
87518 : DO i = 1, imax
87519 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87520 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87521 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87522 : END DO
87523 : buffer1 = 0.0_dp
87524 : imax = 9*3*15
87525 : kmax = 1
87526 : DO i = 1, imax
87527 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
87528 : END DO
87529 : imax = 9*3*1
87530 : kmax = 15
87531 : i = 0
87532 : DO i1 = 1, 1
87533 : DO i2 = 1, 3
87534 : DO i3 = 1, 9
87535 : i = i + 1
87536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87538 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
87539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87541 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
87542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
87543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
87544 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
87545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87547 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87550 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
87551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
87552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
87553 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
87554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
87555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
87556 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
87557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87559 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
87560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
87561 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
87562 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
87563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87564 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
87565 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
87566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87567 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87568 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
87569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87570 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87571 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
87572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87573 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87574 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
87575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87576 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87577 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
87578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87579 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87580 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
87581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
87582 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
87583 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
87584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
87585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
87586 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
87587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87589 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
87590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
87591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
87592 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
87593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87594 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87595 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
87596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87597 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87598 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
87599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
87600 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
87601 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
87602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87603 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
87604 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
87605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87607 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
87608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87610 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
87611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
87612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
87613 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
87614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87616 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
87617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87619 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
87620 : END DO
87621 : END DO
87622 : END DO
87623 : s_offset_d1 = s_offset_d1 + 9
87624 : END DO
87625 : s_offset_c1 = s_offset_c1 + 1
87626 : END DO
87627 : s_offset_b1 = s_offset_b1 + 3
87628 : END DO
87629 : s_offset_a1 = s_offset_a1 + 9
87630 : END DO
87631 : END SUBROUTINE contract_gpsg
87632 : #endif
87633 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87634 : ! **************************************************************************************************
87635 : !> \brief ...
87636 : !> \param work ...
87637 : !> \param nl_a ...
87638 : !> \param nl_b ...
87639 : !> \param nl_c ...
87640 : !> \param nl_d ...
87641 : !> \param sphi_a ...
87642 : !> \param sphi_b ...
87643 : !> \param sphi_c ...
87644 : !> \param sphi_d ...
87645 : !> \param primitives ...
87646 : !> \param buffer1 ...
87647 : !> \param buffer2 ...
87648 : ! **************************************************************************************************
87649 : SUBROUTINE contract_gpps(work, &
87650 : nl_a, nl_b, nl_c, nl_d, &
87651 : sphi_a, sphi_b, sphi_c, sphi_d, &
87652 : primitives, &
87653 : buffer1, buffer2)
87654 : REAL(dp), DIMENSION(15*3*3*1), INTENT(IN) :: work
87655 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87656 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87657 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87658 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
87659 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
87660 : REAL(dp), &
87661 : DIMENSION(9*nl_a, 3*nl_b, 3*nl_c, 1*nl_d) :: primitives
87662 : REAL(dp), DIMENSION(15*3*3*1) :: buffer1, buffer2
87663 :
87664 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87665 : kmax, s_offset_a1, s_offset_b1, &
87666 : s_offset_c1, s_offset_d1
87667 :
87668 : s_offset_a1 = 0
87669 : DO ia = 1, nl_a
87670 : s_offset_b1 = 0
87671 : DO ib = 1, nl_b
87672 : s_offset_c1 = 0
87673 : DO ic = 1, nl_c
87674 : s_offset_d1 = 0
87675 : DO id = 1, nl_d
87676 : buffer1 = 0.0_dp
87677 : imax = 3*3*1
87678 : kmax = 15
87679 : DO i = 1, imax
87680 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87681 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87682 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87683 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87685 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87686 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87687 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87688 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87689 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87690 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87691 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87692 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87693 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87694 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87695 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87696 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87697 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87698 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87699 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87700 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87701 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87702 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87703 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87704 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87705 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87706 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87707 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87708 : END DO
87709 : buffer2 = 0.0_dp
87710 : imax = 9*3*1
87711 : kmax = 3
87712 : DO i = 1, imax
87713 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87714 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87715 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87716 : END DO
87717 : buffer1 = 0.0_dp
87718 : imax = 9*3*1
87719 : kmax = 3
87720 : DO i = 1, imax
87721 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
87722 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
87723 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
87724 : END DO
87725 : imax = 9*3*3
87726 : kmax = 1
87727 : i = 0
87728 : DO i1 = 1, 3
87729 : DO i2 = 1, 3
87730 : DO i3 = 1, 9
87731 : i = i + 1
87732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
87734 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
87735 : END DO
87736 : END DO
87737 : END DO
87738 : s_offset_d1 = s_offset_d1 + 1
87739 : END DO
87740 : s_offset_c1 = s_offset_c1 + 3
87741 : END DO
87742 : s_offset_b1 = s_offset_b1 + 3
87743 : END DO
87744 : s_offset_a1 = s_offset_a1 + 9
87745 : END DO
87746 : END SUBROUTINE contract_gpps
87747 : #endif
87748 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87749 : ! **************************************************************************************************
87750 : !> \brief ...
87751 : !> \param work ...
87752 : !> \param nl_a ...
87753 : !> \param nl_b ...
87754 : !> \param nl_c ...
87755 : !> \param nl_d ...
87756 : !> \param sphi_a ...
87757 : !> \param sphi_b ...
87758 : !> \param sphi_c ...
87759 : !> \param sphi_d ...
87760 : !> \param primitives ...
87761 : !> \param buffer1 ...
87762 : !> \param buffer2 ...
87763 : ! **************************************************************************************************
87764 : SUBROUTINE contract_gppp(work, &
87765 : nl_a, nl_b, nl_c, nl_d, &
87766 : sphi_a, sphi_b, sphi_c, sphi_d, &
87767 : primitives, &
87768 : buffer1, buffer2)
87769 : REAL(dp), DIMENSION(15*3*3*3), INTENT(IN) :: work
87770 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87771 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87772 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87773 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
87774 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
87775 : REAL(dp), &
87776 : DIMENSION(9*nl_a, 3*nl_b, 3*nl_c, 3*nl_d) :: primitives
87777 : REAL(dp), DIMENSION(15*3*3*3) :: buffer1, buffer2
87778 :
87779 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87780 : kmax, s_offset_a1, s_offset_b1, &
87781 : s_offset_c1, s_offset_d1
87782 :
87783 : s_offset_a1 = 0
87784 : DO ia = 1, nl_a
87785 : s_offset_b1 = 0
87786 : DO ib = 1, nl_b
87787 : s_offset_c1 = 0
87788 : DO ic = 1, nl_c
87789 : s_offset_d1 = 0
87790 : DO id = 1, nl_d
87791 : buffer1 = 0.0_dp
87792 : imax = 3*3*3
87793 : kmax = 15
87794 : DO i = 1, imax
87795 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87796 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87797 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87798 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87799 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87800 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87801 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87803 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87804 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87805 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87807 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87808 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87809 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87810 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87811 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87812 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87813 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87814 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87815 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87816 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87817 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87818 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87819 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87820 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87821 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87822 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87823 : END DO
87824 : buffer2 = 0.0_dp
87825 : imax = 9*3*3
87826 : kmax = 3
87827 : DO i = 1, imax
87828 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87829 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87830 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87831 : END DO
87832 : buffer1 = 0.0_dp
87833 : imax = 9*3*3
87834 : kmax = 3
87835 : DO i = 1, imax
87836 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
87837 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
87838 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
87839 : END DO
87840 : imax = 9*3*3
87841 : kmax = 3
87842 : i = 0
87843 : DO i1 = 1, 3
87844 : DO i2 = 1, 3
87845 : DO i3 = 1, 9
87846 : i = i + 1
87847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
87849 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
87850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
87852 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
87855 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
87856 : END DO
87857 : END DO
87858 : END DO
87859 : s_offset_d1 = s_offset_d1 + 3
87860 : END DO
87861 : s_offset_c1 = s_offset_c1 + 3
87862 : END DO
87863 : s_offset_b1 = s_offset_b1 + 3
87864 : END DO
87865 : s_offset_a1 = s_offset_a1 + 9
87866 : END DO
87867 : END SUBROUTINE contract_gppp
87868 : #endif
87869 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
87870 : ! **************************************************************************************************
87871 : !> \brief ...
87872 : !> \param work ...
87873 : !> \param nl_a ...
87874 : !> \param nl_b ...
87875 : !> \param nl_c ...
87876 : !> \param nl_d ...
87877 : !> \param sphi_a ...
87878 : !> \param sphi_b ...
87879 : !> \param sphi_c ...
87880 : !> \param sphi_d ...
87881 : !> \param primitives ...
87882 : !> \param buffer1 ...
87883 : !> \param buffer2 ...
87884 : ! **************************************************************************************************
87885 : SUBROUTINE contract_gppd(work, &
87886 : nl_a, nl_b, nl_c, nl_d, &
87887 : sphi_a, sphi_b, sphi_c, sphi_d, &
87888 : primitives, &
87889 : buffer1, buffer2)
87890 : REAL(dp), DIMENSION(15*3*3*6), INTENT(IN) :: work
87891 : INTEGER :: nl_a, nl_b, nl_c, nl_d
87892 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
87893 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
87894 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
87895 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
87896 : REAL(dp), &
87897 : DIMENSION(9*nl_a, 3*nl_b, 3*nl_c, 5*nl_d) :: primitives
87898 : REAL(dp), DIMENSION(15*3*3*6) :: buffer1, buffer2
87899 :
87900 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
87901 : kmax, s_offset_a1, s_offset_b1, &
87902 : s_offset_c1, s_offset_d1
87903 :
87904 : s_offset_a1 = 0
87905 : DO ia = 1, nl_a
87906 : s_offset_b1 = 0
87907 : DO ib = 1, nl_b
87908 : s_offset_c1 = 0
87909 : DO ic = 1, nl_c
87910 : s_offset_d1 = 0
87911 : DO id = 1, nl_d
87912 : buffer1 = 0.0_dp
87913 : imax = 3*3*6
87914 : kmax = 15
87915 : DO i = 1, imax
87916 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
87917 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
87918 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
87919 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
87920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
87921 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
87922 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
87923 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
87924 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
87925 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
87926 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
87927 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
87928 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
87929 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
87930 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
87931 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
87932 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
87933 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
87934 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
87935 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
87936 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
87937 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
87938 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
87939 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
87940 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
87941 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
87942 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
87943 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
87944 : END DO
87945 : buffer2 = 0.0_dp
87946 : imax = 9*3*6
87947 : kmax = 3
87948 : DO i = 1, imax
87949 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
87950 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
87951 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
87952 : END DO
87953 : buffer1 = 0.0_dp
87954 : imax = 9*3*6
87955 : kmax = 3
87956 : DO i = 1, imax
87957 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
87958 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
87959 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
87960 : END DO
87961 : imax = 9*3*3
87962 : kmax = 6
87963 : i = 0
87964 : DO i1 = 1, 3
87965 : DO i2 = 1, 3
87966 : DO i3 = 1, 9
87967 : i = i + 1
87968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87970 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
87971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87973 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
87974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
87975 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
87976 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
87977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
87978 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
87979 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
87980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87982 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
87983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
87984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
87985 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
87986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
87987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
87988 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
87989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
87990 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
87991 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
87992 : END DO
87993 : END DO
87994 : END DO
87995 : s_offset_d1 = s_offset_d1 + 5
87996 : END DO
87997 : s_offset_c1 = s_offset_c1 + 3
87998 : END DO
87999 : s_offset_b1 = s_offset_b1 + 3
88000 : END DO
88001 : s_offset_a1 = s_offset_a1 + 9
88002 : END DO
88003 : END SUBROUTINE contract_gppd
88004 : #endif
88005 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88006 : ! **************************************************************************************************
88007 : !> \brief ...
88008 : !> \param work ...
88009 : !> \param nl_a ...
88010 : !> \param nl_b ...
88011 : !> \param nl_c ...
88012 : !> \param nl_d ...
88013 : !> \param sphi_a ...
88014 : !> \param sphi_b ...
88015 : !> \param sphi_c ...
88016 : !> \param sphi_d ...
88017 : !> \param primitives ...
88018 : !> \param buffer1 ...
88019 : !> \param buffer2 ...
88020 : ! **************************************************************************************************
88021 : SUBROUTINE contract_gppf(work, &
88022 : nl_a, nl_b, nl_c, nl_d, &
88023 : sphi_a, sphi_b, sphi_c, sphi_d, &
88024 : primitives, &
88025 : buffer1, buffer2)
88026 : REAL(dp), DIMENSION(15*3*3*10), INTENT(IN) :: work
88027 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88028 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88029 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88030 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
88031 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
88032 : REAL(dp), &
88033 : DIMENSION(9*nl_a, 3*nl_b, 3*nl_c, 7*nl_d) :: primitives
88034 : REAL(dp), DIMENSION(15*3*3*10) :: buffer1, buffer2
88035 :
88036 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88037 : kmax, s_offset_a1, s_offset_b1, &
88038 : s_offset_c1, s_offset_d1
88039 :
88040 : s_offset_a1 = 0
88041 : DO ia = 1, nl_a
88042 : s_offset_b1 = 0
88043 : DO ib = 1, nl_b
88044 : s_offset_c1 = 0
88045 : DO ic = 1, nl_c
88046 : s_offset_d1 = 0
88047 : DO id = 1, nl_d
88048 : buffer1 = 0.0_dp
88049 : imax = 3*3*10
88050 : kmax = 15
88051 : DO i = 1, imax
88052 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88053 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88054 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88055 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88056 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88057 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88058 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88059 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88060 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88061 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88062 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88063 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88064 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88065 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88066 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88067 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88068 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88069 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88070 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88072 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88073 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88074 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88075 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88076 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88077 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88078 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88079 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88080 : END DO
88081 : buffer2 = 0.0_dp
88082 : imax = 9*3*10
88083 : kmax = 3
88084 : DO i = 1, imax
88085 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88086 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88087 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88088 : END DO
88089 : buffer1 = 0.0_dp
88090 : imax = 9*3*10
88091 : kmax = 3
88092 : DO i = 1, imax
88093 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88094 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88095 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
88096 : END DO
88097 : imax = 9*3*3
88098 : kmax = 10
88099 : i = 0
88100 : DO i1 = 1, 3
88101 : DO i2 = 1, 3
88102 : DO i3 = 1, 9
88103 : i = i + 1
88104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88106 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
88107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88109 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
88110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88112 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
88113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88115 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
88116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88118 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
88119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88121 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
88122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88124 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
88125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88127 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
88128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
88130 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
88131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88133 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
88134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88135 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88136 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
88137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88138 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88139 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
88140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88141 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88142 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
88143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88144 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88145 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
88146 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88147 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88148 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
88149 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88150 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88151 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
88152 : END DO
88153 : END DO
88154 : END DO
88155 : s_offset_d1 = s_offset_d1 + 7
88156 : END DO
88157 : s_offset_c1 = s_offset_c1 + 3
88158 : END DO
88159 : s_offset_b1 = s_offset_b1 + 3
88160 : END DO
88161 : s_offset_a1 = s_offset_a1 + 9
88162 : END DO
88163 : END SUBROUTINE contract_gppf
88164 : #endif
88165 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88166 : ! **************************************************************************************************
88167 : !> \brief ...
88168 : !> \param work ...
88169 : !> \param nl_a ...
88170 : !> \param nl_b ...
88171 : !> \param nl_c ...
88172 : !> \param nl_d ...
88173 : !> \param sphi_a ...
88174 : !> \param sphi_b ...
88175 : !> \param sphi_c ...
88176 : !> \param sphi_d ...
88177 : !> \param primitives ...
88178 : !> \param buffer1 ...
88179 : !> \param buffer2 ...
88180 : ! **************************************************************************************************
88181 : SUBROUTINE contract_gppg(work, &
88182 : nl_a, nl_b, nl_c, nl_d, &
88183 : sphi_a, sphi_b, sphi_c, sphi_d, &
88184 : primitives, &
88185 : buffer1, buffer2)
88186 : REAL(dp), DIMENSION(15*3*3*15), INTENT(IN) :: work
88187 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88188 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88189 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88190 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
88191 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
88192 : REAL(dp), &
88193 : DIMENSION(9*nl_a, 3*nl_b, 3*nl_c, 9*nl_d) :: primitives
88194 : REAL(dp), DIMENSION(15*3*3*15) :: buffer1, buffer2
88195 :
88196 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88197 : kmax, s_offset_a1, s_offset_b1, &
88198 : s_offset_c1, s_offset_d1
88199 :
88200 : s_offset_a1 = 0
88201 : DO ia = 1, nl_a
88202 : s_offset_b1 = 0
88203 : DO ib = 1, nl_b
88204 : s_offset_c1 = 0
88205 : DO ic = 1, nl_c
88206 : s_offset_d1 = 0
88207 : DO id = 1, nl_d
88208 : buffer1 = 0.0_dp
88209 : imax = 3*3*15
88210 : kmax = 15
88211 : DO i = 1, imax
88212 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88213 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88214 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88215 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88217 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88218 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88219 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88220 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88221 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88222 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88223 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88224 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88225 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88226 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88227 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88228 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88229 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88230 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88231 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88232 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88233 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88234 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88235 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88236 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88237 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88238 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88239 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88240 : END DO
88241 : buffer2 = 0.0_dp
88242 : imax = 9*3*15
88243 : kmax = 3
88244 : DO i = 1, imax
88245 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88246 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88247 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88248 : END DO
88249 : buffer1 = 0.0_dp
88250 : imax = 9*3*15
88251 : kmax = 3
88252 : DO i = 1, imax
88253 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88254 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88255 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
88256 : END DO
88257 : imax = 9*3*3
88258 : kmax = 15
88259 : i = 0
88260 : DO i1 = 1, 3
88261 : DO i2 = 1, 3
88262 : DO i3 = 1, 9
88263 : i = i + 1
88264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88266 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
88267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88269 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
88270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
88271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
88272 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
88273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88275 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
88276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88278 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
88279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88281 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
88282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
88283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
88284 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
88285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88287 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
88288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
88289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
88290 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
88291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
88293 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
88294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88296 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
88297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88299 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
88300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88302 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
88303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88305 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
88306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88308 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
88309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88311 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
88312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
88313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
88314 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
88315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88317 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
88318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88320 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
88321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88323 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
88324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88326 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
88327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
88328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
88329 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
88330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
88332 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
88333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88335 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
88336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88338 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
88339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88341 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
88342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88344 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
88345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88347 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
88348 : END DO
88349 : END DO
88350 : END DO
88351 : s_offset_d1 = s_offset_d1 + 9
88352 : END DO
88353 : s_offset_c1 = s_offset_c1 + 3
88354 : END DO
88355 : s_offset_b1 = s_offset_b1 + 3
88356 : END DO
88357 : s_offset_a1 = s_offset_a1 + 9
88358 : END DO
88359 : END SUBROUTINE contract_gppg
88360 : #endif
88361 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88362 : ! **************************************************************************************************
88363 : !> \brief ...
88364 : !> \param work ...
88365 : !> \param nl_a ...
88366 : !> \param nl_b ...
88367 : !> \param nl_c ...
88368 : !> \param nl_d ...
88369 : !> \param sphi_a ...
88370 : !> \param sphi_b ...
88371 : !> \param sphi_c ...
88372 : !> \param sphi_d ...
88373 : !> \param primitives ...
88374 : !> \param buffer1 ...
88375 : !> \param buffer2 ...
88376 : ! **************************************************************************************************
88377 : SUBROUTINE contract_gpds(work, &
88378 : nl_a, nl_b, nl_c, nl_d, &
88379 : sphi_a, sphi_b, sphi_c, sphi_d, &
88380 : primitives, &
88381 : buffer1, buffer2)
88382 : REAL(dp), DIMENSION(15*3*6*1), INTENT(IN) :: work
88383 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88384 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88385 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88386 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
88387 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
88388 : REAL(dp), &
88389 : DIMENSION(9*nl_a, 3*nl_b, 5*nl_c, 1*nl_d) :: primitives
88390 : REAL(dp), DIMENSION(15*3*6*1) :: buffer1, buffer2
88391 :
88392 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88393 : kmax, s_offset_a1, s_offset_b1, &
88394 : s_offset_c1, s_offset_d1
88395 :
88396 : s_offset_a1 = 0
88397 : DO ia = 1, nl_a
88398 : s_offset_b1 = 0
88399 : DO ib = 1, nl_b
88400 : s_offset_c1 = 0
88401 : DO ic = 1, nl_c
88402 : s_offset_d1 = 0
88403 : DO id = 1, nl_d
88404 : buffer1 = 0.0_dp
88405 : imax = 3*6*1
88406 : kmax = 15
88407 : DO i = 1, imax
88408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88409 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88410 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88411 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88412 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88413 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88414 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88415 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88416 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88417 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88418 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88419 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88420 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88421 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88422 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88423 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88424 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88425 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88426 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88427 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88428 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88429 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88430 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88431 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88432 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88433 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88434 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88435 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88436 : END DO
88437 : buffer2 = 0.0_dp
88438 : imax = 9*6*1
88439 : kmax = 3
88440 : DO i = 1, imax
88441 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88442 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88443 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88444 : END DO
88445 : buffer1 = 0.0_dp
88446 : imax = 9*3*1
88447 : kmax = 6
88448 : DO i = 1, imax
88449 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88450 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
88451 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88452 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
88453 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
88454 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
88455 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
88456 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
88457 : END DO
88458 : imax = 9*3*5
88459 : kmax = 1
88460 : i = 0
88461 : DO i1 = 1, 5
88462 : DO i2 = 1, 3
88463 : DO i3 = 1, 9
88464 : i = i + 1
88465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
88467 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
88468 : END DO
88469 : END DO
88470 : END DO
88471 : s_offset_d1 = s_offset_d1 + 1
88472 : END DO
88473 : s_offset_c1 = s_offset_c1 + 5
88474 : END DO
88475 : s_offset_b1 = s_offset_b1 + 3
88476 : END DO
88477 : s_offset_a1 = s_offset_a1 + 9
88478 : END DO
88479 : END SUBROUTINE contract_gpds
88480 : #endif
88481 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88482 : ! **************************************************************************************************
88483 : !> \brief ...
88484 : !> \param work ...
88485 : !> \param nl_a ...
88486 : !> \param nl_b ...
88487 : !> \param nl_c ...
88488 : !> \param nl_d ...
88489 : !> \param sphi_a ...
88490 : !> \param sphi_b ...
88491 : !> \param sphi_c ...
88492 : !> \param sphi_d ...
88493 : !> \param primitives ...
88494 : !> \param buffer1 ...
88495 : !> \param buffer2 ...
88496 : ! **************************************************************************************************
88497 : SUBROUTINE contract_gpdp(work, &
88498 : nl_a, nl_b, nl_c, nl_d, &
88499 : sphi_a, sphi_b, sphi_c, sphi_d, &
88500 : primitives, &
88501 : buffer1, buffer2)
88502 : REAL(dp), DIMENSION(15*3*6*3), INTENT(IN) :: work
88503 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88504 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88505 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88506 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
88507 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
88508 : REAL(dp), &
88509 : DIMENSION(9*nl_a, 3*nl_b, 5*nl_c, 3*nl_d) :: primitives
88510 : REAL(dp), DIMENSION(15*3*6*3) :: buffer1, buffer2
88511 :
88512 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88513 : kmax, s_offset_a1, s_offset_b1, &
88514 : s_offset_c1, s_offset_d1
88515 :
88516 : s_offset_a1 = 0
88517 : DO ia = 1, nl_a
88518 : s_offset_b1 = 0
88519 : DO ib = 1, nl_b
88520 : s_offset_c1 = 0
88521 : DO ic = 1, nl_c
88522 : s_offset_d1 = 0
88523 : DO id = 1, nl_d
88524 : buffer1 = 0.0_dp
88525 : imax = 3*6*3
88526 : kmax = 15
88527 : DO i = 1, imax
88528 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88529 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88530 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88531 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88532 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88533 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88534 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88535 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88536 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88537 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88538 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88539 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88540 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88541 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88542 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88543 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88544 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88545 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88546 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88547 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88548 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88549 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88550 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88551 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88552 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88553 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88554 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88555 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88556 : END DO
88557 : buffer2 = 0.0_dp
88558 : imax = 9*6*3
88559 : kmax = 3
88560 : DO i = 1, imax
88561 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88562 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88563 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88564 : END DO
88565 : buffer1 = 0.0_dp
88566 : imax = 9*3*3
88567 : kmax = 6
88568 : DO i = 1, imax
88569 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
88571 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88572 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
88573 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
88574 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
88575 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
88576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
88577 : END DO
88578 : imax = 9*3*5
88579 : kmax = 3
88580 : i = 0
88581 : DO i1 = 1, 5
88582 : DO i2 = 1, 3
88583 : DO i3 = 1, 9
88584 : i = i + 1
88585 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
88587 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
88588 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
88590 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
88591 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
88593 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
88594 : END DO
88595 : END DO
88596 : END DO
88597 : s_offset_d1 = s_offset_d1 + 3
88598 : END DO
88599 : s_offset_c1 = s_offset_c1 + 5
88600 : END DO
88601 : s_offset_b1 = s_offset_b1 + 3
88602 : END DO
88603 : s_offset_a1 = s_offset_a1 + 9
88604 : END DO
88605 : END SUBROUTINE contract_gpdp
88606 : #endif
88607 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88608 : ! **************************************************************************************************
88609 : !> \brief ...
88610 : !> \param work ...
88611 : !> \param nl_a ...
88612 : !> \param nl_b ...
88613 : !> \param nl_c ...
88614 : !> \param nl_d ...
88615 : !> \param sphi_a ...
88616 : !> \param sphi_b ...
88617 : !> \param sphi_c ...
88618 : !> \param sphi_d ...
88619 : !> \param primitives ...
88620 : !> \param buffer1 ...
88621 : !> \param buffer2 ...
88622 : ! **************************************************************************************************
88623 : SUBROUTINE contract_gpdd(work, &
88624 : nl_a, nl_b, nl_c, nl_d, &
88625 : sphi_a, sphi_b, sphi_c, sphi_d, &
88626 : primitives, &
88627 : buffer1, buffer2)
88628 : REAL(dp), DIMENSION(15*3*6*6), INTENT(IN) :: work
88629 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88630 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88631 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88632 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
88633 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
88634 : REAL(dp), &
88635 : DIMENSION(9*nl_a, 3*nl_b, 5*nl_c, 5*nl_d) :: primitives
88636 : REAL(dp), DIMENSION(15*3*6*6) :: buffer1, buffer2
88637 :
88638 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88639 : kmax, s_offset_a1, s_offset_b1, &
88640 : s_offset_c1, s_offset_d1
88641 :
88642 : s_offset_a1 = 0
88643 : DO ia = 1, nl_a
88644 : s_offset_b1 = 0
88645 : DO ib = 1, nl_b
88646 : s_offset_c1 = 0
88647 : DO ic = 1, nl_c
88648 : s_offset_d1 = 0
88649 : DO id = 1, nl_d
88650 : buffer1 = 0.0_dp
88651 : imax = 3*6*6
88652 : kmax = 15
88653 : DO i = 1, imax
88654 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88655 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88656 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88657 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88658 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88659 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88660 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88661 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88662 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88663 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88664 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88665 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88666 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88667 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88668 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88669 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88670 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88671 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88672 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88673 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88674 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88675 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88676 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88677 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88678 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88679 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88680 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88682 : END DO
88683 : buffer2 = 0.0_dp
88684 : imax = 9*6*6
88685 : kmax = 3
88686 : DO i = 1, imax
88687 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88688 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88689 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88690 : END DO
88691 : buffer1 = 0.0_dp
88692 : imax = 9*3*6
88693 : kmax = 6
88694 : DO i = 1, imax
88695 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88696 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
88697 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88698 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
88699 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
88700 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
88701 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
88702 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
88703 : END DO
88704 : imax = 9*3*5
88705 : kmax = 6
88706 : i = 0
88707 : DO i1 = 1, 5
88708 : DO i2 = 1, 3
88709 : DO i3 = 1, 9
88710 : i = i + 1
88711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88713 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
88714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88716 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
88717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88719 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
88720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88722 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
88723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88725 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
88726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88728 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
88729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
88731 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
88732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88734 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
88735 : END DO
88736 : END DO
88737 : END DO
88738 : s_offset_d1 = s_offset_d1 + 5
88739 : END DO
88740 : s_offset_c1 = s_offset_c1 + 5
88741 : END DO
88742 : s_offset_b1 = s_offset_b1 + 3
88743 : END DO
88744 : s_offset_a1 = s_offset_a1 + 9
88745 : END DO
88746 : END SUBROUTINE contract_gpdd
88747 : #endif
88748 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88749 : ! **************************************************************************************************
88750 : !> \brief ...
88751 : !> \param work ...
88752 : !> \param nl_a ...
88753 : !> \param nl_b ...
88754 : !> \param nl_c ...
88755 : !> \param nl_d ...
88756 : !> \param sphi_a ...
88757 : !> \param sphi_b ...
88758 : !> \param sphi_c ...
88759 : !> \param sphi_d ...
88760 : !> \param primitives ...
88761 : !> \param buffer1 ...
88762 : !> \param buffer2 ...
88763 : ! **************************************************************************************************
88764 : SUBROUTINE contract_gpdf(work, &
88765 : nl_a, nl_b, nl_c, nl_d, &
88766 : sphi_a, sphi_b, sphi_c, sphi_d, &
88767 : primitives, &
88768 : buffer1, buffer2)
88769 : REAL(dp), DIMENSION(15*3*6*10), INTENT(IN) :: work
88770 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88771 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88772 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88773 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
88774 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
88775 : REAL(dp), &
88776 : DIMENSION(9*nl_a, 3*nl_b, 5*nl_c, 7*nl_d) :: primitives
88777 : REAL(dp), DIMENSION(15*3*6*10) :: buffer1, buffer2
88778 :
88779 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88780 : kmax, s_offset_a1, s_offset_b1, &
88781 : s_offset_c1, s_offset_d1
88782 :
88783 : s_offset_a1 = 0
88784 : DO ia = 1, nl_a
88785 : s_offset_b1 = 0
88786 : DO ib = 1, nl_b
88787 : s_offset_c1 = 0
88788 : DO ic = 1, nl_c
88789 : s_offset_d1 = 0
88790 : DO id = 1, nl_d
88791 : buffer1 = 0.0_dp
88792 : imax = 3*6*10
88793 : kmax = 15
88794 : DO i = 1, imax
88795 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88796 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88797 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88798 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88799 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88800 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88801 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88803 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88804 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88805 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88807 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88808 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88809 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88810 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88811 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88812 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88813 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88814 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88815 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88816 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88817 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88818 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88819 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88820 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88821 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88822 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88823 : END DO
88824 : buffer2 = 0.0_dp
88825 : imax = 9*6*10
88826 : kmax = 3
88827 : DO i = 1, imax
88828 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88829 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88830 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88831 : END DO
88832 : buffer1 = 0.0_dp
88833 : imax = 9*3*10
88834 : kmax = 6
88835 : DO i = 1, imax
88836 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
88837 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
88838 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
88839 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
88840 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
88841 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
88842 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
88843 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
88844 : END DO
88845 : imax = 9*3*5
88846 : kmax = 10
88847 : i = 0
88848 : DO i1 = 1, 5
88849 : DO i2 = 1, 3
88850 : DO i3 = 1, 9
88851 : i = i + 1
88852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88854 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
88855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88857 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
88858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88860 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
88861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88863 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
88864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88866 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
88867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88869 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
88870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88872 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
88873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
88874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
88875 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
88876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
88877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
88878 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
88879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
88880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
88881 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
88882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
88883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
88884 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
88885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88887 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
88888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88890 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
88891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
88892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
88893 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
88894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
88895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
88896 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
88897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
88898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
88899 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
88900 : END DO
88901 : END DO
88902 : END DO
88903 : s_offset_d1 = s_offset_d1 + 7
88904 : END DO
88905 : s_offset_c1 = s_offset_c1 + 5
88906 : END DO
88907 : s_offset_b1 = s_offset_b1 + 3
88908 : END DO
88909 : s_offset_a1 = s_offset_a1 + 9
88910 : END DO
88911 : END SUBROUTINE contract_gpdf
88912 : #endif
88913 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
88914 : ! **************************************************************************************************
88915 : !> \brief ...
88916 : !> \param work ...
88917 : !> \param nl_a ...
88918 : !> \param nl_b ...
88919 : !> \param nl_c ...
88920 : !> \param nl_d ...
88921 : !> \param sphi_a ...
88922 : !> \param sphi_b ...
88923 : !> \param sphi_c ...
88924 : !> \param sphi_d ...
88925 : !> \param primitives ...
88926 : !> \param buffer1 ...
88927 : !> \param buffer2 ...
88928 : ! **************************************************************************************************
88929 : SUBROUTINE contract_gpdg(work, &
88930 : nl_a, nl_b, nl_c, nl_d, &
88931 : sphi_a, sphi_b, sphi_c, sphi_d, &
88932 : primitives, &
88933 : buffer1, buffer2)
88934 : REAL(dp), DIMENSION(15*3*6*15), INTENT(IN) :: work
88935 : INTEGER :: nl_a, nl_b, nl_c, nl_d
88936 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
88937 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
88938 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
88939 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
88940 : REAL(dp), &
88941 : DIMENSION(9*nl_a, 3*nl_b, 5*nl_c, 9*nl_d) :: primitives
88942 : REAL(dp), DIMENSION(15*3*6*15) :: buffer1, buffer2
88943 :
88944 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
88945 : kmax, s_offset_a1, s_offset_b1, &
88946 : s_offset_c1, s_offset_d1
88947 :
88948 : s_offset_a1 = 0
88949 : DO ia = 1, nl_a
88950 : s_offset_b1 = 0
88951 : DO ib = 1, nl_b
88952 : s_offset_c1 = 0
88953 : DO ic = 1, nl_c
88954 : s_offset_d1 = 0
88955 : DO id = 1, nl_d
88956 : buffer1 = 0.0_dp
88957 : imax = 3*6*15
88958 : kmax = 15
88959 : DO i = 1, imax
88960 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
88961 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
88962 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
88963 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
88964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
88965 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
88966 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
88967 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
88968 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
88969 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
88970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
88971 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
88972 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
88973 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
88974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
88975 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
88976 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
88977 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
88978 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
88979 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
88980 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
88981 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
88982 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
88983 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
88984 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
88985 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
88986 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
88987 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
88988 : END DO
88989 : buffer2 = 0.0_dp
88990 : imax = 9*6*15
88991 : kmax = 3
88992 : DO i = 1, imax
88993 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
88994 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
88995 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
88996 : END DO
88997 : buffer1 = 0.0_dp
88998 : imax = 9*3*15
88999 : kmax = 6
89000 : DO i = 1, imax
89001 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
89002 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89003 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89004 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89005 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
89006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89007 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89008 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
89009 : END DO
89010 : imax = 9*3*5
89011 : kmax = 15
89012 : i = 0
89013 : DO i1 = 1, 5
89014 : DO i2 = 1, 3
89015 : DO i3 = 1, 9
89016 : i = i + 1
89017 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89019 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
89020 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89022 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
89023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89025 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
89026 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89028 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
89029 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89031 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
89032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89034 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
89035 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
89036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
89037 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
89038 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89040 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
89041 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89043 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
89044 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89046 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
89047 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89049 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
89050 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89052 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
89053 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89055 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
89056 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89058 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
89059 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89061 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
89062 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89064 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
89065 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
89066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
89067 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
89068 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89070 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
89071 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89073 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
89074 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89076 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
89077 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89079 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
89080 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89082 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
89083 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89085 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
89086 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89088 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
89089 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89091 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
89092 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89094 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
89095 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89097 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
89098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89100 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
89101 : END DO
89102 : END DO
89103 : END DO
89104 : s_offset_d1 = s_offset_d1 + 9
89105 : END DO
89106 : s_offset_c1 = s_offset_c1 + 5
89107 : END DO
89108 : s_offset_b1 = s_offset_b1 + 3
89109 : END DO
89110 : s_offset_a1 = s_offset_a1 + 9
89111 : END DO
89112 : END SUBROUTINE contract_gpdg
89113 : #endif
89114 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89115 : ! **************************************************************************************************
89116 : !> \brief ...
89117 : !> \param work ...
89118 : !> \param nl_a ...
89119 : !> \param nl_b ...
89120 : !> \param nl_c ...
89121 : !> \param nl_d ...
89122 : !> \param sphi_a ...
89123 : !> \param sphi_b ...
89124 : !> \param sphi_c ...
89125 : !> \param sphi_d ...
89126 : !> \param primitives ...
89127 : !> \param buffer1 ...
89128 : !> \param buffer2 ...
89129 : ! **************************************************************************************************
89130 : SUBROUTINE contract_gpfs(work, &
89131 : nl_a, nl_b, nl_c, nl_d, &
89132 : sphi_a, sphi_b, sphi_c, sphi_d, &
89133 : primitives, &
89134 : buffer1, buffer2)
89135 : REAL(dp), DIMENSION(15*3*10*1), INTENT(IN) :: work
89136 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89137 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89138 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89139 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
89140 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
89141 : REAL(dp), &
89142 : DIMENSION(9*nl_a, 3*nl_b, 7*nl_c, 1*nl_d) :: primitives
89143 : REAL(dp), DIMENSION(15*3*10*1) :: buffer1, buffer2
89144 :
89145 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89146 : kmax, s_offset_a1, s_offset_b1, &
89147 : s_offset_c1, s_offset_d1
89148 :
89149 : s_offset_a1 = 0
89150 : DO ia = 1, nl_a
89151 : s_offset_b1 = 0
89152 : DO ib = 1, nl_b
89153 : s_offset_c1 = 0
89154 : DO ic = 1, nl_c
89155 : s_offset_d1 = 0
89156 : DO id = 1, nl_d
89157 : buffer1 = 0.0_dp
89158 : imax = 3*10*1
89159 : kmax = 15
89160 : DO i = 1, imax
89161 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89162 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89163 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89164 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89165 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89166 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89167 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89168 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89169 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89170 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89171 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89172 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89173 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89174 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89176 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89177 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89178 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89179 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89180 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89181 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89182 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89183 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89184 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89185 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89186 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89187 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89188 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89189 : END DO
89190 : buffer2 = 0.0_dp
89191 : imax = 9*10*1
89192 : kmax = 3
89193 : DO i = 1, imax
89194 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89195 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89196 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89197 : END DO
89198 : buffer1 = 0.0_dp
89199 : imax = 9*3*1
89200 : kmax = 10
89201 : DO i = 1, imax
89202 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89203 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89204 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89205 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
89206 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89207 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
89208 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89209 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
89210 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89211 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
89212 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
89213 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
89214 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
89215 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
89216 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
89217 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
89218 : END DO
89219 : imax = 9*3*7
89220 : kmax = 1
89221 : i = 0
89222 : DO i1 = 1, 7
89223 : DO i2 = 1, 3
89224 : DO i3 = 1, 9
89225 : i = i + 1
89226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
89228 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
89229 : END DO
89230 : END DO
89231 : END DO
89232 : s_offset_d1 = s_offset_d1 + 1
89233 : END DO
89234 : s_offset_c1 = s_offset_c1 + 7
89235 : END DO
89236 : s_offset_b1 = s_offset_b1 + 3
89237 : END DO
89238 : s_offset_a1 = s_offset_a1 + 9
89239 : END DO
89240 : END SUBROUTINE contract_gpfs
89241 : #endif
89242 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89243 : ! **************************************************************************************************
89244 : !> \brief ...
89245 : !> \param work ...
89246 : !> \param nl_a ...
89247 : !> \param nl_b ...
89248 : !> \param nl_c ...
89249 : !> \param nl_d ...
89250 : !> \param sphi_a ...
89251 : !> \param sphi_b ...
89252 : !> \param sphi_c ...
89253 : !> \param sphi_d ...
89254 : !> \param primitives ...
89255 : !> \param buffer1 ...
89256 : !> \param buffer2 ...
89257 : ! **************************************************************************************************
89258 : SUBROUTINE contract_gpfp(work, &
89259 : nl_a, nl_b, nl_c, nl_d, &
89260 : sphi_a, sphi_b, sphi_c, sphi_d, &
89261 : primitives, &
89262 : buffer1, buffer2)
89263 : REAL(dp), DIMENSION(15*3*10*3), INTENT(IN) :: work
89264 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89265 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89266 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89267 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
89268 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
89269 : REAL(dp), &
89270 : DIMENSION(9*nl_a, 3*nl_b, 7*nl_c, 3*nl_d) :: primitives
89271 : REAL(dp), DIMENSION(15*3*10*3) :: buffer1, buffer2
89272 :
89273 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89274 : kmax, s_offset_a1, s_offset_b1, &
89275 : s_offset_c1, s_offset_d1
89276 :
89277 : s_offset_a1 = 0
89278 : DO ia = 1, nl_a
89279 : s_offset_b1 = 0
89280 : DO ib = 1, nl_b
89281 : s_offset_c1 = 0
89282 : DO ic = 1, nl_c
89283 : s_offset_d1 = 0
89284 : DO id = 1, nl_d
89285 : buffer1 = 0.0_dp
89286 : imax = 3*10*3
89287 : kmax = 15
89288 : DO i = 1, imax
89289 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89290 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89291 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89292 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89293 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89294 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89295 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89296 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89297 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89298 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89299 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89300 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89301 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89302 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89303 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89304 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89305 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89306 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89307 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89308 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89309 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89310 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89311 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89312 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89313 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89314 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89315 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89316 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89317 : END DO
89318 : buffer2 = 0.0_dp
89319 : imax = 9*10*3
89320 : kmax = 3
89321 : DO i = 1, imax
89322 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89323 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89324 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89325 : END DO
89326 : buffer1 = 0.0_dp
89327 : imax = 9*3*3
89328 : kmax = 10
89329 : DO i = 1, imax
89330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89331 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89332 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89333 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
89334 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89335 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
89336 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89337 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
89338 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89339 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
89340 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
89341 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
89342 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
89343 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
89344 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
89345 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
89346 : END DO
89347 : imax = 9*3*7
89348 : kmax = 3
89349 : i = 0
89350 : DO i1 = 1, 7
89351 : DO i2 = 1, 3
89352 : DO i3 = 1, 9
89353 : i = i + 1
89354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
89356 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
89357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
89359 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
89360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
89362 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
89363 : END DO
89364 : END DO
89365 : END DO
89366 : s_offset_d1 = s_offset_d1 + 3
89367 : END DO
89368 : s_offset_c1 = s_offset_c1 + 7
89369 : END DO
89370 : s_offset_b1 = s_offset_b1 + 3
89371 : END DO
89372 : s_offset_a1 = s_offset_a1 + 9
89373 : END DO
89374 : END SUBROUTINE contract_gpfp
89375 : #endif
89376 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89377 : ! **************************************************************************************************
89378 : !> \brief ...
89379 : !> \param work ...
89380 : !> \param nl_a ...
89381 : !> \param nl_b ...
89382 : !> \param nl_c ...
89383 : !> \param nl_d ...
89384 : !> \param sphi_a ...
89385 : !> \param sphi_b ...
89386 : !> \param sphi_c ...
89387 : !> \param sphi_d ...
89388 : !> \param primitives ...
89389 : !> \param buffer1 ...
89390 : !> \param buffer2 ...
89391 : ! **************************************************************************************************
89392 : SUBROUTINE contract_gpfd(work, &
89393 : nl_a, nl_b, nl_c, nl_d, &
89394 : sphi_a, sphi_b, sphi_c, sphi_d, &
89395 : primitives, &
89396 : buffer1, buffer2)
89397 : REAL(dp), DIMENSION(15*3*10*6), INTENT(IN) :: work
89398 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89399 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89400 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89401 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
89402 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
89403 : REAL(dp), &
89404 : DIMENSION(9*nl_a, 3*nl_b, 7*nl_c, 5*nl_d) :: primitives
89405 : REAL(dp), DIMENSION(15*3*10*6) :: buffer1, buffer2
89406 :
89407 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89408 : kmax, s_offset_a1, s_offset_b1, &
89409 : s_offset_c1, s_offset_d1
89410 :
89411 : s_offset_a1 = 0
89412 : DO ia = 1, nl_a
89413 : s_offset_b1 = 0
89414 : DO ib = 1, nl_b
89415 : s_offset_c1 = 0
89416 : DO ic = 1, nl_c
89417 : s_offset_d1 = 0
89418 : DO id = 1, nl_d
89419 : buffer1 = 0.0_dp
89420 : imax = 3*10*6
89421 : kmax = 15
89422 : DO i = 1, imax
89423 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89424 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89425 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89426 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89427 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89428 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89429 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89430 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89431 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89432 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89433 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89434 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89435 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89436 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89437 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89438 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89439 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89440 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89441 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89442 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89443 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89444 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89445 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89446 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89447 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89448 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89449 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89450 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89451 : END DO
89452 : buffer2 = 0.0_dp
89453 : imax = 9*10*6
89454 : kmax = 3
89455 : DO i = 1, imax
89456 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89457 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89458 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89459 : END DO
89460 : buffer1 = 0.0_dp
89461 : imax = 9*3*6
89462 : kmax = 10
89463 : DO i = 1, imax
89464 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89465 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89466 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89467 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
89468 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89469 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
89470 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89471 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
89472 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89473 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
89474 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
89475 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
89476 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
89477 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
89478 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
89479 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
89480 : END DO
89481 : imax = 9*3*7
89482 : kmax = 6
89483 : i = 0
89484 : DO i1 = 1, 7
89485 : DO i2 = 1, 3
89486 : DO i3 = 1, 9
89487 : i = i + 1
89488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89490 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
89491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89493 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
89494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89496 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
89497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89499 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
89500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89501 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89502 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
89503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89504 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89505 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
89506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89507 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89508 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
89509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89510 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89511 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
89512 : END DO
89513 : END DO
89514 : END DO
89515 : s_offset_d1 = s_offset_d1 + 5
89516 : END DO
89517 : s_offset_c1 = s_offset_c1 + 7
89518 : END DO
89519 : s_offset_b1 = s_offset_b1 + 3
89520 : END DO
89521 : s_offset_a1 = s_offset_a1 + 9
89522 : END DO
89523 : END SUBROUTINE contract_gpfd
89524 : #endif
89525 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89526 : ! **************************************************************************************************
89527 : !> \brief ...
89528 : !> \param work ...
89529 : !> \param nl_a ...
89530 : !> \param nl_b ...
89531 : !> \param nl_c ...
89532 : !> \param nl_d ...
89533 : !> \param sphi_a ...
89534 : !> \param sphi_b ...
89535 : !> \param sphi_c ...
89536 : !> \param sphi_d ...
89537 : !> \param primitives ...
89538 : !> \param buffer1 ...
89539 : !> \param buffer2 ...
89540 : ! **************************************************************************************************
89541 : SUBROUTINE contract_gpff(work, &
89542 : nl_a, nl_b, nl_c, nl_d, &
89543 : sphi_a, sphi_b, sphi_c, sphi_d, &
89544 : primitives, &
89545 : buffer1, buffer2)
89546 : REAL(dp), DIMENSION(15*3*10*10), INTENT(IN) :: work
89547 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89548 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89549 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89550 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
89551 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
89552 : REAL(dp), &
89553 : DIMENSION(9*nl_a, 3*nl_b, 7*nl_c, 7*nl_d) :: primitives
89554 : REAL(dp), DIMENSION(15*3*10*10) :: buffer1, buffer2
89555 :
89556 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89557 : kmax, s_offset_a1, s_offset_b1, &
89558 : s_offset_c1, s_offset_d1
89559 :
89560 : s_offset_a1 = 0
89561 : DO ia = 1, nl_a
89562 : s_offset_b1 = 0
89563 : DO ib = 1, nl_b
89564 : s_offset_c1 = 0
89565 : DO ic = 1, nl_c
89566 : s_offset_d1 = 0
89567 : DO id = 1, nl_d
89568 : buffer1 = 0.0_dp
89569 : imax = 3*10*10
89570 : kmax = 15
89571 : DO i = 1, imax
89572 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89573 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89574 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89575 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89577 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89578 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89580 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89581 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89582 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89583 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89584 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89585 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89586 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89587 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89588 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89589 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89590 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89591 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89592 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89593 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89594 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89595 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89596 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89597 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89598 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89599 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89600 : END DO
89601 : buffer2 = 0.0_dp
89602 : imax = 9*10*10
89603 : kmax = 3
89604 : DO i = 1, imax
89605 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89606 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89607 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89608 : END DO
89609 : buffer1 = 0.0_dp
89610 : imax = 9*3*10
89611 : kmax = 10
89612 : DO i = 1, imax
89613 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89614 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89615 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89616 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
89617 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89618 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
89619 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89620 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
89621 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89622 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
89623 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
89624 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
89625 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
89626 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
89627 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
89628 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
89629 : END DO
89630 : imax = 9*3*7
89631 : kmax = 10
89632 : i = 0
89633 : DO i1 = 1, 7
89634 : DO i2 = 1, 3
89635 : DO i3 = 1, 9
89636 : i = i + 1
89637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89639 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
89640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89642 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
89643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89645 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
89646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89648 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
89649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89651 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
89652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89654 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
89655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89657 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
89658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89660 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
89661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89663 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
89664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89666 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
89667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89669 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
89670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89672 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
89673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89675 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
89676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89678 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
89679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89681 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
89682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89684 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
89685 : END DO
89686 : END DO
89687 : END DO
89688 : s_offset_d1 = s_offset_d1 + 7
89689 : END DO
89690 : s_offset_c1 = s_offset_c1 + 7
89691 : END DO
89692 : s_offset_b1 = s_offset_b1 + 3
89693 : END DO
89694 : s_offset_a1 = s_offset_a1 + 9
89695 : END DO
89696 : END SUBROUTINE contract_gpff
89697 : #endif
89698 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89699 : ! **************************************************************************************************
89700 : !> \brief ...
89701 : !> \param work ...
89702 : !> \param nl_a ...
89703 : !> \param nl_b ...
89704 : !> \param nl_c ...
89705 : !> \param nl_d ...
89706 : !> \param sphi_a ...
89707 : !> \param sphi_b ...
89708 : !> \param sphi_c ...
89709 : !> \param sphi_d ...
89710 : !> \param primitives ...
89711 : !> \param buffer1 ...
89712 : !> \param buffer2 ...
89713 : ! **************************************************************************************************
89714 : SUBROUTINE contract_gpfg(work, &
89715 : nl_a, nl_b, nl_c, nl_d, &
89716 : sphi_a, sphi_b, sphi_c, sphi_d, &
89717 : primitives, &
89718 : buffer1, buffer2)
89719 : REAL(dp), DIMENSION(15*3*10*15), INTENT(IN) :: work
89720 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89721 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89722 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89723 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
89724 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
89725 : REAL(dp), &
89726 : DIMENSION(9*nl_a, 3*nl_b, 7*nl_c, 9*nl_d) :: primitives
89727 : REAL(dp), DIMENSION(15*3*10*15) :: buffer1, buffer2
89728 :
89729 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89730 : kmax, s_offset_a1, s_offset_b1, &
89731 : s_offset_c1, s_offset_d1
89732 :
89733 : s_offset_a1 = 0
89734 : DO ia = 1, nl_a
89735 : s_offset_b1 = 0
89736 : DO ib = 1, nl_b
89737 : s_offset_c1 = 0
89738 : DO ic = 1, nl_c
89739 : s_offset_d1 = 0
89740 : DO id = 1, nl_d
89741 : buffer1 = 0.0_dp
89742 : imax = 3*10*15
89743 : kmax = 15
89744 : DO i = 1, imax
89745 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89746 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89747 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89748 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89749 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89750 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89751 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89752 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89753 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89754 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89755 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89756 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89757 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89758 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89759 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89760 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89761 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89762 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89763 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89764 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89765 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89766 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89767 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89768 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89769 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89770 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89771 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89772 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89773 : END DO
89774 : buffer2 = 0.0_dp
89775 : imax = 9*10*15
89776 : kmax = 3
89777 : DO i = 1, imax
89778 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89779 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89780 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89781 : END DO
89782 : buffer1 = 0.0_dp
89783 : imax = 9*3*15
89784 : kmax = 10
89785 : DO i = 1, imax
89786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89787 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89788 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89789 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
89790 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
89791 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
89792 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
89793 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
89794 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
89795 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
89796 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
89797 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
89798 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
89799 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
89800 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
89801 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
89802 : END DO
89803 : imax = 9*3*7
89804 : kmax = 15
89805 : i = 0
89806 : DO i1 = 1, 7
89807 : DO i2 = 1, 3
89808 : DO i3 = 1, 9
89809 : i = i + 1
89810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89811 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89812 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
89813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89814 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89815 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
89816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89817 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89818 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
89819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89820 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89821 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
89822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89823 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89824 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
89825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89826 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89827 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
89828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
89829 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
89830 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
89831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89832 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89833 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
89834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89835 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89836 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
89837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89838 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89839 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
89840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89842 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
89843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89844 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89845 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
89846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89847 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89848 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
89849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
89850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
89851 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
89852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89854 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
89855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89857 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
89858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
89859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
89860 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
89861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
89862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
89863 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
89864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
89865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
89866 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
89867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89869 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
89870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89872 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
89873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
89874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
89875 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
89876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
89877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
89878 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
89879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89881 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
89882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89884 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
89885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
89886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
89887 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
89888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
89889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
89890 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
89891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
89892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
89893 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
89894 : END DO
89895 : END DO
89896 : END DO
89897 : s_offset_d1 = s_offset_d1 + 9
89898 : END DO
89899 : s_offset_c1 = s_offset_c1 + 7
89900 : END DO
89901 : s_offset_b1 = s_offset_b1 + 3
89902 : END DO
89903 : s_offset_a1 = s_offset_a1 + 9
89904 : END DO
89905 : END SUBROUTINE contract_gpfg
89906 : #endif
89907 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
89908 : ! **************************************************************************************************
89909 : !> \brief ...
89910 : !> \param work ...
89911 : !> \param nl_a ...
89912 : !> \param nl_b ...
89913 : !> \param nl_c ...
89914 : !> \param nl_d ...
89915 : !> \param sphi_a ...
89916 : !> \param sphi_b ...
89917 : !> \param sphi_c ...
89918 : !> \param sphi_d ...
89919 : !> \param primitives ...
89920 : !> \param buffer1 ...
89921 : !> \param buffer2 ...
89922 : ! **************************************************************************************************
89923 : SUBROUTINE contract_gpgs(work, &
89924 : nl_a, nl_b, nl_c, nl_d, &
89925 : sphi_a, sphi_b, sphi_c, sphi_d, &
89926 : primitives, &
89927 : buffer1, buffer2)
89928 : REAL(dp), DIMENSION(15*3*15*1), INTENT(IN) :: work
89929 : INTEGER :: nl_a, nl_b, nl_c, nl_d
89930 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
89931 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
89932 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
89933 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
89934 : REAL(dp), &
89935 : DIMENSION(9*nl_a, 3*nl_b, 9*nl_c, 1*nl_d) :: primitives
89936 : REAL(dp), DIMENSION(15*3*15*1) :: buffer1, buffer2
89937 :
89938 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
89939 : kmax, s_offset_a1, s_offset_b1, &
89940 : s_offset_c1, s_offset_d1
89941 :
89942 : s_offset_a1 = 0
89943 : DO ia = 1, nl_a
89944 : s_offset_b1 = 0
89945 : DO ib = 1, nl_b
89946 : s_offset_c1 = 0
89947 : DO ic = 1, nl_c
89948 : s_offset_d1 = 0
89949 : DO id = 1, nl_d
89950 : buffer1 = 0.0_dp
89951 : imax = 3*15*1
89952 : kmax = 15
89953 : DO i = 1, imax
89954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
89955 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
89956 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
89957 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
89958 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
89959 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
89960 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
89961 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
89962 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
89963 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
89964 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
89965 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
89966 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
89967 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
89968 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
89969 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
89970 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
89971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
89972 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
89973 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
89974 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
89975 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
89976 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
89977 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
89978 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
89979 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
89980 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
89981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
89982 : END DO
89983 : buffer2 = 0.0_dp
89984 : imax = 9*15*1
89985 : kmax = 3
89986 : DO i = 1, imax
89987 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
89988 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
89989 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
89990 : END DO
89991 : buffer1 = 0.0_dp
89992 : imax = 9*3*1
89993 : kmax = 15
89994 : DO i = 1, imax
89995 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
89996 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
89997 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
89998 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
89999 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
90000 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
90001 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
90002 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
90003 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
90004 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
90005 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
90006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
90007 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
90008 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
90009 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
90010 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
90011 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
90012 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
90013 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
90014 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
90015 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
90016 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
90017 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
90018 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
90019 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
90020 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
90021 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
90022 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
90023 : END DO
90024 : imax = 9*3*9
90025 : kmax = 1
90026 : i = 0
90027 : DO i1 = 1, 9
90028 : DO i2 = 1, 3
90029 : DO i3 = 1, 9
90030 : i = i + 1
90031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90032 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
90033 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
90034 : END DO
90035 : END DO
90036 : END DO
90037 : s_offset_d1 = s_offset_d1 + 1
90038 : END DO
90039 : s_offset_c1 = s_offset_c1 + 9
90040 : END DO
90041 : s_offset_b1 = s_offset_b1 + 3
90042 : END DO
90043 : s_offset_a1 = s_offset_a1 + 9
90044 : END DO
90045 : END SUBROUTINE contract_gpgs
90046 : #endif
90047 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90048 : ! **************************************************************************************************
90049 : !> \brief ...
90050 : !> \param work ...
90051 : !> \param nl_a ...
90052 : !> \param nl_b ...
90053 : !> \param nl_c ...
90054 : !> \param nl_d ...
90055 : !> \param sphi_a ...
90056 : !> \param sphi_b ...
90057 : !> \param sphi_c ...
90058 : !> \param sphi_d ...
90059 : !> \param primitives ...
90060 : !> \param buffer1 ...
90061 : !> \param buffer2 ...
90062 : ! **************************************************************************************************
90063 : SUBROUTINE contract_gpgp(work, &
90064 : nl_a, nl_b, nl_c, nl_d, &
90065 : sphi_a, sphi_b, sphi_c, sphi_d, &
90066 : primitives, &
90067 : buffer1, buffer2)
90068 : REAL(dp), DIMENSION(15*3*15*3), INTENT(IN) :: work
90069 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90070 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90071 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
90072 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
90073 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
90074 : REAL(dp), &
90075 : DIMENSION(9*nl_a, 3*nl_b, 9*nl_c, 3*nl_d) :: primitives
90076 : REAL(dp), DIMENSION(15*3*15*3) :: buffer1, buffer2
90077 :
90078 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90079 : kmax, s_offset_a1, s_offset_b1, &
90080 : s_offset_c1, s_offset_d1
90081 :
90082 : s_offset_a1 = 0
90083 : DO ia = 1, nl_a
90084 : s_offset_b1 = 0
90085 : DO ib = 1, nl_b
90086 : s_offset_c1 = 0
90087 : DO ic = 1, nl_c
90088 : s_offset_d1 = 0
90089 : DO id = 1, nl_d
90090 : buffer1 = 0.0_dp
90091 : imax = 3*15*3
90092 : kmax = 15
90093 : DO i = 1, imax
90094 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90095 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90096 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90097 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90098 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90099 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90100 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90101 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90102 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90103 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90104 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90105 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90106 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90107 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90108 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90109 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90110 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90111 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90112 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90113 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90114 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90115 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90116 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90117 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90118 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90119 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90120 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90121 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90122 : END DO
90123 : buffer2 = 0.0_dp
90124 : imax = 9*15*3
90125 : kmax = 3
90126 : DO i = 1, imax
90127 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90128 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90129 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
90130 : END DO
90131 : buffer1 = 0.0_dp
90132 : imax = 9*3*3
90133 : kmax = 15
90134 : DO i = 1, imax
90135 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
90136 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
90137 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
90138 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
90139 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
90140 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
90141 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
90142 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
90143 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
90144 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
90145 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
90146 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
90147 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
90148 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
90149 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
90150 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
90151 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
90152 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
90153 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
90154 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
90155 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
90156 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
90157 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
90158 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
90159 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
90160 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
90161 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
90162 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
90163 : END DO
90164 : imax = 9*3*9
90165 : kmax = 3
90166 : i = 0
90167 : DO i1 = 1, 9
90168 : DO i2 = 1, 3
90169 : DO i3 = 1, 9
90170 : i = i + 1
90171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
90173 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
90174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
90176 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
90177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
90179 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
90180 : END DO
90181 : END DO
90182 : END DO
90183 : s_offset_d1 = s_offset_d1 + 3
90184 : END DO
90185 : s_offset_c1 = s_offset_c1 + 9
90186 : END DO
90187 : s_offset_b1 = s_offset_b1 + 3
90188 : END DO
90189 : s_offset_a1 = s_offset_a1 + 9
90190 : END DO
90191 : END SUBROUTINE contract_gpgp
90192 : #endif
90193 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90194 : ! **************************************************************************************************
90195 : !> \brief ...
90196 : !> \param work ...
90197 : !> \param nl_a ...
90198 : !> \param nl_b ...
90199 : !> \param nl_c ...
90200 : !> \param nl_d ...
90201 : !> \param sphi_a ...
90202 : !> \param sphi_b ...
90203 : !> \param sphi_c ...
90204 : !> \param sphi_d ...
90205 : !> \param primitives ...
90206 : !> \param buffer1 ...
90207 : !> \param buffer2 ...
90208 : ! **************************************************************************************************
90209 : SUBROUTINE contract_gpgd(work, &
90210 : nl_a, nl_b, nl_c, nl_d, &
90211 : sphi_a, sphi_b, sphi_c, sphi_d, &
90212 : primitives, &
90213 : buffer1, buffer2)
90214 : REAL(dp), DIMENSION(15*3*15*6), INTENT(IN) :: work
90215 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90216 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90217 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
90218 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
90219 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
90220 : REAL(dp), &
90221 : DIMENSION(9*nl_a, 3*nl_b, 9*nl_c, 5*nl_d) :: primitives
90222 : REAL(dp), DIMENSION(15*3*15*6) :: buffer1, buffer2
90223 :
90224 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90225 : kmax, s_offset_a1, s_offset_b1, &
90226 : s_offset_c1, s_offset_d1
90227 :
90228 : s_offset_a1 = 0
90229 : DO ia = 1, nl_a
90230 : s_offset_b1 = 0
90231 : DO ib = 1, nl_b
90232 : s_offset_c1 = 0
90233 : DO ic = 1, nl_c
90234 : s_offset_d1 = 0
90235 : DO id = 1, nl_d
90236 : buffer1 = 0.0_dp
90237 : imax = 3*15*6
90238 : kmax = 15
90239 : DO i = 1, imax
90240 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90241 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90242 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90243 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90244 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90245 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90246 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90248 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90249 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90250 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90251 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90252 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90253 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90256 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90257 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90258 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90259 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90260 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90261 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90262 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90265 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90266 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90267 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90268 : END DO
90269 : buffer2 = 0.0_dp
90270 : imax = 9*15*6
90271 : kmax = 3
90272 : DO i = 1, imax
90273 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90274 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90275 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
90276 : END DO
90277 : buffer1 = 0.0_dp
90278 : imax = 9*3*6
90279 : kmax = 15
90280 : DO i = 1, imax
90281 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
90282 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
90283 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
90284 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
90285 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
90286 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
90287 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
90288 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
90289 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
90290 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
90291 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
90292 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
90293 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
90294 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
90295 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
90296 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
90297 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
90298 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
90299 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
90300 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
90301 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
90302 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
90303 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
90304 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
90305 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
90306 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
90307 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
90308 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
90309 : END DO
90310 : imax = 9*3*9
90311 : kmax = 6
90312 : i = 0
90313 : DO i1 = 1, 9
90314 : DO i2 = 1, 3
90315 : DO i3 = 1, 9
90316 : i = i + 1
90317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90319 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
90320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90322 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
90323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
90325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
90326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
90329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90331 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
90332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
90335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
90337 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
90338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90340 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
90341 : END DO
90342 : END DO
90343 : END DO
90344 : s_offset_d1 = s_offset_d1 + 5
90345 : END DO
90346 : s_offset_c1 = s_offset_c1 + 9
90347 : END DO
90348 : s_offset_b1 = s_offset_b1 + 3
90349 : END DO
90350 : s_offset_a1 = s_offset_a1 + 9
90351 : END DO
90352 : END SUBROUTINE contract_gpgd
90353 : #endif
90354 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90355 : ! **************************************************************************************************
90356 : !> \brief ...
90357 : !> \param work ...
90358 : !> \param nl_a ...
90359 : !> \param nl_b ...
90360 : !> \param nl_c ...
90361 : !> \param nl_d ...
90362 : !> \param sphi_a ...
90363 : !> \param sphi_b ...
90364 : !> \param sphi_c ...
90365 : !> \param sphi_d ...
90366 : !> \param primitives ...
90367 : !> \param buffer1 ...
90368 : !> \param buffer2 ...
90369 : ! **************************************************************************************************
90370 : SUBROUTINE contract_gpgf(work, &
90371 : nl_a, nl_b, nl_c, nl_d, &
90372 : sphi_a, sphi_b, sphi_c, sphi_d, &
90373 : primitives, &
90374 : buffer1, buffer2)
90375 : REAL(dp), DIMENSION(15*3*15*10), INTENT(IN) :: work
90376 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90377 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90378 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
90379 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
90380 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
90381 : REAL(dp), &
90382 : DIMENSION(9*nl_a, 3*nl_b, 9*nl_c, 7*nl_d) :: primitives
90383 : REAL(dp), DIMENSION(15*3*15*10) :: buffer1, buffer2
90384 :
90385 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90386 : kmax, s_offset_a1, s_offset_b1, &
90387 : s_offset_c1, s_offset_d1
90388 :
90389 : s_offset_a1 = 0
90390 : DO ia = 1, nl_a
90391 : s_offset_b1 = 0
90392 : DO ib = 1, nl_b
90393 : s_offset_c1 = 0
90394 : DO ic = 1, nl_c
90395 : s_offset_d1 = 0
90396 : DO id = 1, nl_d
90397 : buffer1 = 0.0_dp
90398 : imax = 3*15*10
90399 : kmax = 15
90400 : DO i = 1, imax
90401 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90402 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90403 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90404 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90406 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90407 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90409 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90410 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90411 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90412 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90413 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90414 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90415 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90416 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90417 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90418 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90419 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90420 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90421 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90422 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90423 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90424 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90425 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90426 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90427 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90429 : END DO
90430 : buffer2 = 0.0_dp
90431 : imax = 9*15*10
90432 : kmax = 3
90433 : DO i = 1, imax
90434 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90435 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90436 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
90437 : END DO
90438 : buffer1 = 0.0_dp
90439 : imax = 9*3*10
90440 : kmax = 15
90441 : DO i = 1, imax
90442 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
90443 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
90444 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
90445 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
90446 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
90447 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
90448 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
90449 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
90450 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
90451 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
90452 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
90453 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
90454 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
90455 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
90456 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
90457 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
90458 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
90459 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
90460 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
90461 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
90462 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
90463 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
90464 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
90465 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
90466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
90467 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
90468 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
90469 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
90470 : END DO
90471 : imax = 9*3*9
90472 : kmax = 10
90473 : i = 0
90474 : DO i1 = 1, 9
90475 : DO i2 = 1, 3
90476 : DO i3 = 1, 9
90477 : i = i + 1
90478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90480 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
90481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90483 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
90484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
90486 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
90487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90489 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
90490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90492 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
90493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
90494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
90495 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
90496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90498 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
90499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90501 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
90502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
90504 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
90505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90507 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
90508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
90510 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
90511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90513 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
90514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90516 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
90517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
90518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
90519 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
90520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90522 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
90523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90525 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
90526 : END DO
90527 : END DO
90528 : END DO
90529 : s_offset_d1 = s_offset_d1 + 7
90530 : END DO
90531 : s_offset_c1 = s_offset_c1 + 9
90532 : END DO
90533 : s_offset_b1 = s_offset_b1 + 3
90534 : END DO
90535 : s_offset_a1 = s_offset_a1 + 9
90536 : END DO
90537 : END SUBROUTINE contract_gpgf
90538 : #endif
90539 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90540 : ! **************************************************************************************************
90541 : !> \brief ...
90542 : !> \param work ...
90543 : !> \param nl_a ...
90544 : !> \param nl_b ...
90545 : !> \param nl_c ...
90546 : !> \param nl_d ...
90547 : !> \param sphi_a ...
90548 : !> \param sphi_b ...
90549 : !> \param sphi_c ...
90550 : !> \param sphi_d ...
90551 : !> \param primitives ...
90552 : !> \param buffer1 ...
90553 : !> \param buffer2 ...
90554 : ! **************************************************************************************************
90555 : SUBROUTINE contract_gpgg(work, &
90556 : nl_a, nl_b, nl_c, nl_d, &
90557 : sphi_a, sphi_b, sphi_c, sphi_d, &
90558 : primitives, &
90559 : buffer1, buffer2)
90560 : REAL(dp), DIMENSION(15*3*15*15), INTENT(IN) :: work
90561 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90562 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90563 : REAL(dp), DIMENSION(3, 3*nl_b), INTENT(IN) :: sphi_b
90564 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
90565 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
90566 : REAL(dp), &
90567 : DIMENSION(9*nl_a, 3*nl_b, 9*nl_c, 9*nl_d) :: primitives
90568 : REAL(dp), DIMENSION(15*3*15*15) :: buffer1, buffer2
90569 :
90570 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90571 : kmax, s_offset_a1, s_offset_b1, &
90572 : s_offset_c1, s_offset_d1
90573 :
90574 : s_offset_a1 = 0
90575 : DO ia = 1, nl_a
90576 : s_offset_b1 = 0
90577 : DO ib = 1, nl_b
90578 : s_offset_c1 = 0
90579 : DO ic = 1, nl_c
90580 : s_offset_d1 = 0
90581 : DO id = 1, nl_d
90582 : buffer1 = 0.0_dp
90583 : imax = 3*15*15
90584 : kmax = 15
90585 : DO i = 1, imax
90586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90587 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90588 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90589 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90590 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90591 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90592 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90593 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90594 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90595 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90596 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90597 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90598 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90599 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90600 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90601 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90602 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90603 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90604 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90605 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90606 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90607 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90608 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90609 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90610 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90611 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90612 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90613 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90614 : END DO
90615 : buffer2 = 0.0_dp
90616 : imax = 9*15*15
90617 : kmax = 3
90618 : DO i = 1, imax
90619 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90620 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90621 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
90622 : END DO
90623 : buffer1 = 0.0_dp
90624 : imax = 9*3*15
90625 : kmax = 15
90626 : DO i = 1, imax
90627 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
90628 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
90629 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
90630 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
90631 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
90632 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
90633 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
90634 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
90635 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
90636 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
90637 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
90638 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
90639 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
90640 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
90641 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
90642 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
90643 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
90644 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
90645 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
90646 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
90647 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
90648 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
90649 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
90650 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
90651 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
90652 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
90653 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
90654 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
90655 : END DO
90656 : imax = 9*3*9
90657 : kmax = 15
90658 : i = 0
90659 : DO i1 = 1, 9
90660 : DO i2 = 1, 3
90661 : DO i3 = 1, 9
90662 : i = i + 1
90663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90665 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
90666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90668 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
90669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
90670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
90671 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
90672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
90674 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
90675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90677 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
90678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
90679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
90680 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
90681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
90682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
90683 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
90684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90686 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
90687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
90688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
90689 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
90690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
90692 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
90693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90695 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
90696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90698 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
90699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90701 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
90702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
90704 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
90705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90707 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
90708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
90709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
90710 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
90711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
90712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
90713 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
90714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
90716 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
90717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
90718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
90719 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
90720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90722 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
90723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90725 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
90726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
90727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
90728 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
90729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
90731 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
90732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90734 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
90735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90737 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
90738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
90739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
90740 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
90741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
90742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
90743 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
90744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
90745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
90746 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
90747 : END DO
90748 : END DO
90749 : END DO
90750 : s_offset_d1 = s_offset_d1 + 9
90751 : END DO
90752 : s_offset_c1 = s_offset_c1 + 9
90753 : END DO
90754 : s_offset_b1 = s_offset_b1 + 3
90755 : END DO
90756 : s_offset_a1 = s_offset_a1 + 9
90757 : END DO
90758 : END SUBROUTINE contract_gpgg
90759 : #endif
90760 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90761 : ! **************************************************************************************************
90762 : !> \brief ...
90763 : !> \param work ...
90764 : !> \param nl_a ...
90765 : !> \param nl_b ...
90766 : !> \param nl_c ...
90767 : !> \param nl_d ...
90768 : !> \param sphi_a ...
90769 : !> \param sphi_b ...
90770 : !> \param sphi_c ...
90771 : !> \param sphi_d ...
90772 : !> \param primitives ...
90773 : !> \param buffer1 ...
90774 : !> \param buffer2 ...
90775 : ! **************************************************************************************************
90776 : SUBROUTINE contract_gdss(work, &
90777 : nl_a, nl_b, nl_c, nl_d, &
90778 : sphi_a, sphi_b, sphi_c, sphi_d, &
90779 : primitives, &
90780 : buffer1, buffer2)
90781 : REAL(dp), DIMENSION(15*6*1*1), INTENT(IN) :: work
90782 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90783 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90784 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
90785 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
90786 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
90787 : REAL(dp), &
90788 : DIMENSION(9*nl_a, 5*nl_b, 1*nl_c, 1*nl_d) :: primitives
90789 : REAL(dp), DIMENSION(15*6*1*1) :: buffer1, buffer2
90790 :
90791 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90792 : kmax, s_offset_a1, s_offset_b1, &
90793 : s_offset_c1, s_offset_d1
90794 :
90795 : s_offset_a1 = 0
90796 : DO ia = 1, nl_a
90797 : s_offset_b1 = 0
90798 : DO ib = 1, nl_b
90799 : s_offset_c1 = 0
90800 : DO ic = 1, nl_c
90801 : s_offset_d1 = 0
90802 : DO id = 1, nl_d
90803 : buffer1 = 0.0_dp
90804 : imax = 6*1*1
90805 : kmax = 15
90806 : DO i = 1, imax
90807 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90808 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90809 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90810 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90811 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90812 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90813 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90814 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90815 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90816 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90817 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90818 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90819 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90820 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90821 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90822 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90823 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90824 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90825 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90826 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90827 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90828 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90829 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90830 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90831 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90832 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90833 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90834 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90835 : END DO
90836 : buffer2 = 0.0_dp
90837 : imax = 9*1*1
90838 : kmax = 6
90839 : DO i = 1, imax
90840 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90841 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
90842 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90843 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
90844 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
90845 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
90846 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
90847 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
90848 : END DO
90849 : buffer1 = 0.0_dp
90850 : imax = 9*5*1
90851 : kmax = 1
90852 : DO i = 1, imax
90853 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
90854 : END DO
90855 : imax = 9*5*1
90856 : kmax = 1
90857 : i = 0
90858 : DO i1 = 1, 1
90859 : DO i2 = 1, 5
90860 : DO i3 = 1, 9
90861 : i = i + 1
90862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
90864 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
90865 : END DO
90866 : END DO
90867 : END DO
90868 : s_offset_d1 = s_offset_d1 + 1
90869 : END DO
90870 : s_offset_c1 = s_offset_c1 + 1
90871 : END DO
90872 : s_offset_b1 = s_offset_b1 + 5
90873 : END DO
90874 : s_offset_a1 = s_offset_a1 + 9
90875 : END DO
90876 : END SUBROUTINE contract_gdss
90877 : #endif
90878 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
90879 : ! **************************************************************************************************
90880 : !> \brief ...
90881 : !> \param work ...
90882 : !> \param nl_a ...
90883 : !> \param nl_b ...
90884 : !> \param nl_c ...
90885 : !> \param nl_d ...
90886 : !> \param sphi_a ...
90887 : !> \param sphi_b ...
90888 : !> \param sphi_c ...
90889 : !> \param sphi_d ...
90890 : !> \param primitives ...
90891 : !> \param buffer1 ...
90892 : !> \param buffer2 ...
90893 : ! **************************************************************************************************
90894 : SUBROUTINE contract_gdsp(work, &
90895 : nl_a, nl_b, nl_c, nl_d, &
90896 : sphi_a, sphi_b, sphi_c, sphi_d, &
90897 : primitives, &
90898 : buffer1, buffer2)
90899 : REAL(dp), DIMENSION(15*6*1*3), INTENT(IN) :: work
90900 : INTEGER :: nl_a, nl_b, nl_c, nl_d
90901 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
90902 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
90903 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
90904 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
90905 : REAL(dp), &
90906 : DIMENSION(9*nl_a, 5*nl_b, 1*nl_c, 3*nl_d) :: primitives
90907 : REAL(dp), DIMENSION(15*6*1*3) :: buffer1, buffer2
90908 :
90909 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
90910 : kmax, s_offset_a1, s_offset_b1, &
90911 : s_offset_c1, s_offset_d1
90912 :
90913 : s_offset_a1 = 0
90914 : DO ia = 1, nl_a
90915 : s_offset_b1 = 0
90916 : DO ib = 1, nl_b
90917 : s_offset_c1 = 0
90918 : DO ic = 1, nl_c
90919 : s_offset_d1 = 0
90920 : DO id = 1, nl_d
90921 : buffer1 = 0.0_dp
90922 : imax = 6*1*3
90923 : kmax = 15
90924 : DO i = 1, imax
90925 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
90926 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
90927 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
90928 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
90929 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
90930 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
90931 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
90932 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
90933 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
90934 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
90935 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
90936 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
90937 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
90938 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
90939 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
90940 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
90941 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
90942 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
90943 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
90944 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
90945 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
90946 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
90947 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
90948 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
90949 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
90950 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
90951 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
90952 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
90953 : END DO
90954 : buffer2 = 0.0_dp
90955 : imax = 9*1*3
90956 : kmax = 6
90957 : DO i = 1, imax
90958 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
90959 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
90960 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
90961 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
90962 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
90963 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
90964 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
90965 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
90966 : END DO
90967 : buffer1 = 0.0_dp
90968 : imax = 9*5*3
90969 : kmax = 1
90970 : DO i = 1, imax
90971 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
90972 : END DO
90973 : imax = 9*5*1
90974 : kmax = 3
90975 : i = 0
90976 : DO i1 = 1, 1
90977 : DO i2 = 1, 5
90978 : DO i3 = 1, 9
90979 : i = i + 1
90980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
90981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
90982 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
90983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
90984 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
90985 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
90986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
90987 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
90988 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
90989 : END DO
90990 : END DO
90991 : END DO
90992 : s_offset_d1 = s_offset_d1 + 3
90993 : END DO
90994 : s_offset_c1 = s_offset_c1 + 1
90995 : END DO
90996 : s_offset_b1 = s_offset_b1 + 5
90997 : END DO
90998 : s_offset_a1 = s_offset_a1 + 9
90999 : END DO
91000 : END SUBROUTINE contract_gdsp
91001 : #endif
91002 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91003 : ! **************************************************************************************************
91004 : !> \brief ...
91005 : !> \param work ...
91006 : !> \param nl_a ...
91007 : !> \param nl_b ...
91008 : !> \param nl_c ...
91009 : !> \param nl_d ...
91010 : !> \param sphi_a ...
91011 : !> \param sphi_b ...
91012 : !> \param sphi_c ...
91013 : !> \param sphi_d ...
91014 : !> \param primitives ...
91015 : !> \param buffer1 ...
91016 : !> \param buffer2 ...
91017 : ! **************************************************************************************************
91018 : SUBROUTINE contract_gdsd(work, &
91019 : nl_a, nl_b, nl_c, nl_d, &
91020 : sphi_a, sphi_b, sphi_c, sphi_d, &
91021 : primitives, &
91022 : buffer1, buffer2)
91023 : REAL(dp), DIMENSION(15*6*1*6), INTENT(IN) :: work
91024 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91025 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91026 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91027 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
91028 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
91029 : REAL(dp), &
91030 : DIMENSION(9*nl_a, 5*nl_b, 1*nl_c, 5*nl_d) :: primitives
91031 : REAL(dp), DIMENSION(15*6*1*6) :: buffer1, buffer2
91032 :
91033 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91034 : kmax, s_offset_a1, s_offset_b1, &
91035 : s_offset_c1, s_offset_d1
91036 :
91037 : s_offset_a1 = 0
91038 : DO ia = 1, nl_a
91039 : s_offset_b1 = 0
91040 : DO ib = 1, nl_b
91041 : s_offset_c1 = 0
91042 : DO ic = 1, nl_c
91043 : s_offset_d1 = 0
91044 : DO id = 1, nl_d
91045 : buffer1 = 0.0_dp
91046 : imax = 6*1*6
91047 : kmax = 15
91048 : DO i = 1, imax
91049 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91050 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91051 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91052 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91053 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91054 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91055 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91056 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91057 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91058 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91059 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91060 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91061 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91062 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91063 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91064 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91065 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91066 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91067 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91068 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91069 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91070 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91071 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91072 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91073 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91074 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91075 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91076 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91077 : END DO
91078 : buffer2 = 0.0_dp
91079 : imax = 9*1*6
91080 : kmax = 6
91081 : DO i = 1, imax
91082 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91083 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91084 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91085 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91086 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91087 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91088 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91089 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91090 : END DO
91091 : buffer1 = 0.0_dp
91092 : imax = 9*5*6
91093 : kmax = 1
91094 : DO i = 1, imax
91095 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
91096 : END DO
91097 : imax = 9*5*1
91098 : kmax = 6
91099 : i = 0
91100 : DO i1 = 1, 1
91101 : DO i2 = 1, 5
91102 : DO i3 = 1, 9
91103 : i = i + 1
91104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91106 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
91107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91109 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
91110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91112 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
91113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91115 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
91116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91118 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
91119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91121 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
91122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91123 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
91124 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
91125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91127 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
91128 : END DO
91129 : END DO
91130 : END DO
91131 : s_offset_d1 = s_offset_d1 + 5
91132 : END DO
91133 : s_offset_c1 = s_offset_c1 + 1
91134 : END DO
91135 : s_offset_b1 = s_offset_b1 + 5
91136 : END DO
91137 : s_offset_a1 = s_offset_a1 + 9
91138 : END DO
91139 : END SUBROUTINE contract_gdsd
91140 : #endif
91141 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91142 : ! **************************************************************************************************
91143 : !> \brief ...
91144 : !> \param work ...
91145 : !> \param nl_a ...
91146 : !> \param nl_b ...
91147 : !> \param nl_c ...
91148 : !> \param nl_d ...
91149 : !> \param sphi_a ...
91150 : !> \param sphi_b ...
91151 : !> \param sphi_c ...
91152 : !> \param sphi_d ...
91153 : !> \param primitives ...
91154 : !> \param buffer1 ...
91155 : !> \param buffer2 ...
91156 : ! **************************************************************************************************
91157 : SUBROUTINE contract_gdsf(work, &
91158 : nl_a, nl_b, nl_c, nl_d, &
91159 : sphi_a, sphi_b, sphi_c, sphi_d, &
91160 : primitives, &
91161 : buffer1, buffer2)
91162 : REAL(dp), DIMENSION(15*6*1*10), INTENT(IN) :: work
91163 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91164 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91165 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91166 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
91167 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
91168 : REAL(dp), &
91169 : DIMENSION(9*nl_a, 5*nl_b, 1*nl_c, 7*nl_d) :: primitives
91170 : REAL(dp), DIMENSION(15*6*1*10) :: buffer1, buffer2
91171 :
91172 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91173 : kmax, s_offset_a1, s_offset_b1, &
91174 : s_offset_c1, s_offset_d1
91175 :
91176 : s_offset_a1 = 0
91177 : DO ia = 1, nl_a
91178 : s_offset_b1 = 0
91179 : DO ib = 1, nl_b
91180 : s_offset_c1 = 0
91181 : DO ic = 1, nl_c
91182 : s_offset_d1 = 0
91183 : DO id = 1, nl_d
91184 : buffer1 = 0.0_dp
91185 : imax = 6*1*10
91186 : kmax = 15
91187 : DO i = 1, imax
91188 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91189 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91190 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91191 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91192 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91193 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91194 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91195 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91196 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91197 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91198 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91199 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91200 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91201 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91202 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91203 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91204 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91205 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91206 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91207 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91208 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91209 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91210 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91211 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91212 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91213 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91214 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91215 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91216 : END DO
91217 : buffer2 = 0.0_dp
91218 : imax = 9*1*10
91219 : kmax = 6
91220 : DO i = 1, imax
91221 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91222 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91223 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91224 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91225 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91226 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91227 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91228 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91229 : END DO
91230 : buffer1 = 0.0_dp
91231 : imax = 9*5*10
91232 : kmax = 1
91233 : DO i = 1, imax
91234 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
91235 : END DO
91236 : imax = 9*5*1
91237 : kmax = 10
91238 : i = 0
91239 : DO i1 = 1, 1
91240 : DO i2 = 1, 5
91241 : DO i3 = 1, 9
91242 : i = i + 1
91243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91244 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91245 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
91246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91247 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91248 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
91249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91251 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
91252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91253 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91254 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
91255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91256 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91257 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
91258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
91259 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
91260 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
91261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91262 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91263 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
91264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91265 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91266 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
91267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91268 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
91269 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
91270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91271 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91272 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
91273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91275 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
91276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91278 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
91279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91281 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
91282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
91283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
91284 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
91285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91287 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
91288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91290 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
91291 : END DO
91292 : END DO
91293 : END DO
91294 : s_offset_d1 = s_offset_d1 + 7
91295 : END DO
91296 : s_offset_c1 = s_offset_c1 + 1
91297 : END DO
91298 : s_offset_b1 = s_offset_b1 + 5
91299 : END DO
91300 : s_offset_a1 = s_offset_a1 + 9
91301 : END DO
91302 : END SUBROUTINE contract_gdsf
91303 : #endif
91304 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91305 : ! **************************************************************************************************
91306 : !> \brief ...
91307 : !> \param work ...
91308 : !> \param nl_a ...
91309 : !> \param nl_b ...
91310 : !> \param nl_c ...
91311 : !> \param nl_d ...
91312 : !> \param sphi_a ...
91313 : !> \param sphi_b ...
91314 : !> \param sphi_c ...
91315 : !> \param sphi_d ...
91316 : !> \param primitives ...
91317 : !> \param buffer1 ...
91318 : !> \param buffer2 ...
91319 : ! **************************************************************************************************
91320 : SUBROUTINE contract_gdsg(work, &
91321 : nl_a, nl_b, nl_c, nl_d, &
91322 : sphi_a, sphi_b, sphi_c, sphi_d, &
91323 : primitives, &
91324 : buffer1, buffer2)
91325 : REAL(dp), DIMENSION(15*6*1*15), INTENT(IN) :: work
91326 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91327 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91328 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91329 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
91330 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
91331 : REAL(dp), &
91332 : DIMENSION(9*nl_a, 5*nl_b, 1*nl_c, 9*nl_d) :: primitives
91333 : REAL(dp), DIMENSION(15*6*1*15) :: buffer1, buffer2
91334 :
91335 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91336 : kmax, s_offset_a1, s_offset_b1, &
91337 : s_offset_c1, s_offset_d1
91338 :
91339 : s_offset_a1 = 0
91340 : DO ia = 1, nl_a
91341 : s_offset_b1 = 0
91342 : DO ib = 1, nl_b
91343 : s_offset_c1 = 0
91344 : DO ic = 1, nl_c
91345 : s_offset_d1 = 0
91346 : DO id = 1, nl_d
91347 : buffer1 = 0.0_dp
91348 : imax = 6*1*15
91349 : kmax = 15
91350 : DO i = 1, imax
91351 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91352 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91353 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91354 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91355 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91356 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91357 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91358 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91359 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91360 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91361 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91363 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91364 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91365 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91366 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91367 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91368 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91369 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91370 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91371 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91372 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91373 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91374 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91375 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91376 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91377 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91378 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91379 : END DO
91380 : buffer2 = 0.0_dp
91381 : imax = 9*1*15
91382 : kmax = 6
91383 : DO i = 1, imax
91384 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91385 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91386 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91387 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91388 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91389 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91390 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91391 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91392 : END DO
91393 : buffer1 = 0.0_dp
91394 : imax = 9*5*15
91395 : kmax = 1
91396 : DO i = 1, imax
91397 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
91398 : END DO
91399 : imax = 9*5*1
91400 : kmax = 15
91401 : i = 0
91402 : DO i1 = 1, 1
91403 : DO i2 = 1, 5
91404 : DO i3 = 1, 9
91405 : i = i + 1
91406 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91408 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
91409 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91411 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
91412 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
91413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
91414 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
91415 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91417 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
91418 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91420 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
91421 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
91422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
91423 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
91424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
91425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
91426 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
91427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91429 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
91430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
91431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
91432 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
91433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
91435 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
91436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91438 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
91439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91441 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
91442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91444 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
91445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91447 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
91448 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91450 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
91451 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
91452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
91453 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
91454 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
91455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
91456 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
91457 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91459 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
91460 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
91461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
91462 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
91463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91465 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
91466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91468 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
91469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
91470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
91471 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
91472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
91474 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
91475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91477 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
91478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91480 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
91481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91483 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
91484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91486 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
91487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91489 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
91490 : END DO
91491 : END DO
91492 : END DO
91493 : s_offset_d1 = s_offset_d1 + 9
91494 : END DO
91495 : s_offset_c1 = s_offset_c1 + 1
91496 : END DO
91497 : s_offset_b1 = s_offset_b1 + 5
91498 : END DO
91499 : s_offset_a1 = s_offset_a1 + 9
91500 : END DO
91501 : END SUBROUTINE contract_gdsg
91502 : #endif
91503 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91504 : ! **************************************************************************************************
91505 : !> \brief ...
91506 : !> \param work ...
91507 : !> \param nl_a ...
91508 : !> \param nl_b ...
91509 : !> \param nl_c ...
91510 : !> \param nl_d ...
91511 : !> \param sphi_a ...
91512 : !> \param sphi_b ...
91513 : !> \param sphi_c ...
91514 : !> \param sphi_d ...
91515 : !> \param primitives ...
91516 : !> \param buffer1 ...
91517 : !> \param buffer2 ...
91518 : ! **************************************************************************************************
91519 : SUBROUTINE contract_gdps(work, &
91520 : nl_a, nl_b, nl_c, nl_d, &
91521 : sphi_a, sphi_b, sphi_c, sphi_d, &
91522 : primitives, &
91523 : buffer1, buffer2)
91524 : REAL(dp), DIMENSION(15*6*3*1), INTENT(IN) :: work
91525 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91526 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91527 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91528 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
91529 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
91530 : REAL(dp), &
91531 : DIMENSION(9*nl_a, 5*nl_b, 3*nl_c, 1*nl_d) :: primitives
91532 : REAL(dp), DIMENSION(15*6*3*1) :: buffer1, buffer2
91533 :
91534 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91535 : kmax, s_offset_a1, s_offset_b1, &
91536 : s_offset_c1, s_offset_d1
91537 :
91538 : s_offset_a1 = 0
91539 : DO ia = 1, nl_a
91540 : s_offset_b1 = 0
91541 : DO ib = 1, nl_b
91542 : s_offset_c1 = 0
91543 : DO ic = 1, nl_c
91544 : s_offset_d1 = 0
91545 : DO id = 1, nl_d
91546 : buffer1 = 0.0_dp
91547 : imax = 6*3*1
91548 : kmax = 15
91549 : DO i = 1, imax
91550 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91551 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91552 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91553 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91554 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91555 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91556 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91557 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91558 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91559 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91560 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91561 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91562 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91564 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91565 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91566 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91567 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91568 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91570 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91571 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91572 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91573 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91574 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91575 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91576 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91577 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91578 : END DO
91579 : buffer2 = 0.0_dp
91580 : imax = 9*3*1
91581 : kmax = 6
91582 : DO i = 1, imax
91583 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91584 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91585 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91586 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91587 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91588 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91589 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91590 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91591 : END DO
91592 : buffer1 = 0.0_dp
91593 : imax = 9*5*1
91594 : kmax = 3
91595 : DO i = 1, imax
91596 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
91597 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
91598 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
91599 : END DO
91600 : imax = 9*5*3
91601 : kmax = 1
91602 : i = 0
91603 : DO i1 = 1, 3
91604 : DO i2 = 1, 5
91605 : DO i3 = 1, 9
91606 : i = i + 1
91607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
91609 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
91610 : END DO
91611 : END DO
91612 : END DO
91613 : s_offset_d1 = s_offset_d1 + 1
91614 : END DO
91615 : s_offset_c1 = s_offset_c1 + 3
91616 : END DO
91617 : s_offset_b1 = s_offset_b1 + 5
91618 : END DO
91619 : s_offset_a1 = s_offset_a1 + 9
91620 : END DO
91621 : END SUBROUTINE contract_gdps
91622 : #endif
91623 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91624 : ! **************************************************************************************************
91625 : !> \brief ...
91626 : !> \param work ...
91627 : !> \param nl_a ...
91628 : !> \param nl_b ...
91629 : !> \param nl_c ...
91630 : !> \param nl_d ...
91631 : !> \param sphi_a ...
91632 : !> \param sphi_b ...
91633 : !> \param sphi_c ...
91634 : !> \param sphi_d ...
91635 : !> \param primitives ...
91636 : !> \param buffer1 ...
91637 : !> \param buffer2 ...
91638 : ! **************************************************************************************************
91639 : SUBROUTINE contract_gdpp(work, &
91640 : nl_a, nl_b, nl_c, nl_d, &
91641 : sphi_a, sphi_b, sphi_c, sphi_d, &
91642 : primitives, &
91643 : buffer1, buffer2)
91644 : REAL(dp), DIMENSION(15*6*3*3), INTENT(IN) :: work
91645 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91646 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91647 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91648 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
91649 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
91650 : REAL(dp), &
91651 : DIMENSION(9*nl_a, 5*nl_b, 3*nl_c, 3*nl_d) :: primitives
91652 : REAL(dp), DIMENSION(15*6*3*3) :: buffer1, buffer2
91653 :
91654 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91655 : kmax, s_offset_a1, s_offset_b1, &
91656 : s_offset_c1, s_offset_d1
91657 :
91658 : s_offset_a1 = 0
91659 : DO ia = 1, nl_a
91660 : s_offset_b1 = 0
91661 : DO ib = 1, nl_b
91662 : s_offset_c1 = 0
91663 : DO ic = 1, nl_c
91664 : s_offset_d1 = 0
91665 : DO id = 1, nl_d
91666 : buffer1 = 0.0_dp
91667 : imax = 6*3*3
91668 : kmax = 15
91669 : DO i = 1, imax
91670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91671 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91672 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91673 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91674 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91675 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91676 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91677 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91678 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91679 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91680 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91682 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91683 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91685 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91686 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91688 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91689 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91690 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91691 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91692 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91693 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91694 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91695 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91696 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91697 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91698 : END DO
91699 : buffer2 = 0.0_dp
91700 : imax = 9*3*3
91701 : kmax = 6
91702 : DO i = 1, imax
91703 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91704 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91705 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91706 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91707 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91708 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91709 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91710 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91711 : END DO
91712 : buffer1 = 0.0_dp
91713 : imax = 9*5*3
91714 : kmax = 3
91715 : DO i = 1, imax
91716 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
91717 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
91718 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
91719 : END DO
91720 : imax = 9*5*3
91721 : kmax = 3
91722 : i = 0
91723 : DO i1 = 1, 3
91724 : DO i2 = 1, 5
91725 : DO i3 = 1, 9
91726 : i = i + 1
91727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
91729 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
91730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
91732 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
91733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
91735 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
91736 : END DO
91737 : END DO
91738 : END DO
91739 : s_offset_d1 = s_offset_d1 + 3
91740 : END DO
91741 : s_offset_c1 = s_offset_c1 + 3
91742 : END DO
91743 : s_offset_b1 = s_offset_b1 + 5
91744 : END DO
91745 : s_offset_a1 = s_offset_a1 + 9
91746 : END DO
91747 : END SUBROUTINE contract_gdpp
91748 : #endif
91749 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91750 : ! **************************************************************************************************
91751 : !> \brief ...
91752 : !> \param work ...
91753 : !> \param nl_a ...
91754 : !> \param nl_b ...
91755 : !> \param nl_c ...
91756 : !> \param nl_d ...
91757 : !> \param sphi_a ...
91758 : !> \param sphi_b ...
91759 : !> \param sphi_c ...
91760 : !> \param sphi_d ...
91761 : !> \param primitives ...
91762 : !> \param buffer1 ...
91763 : !> \param buffer2 ...
91764 : ! **************************************************************************************************
91765 : SUBROUTINE contract_gdpd(work, &
91766 : nl_a, nl_b, nl_c, nl_d, &
91767 : sphi_a, sphi_b, sphi_c, sphi_d, &
91768 : primitives, &
91769 : buffer1, buffer2)
91770 : REAL(dp), DIMENSION(15*6*3*6), INTENT(IN) :: work
91771 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91772 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91773 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91774 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
91775 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
91776 : REAL(dp), &
91777 : DIMENSION(9*nl_a, 5*nl_b, 3*nl_c, 5*nl_d) :: primitives
91778 : REAL(dp), DIMENSION(15*6*3*6) :: buffer1, buffer2
91779 :
91780 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91781 : kmax, s_offset_a1, s_offset_b1, &
91782 : s_offset_c1, s_offset_d1
91783 :
91784 : s_offset_a1 = 0
91785 : DO ia = 1, nl_a
91786 : s_offset_b1 = 0
91787 : DO ib = 1, nl_b
91788 : s_offset_c1 = 0
91789 : DO ic = 1, nl_c
91790 : s_offset_d1 = 0
91791 : DO id = 1, nl_d
91792 : buffer1 = 0.0_dp
91793 : imax = 6*3*6
91794 : kmax = 15
91795 : DO i = 1, imax
91796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91797 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91798 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91799 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91800 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91801 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91802 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91803 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91804 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91805 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91806 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91807 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91808 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91809 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91810 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91811 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91812 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91813 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91814 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91815 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91816 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91817 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91818 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91819 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91820 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91821 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91822 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91823 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91824 : END DO
91825 : buffer2 = 0.0_dp
91826 : imax = 9*3*6
91827 : kmax = 6
91828 : DO i = 1, imax
91829 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91830 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91831 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91832 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91833 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91834 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91835 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91836 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91837 : END DO
91838 : buffer1 = 0.0_dp
91839 : imax = 9*5*6
91840 : kmax = 3
91841 : DO i = 1, imax
91842 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
91843 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
91844 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
91845 : END DO
91846 : imax = 9*5*3
91847 : kmax = 6
91848 : i = 0
91849 : DO i1 = 1, 3
91850 : DO i2 = 1, 5
91851 : DO i3 = 1, 9
91852 : i = i + 1
91853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91855 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
91856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91858 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
91859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
91860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
91861 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
91862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
91863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
91864 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
91865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91867 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
91868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91870 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
91871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
91872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
91873 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
91874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
91875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
91876 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
91877 : END DO
91878 : END DO
91879 : END DO
91880 : s_offset_d1 = s_offset_d1 + 5
91881 : END DO
91882 : s_offset_c1 = s_offset_c1 + 3
91883 : END DO
91884 : s_offset_b1 = s_offset_b1 + 5
91885 : END DO
91886 : s_offset_a1 = s_offset_a1 + 9
91887 : END DO
91888 : END SUBROUTINE contract_gdpd
91889 : #endif
91890 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
91891 : ! **************************************************************************************************
91892 : !> \brief ...
91893 : !> \param work ...
91894 : !> \param nl_a ...
91895 : !> \param nl_b ...
91896 : !> \param nl_c ...
91897 : !> \param nl_d ...
91898 : !> \param sphi_a ...
91899 : !> \param sphi_b ...
91900 : !> \param sphi_c ...
91901 : !> \param sphi_d ...
91902 : !> \param primitives ...
91903 : !> \param buffer1 ...
91904 : !> \param buffer2 ...
91905 : ! **************************************************************************************************
91906 : SUBROUTINE contract_gdpf(work, &
91907 : nl_a, nl_b, nl_c, nl_d, &
91908 : sphi_a, sphi_b, sphi_c, sphi_d, &
91909 : primitives, &
91910 : buffer1, buffer2)
91911 : REAL(dp), DIMENSION(15*6*3*10), INTENT(IN) :: work
91912 : INTEGER :: nl_a, nl_b, nl_c, nl_d
91913 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
91914 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
91915 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
91916 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
91917 : REAL(dp), &
91918 : DIMENSION(9*nl_a, 5*nl_b, 3*nl_c, 7*nl_d) :: primitives
91919 : REAL(dp), DIMENSION(15*6*3*10) :: buffer1, buffer2
91920 :
91921 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
91922 : kmax, s_offset_a1, s_offset_b1, &
91923 : s_offset_c1, s_offset_d1
91924 :
91925 : s_offset_a1 = 0
91926 : DO ia = 1, nl_a
91927 : s_offset_b1 = 0
91928 : DO ib = 1, nl_b
91929 : s_offset_c1 = 0
91930 : DO ic = 1, nl_c
91931 : s_offset_d1 = 0
91932 : DO id = 1, nl_d
91933 : buffer1 = 0.0_dp
91934 : imax = 6*3*10
91935 : kmax = 15
91936 : DO i = 1, imax
91937 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
91938 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
91939 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
91940 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
91941 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
91942 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
91943 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
91944 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
91945 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
91946 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
91947 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
91948 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
91949 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
91950 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
91951 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
91952 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
91953 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
91954 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
91955 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
91956 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
91957 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
91958 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
91959 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
91960 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
91961 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
91962 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
91963 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
91964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
91965 : END DO
91966 : buffer2 = 0.0_dp
91967 : imax = 9*3*10
91968 : kmax = 6
91969 : DO i = 1, imax
91970 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
91971 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
91972 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
91973 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
91974 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
91975 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
91976 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
91977 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
91978 : END DO
91979 : buffer1 = 0.0_dp
91980 : imax = 9*5*10
91981 : kmax = 3
91982 : DO i = 1, imax
91983 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
91984 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
91985 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
91986 : END DO
91987 : imax = 9*5*3
91988 : kmax = 10
91989 : i = 0
91990 : DO i1 = 1, 3
91991 : DO i2 = 1, 5
91992 : DO i3 = 1, 9
91993 : i = i + 1
91994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
91995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
91996 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
91997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
91998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
91999 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
92000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92002 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92005 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
92006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92008 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
92009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92011 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
92012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92014 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
92015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92017 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
92018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92020 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
92021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92023 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
92024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92026 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
92027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92029 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
92030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92032 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
92033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92035 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
92036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92038 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
92039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92041 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
92042 : END DO
92043 : END DO
92044 : END DO
92045 : s_offset_d1 = s_offset_d1 + 7
92046 : END DO
92047 : s_offset_c1 = s_offset_c1 + 3
92048 : END DO
92049 : s_offset_b1 = s_offset_b1 + 5
92050 : END DO
92051 : s_offset_a1 = s_offset_a1 + 9
92052 : END DO
92053 : END SUBROUTINE contract_gdpf
92054 : #endif
92055 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92056 : ! **************************************************************************************************
92057 : !> \brief ...
92058 : !> \param work ...
92059 : !> \param nl_a ...
92060 : !> \param nl_b ...
92061 : !> \param nl_c ...
92062 : !> \param nl_d ...
92063 : !> \param sphi_a ...
92064 : !> \param sphi_b ...
92065 : !> \param sphi_c ...
92066 : !> \param sphi_d ...
92067 : !> \param primitives ...
92068 : !> \param buffer1 ...
92069 : !> \param buffer2 ...
92070 : ! **************************************************************************************************
92071 : SUBROUTINE contract_gdpg(work, &
92072 : nl_a, nl_b, nl_c, nl_d, &
92073 : sphi_a, sphi_b, sphi_c, sphi_d, &
92074 : primitives, &
92075 : buffer1, buffer2)
92076 : REAL(dp), DIMENSION(15*6*3*15), INTENT(IN) :: work
92077 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92078 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92079 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92080 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
92081 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
92082 : REAL(dp), &
92083 : DIMENSION(9*nl_a, 5*nl_b, 3*nl_c, 9*nl_d) :: primitives
92084 : REAL(dp), DIMENSION(15*6*3*15) :: buffer1, buffer2
92085 :
92086 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92087 : kmax, s_offset_a1, s_offset_b1, &
92088 : s_offset_c1, s_offset_d1
92089 :
92090 : s_offset_a1 = 0
92091 : DO ia = 1, nl_a
92092 : s_offset_b1 = 0
92093 : DO ib = 1, nl_b
92094 : s_offset_c1 = 0
92095 : DO ic = 1, nl_c
92096 : s_offset_d1 = 0
92097 : DO id = 1, nl_d
92098 : buffer1 = 0.0_dp
92099 : imax = 6*3*15
92100 : kmax = 15
92101 : DO i = 1, imax
92102 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92103 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92104 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92105 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92106 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92107 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92108 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92109 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92110 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92111 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92112 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92113 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92114 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92115 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92116 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92117 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92118 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92119 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92120 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92121 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92122 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92123 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92124 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92125 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92126 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92127 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92128 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92130 : END DO
92131 : buffer2 = 0.0_dp
92132 : imax = 9*3*15
92133 : kmax = 6
92134 : DO i = 1, imax
92135 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92136 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92137 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92138 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92139 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92140 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92141 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92142 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92143 : END DO
92144 : buffer1 = 0.0_dp
92145 : imax = 9*5*15
92146 : kmax = 3
92147 : DO i = 1, imax
92148 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92149 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92150 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
92151 : END DO
92152 : imax = 9*5*3
92153 : kmax = 15
92154 : i = 0
92155 : DO i1 = 1, 3
92156 : DO i2 = 1, 5
92157 : DO i3 = 1, 9
92158 : i = i + 1
92159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92161 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
92162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92164 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
92165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
92166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
92167 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
92168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92170 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92173 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
92174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92176 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
92177 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
92178 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
92179 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
92180 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92181 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92182 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
92183 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
92184 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
92185 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
92186 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92188 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
92189 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92191 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
92192 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92194 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
92195 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92197 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
92198 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92200 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
92201 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92203 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
92204 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92206 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
92207 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
92208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
92209 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
92210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92212 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
92213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92215 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
92216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92218 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
92219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92221 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
92222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
92223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
92224 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
92225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92227 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
92228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92230 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
92231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92233 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
92234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92235 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92236 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
92237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92238 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92239 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
92240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92241 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92242 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
92243 : END DO
92244 : END DO
92245 : END DO
92246 : s_offset_d1 = s_offset_d1 + 9
92247 : END DO
92248 : s_offset_c1 = s_offset_c1 + 3
92249 : END DO
92250 : s_offset_b1 = s_offset_b1 + 5
92251 : END DO
92252 : s_offset_a1 = s_offset_a1 + 9
92253 : END DO
92254 : END SUBROUTINE contract_gdpg
92255 : #endif
92256 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92257 : ! **************************************************************************************************
92258 : !> \brief ...
92259 : !> \param work ...
92260 : !> \param nl_a ...
92261 : !> \param nl_b ...
92262 : !> \param nl_c ...
92263 : !> \param nl_d ...
92264 : !> \param sphi_a ...
92265 : !> \param sphi_b ...
92266 : !> \param sphi_c ...
92267 : !> \param sphi_d ...
92268 : !> \param primitives ...
92269 : !> \param buffer1 ...
92270 : !> \param buffer2 ...
92271 : ! **************************************************************************************************
92272 : SUBROUTINE contract_gdds(work, &
92273 : nl_a, nl_b, nl_c, nl_d, &
92274 : sphi_a, sphi_b, sphi_c, sphi_d, &
92275 : primitives, &
92276 : buffer1, buffer2)
92277 : REAL(dp), DIMENSION(15*6*6*1), INTENT(IN) :: work
92278 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92279 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92280 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92281 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
92282 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
92283 : REAL(dp), &
92284 : DIMENSION(9*nl_a, 5*nl_b, 5*nl_c, 1*nl_d) :: primitives
92285 : REAL(dp), DIMENSION(15*6*6*1) :: buffer1, buffer2
92286 :
92287 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92288 : kmax, s_offset_a1, s_offset_b1, &
92289 : s_offset_c1, s_offset_d1
92290 :
92291 : s_offset_a1 = 0
92292 : DO ia = 1, nl_a
92293 : s_offset_b1 = 0
92294 : DO ib = 1, nl_b
92295 : s_offset_c1 = 0
92296 : DO ic = 1, nl_c
92297 : s_offset_d1 = 0
92298 : DO id = 1, nl_d
92299 : buffer1 = 0.0_dp
92300 : imax = 6*6*1
92301 : kmax = 15
92302 : DO i = 1, imax
92303 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92304 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92305 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92306 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92307 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92308 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92309 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92310 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92311 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92312 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92313 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92314 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92315 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92316 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92317 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92318 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92319 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92320 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92321 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92322 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92323 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92324 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92325 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92326 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92327 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92328 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92329 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92330 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92331 : END DO
92332 : buffer2 = 0.0_dp
92333 : imax = 9*6*1
92334 : kmax = 6
92335 : DO i = 1, imax
92336 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92337 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92338 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92339 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92340 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92341 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92342 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92343 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92344 : END DO
92345 : buffer1 = 0.0_dp
92346 : imax = 9*5*1
92347 : kmax = 6
92348 : DO i = 1, imax
92349 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92350 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
92351 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92352 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
92353 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
92354 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
92355 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
92356 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
92357 : END DO
92358 : imax = 9*5*5
92359 : kmax = 1
92360 : i = 0
92361 : DO i1 = 1, 5
92362 : DO i2 = 1, 5
92363 : DO i3 = 1, 9
92364 : i = i + 1
92365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92366 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
92367 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
92368 : END DO
92369 : END DO
92370 : END DO
92371 : s_offset_d1 = s_offset_d1 + 1
92372 : END DO
92373 : s_offset_c1 = s_offset_c1 + 5
92374 : END DO
92375 : s_offset_b1 = s_offset_b1 + 5
92376 : END DO
92377 : s_offset_a1 = s_offset_a1 + 9
92378 : END DO
92379 : END SUBROUTINE contract_gdds
92380 : #endif
92381 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92382 : ! **************************************************************************************************
92383 : !> \brief ...
92384 : !> \param work ...
92385 : !> \param nl_a ...
92386 : !> \param nl_b ...
92387 : !> \param nl_c ...
92388 : !> \param nl_d ...
92389 : !> \param sphi_a ...
92390 : !> \param sphi_b ...
92391 : !> \param sphi_c ...
92392 : !> \param sphi_d ...
92393 : !> \param primitives ...
92394 : !> \param buffer1 ...
92395 : !> \param buffer2 ...
92396 : ! **************************************************************************************************
92397 : SUBROUTINE contract_gddp(work, &
92398 : nl_a, nl_b, nl_c, nl_d, &
92399 : sphi_a, sphi_b, sphi_c, sphi_d, &
92400 : primitives, &
92401 : buffer1, buffer2)
92402 : REAL(dp), DIMENSION(15*6*6*3), INTENT(IN) :: work
92403 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92404 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92405 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92406 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
92407 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
92408 : REAL(dp), &
92409 : DIMENSION(9*nl_a, 5*nl_b, 5*nl_c, 3*nl_d) :: primitives
92410 : REAL(dp), DIMENSION(15*6*6*3) :: buffer1, buffer2
92411 :
92412 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92413 : kmax, s_offset_a1, s_offset_b1, &
92414 : s_offset_c1, s_offset_d1
92415 :
92416 : s_offset_a1 = 0
92417 : DO ia = 1, nl_a
92418 : s_offset_b1 = 0
92419 : DO ib = 1, nl_b
92420 : s_offset_c1 = 0
92421 : DO ic = 1, nl_c
92422 : s_offset_d1 = 0
92423 : DO id = 1, nl_d
92424 : buffer1 = 0.0_dp
92425 : imax = 6*6*3
92426 : kmax = 15
92427 : DO i = 1, imax
92428 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92429 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92430 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92431 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92432 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92433 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92434 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92435 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92436 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92437 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92438 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92439 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92440 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92441 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92442 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92443 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92444 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92445 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92446 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92447 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92448 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92449 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92450 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92451 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92452 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92453 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92454 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92455 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92456 : END DO
92457 : buffer2 = 0.0_dp
92458 : imax = 9*6*3
92459 : kmax = 6
92460 : DO i = 1, imax
92461 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92462 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92463 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92464 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92465 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92466 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92467 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92468 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92469 : END DO
92470 : buffer1 = 0.0_dp
92471 : imax = 9*5*3
92472 : kmax = 6
92473 : DO i = 1, imax
92474 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92475 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
92476 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92477 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
92478 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
92479 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
92480 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
92481 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
92482 : END DO
92483 : imax = 9*5*5
92484 : kmax = 3
92485 : i = 0
92486 : DO i1 = 1, 5
92487 : DO i2 = 1, 5
92488 : DO i3 = 1, 9
92489 : i = i + 1
92490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
92492 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
92493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
92495 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
92498 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
92499 : END DO
92500 : END DO
92501 : END DO
92502 : s_offset_d1 = s_offset_d1 + 3
92503 : END DO
92504 : s_offset_c1 = s_offset_c1 + 5
92505 : END DO
92506 : s_offset_b1 = s_offset_b1 + 5
92507 : END DO
92508 : s_offset_a1 = s_offset_a1 + 9
92509 : END DO
92510 : END SUBROUTINE contract_gddp
92511 : #endif
92512 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92513 : ! **************************************************************************************************
92514 : !> \brief ...
92515 : !> \param work ...
92516 : !> \param nl_a ...
92517 : !> \param nl_b ...
92518 : !> \param nl_c ...
92519 : !> \param nl_d ...
92520 : !> \param sphi_a ...
92521 : !> \param sphi_b ...
92522 : !> \param sphi_c ...
92523 : !> \param sphi_d ...
92524 : !> \param primitives ...
92525 : !> \param buffer1 ...
92526 : !> \param buffer2 ...
92527 : ! **************************************************************************************************
92528 : SUBROUTINE contract_gddd(work, &
92529 : nl_a, nl_b, nl_c, nl_d, &
92530 : sphi_a, sphi_b, sphi_c, sphi_d, &
92531 : primitives, &
92532 : buffer1, buffer2)
92533 : REAL(dp), DIMENSION(15*6*6*6), INTENT(IN) :: work
92534 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92535 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92536 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92537 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
92538 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
92539 : REAL(dp), &
92540 : DIMENSION(9*nl_a, 5*nl_b, 5*nl_c, 5*nl_d) :: primitives
92541 : REAL(dp), DIMENSION(15*6*6*6) :: buffer1, buffer2
92542 :
92543 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92544 : kmax, s_offset_a1, s_offset_b1, &
92545 : s_offset_c1, s_offset_d1
92546 :
92547 : s_offset_a1 = 0
92548 : DO ia = 1, nl_a
92549 : s_offset_b1 = 0
92550 : DO ib = 1, nl_b
92551 : s_offset_c1 = 0
92552 : DO ic = 1, nl_c
92553 : s_offset_d1 = 0
92554 : DO id = 1, nl_d
92555 : buffer1 = 0.0_dp
92556 : imax = 6*6*6
92557 : kmax = 15
92558 : DO i = 1, imax
92559 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92560 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92561 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92562 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92563 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92564 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92565 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92566 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92567 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92568 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92569 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92571 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92572 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92573 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92574 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92575 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92576 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92577 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92578 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92579 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92580 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92581 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92582 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92583 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92584 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92585 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92586 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92587 : END DO
92588 : buffer2 = 0.0_dp
92589 : imax = 9*6*6
92590 : kmax = 6
92591 : DO i = 1, imax
92592 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92593 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92594 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92595 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92596 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92597 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92598 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92599 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92600 : END DO
92601 : buffer1 = 0.0_dp
92602 : imax = 9*5*6
92603 : kmax = 6
92604 : DO i = 1, imax
92605 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92606 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
92607 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92608 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
92609 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
92610 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
92611 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
92612 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
92613 : END DO
92614 : imax = 9*5*5
92615 : kmax = 6
92616 : i = 0
92617 : DO i1 = 1, 5
92618 : DO i2 = 1, 5
92619 : DO i3 = 1, 9
92620 : i = i + 1
92621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92623 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
92624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92626 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
92627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92628 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92629 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92631 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92632 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
92633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92635 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
92636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92638 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
92639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92641 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
92642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92644 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
92645 : END DO
92646 : END DO
92647 : END DO
92648 : s_offset_d1 = s_offset_d1 + 5
92649 : END DO
92650 : s_offset_c1 = s_offset_c1 + 5
92651 : END DO
92652 : s_offset_b1 = s_offset_b1 + 5
92653 : END DO
92654 : s_offset_a1 = s_offset_a1 + 9
92655 : END DO
92656 : END SUBROUTINE contract_gddd
92657 : #endif
92658 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92659 : ! **************************************************************************************************
92660 : !> \brief ...
92661 : !> \param work ...
92662 : !> \param nl_a ...
92663 : !> \param nl_b ...
92664 : !> \param nl_c ...
92665 : !> \param nl_d ...
92666 : !> \param sphi_a ...
92667 : !> \param sphi_b ...
92668 : !> \param sphi_c ...
92669 : !> \param sphi_d ...
92670 : !> \param primitives ...
92671 : !> \param buffer1 ...
92672 : !> \param buffer2 ...
92673 : ! **************************************************************************************************
92674 : SUBROUTINE contract_gddf(work, &
92675 : nl_a, nl_b, nl_c, nl_d, &
92676 : sphi_a, sphi_b, sphi_c, sphi_d, &
92677 : primitives, &
92678 : buffer1, buffer2)
92679 : REAL(dp), DIMENSION(15*6*6*10), INTENT(IN) :: work
92680 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92681 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92682 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92683 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
92684 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
92685 : REAL(dp), &
92686 : DIMENSION(9*nl_a, 5*nl_b, 5*nl_c, 7*nl_d) :: primitives
92687 : REAL(dp), DIMENSION(15*6*6*10) :: buffer1, buffer2
92688 :
92689 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92690 : kmax, s_offset_a1, s_offset_b1, &
92691 : s_offset_c1, s_offset_d1
92692 :
92693 : s_offset_a1 = 0
92694 : DO ia = 1, nl_a
92695 : s_offset_b1 = 0
92696 : DO ib = 1, nl_b
92697 : s_offset_c1 = 0
92698 : DO ic = 1, nl_c
92699 : s_offset_d1 = 0
92700 : DO id = 1, nl_d
92701 : buffer1 = 0.0_dp
92702 : imax = 6*6*10
92703 : kmax = 15
92704 : DO i = 1, imax
92705 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92706 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92707 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92708 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92709 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92710 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92711 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92713 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92714 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92715 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92716 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92717 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92718 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92719 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92720 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92721 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92722 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92723 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92724 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92725 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92726 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92727 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92728 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92729 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92730 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92731 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92732 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92733 : END DO
92734 : buffer2 = 0.0_dp
92735 : imax = 9*6*10
92736 : kmax = 6
92737 : DO i = 1, imax
92738 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92739 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92740 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92741 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92742 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92743 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92744 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92745 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92746 : END DO
92747 : buffer1 = 0.0_dp
92748 : imax = 9*5*10
92749 : kmax = 6
92750 : DO i = 1, imax
92751 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92752 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
92753 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92754 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
92755 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
92756 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
92757 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
92758 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
92759 : END DO
92760 : imax = 9*5*5
92761 : kmax = 10
92762 : i = 0
92763 : DO i1 = 1, 5
92764 : DO i2 = 1, 5
92765 : DO i3 = 1, 9
92766 : i = i + 1
92767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92769 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
92770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92772 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
92773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92775 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92778 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
92779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92781 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
92782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92784 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
92785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92787 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
92788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92790 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
92791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92793 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
92794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92796 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
92797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92799 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
92800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92802 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
92803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92805 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
92806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92808 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
92809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92811 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
92812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92814 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
92815 : END DO
92816 : END DO
92817 : END DO
92818 : s_offset_d1 = s_offset_d1 + 7
92819 : END DO
92820 : s_offset_c1 = s_offset_c1 + 5
92821 : END DO
92822 : s_offset_b1 = s_offset_b1 + 5
92823 : END DO
92824 : s_offset_a1 = s_offset_a1 + 9
92825 : END DO
92826 : END SUBROUTINE contract_gddf
92827 : #endif
92828 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
92829 : ! **************************************************************************************************
92830 : !> \brief ...
92831 : !> \param work ...
92832 : !> \param nl_a ...
92833 : !> \param nl_b ...
92834 : !> \param nl_c ...
92835 : !> \param nl_d ...
92836 : !> \param sphi_a ...
92837 : !> \param sphi_b ...
92838 : !> \param sphi_c ...
92839 : !> \param sphi_d ...
92840 : !> \param primitives ...
92841 : !> \param buffer1 ...
92842 : !> \param buffer2 ...
92843 : ! **************************************************************************************************
92844 : SUBROUTINE contract_gddg(work, &
92845 : nl_a, nl_b, nl_c, nl_d, &
92846 : sphi_a, sphi_b, sphi_c, sphi_d, &
92847 : primitives, &
92848 : buffer1, buffer2)
92849 : REAL(dp), DIMENSION(15*6*6*15), INTENT(IN) :: work
92850 : INTEGER :: nl_a, nl_b, nl_c, nl_d
92851 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
92852 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
92853 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
92854 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
92855 : REAL(dp), &
92856 : DIMENSION(9*nl_a, 5*nl_b, 5*nl_c, 9*nl_d) :: primitives
92857 : REAL(dp), DIMENSION(15*6*6*15) :: buffer1, buffer2
92858 :
92859 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
92860 : kmax, s_offset_a1, s_offset_b1, &
92861 : s_offset_c1, s_offset_d1
92862 :
92863 : s_offset_a1 = 0
92864 : DO ia = 1, nl_a
92865 : s_offset_b1 = 0
92866 : DO ib = 1, nl_b
92867 : s_offset_c1 = 0
92868 : DO ic = 1, nl_c
92869 : s_offset_d1 = 0
92870 : DO id = 1, nl_d
92871 : buffer1 = 0.0_dp
92872 : imax = 6*6*15
92873 : kmax = 15
92874 : DO i = 1, imax
92875 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
92876 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
92877 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
92878 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
92879 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
92880 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
92881 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
92882 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
92883 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
92884 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
92885 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
92886 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
92887 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
92888 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
92889 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
92890 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
92891 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
92892 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
92893 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
92894 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
92895 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
92896 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
92897 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
92898 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
92899 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
92900 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
92901 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
92902 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
92903 : END DO
92904 : buffer2 = 0.0_dp
92905 : imax = 9*6*15
92906 : kmax = 6
92907 : DO i = 1, imax
92908 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
92909 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
92910 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
92911 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
92912 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
92913 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
92914 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
92915 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
92916 : END DO
92917 : buffer1 = 0.0_dp
92918 : imax = 9*5*15
92919 : kmax = 6
92920 : DO i = 1, imax
92921 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
92922 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
92923 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
92924 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
92925 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
92926 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
92927 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
92928 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
92929 : END DO
92930 : imax = 9*5*5
92931 : kmax = 15
92932 : i = 0
92933 : DO i1 = 1, 5
92934 : DO i2 = 1, 5
92935 : DO i3 = 1, 9
92936 : i = i + 1
92937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92939 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
92940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92942 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
92943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
92944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
92945 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
92946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92947 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92948 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
92949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92950 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92951 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
92952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92953 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92954 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
92955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
92956 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
92957 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
92958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92959 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92960 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
92961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
92962 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
92963 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
92964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
92965 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
92966 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
92967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
92968 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
92969 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
92970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92971 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92972 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
92973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92974 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92975 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
92976 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
92977 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
92978 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
92979 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92980 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92981 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
92982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92983 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92984 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
92985 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
92986 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
92987 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
92988 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
92989 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
92990 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
92991 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
92992 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
92993 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
92994 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
92995 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
92996 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
92997 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
92998 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
92999 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
93000 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
93001 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
93002 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
93003 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93004 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
93005 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
93006 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93008 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
93009 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93011 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
93012 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93014 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
93015 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93016 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93017 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
93018 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93019 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93020 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
93021 : END DO
93022 : END DO
93023 : END DO
93024 : s_offset_d1 = s_offset_d1 + 9
93025 : END DO
93026 : s_offset_c1 = s_offset_c1 + 5
93027 : END DO
93028 : s_offset_b1 = s_offset_b1 + 5
93029 : END DO
93030 : s_offset_a1 = s_offset_a1 + 9
93031 : END DO
93032 : END SUBROUTINE contract_gddg
93033 : #endif
93034 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93035 : ! **************************************************************************************************
93036 : !> \brief ...
93037 : !> \param work ...
93038 : !> \param nl_a ...
93039 : !> \param nl_b ...
93040 : !> \param nl_c ...
93041 : !> \param nl_d ...
93042 : !> \param sphi_a ...
93043 : !> \param sphi_b ...
93044 : !> \param sphi_c ...
93045 : !> \param sphi_d ...
93046 : !> \param primitives ...
93047 : !> \param buffer1 ...
93048 : !> \param buffer2 ...
93049 : ! **************************************************************************************************
93050 : SUBROUTINE contract_gdfs(work, &
93051 : nl_a, nl_b, nl_c, nl_d, &
93052 : sphi_a, sphi_b, sphi_c, sphi_d, &
93053 : primitives, &
93054 : buffer1, buffer2)
93055 : REAL(dp), DIMENSION(15*6*10*1), INTENT(IN) :: work
93056 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93057 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93058 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93059 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
93060 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
93061 : REAL(dp), &
93062 : DIMENSION(9*nl_a, 5*nl_b, 7*nl_c, 1*nl_d) :: primitives
93063 : REAL(dp), DIMENSION(15*6*10*1) :: buffer1, buffer2
93064 :
93065 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93066 : kmax, s_offset_a1, s_offset_b1, &
93067 : s_offset_c1, s_offset_d1
93068 :
93069 : s_offset_a1 = 0
93070 : DO ia = 1, nl_a
93071 : s_offset_b1 = 0
93072 : DO ib = 1, nl_b
93073 : s_offset_c1 = 0
93074 : DO ic = 1, nl_c
93075 : s_offset_d1 = 0
93076 : DO id = 1, nl_d
93077 : buffer1 = 0.0_dp
93078 : imax = 6*10*1
93079 : kmax = 15
93080 : DO i = 1, imax
93081 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93082 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93083 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93084 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93085 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93086 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93087 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93088 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93089 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93090 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93091 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93092 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93093 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93094 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93095 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93096 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93097 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93098 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93099 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93101 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93102 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93103 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93104 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93105 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93106 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93107 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93108 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93109 : END DO
93110 : buffer2 = 0.0_dp
93111 : imax = 9*10*1
93112 : kmax = 6
93113 : DO i = 1, imax
93114 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93115 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93116 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93117 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93118 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93119 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93120 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93121 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93122 : END DO
93123 : buffer1 = 0.0_dp
93124 : imax = 9*5*1
93125 : kmax = 10
93126 : DO i = 1, imax
93127 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93128 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93129 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93130 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93131 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
93132 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93133 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93134 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
93135 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93136 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93137 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93138 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93139 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
93140 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93141 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93142 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
93143 : END DO
93144 : imax = 9*5*7
93145 : kmax = 1
93146 : i = 0
93147 : DO i1 = 1, 7
93148 : DO i2 = 1, 5
93149 : DO i3 = 1, 9
93150 : i = i + 1
93151 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93152 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
93153 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
93154 : END DO
93155 : END DO
93156 : END DO
93157 : s_offset_d1 = s_offset_d1 + 1
93158 : END DO
93159 : s_offset_c1 = s_offset_c1 + 7
93160 : END DO
93161 : s_offset_b1 = s_offset_b1 + 5
93162 : END DO
93163 : s_offset_a1 = s_offset_a1 + 9
93164 : END DO
93165 : END SUBROUTINE contract_gdfs
93166 : #endif
93167 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93168 : ! **************************************************************************************************
93169 : !> \brief ...
93170 : !> \param work ...
93171 : !> \param nl_a ...
93172 : !> \param nl_b ...
93173 : !> \param nl_c ...
93174 : !> \param nl_d ...
93175 : !> \param sphi_a ...
93176 : !> \param sphi_b ...
93177 : !> \param sphi_c ...
93178 : !> \param sphi_d ...
93179 : !> \param primitives ...
93180 : !> \param buffer1 ...
93181 : !> \param buffer2 ...
93182 : ! **************************************************************************************************
93183 : SUBROUTINE contract_gdfp(work, &
93184 : nl_a, nl_b, nl_c, nl_d, &
93185 : sphi_a, sphi_b, sphi_c, sphi_d, &
93186 : primitives, &
93187 : buffer1, buffer2)
93188 : REAL(dp), DIMENSION(15*6*10*3), INTENT(IN) :: work
93189 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93190 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93191 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93192 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
93193 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
93194 : REAL(dp), &
93195 : DIMENSION(9*nl_a, 5*nl_b, 7*nl_c, 3*nl_d) :: primitives
93196 : REAL(dp), DIMENSION(15*6*10*3) :: buffer1, buffer2
93197 :
93198 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93199 : kmax, s_offset_a1, s_offset_b1, &
93200 : s_offset_c1, s_offset_d1
93201 :
93202 : s_offset_a1 = 0
93203 : DO ia = 1, nl_a
93204 : s_offset_b1 = 0
93205 : DO ib = 1, nl_b
93206 : s_offset_c1 = 0
93207 : DO ic = 1, nl_c
93208 : s_offset_d1 = 0
93209 : DO id = 1, nl_d
93210 : buffer1 = 0.0_dp
93211 : imax = 6*10*3
93212 : kmax = 15
93213 : DO i = 1, imax
93214 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93215 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93216 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93217 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93218 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93219 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93220 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93221 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93222 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93223 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93224 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93225 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93226 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93227 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93228 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93229 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93230 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93231 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93232 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93233 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93234 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93235 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93236 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93237 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93238 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93239 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93240 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93241 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93242 : END DO
93243 : buffer2 = 0.0_dp
93244 : imax = 9*10*3
93245 : kmax = 6
93246 : DO i = 1, imax
93247 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93248 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93249 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93250 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93251 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93252 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93253 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93254 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93255 : END DO
93256 : buffer1 = 0.0_dp
93257 : imax = 9*5*3
93258 : kmax = 10
93259 : DO i = 1, imax
93260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93261 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93262 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93263 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
93265 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93266 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93267 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
93268 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93269 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93270 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93271 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93272 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
93273 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93274 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93275 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
93276 : END DO
93277 : imax = 9*5*7
93278 : kmax = 3
93279 : i = 0
93280 : DO i1 = 1, 7
93281 : DO i2 = 1, 5
93282 : DO i3 = 1, 9
93283 : i = i + 1
93284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
93286 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
93287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
93289 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
93290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
93292 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
93293 : END DO
93294 : END DO
93295 : END DO
93296 : s_offset_d1 = s_offset_d1 + 3
93297 : END DO
93298 : s_offset_c1 = s_offset_c1 + 7
93299 : END DO
93300 : s_offset_b1 = s_offset_b1 + 5
93301 : END DO
93302 : s_offset_a1 = s_offset_a1 + 9
93303 : END DO
93304 : END SUBROUTINE contract_gdfp
93305 : #endif
93306 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93307 : ! **************************************************************************************************
93308 : !> \brief ...
93309 : !> \param work ...
93310 : !> \param nl_a ...
93311 : !> \param nl_b ...
93312 : !> \param nl_c ...
93313 : !> \param nl_d ...
93314 : !> \param sphi_a ...
93315 : !> \param sphi_b ...
93316 : !> \param sphi_c ...
93317 : !> \param sphi_d ...
93318 : !> \param primitives ...
93319 : !> \param buffer1 ...
93320 : !> \param buffer2 ...
93321 : ! **************************************************************************************************
93322 : SUBROUTINE contract_gdfd(work, &
93323 : nl_a, nl_b, nl_c, nl_d, &
93324 : sphi_a, sphi_b, sphi_c, sphi_d, &
93325 : primitives, &
93326 : buffer1, buffer2)
93327 : REAL(dp), DIMENSION(15*6*10*6), INTENT(IN) :: work
93328 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93329 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93330 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93331 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
93332 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
93333 : REAL(dp), &
93334 : DIMENSION(9*nl_a, 5*nl_b, 7*nl_c, 5*nl_d) :: primitives
93335 : REAL(dp), DIMENSION(15*6*10*6) :: buffer1, buffer2
93336 :
93337 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93338 : kmax, s_offset_a1, s_offset_b1, &
93339 : s_offset_c1, s_offset_d1
93340 :
93341 : s_offset_a1 = 0
93342 : DO ia = 1, nl_a
93343 : s_offset_b1 = 0
93344 : DO ib = 1, nl_b
93345 : s_offset_c1 = 0
93346 : DO ic = 1, nl_c
93347 : s_offset_d1 = 0
93348 : DO id = 1, nl_d
93349 : buffer1 = 0.0_dp
93350 : imax = 6*10*6
93351 : kmax = 15
93352 : DO i = 1, imax
93353 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93354 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93355 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93356 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93358 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93359 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93361 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93362 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93363 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93364 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93365 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93366 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93367 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93368 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93369 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93372 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93373 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93374 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93375 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93378 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93381 : END DO
93382 : buffer2 = 0.0_dp
93383 : imax = 9*10*6
93384 : kmax = 6
93385 : DO i = 1, imax
93386 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93387 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93388 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93389 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93390 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93391 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93392 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93393 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93394 : END DO
93395 : buffer1 = 0.0_dp
93396 : imax = 9*5*6
93397 : kmax = 10
93398 : DO i = 1, imax
93399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93400 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93401 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93402 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93403 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
93404 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93405 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93406 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
93407 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93409 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93410 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93411 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
93412 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93413 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93414 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
93415 : END DO
93416 : imax = 9*5*7
93417 : kmax = 6
93418 : i = 0
93419 : DO i1 = 1, 7
93420 : DO i2 = 1, 5
93421 : DO i3 = 1, 9
93422 : i = i + 1
93423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93425 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
93426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93427 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93428 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
93429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93430 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
93431 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
93432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93433 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93434 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
93435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93436 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93437 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
93438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93439 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93440 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
93441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93442 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
93443 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
93444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93445 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93446 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
93447 : END DO
93448 : END DO
93449 : END DO
93450 : s_offset_d1 = s_offset_d1 + 5
93451 : END DO
93452 : s_offset_c1 = s_offset_c1 + 7
93453 : END DO
93454 : s_offset_b1 = s_offset_b1 + 5
93455 : END DO
93456 : s_offset_a1 = s_offset_a1 + 9
93457 : END DO
93458 : END SUBROUTINE contract_gdfd
93459 : #endif
93460 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93461 : ! **************************************************************************************************
93462 : !> \brief ...
93463 : !> \param work ...
93464 : !> \param nl_a ...
93465 : !> \param nl_b ...
93466 : !> \param nl_c ...
93467 : !> \param nl_d ...
93468 : !> \param sphi_a ...
93469 : !> \param sphi_b ...
93470 : !> \param sphi_c ...
93471 : !> \param sphi_d ...
93472 : !> \param primitives ...
93473 : !> \param buffer1 ...
93474 : !> \param buffer2 ...
93475 : ! **************************************************************************************************
93476 : SUBROUTINE contract_gdff(work, &
93477 : nl_a, nl_b, nl_c, nl_d, &
93478 : sphi_a, sphi_b, sphi_c, sphi_d, &
93479 : primitives, &
93480 : buffer1, buffer2)
93481 : REAL(dp), DIMENSION(15*6*10*10), INTENT(IN) :: work
93482 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93483 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93484 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93485 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
93486 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
93487 : REAL(dp), &
93488 : DIMENSION(9*nl_a, 5*nl_b, 7*nl_c, 7*nl_d) :: primitives
93489 : REAL(dp), DIMENSION(15*6*10*10) :: buffer1, buffer2
93490 :
93491 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93492 : kmax, s_offset_a1, s_offset_b1, &
93493 : s_offset_c1, s_offset_d1
93494 :
93495 : s_offset_a1 = 0
93496 : DO ia = 1, nl_a
93497 : s_offset_b1 = 0
93498 : DO ib = 1, nl_b
93499 : s_offset_c1 = 0
93500 : DO ic = 1, nl_c
93501 : s_offset_d1 = 0
93502 : DO id = 1, nl_d
93503 : buffer1 = 0.0_dp
93504 : imax = 6*10*10
93505 : kmax = 15
93506 : DO i = 1, imax
93507 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93508 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93509 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93510 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93511 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93512 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93513 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93514 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93515 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93516 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93517 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93518 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93519 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93520 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93521 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93522 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93523 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93524 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93525 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93526 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93527 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93528 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93529 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93530 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93531 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93532 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93533 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93534 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93535 : END DO
93536 : buffer2 = 0.0_dp
93537 : imax = 9*10*10
93538 : kmax = 6
93539 : DO i = 1, imax
93540 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93541 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93542 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93543 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93544 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93545 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93546 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93547 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93548 : END DO
93549 : buffer1 = 0.0_dp
93550 : imax = 9*5*10
93551 : kmax = 10
93552 : DO i = 1, imax
93553 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93554 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93555 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93556 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93557 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
93558 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93559 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93560 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
93561 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93562 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93564 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93565 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
93566 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93567 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93568 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
93569 : END DO
93570 : imax = 9*5*7
93571 : kmax = 10
93572 : i = 0
93573 : DO i1 = 1, 7
93574 : DO i2 = 1, 5
93575 : DO i3 = 1, 9
93576 : i = i + 1
93577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93579 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
93580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93582 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
93583 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93584 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
93585 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
93586 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93587 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93588 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
93589 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93590 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93591 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
93592 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
93593 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
93594 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
93595 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93596 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93597 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
93598 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93599 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93600 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
93601 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93602 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
93603 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
93604 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93606 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
93607 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
93609 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
93610 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93612 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
93613 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93615 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
93616 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
93617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
93618 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
93619 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93621 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
93622 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93624 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
93625 : END DO
93626 : END DO
93627 : END DO
93628 : s_offset_d1 = s_offset_d1 + 7
93629 : END DO
93630 : s_offset_c1 = s_offset_c1 + 7
93631 : END DO
93632 : s_offset_b1 = s_offset_b1 + 5
93633 : END DO
93634 : s_offset_a1 = s_offset_a1 + 9
93635 : END DO
93636 : END SUBROUTINE contract_gdff
93637 : #endif
93638 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93639 : ! **************************************************************************************************
93640 : !> \brief ...
93641 : !> \param work ...
93642 : !> \param nl_a ...
93643 : !> \param nl_b ...
93644 : !> \param nl_c ...
93645 : !> \param nl_d ...
93646 : !> \param sphi_a ...
93647 : !> \param sphi_b ...
93648 : !> \param sphi_c ...
93649 : !> \param sphi_d ...
93650 : !> \param primitives ...
93651 : !> \param buffer1 ...
93652 : !> \param buffer2 ...
93653 : ! **************************************************************************************************
93654 : SUBROUTINE contract_gdfg(work, &
93655 : nl_a, nl_b, nl_c, nl_d, &
93656 : sphi_a, sphi_b, sphi_c, sphi_d, &
93657 : primitives, &
93658 : buffer1, buffer2)
93659 : REAL(dp), DIMENSION(15*6*10*15), INTENT(IN) :: work
93660 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93661 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93662 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93663 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
93664 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
93665 : REAL(dp), &
93666 : DIMENSION(9*nl_a, 5*nl_b, 7*nl_c, 9*nl_d) :: primitives
93667 : REAL(dp), DIMENSION(15*6*10*15) :: buffer1, buffer2
93668 :
93669 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93670 : kmax, s_offset_a1, s_offset_b1, &
93671 : s_offset_c1, s_offset_d1
93672 :
93673 : s_offset_a1 = 0
93674 : DO ia = 1, nl_a
93675 : s_offset_b1 = 0
93676 : DO ib = 1, nl_b
93677 : s_offset_c1 = 0
93678 : DO ic = 1, nl_c
93679 : s_offset_d1 = 0
93680 : DO id = 1, nl_d
93681 : buffer1 = 0.0_dp
93682 : imax = 6*10*15
93683 : kmax = 15
93684 : DO i = 1, imax
93685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93686 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93687 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93688 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93689 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93690 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93691 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93692 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93693 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93694 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93695 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93696 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93697 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93698 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93699 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93700 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93701 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93702 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93703 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93704 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93705 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93706 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93707 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93708 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93709 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93710 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93711 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93713 : END DO
93714 : buffer2 = 0.0_dp
93715 : imax = 9*10*15
93716 : kmax = 6
93717 : DO i = 1, imax
93718 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93719 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93720 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93721 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93722 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93723 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93724 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93725 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93726 : END DO
93727 : buffer1 = 0.0_dp
93728 : imax = 9*5*15
93729 : kmax = 10
93730 : DO i = 1, imax
93731 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93732 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93733 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93734 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93735 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
93736 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93737 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93738 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
93739 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93740 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93741 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93742 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93743 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
93744 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93745 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93746 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
93747 : END DO
93748 : imax = 9*5*7
93749 : kmax = 15
93750 : i = 0
93751 : DO i1 = 1, 7
93752 : DO i2 = 1, 5
93753 : DO i3 = 1, 9
93754 : i = i + 1
93755 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93757 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
93758 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93760 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
93761 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
93762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
93763 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
93764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
93766 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
93767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93769 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
93770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
93771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
93772 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
93773 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
93774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
93775 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
93776 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93778 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
93779 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
93780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
93781 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
93782 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
93784 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
93785 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93787 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
93788 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93790 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
93791 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93793 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
93794 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
93796 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
93797 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93799 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
93800 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
93801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
93802 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
93803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
93804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
93805 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
93806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
93807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
93808 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
93809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
93810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
93811 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
93812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93814 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
93815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93817 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
93818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
93819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
93820 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
93821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
93822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
93823 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
93824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93826 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
93827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93829 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
93830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
93831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
93832 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
93833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
93834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
93835 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
93836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
93837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
93838 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
93839 : END DO
93840 : END DO
93841 : END DO
93842 : s_offset_d1 = s_offset_d1 + 9
93843 : END DO
93844 : s_offset_c1 = s_offset_c1 + 7
93845 : END DO
93846 : s_offset_b1 = s_offset_b1 + 5
93847 : END DO
93848 : s_offset_a1 = s_offset_a1 + 9
93849 : END DO
93850 : END SUBROUTINE contract_gdfg
93851 : #endif
93852 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93853 : ! **************************************************************************************************
93854 : !> \brief ...
93855 : !> \param work ...
93856 : !> \param nl_a ...
93857 : !> \param nl_b ...
93858 : !> \param nl_c ...
93859 : !> \param nl_d ...
93860 : !> \param sphi_a ...
93861 : !> \param sphi_b ...
93862 : !> \param sphi_c ...
93863 : !> \param sphi_d ...
93864 : !> \param primitives ...
93865 : !> \param buffer1 ...
93866 : !> \param buffer2 ...
93867 : ! **************************************************************************************************
93868 : SUBROUTINE contract_gdgs(work, &
93869 : nl_a, nl_b, nl_c, nl_d, &
93870 : sphi_a, sphi_b, sphi_c, sphi_d, &
93871 : primitives, &
93872 : buffer1, buffer2)
93873 : REAL(dp), DIMENSION(15*6*15*1), INTENT(IN) :: work
93874 : INTEGER :: nl_a, nl_b, nl_c, nl_d
93875 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
93876 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
93877 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
93878 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
93879 : REAL(dp), &
93880 : DIMENSION(9*nl_a, 5*nl_b, 9*nl_c, 1*nl_d) :: primitives
93881 : REAL(dp), DIMENSION(15*6*15*1) :: buffer1, buffer2
93882 :
93883 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
93884 : kmax, s_offset_a1, s_offset_b1, &
93885 : s_offset_c1, s_offset_d1
93886 :
93887 : s_offset_a1 = 0
93888 : DO ia = 1, nl_a
93889 : s_offset_b1 = 0
93890 : DO ib = 1, nl_b
93891 : s_offset_c1 = 0
93892 : DO ic = 1, nl_c
93893 : s_offset_d1 = 0
93894 : DO id = 1, nl_d
93895 : buffer1 = 0.0_dp
93896 : imax = 6*15*1
93897 : kmax = 15
93898 : DO i = 1, imax
93899 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
93900 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
93901 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
93902 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
93903 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
93904 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
93905 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
93906 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
93907 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
93908 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
93909 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
93910 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
93911 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
93912 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
93913 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
93914 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
93915 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
93916 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
93917 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
93918 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
93919 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
93920 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
93921 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
93922 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
93923 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
93924 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
93925 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
93926 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
93927 : END DO
93928 : buffer2 = 0.0_dp
93929 : imax = 9*15*1
93930 : kmax = 6
93931 : DO i = 1, imax
93932 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
93933 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
93934 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
93935 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
93936 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
93937 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
93938 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
93939 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
93940 : END DO
93941 : buffer1 = 0.0_dp
93942 : imax = 9*5*1
93943 : kmax = 15
93944 : DO i = 1, imax
93945 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
93946 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
93947 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
93948 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
93949 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
93950 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
93951 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
93952 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
93953 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
93954 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
93955 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
93956 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
93957 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
93958 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
93959 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
93960 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
93961 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
93962 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
93963 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
93964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
93965 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
93966 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
93967 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
93968 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
93969 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
93970 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
93971 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
93972 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
93973 : END DO
93974 : imax = 9*5*9
93975 : kmax = 1
93976 : i = 0
93977 : DO i1 = 1, 9
93978 : DO i2 = 1, 5
93979 : DO i3 = 1, 9
93980 : i = i + 1
93981 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
93982 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
93983 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
93984 : END DO
93985 : END DO
93986 : END DO
93987 : s_offset_d1 = s_offset_d1 + 1
93988 : END DO
93989 : s_offset_c1 = s_offset_c1 + 9
93990 : END DO
93991 : s_offset_b1 = s_offset_b1 + 5
93992 : END DO
93993 : s_offset_a1 = s_offset_a1 + 9
93994 : END DO
93995 : END SUBROUTINE contract_gdgs
93996 : #endif
93997 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
93998 : ! **************************************************************************************************
93999 : !> \brief ...
94000 : !> \param work ...
94001 : !> \param nl_a ...
94002 : !> \param nl_b ...
94003 : !> \param nl_c ...
94004 : !> \param nl_d ...
94005 : !> \param sphi_a ...
94006 : !> \param sphi_b ...
94007 : !> \param sphi_c ...
94008 : !> \param sphi_d ...
94009 : !> \param primitives ...
94010 : !> \param buffer1 ...
94011 : !> \param buffer2 ...
94012 : ! **************************************************************************************************
94013 : SUBROUTINE contract_gdgp(work, &
94014 : nl_a, nl_b, nl_c, nl_d, &
94015 : sphi_a, sphi_b, sphi_c, sphi_d, &
94016 : primitives, &
94017 : buffer1, buffer2)
94018 : REAL(dp), DIMENSION(15*6*15*3), INTENT(IN) :: work
94019 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94020 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94021 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
94022 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
94023 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
94024 : REAL(dp), &
94025 : DIMENSION(9*nl_a, 5*nl_b, 9*nl_c, 3*nl_d) :: primitives
94026 : REAL(dp), DIMENSION(15*6*15*3) :: buffer1, buffer2
94027 :
94028 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94029 : kmax, s_offset_a1, s_offset_b1, &
94030 : s_offset_c1, s_offset_d1
94031 :
94032 : s_offset_a1 = 0
94033 : DO ia = 1, nl_a
94034 : s_offset_b1 = 0
94035 : DO ib = 1, nl_b
94036 : s_offset_c1 = 0
94037 : DO ic = 1, nl_c
94038 : s_offset_d1 = 0
94039 : DO id = 1, nl_d
94040 : buffer1 = 0.0_dp
94041 : imax = 6*15*3
94042 : kmax = 15
94043 : DO i = 1, imax
94044 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94045 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94046 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94047 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94048 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94049 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94050 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94051 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94052 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94053 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94054 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94055 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94056 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94057 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94058 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94059 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94060 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94061 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94062 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94063 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94064 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94065 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94066 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94067 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94068 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94069 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94070 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94071 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94072 : END DO
94073 : buffer2 = 0.0_dp
94074 : imax = 9*15*3
94075 : kmax = 6
94076 : DO i = 1, imax
94077 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
94078 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94079 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94080 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94081 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
94082 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94083 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94084 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
94085 : END DO
94086 : buffer1 = 0.0_dp
94087 : imax = 9*5*3
94088 : kmax = 15
94089 : DO i = 1, imax
94090 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
94091 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
94092 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
94093 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
94094 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
94095 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
94096 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
94097 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
94098 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
94099 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
94100 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
94101 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
94102 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
94103 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
94104 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
94105 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
94106 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
94107 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
94108 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
94109 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
94110 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
94111 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
94112 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
94113 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
94114 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
94115 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
94116 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
94117 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
94118 : END DO
94119 : imax = 9*5*9
94120 : kmax = 3
94121 : i = 0
94122 : DO i1 = 1, 9
94123 : DO i2 = 1, 5
94124 : DO i3 = 1, 9
94125 : i = i + 1
94126 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
94128 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
94129 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
94131 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
94132 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
94134 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
94135 : END DO
94136 : END DO
94137 : END DO
94138 : s_offset_d1 = s_offset_d1 + 3
94139 : END DO
94140 : s_offset_c1 = s_offset_c1 + 9
94141 : END DO
94142 : s_offset_b1 = s_offset_b1 + 5
94143 : END DO
94144 : s_offset_a1 = s_offset_a1 + 9
94145 : END DO
94146 : END SUBROUTINE contract_gdgp
94147 : #endif
94148 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94149 : ! **************************************************************************************************
94150 : !> \brief ...
94151 : !> \param work ...
94152 : !> \param nl_a ...
94153 : !> \param nl_b ...
94154 : !> \param nl_c ...
94155 : !> \param nl_d ...
94156 : !> \param sphi_a ...
94157 : !> \param sphi_b ...
94158 : !> \param sphi_c ...
94159 : !> \param sphi_d ...
94160 : !> \param primitives ...
94161 : !> \param buffer1 ...
94162 : !> \param buffer2 ...
94163 : ! **************************************************************************************************
94164 : SUBROUTINE contract_gdgd(work, &
94165 : nl_a, nl_b, nl_c, nl_d, &
94166 : sphi_a, sphi_b, sphi_c, sphi_d, &
94167 : primitives, &
94168 : buffer1, buffer2)
94169 : REAL(dp), DIMENSION(15*6*15*6), INTENT(IN) :: work
94170 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94171 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94172 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
94173 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
94174 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
94175 : REAL(dp), &
94176 : DIMENSION(9*nl_a, 5*nl_b, 9*nl_c, 5*nl_d) :: primitives
94177 : REAL(dp), DIMENSION(15*6*15*6) :: buffer1, buffer2
94178 :
94179 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94180 : kmax, s_offset_a1, s_offset_b1, &
94181 : s_offset_c1, s_offset_d1
94182 :
94183 : s_offset_a1 = 0
94184 : DO ia = 1, nl_a
94185 : s_offset_b1 = 0
94186 : DO ib = 1, nl_b
94187 : s_offset_c1 = 0
94188 : DO ic = 1, nl_c
94189 : s_offset_d1 = 0
94190 : DO id = 1, nl_d
94191 : buffer1 = 0.0_dp
94192 : imax = 6*15*6
94193 : kmax = 15
94194 : DO i = 1, imax
94195 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94196 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94197 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94198 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94199 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94200 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94201 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94202 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94203 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94204 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94206 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94207 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94208 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94209 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94210 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94211 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94212 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94213 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94214 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94215 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94216 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94217 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94218 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94219 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94220 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94221 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94222 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94223 : END DO
94224 : buffer2 = 0.0_dp
94225 : imax = 9*15*6
94226 : kmax = 6
94227 : DO i = 1, imax
94228 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
94229 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94230 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94231 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94232 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
94233 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94234 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94235 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
94236 : END DO
94237 : buffer1 = 0.0_dp
94238 : imax = 9*5*6
94239 : kmax = 15
94240 : DO i = 1, imax
94241 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
94242 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
94243 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
94244 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
94245 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
94246 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
94247 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
94248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
94249 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
94250 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
94251 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
94252 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
94253 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
94254 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
94255 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
94256 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
94257 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
94258 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
94259 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
94260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
94261 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
94262 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
94263 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
94264 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
94265 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
94266 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
94267 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
94268 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
94269 : END DO
94270 : imax = 9*5*9
94271 : kmax = 6
94272 : i = 0
94273 : DO i1 = 1, 9
94274 : DO i2 = 1, 5
94275 : DO i3 = 1, 9
94276 : i = i + 1
94277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94279 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
94280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94282 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
94283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
94285 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
94286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94288 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
94289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94291 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
94292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94293 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94294 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
94295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
94297 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
94298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94300 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
94301 : END DO
94302 : END DO
94303 : END DO
94304 : s_offset_d1 = s_offset_d1 + 5
94305 : END DO
94306 : s_offset_c1 = s_offset_c1 + 9
94307 : END DO
94308 : s_offset_b1 = s_offset_b1 + 5
94309 : END DO
94310 : s_offset_a1 = s_offset_a1 + 9
94311 : END DO
94312 : END SUBROUTINE contract_gdgd
94313 : #endif
94314 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94315 : ! **************************************************************************************************
94316 : !> \brief ...
94317 : !> \param work ...
94318 : !> \param nl_a ...
94319 : !> \param nl_b ...
94320 : !> \param nl_c ...
94321 : !> \param nl_d ...
94322 : !> \param sphi_a ...
94323 : !> \param sphi_b ...
94324 : !> \param sphi_c ...
94325 : !> \param sphi_d ...
94326 : !> \param primitives ...
94327 : !> \param buffer1 ...
94328 : !> \param buffer2 ...
94329 : ! **************************************************************************************************
94330 : SUBROUTINE contract_gdgf(work, &
94331 : nl_a, nl_b, nl_c, nl_d, &
94332 : sphi_a, sphi_b, sphi_c, sphi_d, &
94333 : primitives, &
94334 : buffer1, buffer2)
94335 : REAL(dp), DIMENSION(15*6*15*10), INTENT(IN) :: work
94336 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94337 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94338 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
94339 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
94340 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
94341 : REAL(dp), &
94342 : DIMENSION(9*nl_a, 5*nl_b, 9*nl_c, 7*nl_d) :: primitives
94343 : REAL(dp), DIMENSION(15*6*15*10) :: buffer1, buffer2
94344 :
94345 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94346 : kmax, s_offset_a1, s_offset_b1, &
94347 : s_offset_c1, s_offset_d1
94348 :
94349 : s_offset_a1 = 0
94350 : DO ia = 1, nl_a
94351 : s_offset_b1 = 0
94352 : DO ib = 1, nl_b
94353 : s_offset_c1 = 0
94354 : DO ic = 1, nl_c
94355 : s_offset_d1 = 0
94356 : DO id = 1, nl_d
94357 : buffer1 = 0.0_dp
94358 : imax = 6*15*10
94359 : kmax = 15
94360 : DO i = 1, imax
94361 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94362 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94363 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94364 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94365 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94366 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94367 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94368 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94369 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94370 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94371 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94372 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94373 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94374 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94375 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94376 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94377 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94378 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94379 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94381 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94382 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94383 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94384 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94385 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94386 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94387 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94388 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94389 : END DO
94390 : buffer2 = 0.0_dp
94391 : imax = 9*15*10
94392 : kmax = 6
94393 : DO i = 1, imax
94394 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
94395 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94396 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94397 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94398 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
94399 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94400 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94401 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
94402 : END DO
94403 : buffer1 = 0.0_dp
94404 : imax = 9*5*10
94405 : kmax = 15
94406 : DO i = 1, imax
94407 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
94408 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
94409 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
94410 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
94411 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
94412 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
94413 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
94414 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
94415 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
94416 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
94417 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
94418 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
94419 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
94420 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
94421 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
94422 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
94423 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
94424 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
94425 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
94426 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
94427 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
94428 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
94429 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
94430 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
94431 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
94432 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
94433 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
94434 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
94435 : END DO
94436 : imax = 9*5*9
94437 : kmax = 10
94438 : i = 0
94439 : DO i1 = 1, 9
94440 : DO i2 = 1, 5
94441 : DO i3 = 1, 9
94442 : i = i + 1
94443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94445 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
94446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94448 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
94449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
94451 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
94452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94454 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
94455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94457 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
94458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
94459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
94460 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
94461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94463 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
94464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94466 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
94467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
94469 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
94470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94472 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
94473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
94475 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
94476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94478 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
94479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94481 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
94482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
94483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
94484 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
94485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94487 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
94488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94490 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
94491 : END DO
94492 : END DO
94493 : END DO
94494 : s_offset_d1 = s_offset_d1 + 7
94495 : END DO
94496 : s_offset_c1 = s_offset_c1 + 9
94497 : END DO
94498 : s_offset_b1 = s_offset_b1 + 5
94499 : END DO
94500 : s_offset_a1 = s_offset_a1 + 9
94501 : END DO
94502 : END SUBROUTINE contract_gdgf
94503 : #endif
94504 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94505 : ! **************************************************************************************************
94506 : !> \brief ...
94507 : !> \param work ...
94508 : !> \param nl_a ...
94509 : !> \param nl_b ...
94510 : !> \param nl_c ...
94511 : !> \param nl_d ...
94512 : !> \param sphi_a ...
94513 : !> \param sphi_b ...
94514 : !> \param sphi_c ...
94515 : !> \param sphi_d ...
94516 : !> \param primitives ...
94517 : !> \param buffer1 ...
94518 : !> \param buffer2 ...
94519 : ! **************************************************************************************************
94520 : SUBROUTINE contract_gdgg(work, &
94521 : nl_a, nl_b, nl_c, nl_d, &
94522 : sphi_a, sphi_b, sphi_c, sphi_d, &
94523 : primitives, &
94524 : buffer1, buffer2)
94525 : REAL(dp), DIMENSION(15*6*15*15), INTENT(IN) :: work
94526 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94527 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94528 : REAL(dp), DIMENSION(6, 5*nl_b), INTENT(IN) :: sphi_b
94529 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
94530 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
94531 : REAL(dp), &
94532 : DIMENSION(9*nl_a, 5*nl_b, 9*nl_c, 9*nl_d) :: primitives
94533 : REAL(dp), DIMENSION(15*6*15*15) :: buffer1, buffer2
94534 :
94535 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94536 : kmax, s_offset_a1, s_offset_b1, &
94537 : s_offset_c1, s_offset_d1
94538 :
94539 : s_offset_a1 = 0
94540 : DO ia = 1, nl_a
94541 : s_offset_b1 = 0
94542 : DO ib = 1, nl_b
94543 : s_offset_c1 = 0
94544 : DO ic = 1, nl_c
94545 : s_offset_d1 = 0
94546 : DO id = 1, nl_d
94547 : buffer1 = 0.0_dp
94548 : imax = 6*15*15
94549 : kmax = 15
94550 : DO i = 1, imax
94551 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94552 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94553 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94554 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94555 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94556 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94557 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94558 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94559 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94560 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94561 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94562 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94563 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94564 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94565 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94566 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94567 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94568 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94569 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94570 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94571 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94572 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94573 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94574 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94575 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94576 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94577 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94578 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94579 : END DO
94580 : buffer2 = 0.0_dp
94581 : imax = 9*15*15
94582 : kmax = 6
94583 : DO i = 1, imax
94584 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
94585 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94586 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94587 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94588 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
94589 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94590 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94591 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
94592 : END DO
94593 : buffer1 = 0.0_dp
94594 : imax = 9*5*15
94595 : kmax = 15
94596 : DO i = 1, imax
94597 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
94598 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
94599 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
94600 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
94601 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
94602 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
94603 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
94604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
94605 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
94606 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
94607 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
94608 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
94609 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
94610 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
94611 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
94612 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
94613 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
94614 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
94615 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
94616 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
94617 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
94618 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
94619 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
94620 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
94621 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
94622 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
94623 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
94624 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
94625 : END DO
94626 : imax = 9*5*9
94627 : kmax = 15
94628 : i = 0
94629 : DO i1 = 1, 9
94630 : DO i2 = 1, 5
94631 : DO i3 = 1, 9
94632 : i = i + 1
94633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94634 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94635 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
94636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94637 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94638 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
94639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
94640 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
94641 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
94642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94643 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
94644 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
94645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94647 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
94648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
94649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
94650 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
94651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
94652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
94653 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
94654 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94656 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
94657 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
94658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
94659 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
94660 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
94662 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
94663 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94665 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
94666 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94668 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
94669 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94671 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
94672 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
94674 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
94675 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94677 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
94678 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
94679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
94680 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
94681 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
94682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
94683 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
94684 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
94686 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
94687 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
94688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
94689 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
94690 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94692 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
94693 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94695 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
94696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
94697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
94698 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
94699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
94701 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
94702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94704 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
94705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94707 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
94708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
94709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
94710 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
94711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
94712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
94713 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
94714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
94715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
94716 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
94717 : END DO
94718 : END DO
94719 : END DO
94720 : s_offset_d1 = s_offset_d1 + 9
94721 : END DO
94722 : s_offset_c1 = s_offset_c1 + 9
94723 : END DO
94724 : s_offset_b1 = s_offset_b1 + 5
94725 : END DO
94726 : s_offset_a1 = s_offset_a1 + 9
94727 : END DO
94728 : END SUBROUTINE contract_gdgg
94729 : #endif
94730 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94731 : ! **************************************************************************************************
94732 : !> \brief ...
94733 : !> \param work ...
94734 : !> \param nl_a ...
94735 : !> \param nl_b ...
94736 : !> \param nl_c ...
94737 : !> \param nl_d ...
94738 : !> \param sphi_a ...
94739 : !> \param sphi_b ...
94740 : !> \param sphi_c ...
94741 : !> \param sphi_d ...
94742 : !> \param primitives ...
94743 : !> \param buffer1 ...
94744 : !> \param buffer2 ...
94745 : ! **************************************************************************************************
94746 : SUBROUTINE contract_gfss(work, &
94747 : nl_a, nl_b, nl_c, nl_d, &
94748 : sphi_a, sphi_b, sphi_c, sphi_d, &
94749 : primitives, &
94750 : buffer1, buffer2)
94751 : REAL(dp), DIMENSION(15*10*1*1), INTENT(IN) :: work
94752 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94753 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94754 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
94755 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
94756 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
94757 : REAL(dp), &
94758 : DIMENSION(9*nl_a, 7*nl_b, 1*nl_c, 1*nl_d) :: primitives
94759 : REAL(dp), DIMENSION(15*10*1*1) :: buffer1, buffer2
94760 :
94761 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94762 : kmax, s_offset_a1, s_offset_b1, &
94763 : s_offset_c1, s_offset_d1
94764 :
94765 : s_offset_a1 = 0
94766 : DO ia = 1, nl_a
94767 : s_offset_b1 = 0
94768 : DO ib = 1, nl_b
94769 : s_offset_c1 = 0
94770 : DO ic = 1, nl_c
94771 : s_offset_d1 = 0
94772 : DO id = 1, nl_d
94773 : buffer1 = 0.0_dp
94774 : imax = 10*1*1
94775 : kmax = 15
94776 : DO i = 1, imax
94777 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94778 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94779 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94780 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94782 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94783 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94784 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94785 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94786 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94787 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94788 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94789 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94790 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94791 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94792 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94793 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94794 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94795 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94796 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94797 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94798 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94799 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94800 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94802 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94803 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94804 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94805 : END DO
94806 : buffer2 = 0.0_dp
94807 : imax = 9*1*1
94808 : kmax = 10
94809 : DO i = 1, imax
94810 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94811 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
94812 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94813 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
94814 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94815 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
94816 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94817 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
94818 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94819 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
94820 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
94821 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
94822 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
94823 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
94824 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
94825 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
94826 : END DO
94827 : buffer1 = 0.0_dp
94828 : imax = 9*7*1
94829 : kmax = 1
94830 : DO i = 1, imax
94831 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
94832 : END DO
94833 : imax = 9*7*1
94834 : kmax = 1
94835 : i = 0
94836 : DO i1 = 1, 1
94837 : DO i2 = 1, 7
94838 : DO i3 = 1, 9
94839 : i = i + 1
94840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94841 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
94842 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
94843 : END DO
94844 : END DO
94845 : END DO
94846 : s_offset_d1 = s_offset_d1 + 1
94847 : END DO
94848 : s_offset_c1 = s_offset_c1 + 1
94849 : END DO
94850 : s_offset_b1 = s_offset_b1 + 7
94851 : END DO
94852 : s_offset_a1 = s_offset_a1 + 9
94853 : END DO
94854 : END SUBROUTINE contract_gfss
94855 : #endif
94856 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94857 : ! **************************************************************************************************
94858 : !> \brief ...
94859 : !> \param work ...
94860 : !> \param nl_a ...
94861 : !> \param nl_b ...
94862 : !> \param nl_c ...
94863 : !> \param nl_d ...
94864 : !> \param sphi_a ...
94865 : !> \param sphi_b ...
94866 : !> \param sphi_c ...
94867 : !> \param sphi_d ...
94868 : !> \param primitives ...
94869 : !> \param buffer1 ...
94870 : !> \param buffer2 ...
94871 : ! **************************************************************************************************
94872 : SUBROUTINE contract_gfsp(work, &
94873 : nl_a, nl_b, nl_c, nl_d, &
94874 : sphi_a, sphi_b, sphi_c, sphi_d, &
94875 : primitives, &
94876 : buffer1, buffer2)
94877 : REAL(dp), DIMENSION(15*10*1*3), INTENT(IN) :: work
94878 : INTEGER :: nl_a, nl_b, nl_c, nl_d
94879 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
94880 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
94881 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
94882 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
94883 : REAL(dp), &
94884 : DIMENSION(9*nl_a, 7*nl_b, 1*nl_c, 3*nl_d) :: primitives
94885 : REAL(dp), DIMENSION(15*10*1*3) :: buffer1, buffer2
94886 :
94887 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
94888 : kmax, s_offset_a1, s_offset_b1, &
94889 : s_offset_c1, s_offset_d1
94890 :
94891 : s_offset_a1 = 0
94892 : DO ia = 1, nl_a
94893 : s_offset_b1 = 0
94894 : DO ib = 1, nl_b
94895 : s_offset_c1 = 0
94896 : DO ic = 1, nl_c
94897 : s_offset_d1 = 0
94898 : DO id = 1, nl_d
94899 : buffer1 = 0.0_dp
94900 : imax = 10*1*3
94901 : kmax = 15
94902 : DO i = 1, imax
94903 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
94904 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
94905 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
94906 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
94907 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
94908 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
94909 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
94910 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
94911 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
94912 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
94913 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
94914 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
94915 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
94916 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
94917 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
94918 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
94919 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
94920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
94921 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
94922 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
94923 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
94924 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
94925 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
94926 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
94927 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
94928 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
94929 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
94930 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
94931 : END DO
94932 : buffer2 = 0.0_dp
94933 : imax = 9*1*3
94934 : kmax = 10
94935 : DO i = 1, imax
94936 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
94937 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
94938 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
94939 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
94940 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
94941 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
94942 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
94943 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
94944 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
94945 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
94946 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
94947 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
94948 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
94949 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
94950 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
94951 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
94952 : END DO
94953 : buffer1 = 0.0_dp
94954 : imax = 9*7*3
94955 : kmax = 1
94956 : DO i = 1, imax
94957 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
94958 : END DO
94959 : imax = 9*7*1
94960 : kmax = 3
94961 : i = 0
94962 : DO i1 = 1, 1
94963 : DO i2 = 1, 7
94964 : DO i3 = 1, 9
94965 : i = i + 1
94966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
94967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
94968 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
94969 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
94970 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
94971 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
94972 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
94973 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
94974 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
94975 : END DO
94976 : END DO
94977 : END DO
94978 : s_offset_d1 = s_offset_d1 + 3
94979 : END DO
94980 : s_offset_c1 = s_offset_c1 + 1
94981 : END DO
94982 : s_offset_b1 = s_offset_b1 + 7
94983 : END DO
94984 : s_offset_a1 = s_offset_a1 + 9
94985 : END DO
94986 : END SUBROUTINE contract_gfsp
94987 : #endif
94988 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
94989 : ! **************************************************************************************************
94990 : !> \brief ...
94991 : !> \param work ...
94992 : !> \param nl_a ...
94993 : !> \param nl_b ...
94994 : !> \param nl_c ...
94995 : !> \param nl_d ...
94996 : !> \param sphi_a ...
94997 : !> \param sphi_b ...
94998 : !> \param sphi_c ...
94999 : !> \param sphi_d ...
95000 : !> \param primitives ...
95001 : !> \param buffer1 ...
95002 : !> \param buffer2 ...
95003 : ! **************************************************************************************************
95004 : SUBROUTINE contract_gfsd(work, &
95005 : nl_a, nl_b, nl_c, nl_d, &
95006 : sphi_a, sphi_b, sphi_c, sphi_d, &
95007 : primitives, &
95008 : buffer1, buffer2)
95009 : REAL(dp), DIMENSION(15*10*1*6), INTENT(IN) :: work
95010 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95011 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95012 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95013 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
95014 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
95015 : REAL(dp), &
95016 : DIMENSION(9*nl_a, 7*nl_b, 1*nl_c, 5*nl_d) :: primitives
95017 : REAL(dp), DIMENSION(15*10*1*6) :: buffer1, buffer2
95018 :
95019 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95020 : kmax, s_offset_a1, s_offset_b1, &
95021 : s_offset_c1, s_offset_d1
95022 :
95023 : s_offset_a1 = 0
95024 : DO ia = 1, nl_a
95025 : s_offset_b1 = 0
95026 : DO ib = 1, nl_b
95027 : s_offset_c1 = 0
95028 : DO ic = 1, nl_c
95029 : s_offset_d1 = 0
95030 : DO id = 1, nl_d
95031 : buffer1 = 0.0_dp
95032 : imax = 10*1*6
95033 : kmax = 15
95034 : DO i = 1, imax
95035 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95036 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95037 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95038 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95039 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95040 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95041 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95042 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95043 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95044 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95045 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95046 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95047 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95048 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95049 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95050 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95051 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95052 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95053 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95054 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95055 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95056 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95057 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95058 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95059 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95060 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95061 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95062 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95063 : END DO
95064 : buffer2 = 0.0_dp
95065 : imax = 9*1*6
95066 : kmax = 10
95067 : DO i = 1, imax
95068 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95069 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95070 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95071 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95072 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95073 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95074 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95075 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95076 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95077 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95078 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95079 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95080 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95081 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95082 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95083 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95084 : END DO
95085 : buffer1 = 0.0_dp
95086 : imax = 9*7*6
95087 : kmax = 1
95088 : DO i = 1, imax
95089 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
95090 : END DO
95091 : imax = 9*7*1
95092 : kmax = 6
95093 : i = 0
95094 : DO i1 = 1, 1
95095 : DO i2 = 1, 7
95096 : DO i3 = 1, 9
95097 : i = i + 1
95098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95100 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
95101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95103 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
95104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95106 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
95107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95109 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
95110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95111 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95112 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
95113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95114 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95115 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
95116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95117 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
95118 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
95119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95121 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
95122 : END DO
95123 : END DO
95124 : END DO
95125 : s_offset_d1 = s_offset_d1 + 5
95126 : END DO
95127 : s_offset_c1 = s_offset_c1 + 1
95128 : END DO
95129 : s_offset_b1 = s_offset_b1 + 7
95130 : END DO
95131 : s_offset_a1 = s_offset_a1 + 9
95132 : END DO
95133 : END SUBROUTINE contract_gfsd
95134 : #endif
95135 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95136 : ! **************************************************************************************************
95137 : !> \brief ...
95138 : !> \param work ...
95139 : !> \param nl_a ...
95140 : !> \param nl_b ...
95141 : !> \param nl_c ...
95142 : !> \param nl_d ...
95143 : !> \param sphi_a ...
95144 : !> \param sphi_b ...
95145 : !> \param sphi_c ...
95146 : !> \param sphi_d ...
95147 : !> \param primitives ...
95148 : !> \param buffer1 ...
95149 : !> \param buffer2 ...
95150 : ! **************************************************************************************************
95151 : SUBROUTINE contract_gfsf(work, &
95152 : nl_a, nl_b, nl_c, nl_d, &
95153 : sphi_a, sphi_b, sphi_c, sphi_d, &
95154 : primitives, &
95155 : buffer1, buffer2)
95156 : REAL(dp), DIMENSION(15*10*1*10), INTENT(IN) :: work
95157 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95158 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95159 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95160 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
95161 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
95162 : REAL(dp), &
95163 : DIMENSION(9*nl_a, 7*nl_b, 1*nl_c, 7*nl_d) :: primitives
95164 : REAL(dp), DIMENSION(15*10*1*10) :: buffer1, buffer2
95165 :
95166 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95167 : kmax, s_offset_a1, s_offset_b1, &
95168 : s_offset_c1, s_offset_d1
95169 :
95170 : s_offset_a1 = 0
95171 : DO ia = 1, nl_a
95172 : s_offset_b1 = 0
95173 : DO ib = 1, nl_b
95174 : s_offset_c1 = 0
95175 : DO ic = 1, nl_c
95176 : s_offset_d1 = 0
95177 : DO id = 1, nl_d
95178 : buffer1 = 0.0_dp
95179 : imax = 10*1*10
95180 : kmax = 15
95181 : DO i = 1, imax
95182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95183 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95184 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95185 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95186 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95187 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95188 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95189 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95190 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95191 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95192 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95193 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95194 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95195 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95196 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95197 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95198 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95199 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95200 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95201 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95202 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95203 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95204 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95206 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95207 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95208 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95209 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95210 : END DO
95211 : buffer2 = 0.0_dp
95212 : imax = 9*1*10
95213 : kmax = 10
95214 : DO i = 1, imax
95215 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95216 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95217 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95218 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95219 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95220 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95221 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95222 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95223 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95224 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95225 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95226 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95227 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95228 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95229 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95230 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95231 : END DO
95232 : buffer1 = 0.0_dp
95233 : imax = 9*7*10
95234 : kmax = 1
95235 : DO i = 1, imax
95236 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
95237 : END DO
95238 : imax = 9*7*1
95239 : kmax = 10
95240 : i = 0
95241 : DO i1 = 1, 1
95242 : DO i2 = 1, 7
95243 : DO i3 = 1, 9
95244 : i = i + 1
95245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95247 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
95248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95250 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
95251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95253 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
95254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95256 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
95257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95259 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
95260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
95261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
95262 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
95263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95265 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
95266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95268 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
95269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
95271 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
95272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95274 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
95275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95277 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
95278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95280 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
95281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95283 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
95284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
95285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
95286 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
95287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95289 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
95290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95292 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
95293 : END DO
95294 : END DO
95295 : END DO
95296 : s_offset_d1 = s_offset_d1 + 7
95297 : END DO
95298 : s_offset_c1 = s_offset_c1 + 1
95299 : END DO
95300 : s_offset_b1 = s_offset_b1 + 7
95301 : END DO
95302 : s_offset_a1 = s_offset_a1 + 9
95303 : END DO
95304 : END SUBROUTINE contract_gfsf
95305 : #endif
95306 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95307 : ! **************************************************************************************************
95308 : !> \brief ...
95309 : !> \param work ...
95310 : !> \param nl_a ...
95311 : !> \param nl_b ...
95312 : !> \param nl_c ...
95313 : !> \param nl_d ...
95314 : !> \param sphi_a ...
95315 : !> \param sphi_b ...
95316 : !> \param sphi_c ...
95317 : !> \param sphi_d ...
95318 : !> \param primitives ...
95319 : !> \param buffer1 ...
95320 : !> \param buffer2 ...
95321 : ! **************************************************************************************************
95322 : SUBROUTINE contract_gfsg(work, &
95323 : nl_a, nl_b, nl_c, nl_d, &
95324 : sphi_a, sphi_b, sphi_c, sphi_d, &
95325 : primitives, &
95326 : buffer1, buffer2)
95327 : REAL(dp), DIMENSION(15*10*1*15), INTENT(IN) :: work
95328 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95329 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95330 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95331 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
95332 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
95333 : REAL(dp), &
95334 : DIMENSION(9*nl_a, 7*nl_b, 1*nl_c, 9*nl_d) :: primitives
95335 : REAL(dp), DIMENSION(15*10*1*15) :: buffer1, buffer2
95336 :
95337 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95338 : kmax, s_offset_a1, s_offset_b1, &
95339 : s_offset_c1, s_offset_d1
95340 :
95341 : s_offset_a1 = 0
95342 : DO ia = 1, nl_a
95343 : s_offset_b1 = 0
95344 : DO ib = 1, nl_b
95345 : s_offset_c1 = 0
95346 : DO ic = 1, nl_c
95347 : s_offset_d1 = 0
95348 : DO id = 1, nl_d
95349 : buffer1 = 0.0_dp
95350 : imax = 10*1*15
95351 : kmax = 15
95352 : DO i = 1, imax
95353 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95354 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95355 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95356 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95358 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95359 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95361 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95362 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95363 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95364 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95365 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95366 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95367 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95368 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95369 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95372 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95373 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95374 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95375 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95378 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95381 : END DO
95382 : buffer2 = 0.0_dp
95383 : imax = 9*1*15
95384 : kmax = 10
95385 : DO i = 1, imax
95386 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95387 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95388 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95389 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95390 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95391 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95392 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95393 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95394 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95395 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95396 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95397 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95398 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95399 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95400 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95401 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95402 : END DO
95403 : buffer1 = 0.0_dp
95404 : imax = 9*7*15
95405 : kmax = 1
95406 : DO i = 1, imax
95407 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
95408 : END DO
95409 : imax = 9*7*1
95410 : kmax = 15
95411 : i = 0
95412 : DO i1 = 1, 1
95413 : DO i2 = 1, 7
95414 : DO i3 = 1, 9
95415 : i = i + 1
95416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95418 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
95419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95421 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
95422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
95423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
95424 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
95425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95427 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
95428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95430 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
95431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
95432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
95433 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
95434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
95435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
95436 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
95437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95439 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
95440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
95441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
95442 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
95443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
95445 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
95446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95448 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
95449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95451 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
95452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95454 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
95455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95457 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
95458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95460 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
95461 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
95462 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
95463 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
95464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
95465 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
95466 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
95467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95468 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95469 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
95470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
95471 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
95472 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
95473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95474 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95475 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
95476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95477 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95478 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
95479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
95480 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
95481 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
95482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95483 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
95484 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
95485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95486 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95487 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
95488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95489 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95490 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
95491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
95492 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
95493 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
95494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95495 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95496 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
95497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95498 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95499 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
95500 : END DO
95501 : END DO
95502 : END DO
95503 : s_offset_d1 = s_offset_d1 + 9
95504 : END DO
95505 : s_offset_c1 = s_offset_c1 + 1
95506 : END DO
95507 : s_offset_b1 = s_offset_b1 + 7
95508 : END DO
95509 : s_offset_a1 = s_offset_a1 + 9
95510 : END DO
95511 : END SUBROUTINE contract_gfsg
95512 : #endif
95513 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95514 : ! **************************************************************************************************
95515 : !> \brief ...
95516 : !> \param work ...
95517 : !> \param nl_a ...
95518 : !> \param nl_b ...
95519 : !> \param nl_c ...
95520 : !> \param nl_d ...
95521 : !> \param sphi_a ...
95522 : !> \param sphi_b ...
95523 : !> \param sphi_c ...
95524 : !> \param sphi_d ...
95525 : !> \param primitives ...
95526 : !> \param buffer1 ...
95527 : !> \param buffer2 ...
95528 : ! **************************************************************************************************
95529 : SUBROUTINE contract_gfps(work, &
95530 : nl_a, nl_b, nl_c, nl_d, &
95531 : sphi_a, sphi_b, sphi_c, sphi_d, &
95532 : primitives, &
95533 : buffer1, buffer2)
95534 : REAL(dp), DIMENSION(15*10*3*1), INTENT(IN) :: work
95535 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95536 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95537 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95538 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
95539 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
95540 : REAL(dp), &
95541 : DIMENSION(9*nl_a, 7*nl_b, 3*nl_c, 1*nl_d) :: primitives
95542 : REAL(dp), DIMENSION(15*10*3*1) :: buffer1, buffer2
95543 :
95544 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95545 : kmax, s_offset_a1, s_offset_b1, &
95546 : s_offset_c1, s_offset_d1
95547 :
95548 : s_offset_a1 = 0
95549 : DO ia = 1, nl_a
95550 : s_offset_b1 = 0
95551 : DO ib = 1, nl_b
95552 : s_offset_c1 = 0
95553 : DO ic = 1, nl_c
95554 : s_offset_d1 = 0
95555 : DO id = 1, nl_d
95556 : buffer1 = 0.0_dp
95557 : imax = 10*3*1
95558 : kmax = 15
95559 : DO i = 1, imax
95560 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95561 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95562 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95563 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95564 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95565 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95566 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95567 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95568 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95569 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95570 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95571 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95572 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95573 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95574 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95575 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95576 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95577 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95578 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95579 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95580 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95581 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95582 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95583 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95584 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95585 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95586 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95587 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95588 : END DO
95589 : buffer2 = 0.0_dp
95590 : imax = 9*3*1
95591 : kmax = 10
95592 : DO i = 1, imax
95593 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95594 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95595 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95596 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95597 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95598 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95599 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95600 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95601 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95602 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95603 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95604 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95605 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95606 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95607 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95608 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95609 : END DO
95610 : buffer1 = 0.0_dp
95611 : imax = 9*7*1
95612 : kmax = 3
95613 : DO i = 1, imax
95614 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
95615 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
95616 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
95617 : END DO
95618 : imax = 9*7*3
95619 : kmax = 1
95620 : i = 0
95621 : DO i1 = 1, 3
95622 : DO i2 = 1, 7
95623 : DO i3 = 1, 9
95624 : i = i + 1
95625 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
95627 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
95628 : END DO
95629 : END DO
95630 : END DO
95631 : s_offset_d1 = s_offset_d1 + 1
95632 : END DO
95633 : s_offset_c1 = s_offset_c1 + 3
95634 : END DO
95635 : s_offset_b1 = s_offset_b1 + 7
95636 : END DO
95637 : s_offset_a1 = s_offset_a1 + 9
95638 : END DO
95639 : END SUBROUTINE contract_gfps
95640 : #endif
95641 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95642 : ! **************************************************************************************************
95643 : !> \brief ...
95644 : !> \param work ...
95645 : !> \param nl_a ...
95646 : !> \param nl_b ...
95647 : !> \param nl_c ...
95648 : !> \param nl_d ...
95649 : !> \param sphi_a ...
95650 : !> \param sphi_b ...
95651 : !> \param sphi_c ...
95652 : !> \param sphi_d ...
95653 : !> \param primitives ...
95654 : !> \param buffer1 ...
95655 : !> \param buffer2 ...
95656 : ! **************************************************************************************************
95657 : SUBROUTINE contract_gfpp(work, &
95658 : nl_a, nl_b, nl_c, nl_d, &
95659 : sphi_a, sphi_b, sphi_c, sphi_d, &
95660 : primitives, &
95661 : buffer1, buffer2)
95662 : REAL(dp), DIMENSION(15*10*3*3), INTENT(IN) :: work
95663 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95664 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95665 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95666 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
95667 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
95668 : REAL(dp), &
95669 : DIMENSION(9*nl_a, 7*nl_b, 3*nl_c, 3*nl_d) :: primitives
95670 : REAL(dp), DIMENSION(15*10*3*3) :: buffer1, buffer2
95671 :
95672 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95673 : kmax, s_offset_a1, s_offset_b1, &
95674 : s_offset_c1, s_offset_d1
95675 :
95676 : s_offset_a1 = 0
95677 : DO ia = 1, nl_a
95678 : s_offset_b1 = 0
95679 : DO ib = 1, nl_b
95680 : s_offset_c1 = 0
95681 : DO ic = 1, nl_c
95682 : s_offset_d1 = 0
95683 : DO id = 1, nl_d
95684 : buffer1 = 0.0_dp
95685 : imax = 10*3*3
95686 : kmax = 15
95687 : DO i = 1, imax
95688 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95689 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95690 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95691 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95692 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95693 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95694 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95695 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95696 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95697 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95698 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95699 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95700 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95701 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95702 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95703 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95704 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95705 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95706 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95707 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95708 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95709 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95710 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95711 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95712 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95713 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95714 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95715 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95716 : END DO
95717 : buffer2 = 0.0_dp
95718 : imax = 9*3*3
95719 : kmax = 10
95720 : DO i = 1, imax
95721 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95722 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95723 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95724 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95725 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95726 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95727 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95728 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95729 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95730 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95731 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95732 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95733 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95734 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95735 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95736 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95737 : END DO
95738 : buffer1 = 0.0_dp
95739 : imax = 9*7*3
95740 : kmax = 3
95741 : DO i = 1, imax
95742 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
95743 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
95744 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
95745 : END DO
95746 : imax = 9*7*3
95747 : kmax = 3
95748 : i = 0
95749 : DO i1 = 1, 3
95750 : DO i2 = 1, 7
95751 : DO i3 = 1, 9
95752 : i = i + 1
95753 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95754 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
95755 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
95756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
95758 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
95759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
95761 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
95762 : END DO
95763 : END DO
95764 : END DO
95765 : s_offset_d1 = s_offset_d1 + 3
95766 : END DO
95767 : s_offset_c1 = s_offset_c1 + 3
95768 : END DO
95769 : s_offset_b1 = s_offset_b1 + 7
95770 : END DO
95771 : s_offset_a1 = s_offset_a1 + 9
95772 : END DO
95773 : END SUBROUTINE contract_gfpp
95774 : #endif
95775 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95776 : ! **************************************************************************************************
95777 : !> \brief ...
95778 : !> \param work ...
95779 : !> \param nl_a ...
95780 : !> \param nl_b ...
95781 : !> \param nl_c ...
95782 : !> \param nl_d ...
95783 : !> \param sphi_a ...
95784 : !> \param sphi_b ...
95785 : !> \param sphi_c ...
95786 : !> \param sphi_d ...
95787 : !> \param primitives ...
95788 : !> \param buffer1 ...
95789 : !> \param buffer2 ...
95790 : ! **************************************************************************************************
95791 : SUBROUTINE contract_gfpd(work, &
95792 : nl_a, nl_b, nl_c, nl_d, &
95793 : sphi_a, sphi_b, sphi_c, sphi_d, &
95794 : primitives, &
95795 : buffer1, buffer2)
95796 : REAL(dp), DIMENSION(15*10*3*6), INTENT(IN) :: work
95797 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95798 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95799 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95800 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
95801 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
95802 : REAL(dp), &
95803 : DIMENSION(9*nl_a, 7*nl_b, 3*nl_c, 5*nl_d) :: primitives
95804 : REAL(dp), DIMENSION(15*10*3*6) :: buffer1, buffer2
95805 :
95806 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95807 : kmax, s_offset_a1, s_offset_b1, &
95808 : s_offset_c1, s_offset_d1
95809 :
95810 : s_offset_a1 = 0
95811 : DO ia = 1, nl_a
95812 : s_offset_b1 = 0
95813 : DO ib = 1, nl_b
95814 : s_offset_c1 = 0
95815 : DO ic = 1, nl_c
95816 : s_offset_d1 = 0
95817 : DO id = 1, nl_d
95818 : buffer1 = 0.0_dp
95819 : imax = 10*3*6
95820 : kmax = 15
95821 : DO i = 1, imax
95822 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95823 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95824 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95825 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95826 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95827 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95828 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95829 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95830 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95831 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95832 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95833 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95834 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95835 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95836 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95837 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95838 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95839 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95840 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95841 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95842 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95843 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95844 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95845 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95846 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95847 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95848 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95849 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95850 : END DO
95851 : buffer2 = 0.0_dp
95852 : imax = 9*3*6
95853 : kmax = 10
95854 : DO i = 1, imax
95855 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
95856 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
95857 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
95858 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
95859 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
95860 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
95861 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
95862 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
95863 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
95864 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
95865 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
95866 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
95867 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
95868 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
95869 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
95870 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
95871 : END DO
95872 : buffer1 = 0.0_dp
95873 : imax = 9*7*6
95874 : kmax = 3
95875 : DO i = 1, imax
95876 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
95877 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
95878 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
95879 : END DO
95880 : imax = 9*7*3
95881 : kmax = 6
95882 : i = 0
95883 : DO i1 = 1, 3
95884 : DO i2 = 1, 7
95885 : DO i3 = 1, 9
95886 : i = i + 1
95887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95889 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
95890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95892 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
95893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
95894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
95895 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
95896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
95897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
95898 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
95899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95901 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
95902 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
95903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
95904 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
95905 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
95906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
95907 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
95908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
95909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
95910 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
95911 : END DO
95912 : END DO
95913 : END DO
95914 : s_offset_d1 = s_offset_d1 + 5
95915 : END DO
95916 : s_offset_c1 = s_offset_c1 + 3
95917 : END DO
95918 : s_offset_b1 = s_offset_b1 + 7
95919 : END DO
95920 : s_offset_a1 = s_offset_a1 + 9
95921 : END DO
95922 : END SUBROUTINE contract_gfpd
95923 : #endif
95924 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
95925 : ! **************************************************************************************************
95926 : !> \brief ...
95927 : !> \param work ...
95928 : !> \param nl_a ...
95929 : !> \param nl_b ...
95930 : !> \param nl_c ...
95931 : !> \param nl_d ...
95932 : !> \param sphi_a ...
95933 : !> \param sphi_b ...
95934 : !> \param sphi_c ...
95935 : !> \param sphi_d ...
95936 : !> \param primitives ...
95937 : !> \param buffer1 ...
95938 : !> \param buffer2 ...
95939 : ! **************************************************************************************************
95940 : SUBROUTINE contract_gfpf(work, &
95941 : nl_a, nl_b, nl_c, nl_d, &
95942 : sphi_a, sphi_b, sphi_c, sphi_d, &
95943 : primitives, &
95944 : buffer1, buffer2)
95945 : REAL(dp), DIMENSION(15*10*3*10), INTENT(IN) :: work
95946 : INTEGER :: nl_a, nl_b, nl_c, nl_d
95947 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
95948 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
95949 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
95950 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
95951 : REAL(dp), &
95952 : DIMENSION(9*nl_a, 7*nl_b, 3*nl_c, 7*nl_d) :: primitives
95953 : REAL(dp), DIMENSION(15*10*3*10) :: buffer1, buffer2
95954 :
95955 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
95956 : kmax, s_offset_a1, s_offset_b1, &
95957 : s_offset_c1, s_offset_d1
95958 :
95959 : s_offset_a1 = 0
95960 : DO ia = 1, nl_a
95961 : s_offset_b1 = 0
95962 : DO ib = 1, nl_b
95963 : s_offset_c1 = 0
95964 : DO ic = 1, nl_c
95965 : s_offset_d1 = 0
95966 : DO id = 1, nl_d
95967 : buffer1 = 0.0_dp
95968 : imax = 10*3*10
95969 : kmax = 15
95970 : DO i = 1, imax
95971 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
95972 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
95973 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
95974 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
95975 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
95976 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
95977 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
95978 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
95979 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
95980 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
95981 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
95982 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
95983 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
95984 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
95985 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
95986 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
95987 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
95988 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
95989 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
95990 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
95991 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
95992 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
95993 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
95994 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
95995 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
95996 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
95997 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
95998 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
95999 : END DO
96000 : buffer2 = 0.0_dp
96001 : imax = 9*3*10
96002 : kmax = 10
96003 : DO i = 1, imax
96004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96005 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96006 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96007 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96008 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96009 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96010 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96011 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96012 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96013 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96014 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96015 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96016 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96017 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96018 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96019 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96020 : END DO
96021 : buffer1 = 0.0_dp
96022 : imax = 9*7*10
96023 : kmax = 3
96024 : DO i = 1, imax
96025 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96026 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96027 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
96028 : END DO
96029 : imax = 9*7*3
96030 : kmax = 10
96031 : i = 0
96032 : DO i1 = 1, 3
96033 : DO i2 = 1, 7
96034 : DO i3 = 1, 9
96035 : i = i + 1
96036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96038 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
96039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96041 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
96042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96044 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
96045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96047 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
96048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96050 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
96051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96053 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
96054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96056 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
96057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96059 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
96060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
96062 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
96063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96065 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
96066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96068 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
96069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96071 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
96072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96074 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
96075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96077 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
96078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96080 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
96081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96083 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
96084 : END DO
96085 : END DO
96086 : END DO
96087 : s_offset_d1 = s_offset_d1 + 7
96088 : END DO
96089 : s_offset_c1 = s_offset_c1 + 3
96090 : END DO
96091 : s_offset_b1 = s_offset_b1 + 7
96092 : END DO
96093 : s_offset_a1 = s_offset_a1 + 9
96094 : END DO
96095 : END SUBROUTINE contract_gfpf
96096 : #endif
96097 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96098 : ! **************************************************************************************************
96099 : !> \brief ...
96100 : !> \param work ...
96101 : !> \param nl_a ...
96102 : !> \param nl_b ...
96103 : !> \param nl_c ...
96104 : !> \param nl_d ...
96105 : !> \param sphi_a ...
96106 : !> \param sphi_b ...
96107 : !> \param sphi_c ...
96108 : !> \param sphi_d ...
96109 : !> \param primitives ...
96110 : !> \param buffer1 ...
96111 : !> \param buffer2 ...
96112 : ! **************************************************************************************************
96113 : SUBROUTINE contract_gfpg(work, &
96114 : nl_a, nl_b, nl_c, nl_d, &
96115 : sphi_a, sphi_b, sphi_c, sphi_d, &
96116 : primitives, &
96117 : buffer1, buffer2)
96118 : REAL(dp), DIMENSION(15*10*3*15), INTENT(IN) :: work
96119 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96120 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96121 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96122 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
96123 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
96124 : REAL(dp), &
96125 : DIMENSION(9*nl_a, 7*nl_b, 3*nl_c, 9*nl_d) :: primitives
96126 : REAL(dp), DIMENSION(15*10*3*15) :: buffer1, buffer2
96127 :
96128 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96129 : kmax, s_offset_a1, s_offset_b1, &
96130 : s_offset_c1, s_offset_d1
96131 :
96132 : s_offset_a1 = 0
96133 : DO ia = 1, nl_a
96134 : s_offset_b1 = 0
96135 : DO ib = 1, nl_b
96136 : s_offset_c1 = 0
96137 : DO ic = 1, nl_c
96138 : s_offset_d1 = 0
96139 : DO id = 1, nl_d
96140 : buffer1 = 0.0_dp
96141 : imax = 10*3*15
96142 : kmax = 15
96143 : DO i = 1, imax
96144 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96145 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96146 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96147 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96148 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96149 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96150 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96151 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96152 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96153 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96154 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96155 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96156 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96157 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96158 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96159 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96160 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96161 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96162 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96163 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96164 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96165 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96166 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96167 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96168 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96169 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96170 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96171 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96172 : END DO
96173 : buffer2 = 0.0_dp
96174 : imax = 9*3*15
96175 : kmax = 10
96176 : DO i = 1, imax
96177 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96178 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96179 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96180 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96181 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96182 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96183 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96184 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96185 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96186 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96187 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96188 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96189 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96190 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96191 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96192 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96193 : END DO
96194 : buffer1 = 0.0_dp
96195 : imax = 9*7*15
96196 : kmax = 3
96197 : DO i = 1, imax
96198 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96199 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96200 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
96201 : END DO
96202 : imax = 9*7*3
96203 : kmax = 15
96204 : i = 0
96205 : DO i1 = 1, 3
96206 : DO i2 = 1, 7
96207 : DO i3 = 1, 9
96208 : i = i + 1
96209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96210 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96211 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
96212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96213 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96214 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
96215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
96216 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
96217 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
96218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96219 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96220 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
96221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96222 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96223 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
96224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96225 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96226 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
96227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
96228 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
96229 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
96230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96231 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96232 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
96233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
96234 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
96235 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
96236 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96237 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
96238 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
96239 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96240 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96241 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
96242 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96243 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96244 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
96245 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96246 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96247 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
96248 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96250 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
96251 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96252 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96253 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
96254 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96255 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96256 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
96257 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
96258 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
96259 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
96260 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96261 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96262 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
96263 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96264 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96265 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
96266 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96267 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96268 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
96269 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96270 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96271 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
96272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
96273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
96274 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
96275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
96277 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
96278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96280 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
96281 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96283 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
96284 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96286 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
96287 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96289 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
96290 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96292 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
96293 : END DO
96294 : END DO
96295 : END DO
96296 : s_offset_d1 = s_offset_d1 + 9
96297 : END DO
96298 : s_offset_c1 = s_offset_c1 + 3
96299 : END DO
96300 : s_offset_b1 = s_offset_b1 + 7
96301 : END DO
96302 : s_offset_a1 = s_offset_a1 + 9
96303 : END DO
96304 : END SUBROUTINE contract_gfpg
96305 : #endif
96306 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96307 : ! **************************************************************************************************
96308 : !> \brief ...
96309 : !> \param work ...
96310 : !> \param nl_a ...
96311 : !> \param nl_b ...
96312 : !> \param nl_c ...
96313 : !> \param nl_d ...
96314 : !> \param sphi_a ...
96315 : !> \param sphi_b ...
96316 : !> \param sphi_c ...
96317 : !> \param sphi_d ...
96318 : !> \param primitives ...
96319 : !> \param buffer1 ...
96320 : !> \param buffer2 ...
96321 : ! **************************************************************************************************
96322 : SUBROUTINE contract_gfds(work, &
96323 : nl_a, nl_b, nl_c, nl_d, &
96324 : sphi_a, sphi_b, sphi_c, sphi_d, &
96325 : primitives, &
96326 : buffer1, buffer2)
96327 : REAL(dp), DIMENSION(15*10*6*1), INTENT(IN) :: work
96328 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96329 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96330 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96331 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
96332 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
96333 : REAL(dp), &
96334 : DIMENSION(9*nl_a, 7*nl_b, 5*nl_c, 1*nl_d) :: primitives
96335 : REAL(dp), DIMENSION(15*10*6*1) :: buffer1, buffer2
96336 :
96337 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96338 : kmax, s_offset_a1, s_offset_b1, &
96339 : s_offset_c1, s_offset_d1
96340 :
96341 : s_offset_a1 = 0
96342 : DO ia = 1, nl_a
96343 : s_offset_b1 = 0
96344 : DO ib = 1, nl_b
96345 : s_offset_c1 = 0
96346 : DO ic = 1, nl_c
96347 : s_offset_d1 = 0
96348 : DO id = 1, nl_d
96349 : buffer1 = 0.0_dp
96350 : imax = 10*6*1
96351 : kmax = 15
96352 : DO i = 1, imax
96353 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96354 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96355 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96356 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96357 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96358 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96359 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96361 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96362 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96363 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96364 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96365 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96366 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96367 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96368 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96369 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96370 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96372 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96373 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96374 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96375 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96376 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96377 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96378 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96379 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96380 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96381 : END DO
96382 : buffer2 = 0.0_dp
96383 : imax = 9*6*1
96384 : kmax = 10
96385 : DO i = 1, imax
96386 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96387 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96388 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96389 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96390 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96391 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96392 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96393 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96394 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96395 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96396 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96397 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96398 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96399 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96400 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96401 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96402 : END DO
96403 : buffer1 = 0.0_dp
96404 : imax = 9*7*1
96405 : kmax = 6
96406 : DO i = 1, imax
96407 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96408 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
96409 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96410 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
96411 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
96412 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
96413 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
96414 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
96415 : END DO
96416 : imax = 9*7*5
96417 : kmax = 1
96418 : i = 0
96419 : DO i1 = 1, 5
96420 : DO i2 = 1, 7
96421 : DO i3 = 1, 9
96422 : i = i + 1
96423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96424 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
96425 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
96426 : END DO
96427 : END DO
96428 : END DO
96429 : s_offset_d1 = s_offset_d1 + 1
96430 : END DO
96431 : s_offset_c1 = s_offset_c1 + 5
96432 : END DO
96433 : s_offset_b1 = s_offset_b1 + 7
96434 : END DO
96435 : s_offset_a1 = s_offset_a1 + 9
96436 : END DO
96437 : END SUBROUTINE contract_gfds
96438 : #endif
96439 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96440 : ! **************************************************************************************************
96441 : !> \brief ...
96442 : !> \param work ...
96443 : !> \param nl_a ...
96444 : !> \param nl_b ...
96445 : !> \param nl_c ...
96446 : !> \param nl_d ...
96447 : !> \param sphi_a ...
96448 : !> \param sphi_b ...
96449 : !> \param sphi_c ...
96450 : !> \param sphi_d ...
96451 : !> \param primitives ...
96452 : !> \param buffer1 ...
96453 : !> \param buffer2 ...
96454 : ! **************************************************************************************************
96455 : SUBROUTINE contract_gfdp(work, &
96456 : nl_a, nl_b, nl_c, nl_d, &
96457 : sphi_a, sphi_b, sphi_c, sphi_d, &
96458 : primitives, &
96459 : buffer1, buffer2)
96460 : REAL(dp), DIMENSION(15*10*6*3), INTENT(IN) :: work
96461 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96462 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96463 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96464 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
96465 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
96466 : REAL(dp), &
96467 : DIMENSION(9*nl_a, 7*nl_b, 5*nl_c, 3*nl_d) :: primitives
96468 : REAL(dp), DIMENSION(15*10*6*3) :: buffer1, buffer2
96469 :
96470 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96471 : kmax, s_offset_a1, s_offset_b1, &
96472 : s_offset_c1, s_offset_d1
96473 :
96474 : s_offset_a1 = 0
96475 : DO ia = 1, nl_a
96476 : s_offset_b1 = 0
96477 : DO ib = 1, nl_b
96478 : s_offset_c1 = 0
96479 : DO ic = 1, nl_c
96480 : s_offset_d1 = 0
96481 : DO id = 1, nl_d
96482 : buffer1 = 0.0_dp
96483 : imax = 10*6*3
96484 : kmax = 15
96485 : DO i = 1, imax
96486 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96487 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96488 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96489 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96490 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96491 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96492 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96493 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96494 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96495 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96496 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96497 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96498 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96499 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96500 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96501 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96502 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96503 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96504 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96506 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96507 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96508 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96509 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96510 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96511 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96512 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96513 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96514 : END DO
96515 : buffer2 = 0.0_dp
96516 : imax = 9*6*3
96517 : kmax = 10
96518 : DO i = 1, imax
96519 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96520 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96521 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96522 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96523 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96524 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96525 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96526 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96527 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96528 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96529 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96530 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96531 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96532 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96533 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96534 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96535 : END DO
96536 : buffer1 = 0.0_dp
96537 : imax = 9*7*3
96538 : kmax = 6
96539 : DO i = 1, imax
96540 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96541 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
96542 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96543 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
96544 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
96545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
96546 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
96547 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
96548 : END DO
96549 : imax = 9*7*5
96550 : kmax = 3
96551 : i = 0
96552 : DO i1 = 1, 5
96553 : DO i2 = 1, 7
96554 : DO i3 = 1, 9
96555 : i = i + 1
96556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
96558 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
96559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
96561 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
96562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
96564 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
96565 : END DO
96566 : END DO
96567 : END DO
96568 : s_offset_d1 = s_offset_d1 + 3
96569 : END DO
96570 : s_offset_c1 = s_offset_c1 + 5
96571 : END DO
96572 : s_offset_b1 = s_offset_b1 + 7
96573 : END DO
96574 : s_offset_a1 = s_offset_a1 + 9
96575 : END DO
96576 : END SUBROUTINE contract_gfdp
96577 : #endif
96578 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96579 : ! **************************************************************************************************
96580 : !> \brief ...
96581 : !> \param work ...
96582 : !> \param nl_a ...
96583 : !> \param nl_b ...
96584 : !> \param nl_c ...
96585 : !> \param nl_d ...
96586 : !> \param sphi_a ...
96587 : !> \param sphi_b ...
96588 : !> \param sphi_c ...
96589 : !> \param sphi_d ...
96590 : !> \param primitives ...
96591 : !> \param buffer1 ...
96592 : !> \param buffer2 ...
96593 : ! **************************************************************************************************
96594 : SUBROUTINE contract_gfdd(work, &
96595 : nl_a, nl_b, nl_c, nl_d, &
96596 : sphi_a, sphi_b, sphi_c, sphi_d, &
96597 : primitives, &
96598 : buffer1, buffer2)
96599 : REAL(dp), DIMENSION(15*10*6*6), INTENT(IN) :: work
96600 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96601 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96602 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96603 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
96604 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
96605 : REAL(dp), &
96606 : DIMENSION(9*nl_a, 7*nl_b, 5*nl_c, 5*nl_d) :: primitives
96607 : REAL(dp), DIMENSION(15*10*6*6) :: buffer1, buffer2
96608 :
96609 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96610 : kmax, s_offset_a1, s_offset_b1, &
96611 : s_offset_c1, s_offset_d1
96612 :
96613 : s_offset_a1 = 0
96614 : DO ia = 1, nl_a
96615 : s_offset_b1 = 0
96616 : DO ib = 1, nl_b
96617 : s_offset_c1 = 0
96618 : DO ic = 1, nl_c
96619 : s_offset_d1 = 0
96620 : DO id = 1, nl_d
96621 : buffer1 = 0.0_dp
96622 : imax = 10*6*6
96623 : kmax = 15
96624 : DO i = 1, imax
96625 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96626 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96627 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96628 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96629 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96630 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96631 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96632 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96633 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96634 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96635 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96636 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96637 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96638 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96639 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96640 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96641 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96642 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96643 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96644 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96645 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96646 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96647 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96648 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96649 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96650 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96651 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96652 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96653 : END DO
96654 : buffer2 = 0.0_dp
96655 : imax = 9*6*6
96656 : kmax = 10
96657 : DO i = 1, imax
96658 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96659 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96660 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96661 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96662 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96663 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96664 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96665 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96666 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96667 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96668 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96669 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96670 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96671 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96672 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96673 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96674 : END DO
96675 : buffer1 = 0.0_dp
96676 : imax = 9*7*6
96677 : kmax = 6
96678 : DO i = 1, imax
96679 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96680 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
96681 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96682 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
96683 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
96684 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
96685 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
96686 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
96687 : END DO
96688 : imax = 9*7*5
96689 : kmax = 6
96690 : i = 0
96691 : DO i1 = 1, 5
96692 : DO i2 = 1, 7
96693 : DO i3 = 1, 9
96694 : i = i + 1
96695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96697 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
96698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96700 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
96701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96703 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
96704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96706 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
96707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96709 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
96710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96712 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
96713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
96715 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
96716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96718 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
96719 : END DO
96720 : END DO
96721 : END DO
96722 : s_offset_d1 = s_offset_d1 + 5
96723 : END DO
96724 : s_offset_c1 = s_offset_c1 + 5
96725 : END DO
96726 : s_offset_b1 = s_offset_b1 + 7
96727 : END DO
96728 : s_offset_a1 = s_offset_a1 + 9
96729 : END DO
96730 : END SUBROUTINE contract_gfdd
96731 : #endif
96732 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96733 : ! **************************************************************************************************
96734 : !> \brief ...
96735 : !> \param work ...
96736 : !> \param nl_a ...
96737 : !> \param nl_b ...
96738 : !> \param nl_c ...
96739 : !> \param nl_d ...
96740 : !> \param sphi_a ...
96741 : !> \param sphi_b ...
96742 : !> \param sphi_c ...
96743 : !> \param sphi_d ...
96744 : !> \param primitives ...
96745 : !> \param buffer1 ...
96746 : !> \param buffer2 ...
96747 : ! **************************************************************************************************
96748 : SUBROUTINE contract_gfdf(work, &
96749 : nl_a, nl_b, nl_c, nl_d, &
96750 : sphi_a, sphi_b, sphi_c, sphi_d, &
96751 : primitives, &
96752 : buffer1, buffer2)
96753 : REAL(dp), DIMENSION(15*10*6*10), INTENT(IN) :: work
96754 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96755 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96756 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96757 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
96758 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
96759 : REAL(dp), &
96760 : DIMENSION(9*nl_a, 7*nl_b, 5*nl_c, 7*nl_d) :: primitives
96761 : REAL(dp), DIMENSION(15*10*6*10) :: buffer1, buffer2
96762 :
96763 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96764 : kmax, s_offset_a1, s_offset_b1, &
96765 : s_offset_c1, s_offset_d1
96766 :
96767 : s_offset_a1 = 0
96768 : DO ia = 1, nl_a
96769 : s_offset_b1 = 0
96770 : DO ib = 1, nl_b
96771 : s_offset_c1 = 0
96772 : DO ic = 1, nl_c
96773 : s_offset_d1 = 0
96774 : DO id = 1, nl_d
96775 : buffer1 = 0.0_dp
96776 : imax = 10*6*10
96777 : kmax = 15
96778 : DO i = 1, imax
96779 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96780 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96781 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96782 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96783 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96784 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96785 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96787 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96788 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96789 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96790 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96791 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96792 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96793 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96794 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96795 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96796 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96797 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96798 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96799 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96800 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96801 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96802 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96803 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96804 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96805 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96806 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96807 : END DO
96808 : buffer2 = 0.0_dp
96809 : imax = 9*6*10
96810 : kmax = 10
96811 : DO i = 1, imax
96812 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96813 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96814 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96815 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96816 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96817 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96818 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96819 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96820 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96821 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
96822 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
96823 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
96824 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
96825 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
96826 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
96827 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
96828 : END DO
96829 : buffer1 = 0.0_dp
96830 : imax = 9*7*10
96831 : kmax = 6
96832 : DO i = 1, imax
96833 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
96834 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
96835 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
96836 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
96837 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
96838 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
96839 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
96840 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
96841 : END DO
96842 : imax = 9*7*5
96843 : kmax = 10
96844 : i = 0
96845 : DO i1 = 1, 5
96846 : DO i2 = 1, 7
96847 : DO i3 = 1, 9
96848 : i = i + 1
96849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96850 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96851 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
96852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96853 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96854 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
96855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96856 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96857 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
96858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96859 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96860 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
96861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96862 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96863 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
96864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96865 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96866 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
96867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96869 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
96870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
96871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
96872 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
96873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
96874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
96875 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
96876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
96877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
96878 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
96879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
96880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
96881 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
96882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96884 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
96885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96887 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
96888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
96889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
96890 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
96891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
96892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
96893 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
96894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
96895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
96896 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
96897 : END DO
96898 : END DO
96899 : END DO
96900 : s_offset_d1 = s_offset_d1 + 7
96901 : END DO
96902 : s_offset_c1 = s_offset_c1 + 5
96903 : END DO
96904 : s_offset_b1 = s_offset_b1 + 7
96905 : END DO
96906 : s_offset_a1 = s_offset_a1 + 9
96907 : END DO
96908 : END SUBROUTINE contract_gfdf
96909 : #endif
96910 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
96911 : ! **************************************************************************************************
96912 : !> \brief ...
96913 : !> \param work ...
96914 : !> \param nl_a ...
96915 : !> \param nl_b ...
96916 : !> \param nl_c ...
96917 : !> \param nl_d ...
96918 : !> \param sphi_a ...
96919 : !> \param sphi_b ...
96920 : !> \param sphi_c ...
96921 : !> \param sphi_d ...
96922 : !> \param primitives ...
96923 : !> \param buffer1 ...
96924 : !> \param buffer2 ...
96925 : ! **************************************************************************************************
96926 : SUBROUTINE contract_gfdg(work, &
96927 : nl_a, nl_b, nl_c, nl_d, &
96928 : sphi_a, sphi_b, sphi_c, sphi_d, &
96929 : primitives, &
96930 : buffer1, buffer2)
96931 : REAL(dp), DIMENSION(15*10*6*15), INTENT(IN) :: work
96932 : INTEGER :: nl_a, nl_b, nl_c, nl_d
96933 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
96934 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
96935 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
96936 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
96937 : REAL(dp), &
96938 : DIMENSION(9*nl_a, 7*nl_b, 5*nl_c, 9*nl_d) :: primitives
96939 : REAL(dp), DIMENSION(15*10*6*15) :: buffer1, buffer2
96940 :
96941 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
96942 : kmax, s_offset_a1, s_offset_b1, &
96943 : s_offset_c1, s_offset_d1
96944 :
96945 : s_offset_a1 = 0
96946 : DO ia = 1, nl_a
96947 : s_offset_b1 = 0
96948 : DO ib = 1, nl_b
96949 : s_offset_c1 = 0
96950 : DO ic = 1, nl_c
96951 : s_offset_d1 = 0
96952 : DO id = 1, nl_d
96953 : buffer1 = 0.0_dp
96954 : imax = 10*6*15
96955 : kmax = 15
96956 : DO i = 1, imax
96957 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
96958 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
96959 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
96960 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
96961 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
96962 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
96963 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
96964 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
96965 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
96966 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
96967 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
96968 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
96969 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
96970 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
96971 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
96972 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
96973 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
96974 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
96975 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
96976 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
96977 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
96978 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
96979 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
96980 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
96981 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
96982 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
96983 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
96984 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
96985 : END DO
96986 : buffer2 = 0.0_dp
96987 : imax = 9*6*15
96988 : kmax = 10
96989 : DO i = 1, imax
96990 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
96991 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
96992 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
96993 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
96994 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
96995 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
96996 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
96997 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
96998 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
96999 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97000 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97001 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97002 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97003 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97004 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97005 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97006 : END DO
97007 : buffer1 = 0.0_dp
97008 : imax = 9*7*15
97009 : kmax = 6
97010 : DO i = 1, imax
97011 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
97012 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97013 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97014 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97015 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
97016 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97017 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97018 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
97019 : END DO
97020 : imax = 9*7*5
97021 : kmax = 15
97022 : i = 0
97023 : DO i1 = 1, 5
97024 : DO i2 = 1, 7
97025 : DO i3 = 1, 9
97026 : i = i + 1
97027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97029 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
97030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97032 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
97033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97035 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
97036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97038 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
97039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97041 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
97042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97044 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
97045 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
97046 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
97047 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
97048 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97049 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97050 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
97051 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97052 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97053 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
97054 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97055 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97056 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
97057 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97058 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97059 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
97060 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97061 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97062 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
97063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97065 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
97066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97068 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
97069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97071 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
97072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97074 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
97075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
97076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
97077 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
97078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97080 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
97081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97083 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
97084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97086 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
97087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97089 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
97090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97092 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
97093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97095 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
97096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97098 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
97099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97101 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
97102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97104 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
97105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97107 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
97108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97110 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
97111 : END DO
97112 : END DO
97113 : END DO
97114 : s_offset_d1 = s_offset_d1 + 9
97115 : END DO
97116 : s_offset_c1 = s_offset_c1 + 5
97117 : END DO
97118 : s_offset_b1 = s_offset_b1 + 7
97119 : END DO
97120 : s_offset_a1 = s_offset_a1 + 9
97121 : END DO
97122 : END SUBROUTINE contract_gfdg
97123 : #endif
97124 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97125 : ! **************************************************************************************************
97126 : !> \brief ...
97127 : !> \param work ...
97128 : !> \param nl_a ...
97129 : !> \param nl_b ...
97130 : !> \param nl_c ...
97131 : !> \param nl_d ...
97132 : !> \param sphi_a ...
97133 : !> \param sphi_b ...
97134 : !> \param sphi_c ...
97135 : !> \param sphi_d ...
97136 : !> \param primitives ...
97137 : !> \param buffer1 ...
97138 : !> \param buffer2 ...
97139 : ! **************************************************************************************************
97140 : SUBROUTINE contract_gffs(work, &
97141 : nl_a, nl_b, nl_c, nl_d, &
97142 : sphi_a, sphi_b, sphi_c, sphi_d, &
97143 : primitives, &
97144 : buffer1, buffer2)
97145 : REAL(dp), DIMENSION(15*10*10*1), INTENT(IN) :: work
97146 : INTEGER :: nl_a, nl_b, nl_c, nl_d
97147 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
97148 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
97149 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
97150 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
97151 : REAL(dp), &
97152 : DIMENSION(9*nl_a, 7*nl_b, 7*nl_c, 1*nl_d) :: primitives
97153 : REAL(dp), DIMENSION(15*10*10*1) :: buffer1, buffer2
97154 :
97155 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
97156 : kmax, s_offset_a1, s_offset_b1, &
97157 : s_offset_c1, s_offset_d1
97158 :
97159 : s_offset_a1 = 0
97160 : DO ia = 1, nl_a
97161 : s_offset_b1 = 0
97162 : DO ib = 1, nl_b
97163 : s_offset_c1 = 0
97164 : DO ic = 1, nl_c
97165 : s_offset_d1 = 0
97166 : DO id = 1, nl_d
97167 : buffer1 = 0.0_dp
97168 : imax = 10*10*1
97169 : kmax = 15
97170 : DO i = 1, imax
97171 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
97172 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
97173 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
97174 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
97175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
97176 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
97177 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
97178 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
97179 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
97180 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
97181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
97182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
97183 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
97184 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
97185 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
97186 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
97187 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
97188 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
97189 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
97190 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
97191 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
97192 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
97193 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
97194 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
97195 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
97196 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
97197 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
97198 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
97199 : END DO
97200 : buffer2 = 0.0_dp
97201 : imax = 9*10*1
97202 : kmax = 10
97203 : DO i = 1, imax
97204 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
97205 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
97206 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
97207 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
97208 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
97209 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
97210 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
97211 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
97212 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
97213 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97214 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97215 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97216 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97217 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97218 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97219 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97220 : END DO
97221 : buffer1 = 0.0_dp
97222 : imax = 9*7*1
97223 : kmax = 10
97224 : DO i = 1, imax
97225 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97226 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
97227 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97228 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
97229 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97230 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
97231 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97232 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
97233 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97234 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
97235 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
97236 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
97237 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
97238 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
97239 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
97240 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
97241 : END DO
97242 : imax = 9*7*7
97243 : kmax = 1
97244 : i = 0
97245 : DO i1 = 1, 7
97246 : DO i2 = 1, 7
97247 : DO i3 = 1, 9
97248 : i = i + 1
97249 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97250 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
97251 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
97252 : END DO
97253 : END DO
97254 : END DO
97255 : s_offset_d1 = s_offset_d1 + 1
97256 : END DO
97257 : s_offset_c1 = s_offset_c1 + 7
97258 : END DO
97259 : s_offset_b1 = s_offset_b1 + 7
97260 : END DO
97261 : s_offset_a1 = s_offset_a1 + 9
97262 : END DO
97263 : END SUBROUTINE contract_gffs
97264 : #endif
97265 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97266 : ! **************************************************************************************************
97267 : !> \brief ...
97268 : !> \param work ...
97269 : !> \param nl_a ...
97270 : !> \param nl_b ...
97271 : !> \param nl_c ...
97272 : !> \param nl_d ...
97273 : !> \param sphi_a ...
97274 : !> \param sphi_b ...
97275 : !> \param sphi_c ...
97276 : !> \param sphi_d ...
97277 : !> \param primitives ...
97278 : !> \param buffer1 ...
97279 : !> \param buffer2 ...
97280 : ! **************************************************************************************************
97281 : SUBROUTINE contract_gffp(work, &
97282 : nl_a, nl_b, nl_c, nl_d, &
97283 : sphi_a, sphi_b, sphi_c, sphi_d, &
97284 : primitives, &
97285 : buffer1, buffer2)
97286 : REAL(dp), DIMENSION(15*10*10*3), INTENT(IN) :: work
97287 : INTEGER :: nl_a, nl_b, nl_c, nl_d
97288 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
97289 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
97290 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
97291 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
97292 : REAL(dp), &
97293 : DIMENSION(9*nl_a, 7*nl_b, 7*nl_c, 3*nl_d) :: primitives
97294 : REAL(dp), DIMENSION(15*10*10*3) :: buffer1, buffer2
97295 :
97296 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
97297 : kmax, s_offset_a1, s_offset_b1, &
97298 : s_offset_c1, s_offset_d1
97299 :
97300 : s_offset_a1 = 0
97301 : DO ia = 1, nl_a
97302 : s_offset_b1 = 0
97303 : DO ib = 1, nl_b
97304 : s_offset_c1 = 0
97305 : DO ic = 1, nl_c
97306 : s_offset_d1 = 0
97307 : DO id = 1, nl_d
97308 : buffer1 = 0.0_dp
97309 : imax = 10*10*3
97310 : kmax = 15
97311 : DO i = 1, imax
97312 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
97313 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
97314 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
97315 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
97316 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
97317 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
97318 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
97319 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
97320 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
97321 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
97322 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
97323 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
97324 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
97325 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
97326 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
97327 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
97328 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
97329 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
97330 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
97331 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
97332 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
97333 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
97334 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
97335 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
97336 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
97337 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
97338 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
97339 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
97340 : END DO
97341 : buffer2 = 0.0_dp
97342 : imax = 9*10*3
97343 : kmax = 10
97344 : DO i = 1, imax
97345 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
97346 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
97347 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
97348 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
97349 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
97350 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
97351 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
97352 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
97353 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
97354 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97355 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97356 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97357 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97358 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97359 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97360 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97361 : END DO
97362 : buffer1 = 0.0_dp
97363 : imax = 9*7*3
97364 : kmax = 10
97365 : DO i = 1, imax
97366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97367 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
97368 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97369 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
97370 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97371 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
97372 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97373 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
97374 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97375 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
97376 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
97377 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
97378 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
97379 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
97380 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
97381 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
97382 : END DO
97383 : imax = 9*7*7
97384 : kmax = 3
97385 : i = 0
97386 : DO i1 = 1, 7
97387 : DO i2 = 1, 7
97388 : DO i3 = 1, 9
97389 : i = i + 1
97390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97391 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
97392 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
97393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97394 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
97395 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
97396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97397 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
97398 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
97399 : END DO
97400 : END DO
97401 : END DO
97402 : s_offset_d1 = s_offset_d1 + 3
97403 : END DO
97404 : s_offset_c1 = s_offset_c1 + 7
97405 : END DO
97406 : s_offset_b1 = s_offset_b1 + 7
97407 : END DO
97408 : s_offset_a1 = s_offset_a1 + 9
97409 : END DO
97410 : END SUBROUTINE contract_gffp
97411 : #endif
97412 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97413 : ! **************************************************************************************************
97414 : !> \brief ...
97415 : !> \param work ...
97416 : !> \param nl_a ...
97417 : !> \param nl_b ...
97418 : !> \param nl_c ...
97419 : !> \param nl_d ...
97420 : !> \param sphi_a ...
97421 : !> \param sphi_b ...
97422 : !> \param sphi_c ...
97423 : !> \param sphi_d ...
97424 : !> \param primitives ...
97425 : !> \param buffer1 ...
97426 : !> \param buffer2 ...
97427 : ! **************************************************************************************************
97428 : SUBROUTINE contract_gffd(work, &
97429 : nl_a, nl_b, nl_c, nl_d, &
97430 : sphi_a, sphi_b, sphi_c, sphi_d, &
97431 : primitives, &
97432 : buffer1, buffer2)
97433 : REAL(dp), DIMENSION(15*10*10*6), INTENT(IN) :: work
97434 : INTEGER :: nl_a, nl_b, nl_c, nl_d
97435 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
97436 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
97437 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
97438 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
97439 : REAL(dp), &
97440 : DIMENSION(9*nl_a, 7*nl_b, 7*nl_c, 5*nl_d) :: primitives
97441 : REAL(dp), DIMENSION(15*10*10*6) :: buffer1, buffer2
97442 :
97443 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
97444 : kmax, s_offset_a1, s_offset_b1, &
97445 : s_offset_c1, s_offset_d1
97446 :
97447 : s_offset_a1 = 0
97448 : DO ia = 1, nl_a
97449 : s_offset_b1 = 0
97450 : DO ib = 1, nl_b
97451 : s_offset_c1 = 0
97452 : DO ic = 1, nl_c
97453 : s_offset_d1 = 0
97454 : DO id = 1, nl_d
97455 : buffer1 = 0.0_dp
97456 : imax = 10*10*6
97457 : kmax = 15
97458 : DO i = 1, imax
97459 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
97460 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
97461 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
97462 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
97463 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
97464 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
97465 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
97466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
97467 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
97468 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
97469 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
97470 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
97471 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
97472 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
97473 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
97474 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
97475 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
97476 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
97477 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
97478 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
97479 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
97480 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
97481 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
97482 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
97483 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
97484 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
97485 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
97486 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
97487 : END DO
97488 : buffer2 = 0.0_dp
97489 : imax = 9*10*6
97490 : kmax = 10
97491 : DO i = 1, imax
97492 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
97493 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
97494 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
97495 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
97496 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
97497 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
97498 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
97499 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
97500 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
97501 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97502 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97503 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97504 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97505 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97506 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97507 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97508 : END DO
97509 : buffer1 = 0.0_dp
97510 : imax = 9*7*6
97511 : kmax = 10
97512 : DO i = 1, imax
97513 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97514 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
97515 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97516 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
97517 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97518 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
97519 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97520 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
97521 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97522 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
97523 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
97524 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
97525 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
97526 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
97527 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
97528 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
97529 : END DO
97530 : imax = 9*7*7
97531 : kmax = 6
97532 : i = 0
97533 : DO i1 = 1, 7
97534 : DO i2 = 1, 7
97535 : DO i3 = 1, 9
97536 : i = i + 1
97537 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97539 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
97540 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97542 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
97543 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97545 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
97546 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97548 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
97549 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97551 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
97552 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97554 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
97555 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97557 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
97558 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97560 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
97561 : END DO
97562 : END DO
97563 : END DO
97564 : s_offset_d1 = s_offset_d1 + 5
97565 : END DO
97566 : s_offset_c1 = s_offset_c1 + 7
97567 : END DO
97568 : s_offset_b1 = s_offset_b1 + 7
97569 : END DO
97570 : s_offset_a1 = s_offset_a1 + 9
97571 : END DO
97572 : END SUBROUTINE contract_gffd
97573 : #endif
97574 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97575 : ! **************************************************************************************************
97576 : !> \brief ...
97577 : !> \param work ...
97578 : !> \param nl_a ...
97579 : !> \param nl_b ...
97580 : !> \param nl_c ...
97581 : !> \param nl_d ...
97582 : !> \param sphi_a ...
97583 : !> \param sphi_b ...
97584 : !> \param sphi_c ...
97585 : !> \param sphi_d ...
97586 : !> \param primitives ...
97587 : !> \param buffer1 ...
97588 : !> \param buffer2 ...
97589 : ! **************************************************************************************************
97590 : SUBROUTINE contract_gfff(work, &
97591 : nl_a, nl_b, nl_c, nl_d, &
97592 : sphi_a, sphi_b, sphi_c, sphi_d, &
97593 : primitives, &
97594 : buffer1, buffer2)
97595 : REAL(dp), DIMENSION(15*10*10*10), INTENT(IN) :: work
97596 : INTEGER :: nl_a, nl_b, nl_c, nl_d
97597 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
97598 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
97599 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
97600 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
97601 : REAL(dp), &
97602 : DIMENSION(9*nl_a, 7*nl_b, 7*nl_c, 7*nl_d) :: primitives
97603 : REAL(dp), DIMENSION(15*10*10*10) :: buffer1, buffer2
97604 :
97605 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
97606 : kmax, s_offset_a1, s_offset_b1, &
97607 : s_offset_c1, s_offset_d1
97608 :
97609 : s_offset_a1 = 0
97610 : DO ia = 1, nl_a
97611 : s_offset_b1 = 0
97612 : DO ib = 1, nl_b
97613 : s_offset_c1 = 0
97614 : DO ic = 1, nl_c
97615 : s_offset_d1 = 0
97616 : DO id = 1, nl_d
97617 : buffer1 = 0.0_dp
97618 : imax = 10*10*10
97619 : kmax = 15
97620 : DO i = 1, imax
97621 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
97622 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
97623 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
97624 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
97625 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
97626 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
97627 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
97628 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
97629 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
97630 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
97631 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
97632 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
97633 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
97634 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
97635 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
97636 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
97637 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
97638 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
97639 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
97640 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
97641 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
97642 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
97643 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
97644 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
97645 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
97646 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
97647 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
97648 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
97649 : END DO
97650 : buffer2 = 0.0_dp
97651 : imax = 9*10*10
97652 : kmax = 10
97653 : DO i = 1, imax
97654 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
97655 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
97656 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
97657 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
97658 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
97659 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
97660 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
97661 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
97662 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
97663 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97664 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97665 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97666 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97667 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97668 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97669 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97670 : END DO
97671 : buffer1 = 0.0_dp
97672 : imax = 9*7*10
97673 : kmax = 10
97674 : DO i = 1, imax
97675 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97676 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
97677 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
97679 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97680 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
97681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97682 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
97683 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97684 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
97685 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
97686 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
97687 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
97688 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
97689 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
97690 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
97691 : END DO
97692 : imax = 9*7*7
97693 : kmax = 10
97694 : i = 0
97695 : DO i1 = 1, 7
97696 : DO i2 = 1, 7
97697 : DO i3 = 1, 9
97698 : i = i + 1
97699 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97701 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
97702 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97704 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
97705 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97707 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
97708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97710 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
97711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97713 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
97714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97716 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
97717 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97719 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
97720 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97722 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
97723 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97725 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
97726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97728 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
97729 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97731 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
97732 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97734 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
97735 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97737 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
97738 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97740 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
97741 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97743 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
97744 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97746 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
97747 : END DO
97748 : END DO
97749 : END DO
97750 : s_offset_d1 = s_offset_d1 + 7
97751 : END DO
97752 : s_offset_c1 = s_offset_c1 + 7
97753 : END DO
97754 : s_offset_b1 = s_offset_b1 + 7
97755 : END DO
97756 : s_offset_a1 = s_offset_a1 + 9
97757 : END DO
97758 : END SUBROUTINE contract_gfff
97759 : #endif
97760 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97761 : ! **************************************************************************************************
97762 : !> \brief ...
97763 : !> \param work ...
97764 : !> \param nl_a ...
97765 : !> \param nl_b ...
97766 : !> \param nl_c ...
97767 : !> \param nl_d ...
97768 : !> \param sphi_a ...
97769 : !> \param sphi_b ...
97770 : !> \param sphi_c ...
97771 : !> \param sphi_d ...
97772 : !> \param primitives ...
97773 : !> \param buffer1 ...
97774 : !> \param buffer2 ...
97775 : ! **************************************************************************************************
97776 : SUBROUTINE contract_gffg(work, &
97777 : nl_a, nl_b, nl_c, nl_d, &
97778 : sphi_a, sphi_b, sphi_c, sphi_d, &
97779 : primitives, &
97780 : buffer1, buffer2)
97781 : REAL(dp), DIMENSION(15*10*10*15), INTENT(IN) :: work
97782 : INTEGER :: nl_a, nl_b, nl_c, nl_d
97783 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
97784 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
97785 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
97786 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
97787 : REAL(dp), &
97788 : DIMENSION(9*nl_a, 7*nl_b, 7*nl_c, 9*nl_d) :: primitives
97789 : REAL(dp), DIMENSION(15*10*10*15) :: buffer1, buffer2
97790 :
97791 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
97792 : kmax, s_offset_a1, s_offset_b1, &
97793 : s_offset_c1, s_offset_d1
97794 :
97795 : s_offset_a1 = 0
97796 : DO ia = 1, nl_a
97797 : s_offset_b1 = 0
97798 : DO ib = 1, nl_b
97799 : s_offset_c1 = 0
97800 : DO ic = 1, nl_c
97801 : s_offset_d1 = 0
97802 : DO id = 1, nl_d
97803 : buffer1 = 0.0_dp
97804 : imax = 10*10*15
97805 : kmax = 15
97806 : DO i = 1, imax
97807 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
97808 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
97809 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
97810 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
97811 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
97812 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
97813 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
97814 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
97815 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
97816 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
97817 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
97818 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
97819 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
97820 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
97821 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
97822 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
97823 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
97824 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
97825 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
97826 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
97827 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
97828 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
97829 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
97830 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
97831 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
97832 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
97833 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
97834 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
97835 : END DO
97836 : buffer2 = 0.0_dp
97837 : imax = 9*10*15
97838 : kmax = 10
97839 : DO i = 1, imax
97840 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
97841 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
97842 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
97843 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
97844 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
97845 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
97846 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
97847 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
97848 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
97849 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
97850 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
97851 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
97852 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
97853 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
97854 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
97855 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
97856 : END DO
97857 : buffer1 = 0.0_dp
97858 : imax = 9*7*15
97859 : kmax = 10
97860 : DO i = 1, imax
97861 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
97862 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
97863 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
97864 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
97865 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
97866 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
97867 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
97868 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
97869 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
97870 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
97871 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
97872 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
97873 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
97874 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
97875 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
97876 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
97877 : END DO
97878 : imax = 9*7*7
97879 : kmax = 15
97880 : i = 0
97881 : DO i1 = 1, 7
97882 : DO i2 = 1, 7
97883 : DO i3 = 1, 9
97884 : i = i + 1
97885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97887 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
97888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97890 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
97891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97893 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
97894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97896 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
97897 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97899 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
97900 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97901 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97902 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
97903 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
97904 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
97905 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
97906 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97908 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
97909 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97910 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97911 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
97912 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97913 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97914 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
97915 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97916 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97917 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
97918 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97919 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97920 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
97921 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97922 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97923 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
97924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
97925 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
97926 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
97927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97928 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97929 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
97930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97931 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97932 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
97933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
97934 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
97935 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
97936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
97937 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
97938 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
97939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
97940 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
97941 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
97942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97943 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97944 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
97945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97946 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97947 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
97948 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
97949 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
97950 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
97951 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
97952 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
97953 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
97954 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97955 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97956 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
97957 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97958 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97959 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
97960 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
97961 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
97962 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
97963 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
97964 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
97965 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
97966 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
97967 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
97968 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
97969 : END DO
97970 : END DO
97971 : END DO
97972 : s_offset_d1 = s_offset_d1 + 9
97973 : END DO
97974 : s_offset_c1 = s_offset_c1 + 7
97975 : END DO
97976 : s_offset_b1 = s_offset_b1 + 7
97977 : END DO
97978 : s_offset_a1 = s_offset_a1 + 9
97979 : END DO
97980 : END SUBROUTINE contract_gffg
97981 : #endif
97982 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
97983 : ! **************************************************************************************************
97984 : !> \brief ...
97985 : !> \param work ...
97986 : !> \param nl_a ...
97987 : !> \param nl_b ...
97988 : !> \param nl_c ...
97989 : !> \param nl_d ...
97990 : !> \param sphi_a ...
97991 : !> \param sphi_b ...
97992 : !> \param sphi_c ...
97993 : !> \param sphi_d ...
97994 : !> \param primitives ...
97995 : !> \param buffer1 ...
97996 : !> \param buffer2 ...
97997 : ! **************************************************************************************************
97998 : SUBROUTINE contract_gfgs(work, &
97999 : nl_a, nl_b, nl_c, nl_d, &
98000 : sphi_a, sphi_b, sphi_c, sphi_d, &
98001 : primitives, &
98002 : buffer1, buffer2)
98003 : REAL(dp), DIMENSION(15*10*15*1), INTENT(IN) :: work
98004 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98005 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98006 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
98007 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
98008 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
98009 : REAL(dp), &
98010 : DIMENSION(9*nl_a, 7*nl_b, 9*nl_c, 1*nl_d) :: primitives
98011 : REAL(dp), DIMENSION(15*10*15*1) :: buffer1, buffer2
98012 :
98013 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98014 : kmax, s_offset_a1, s_offset_b1, &
98015 : s_offset_c1, s_offset_d1
98016 :
98017 : s_offset_a1 = 0
98018 : DO ia = 1, nl_a
98019 : s_offset_b1 = 0
98020 : DO ib = 1, nl_b
98021 : s_offset_c1 = 0
98022 : DO ic = 1, nl_c
98023 : s_offset_d1 = 0
98024 : DO id = 1, nl_d
98025 : buffer1 = 0.0_dp
98026 : imax = 10*15*1
98027 : kmax = 15
98028 : DO i = 1, imax
98029 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98030 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98031 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98032 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98033 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98034 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98035 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98036 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98037 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98038 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98039 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98040 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98041 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98042 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98043 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98044 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98045 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98046 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98047 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98048 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98049 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98050 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98051 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98052 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98053 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98054 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98055 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98056 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98057 : END DO
98058 : buffer2 = 0.0_dp
98059 : imax = 9*15*1
98060 : kmax = 10
98061 : DO i = 1, imax
98062 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98063 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98064 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98065 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98066 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
98067 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98068 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98069 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
98070 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98071 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98072 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98073 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98074 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
98075 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98076 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98077 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
98078 : END DO
98079 : buffer1 = 0.0_dp
98080 : imax = 9*7*1
98081 : kmax = 15
98082 : DO i = 1, imax
98083 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
98084 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
98085 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
98086 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
98087 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
98088 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
98089 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
98090 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
98091 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
98092 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
98093 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
98094 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
98095 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
98096 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
98097 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
98098 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
98099 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
98100 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
98101 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
98102 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
98103 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
98104 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
98105 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
98106 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
98107 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
98108 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
98109 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
98110 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
98111 : END DO
98112 : imax = 9*7*9
98113 : kmax = 1
98114 : i = 0
98115 : DO i1 = 1, 9
98116 : DO i2 = 1, 7
98117 : DO i3 = 1, 9
98118 : i = i + 1
98119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98120 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
98121 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
98122 : END DO
98123 : END DO
98124 : END DO
98125 : s_offset_d1 = s_offset_d1 + 1
98126 : END DO
98127 : s_offset_c1 = s_offset_c1 + 9
98128 : END DO
98129 : s_offset_b1 = s_offset_b1 + 7
98130 : END DO
98131 : s_offset_a1 = s_offset_a1 + 9
98132 : END DO
98133 : END SUBROUTINE contract_gfgs
98134 : #endif
98135 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
98136 : ! **************************************************************************************************
98137 : !> \brief ...
98138 : !> \param work ...
98139 : !> \param nl_a ...
98140 : !> \param nl_b ...
98141 : !> \param nl_c ...
98142 : !> \param nl_d ...
98143 : !> \param sphi_a ...
98144 : !> \param sphi_b ...
98145 : !> \param sphi_c ...
98146 : !> \param sphi_d ...
98147 : !> \param primitives ...
98148 : !> \param buffer1 ...
98149 : !> \param buffer2 ...
98150 : ! **************************************************************************************************
98151 : SUBROUTINE contract_gfgp(work, &
98152 : nl_a, nl_b, nl_c, nl_d, &
98153 : sphi_a, sphi_b, sphi_c, sphi_d, &
98154 : primitives, &
98155 : buffer1, buffer2)
98156 : REAL(dp), DIMENSION(15*10*15*3), INTENT(IN) :: work
98157 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98158 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98159 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
98160 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
98161 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
98162 : REAL(dp), &
98163 : DIMENSION(9*nl_a, 7*nl_b, 9*nl_c, 3*nl_d) :: primitives
98164 : REAL(dp), DIMENSION(15*10*15*3) :: buffer1, buffer2
98165 :
98166 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98167 : kmax, s_offset_a1, s_offset_b1, &
98168 : s_offset_c1, s_offset_d1
98169 :
98170 : s_offset_a1 = 0
98171 : DO ia = 1, nl_a
98172 : s_offset_b1 = 0
98173 : DO ib = 1, nl_b
98174 : s_offset_c1 = 0
98175 : DO ic = 1, nl_c
98176 : s_offset_d1 = 0
98177 : DO id = 1, nl_d
98178 : buffer1 = 0.0_dp
98179 : imax = 10*15*3
98180 : kmax = 15
98181 : DO i = 1, imax
98182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98183 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98184 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98185 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98186 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98187 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98188 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98189 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98190 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98191 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98192 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98193 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98194 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98195 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98196 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98197 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98198 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98199 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98200 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98201 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98202 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98203 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98204 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98205 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98206 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98207 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98208 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98209 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98210 : END DO
98211 : buffer2 = 0.0_dp
98212 : imax = 9*15*3
98213 : kmax = 10
98214 : DO i = 1, imax
98215 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98216 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98217 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98218 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98219 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
98220 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98221 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98222 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
98223 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98224 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98225 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98226 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98227 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
98228 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98229 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98230 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
98231 : END DO
98232 : buffer1 = 0.0_dp
98233 : imax = 9*7*3
98234 : kmax = 15
98235 : DO i = 1, imax
98236 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
98237 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
98238 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
98239 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
98240 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
98241 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
98242 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
98243 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
98244 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
98245 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
98246 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
98247 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
98248 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
98249 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
98250 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
98251 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
98252 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
98253 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
98254 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
98255 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
98256 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
98257 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
98258 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
98259 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
98260 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
98261 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
98262 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
98263 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
98264 : END DO
98265 : imax = 9*7*9
98266 : kmax = 3
98267 : i = 0
98268 : DO i1 = 1, 9
98269 : DO i2 = 1, 7
98270 : DO i3 = 1, 9
98271 : i = i + 1
98272 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
98274 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
98275 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
98277 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
98278 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
98279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
98280 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
98281 : END DO
98282 : END DO
98283 : END DO
98284 : s_offset_d1 = s_offset_d1 + 3
98285 : END DO
98286 : s_offset_c1 = s_offset_c1 + 9
98287 : END DO
98288 : s_offset_b1 = s_offset_b1 + 7
98289 : END DO
98290 : s_offset_a1 = s_offset_a1 + 9
98291 : END DO
98292 : END SUBROUTINE contract_gfgp
98293 : #endif
98294 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
98295 : ! **************************************************************************************************
98296 : !> \brief ...
98297 : !> \param work ...
98298 : !> \param nl_a ...
98299 : !> \param nl_b ...
98300 : !> \param nl_c ...
98301 : !> \param nl_d ...
98302 : !> \param sphi_a ...
98303 : !> \param sphi_b ...
98304 : !> \param sphi_c ...
98305 : !> \param sphi_d ...
98306 : !> \param primitives ...
98307 : !> \param buffer1 ...
98308 : !> \param buffer2 ...
98309 : ! **************************************************************************************************
98310 : SUBROUTINE contract_gfgd(work, &
98311 : nl_a, nl_b, nl_c, nl_d, &
98312 : sphi_a, sphi_b, sphi_c, sphi_d, &
98313 : primitives, &
98314 : buffer1, buffer2)
98315 : REAL(dp), DIMENSION(15*10*15*6), INTENT(IN) :: work
98316 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98317 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98318 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
98319 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
98320 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
98321 : REAL(dp), &
98322 : DIMENSION(9*nl_a, 7*nl_b, 9*nl_c, 5*nl_d) :: primitives
98323 : REAL(dp), DIMENSION(15*10*15*6) :: buffer1, buffer2
98324 :
98325 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98326 : kmax, s_offset_a1, s_offset_b1, &
98327 : s_offset_c1, s_offset_d1
98328 :
98329 : s_offset_a1 = 0
98330 : DO ia = 1, nl_a
98331 : s_offset_b1 = 0
98332 : DO ib = 1, nl_b
98333 : s_offset_c1 = 0
98334 : DO ic = 1, nl_c
98335 : s_offset_d1 = 0
98336 : DO id = 1, nl_d
98337 : buffer1 = 0.0_dp
98338 : imax = 10*15*6
98339 : kmax = 15
98340 : DO i = 1, imax
98341 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98342 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98343 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98344 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98345 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98346 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98347 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98348 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98349 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98350 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98351 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98352 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98353 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98354 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98355 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98356 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98357 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98358 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98359 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98360 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98361 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98362 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98363 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98364 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98365 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98366 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98367 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98368 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98369 : END DO
98370 : buffer2 = 0.0_dp
98371 : imax = 9*15*6
98372 : kmax = 10
98373 : DO i = 1, imax
98374 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98375 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98376 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98377 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98378 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
98379 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98380 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98381 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
98382 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98383 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98384 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98385 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98386 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
98387 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98388 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98389 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
98390 : END DO
98391 : buffer1 = 0.0_dp
98392 : imax = 9*7*6
98393 : kmax = 15
98394 : DO i = 1, imax
98395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
98396 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
98397 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
98398 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
98399 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
98400 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
98401 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
98402 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
98403 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
98404 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
98405 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
98406 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
98407 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
98408 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
98409 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
98410 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
98411 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
98412 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
98413 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
98414 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
98415 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
98416 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
98417 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
98418 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
98419 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
98420 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
98421 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
98422 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
98423 : END DO
98424 : imax = 9*7*9
98425 : kmax = 6
98426 : i = 0
98427 : DO i1 = 1, 9
98428 : DO i2 = 1, 7
98429 : DO i3 = 1, 9
98430 : i = i + 1
98431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98433 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
98434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98436 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
98437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
98439 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
98440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98442 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
98443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98445 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
98446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98448 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
98449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
98450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
98451 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
98452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98454 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
98455 : END DO
98456 : END DO
98457 : END DO
98458 : s_offset_d1 = s_offset_d1 + 5
98459 : END DO
98460 : s_offset_c1 = s_offset_c1 + 9
98461 : END DO
98462 : s_offset_b1 = s_offset_b1 + 7
98463 : END DO
98464 : s_offset_a1 = s_offset_a1 + 9
98465 : END DO
98466 : END SUBROUTINE contract_gfgd
98467 : #endif
98468 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
98469 : ! **************************************************************************************************
98470 : !> \brief ...
98471 : !> \param work ...
98472 : !> \param nl_a ...
98473 : !> \param nl_b ...
98474 : !> \param nl_c ...
98475 : !> \param nl_d ...
98476 : !> \param sphi_a ...
98477 : !> \param sphi_b ...
98478 : !> \param sphi_c ...
98479 : !> \param sphi_d ...
98480 : !> \param primitives ...
98481 : !> \param buffer1 ...
98482 : !> \param buffer2 ...
98483 : ! **************************************************************************************************
98484 : SUBROUTINE contract_gfgf(work, &
98485 : nl_a, nl_b, nl_c, nl_d, &
98486 : sphi_a, sphi_b, sphi_c, sphi_d, &
98487 : primitives, &
98488 : buffer1, buffer2)
98489 : REAL(dp), DIMENSION(15*10*15*10), INTENT(IN) :: work
98490 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98491 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98492 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
98493 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
98494 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
98495 : REAL(dp), &
98496 : DIMENSION(9*nl_a, 7*nl_b, 9*nl_c, 7*nl_d) :: primitives
98497 : REAL(dp), DIMENSION(15*10*15*10) :: buffer1, buffer2
98498 :
98499 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98500 : kmax, s_offset_a1, s_offset_b1, &
98501 : s_offset_c1, s_offset_d1
98502 :
98503 : s_offset_a1 = 0
98504 : DO ia = 1, nl_a
98505 : s_offset_b1 = 0
98506 : DO ib = 1, nl_b
98507 : s_offset_c1 = 0
98508 : DO ic = 1, nl_c
98509 : s_offset_d1 = 0
98510 : DO id = 1, nl_d
98511 : buffer1 = 0.0_dp
98512 : imax = 10*15*10
98513 : kmax = 15
98514 : DO i = 1, imax
98515 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98516 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98517 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98518 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98519 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98520 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98521 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98522 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98523 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98524 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98525 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98526 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98527 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98528 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98529 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98530 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98531 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98532 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98533 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98534 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98535 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98536 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98537 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98538 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98539 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98540 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98541 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98542 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98543 : END DO
98544 : buffer2 = 0.0_dp
98545 : imax = 9*15*10
98546 : kmax = 10
98547 : DO i = 1, imax
98548 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98549 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98550 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98551 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98552 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
98553 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98554 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98555 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
98556 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98557 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98558 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98559 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98560 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
98561 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98562 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98563 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
98564 : END DO
98565 : buffer1 = 0.0_dp
98566 : imax = 9*7*10
98567 : kmax = 15
98568 : DO i = 1, imax
98569 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
98570 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
98571 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
98572 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
98573 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
98574 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
98575 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
98576 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
98577 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
98578 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
98579 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
98580 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
98581 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
98582 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
98583 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
98584 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
98585 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
98586 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
98587 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
98588 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
98589 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
98590 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
98591 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
98592 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
98593 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
98594 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
98595 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
98596 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
98597 : END DO
98598 : imax = 9*7*9
98599 : kmax = 10
98600 : i = 0
98601 : DO i1 = 1, 9
98602 : DO i2 = 1, 7
98603 : DO i3 = 1, 9
98604 : i = i + 1
98605 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98606 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98607 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
98608 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98609 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98610 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
98611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
98613 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
98614 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98615 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98616 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
98617 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98618 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98619 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
98620 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
98621 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
98622 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
98623 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98624 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98625 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
98626 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98627 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98628 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
98629 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
98630 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
98631 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
98632 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98633 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98634 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
98635 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98636 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
98637 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
98638 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98639 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98640 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
98641 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98642 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98643 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
98644 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
98645 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
98646 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
98647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98648 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98649 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
98650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98651 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98652 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
98653 : END DO
98654 : END DO
98655 : END DO
98656 : s_offset_d1 = s_offset_d1 + 7
98657 : END DO
98658 : s_offset_c1 = s_offset_c1 + 9
98659 : END DO
98660 : s_offset_b1 = s_offset_b1 + 7
98661 : END DO
98662 : s_offset_a1 = s_offset_a1 + 9
98663 : END DO
98664 : END SUBROUTINE contract_gfgf
98665 : #endif
98666 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
98667 : ! **************************************************************************************************
98668 : !> \brief ...
98669 : !> \param work ...
98670 : !> \param nl_a ...
98671 : !> \param nl_b ...
98672 : !> \param nl_c ...
98673 : !> \param nl_d ...
98674 : !> \param sphi_a ...
98675 : !> \param sphi_b ...
98676 : !> \param sphi_c ...
98677 : !> \param sphi_d ...
98678 : !> \param primitives ...
98679 : !> \param buffer1 ...
98680 : !> \param buffer2 ...
98681 : ! **************************************************************************************************
98682 : SUBROUTINE contract_gfgg(work, &
98683 : nl_a, nl_b, nl_c, nl_d, &
98684 : sphi_a, sphi_b, sphi_c, sphi_d, &
98685 : primitives, &
98686 : buffer1, buffer2)
98687 : REAL(dp), DIMENSION(15*10*15*15), INTENT(IN) :: work
98688 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98689 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98690 : REAL(dp), DIMENSION(10, 7*nl_b), INTENT(IN) :: sphi_b
98691 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
98692 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
98693 : REAL(dp), &
98694 : DIMENSION(9*nl_a, 7*nl_b, 9*nl_c, 9*nl_d) :: primitives
98695 : REAL(dp), DIMENSION(15*10*15*15) :: buffer1, buffer2
98696 :
98697 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98698 : kmax, s_offset_a1, s_offset_b1, &
98699 : s_offset_c1, s_offset_d1
98700 :
98701 : s_offset_a1 = 0
98702 : DO ia = 1, nl_a
98703 : s_offset_b1 = 0
98704 : DO ib = 1, nl_b
98705 : s_offset_c1 = 0
98706 : DO ic = 1, nl_c
98707 : s_offset_d1 = 0
98708 : DO id = 1, nl_d
98709 : buffer1 = 0.0_dp
98710 : imax = 10*15*15
98711 : kmax = 15
98712 : DO i = 1, imax
98713 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98714 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98715 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98716 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98717 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98718 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98719 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98720 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98721 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98722 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98723 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98724 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98725 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98726 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98727 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98728 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98729 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98730 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98731 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98732 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98733 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98734 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98735 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98736 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98737 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98738 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98739 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98740 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98741 : END DO
98742 : buffer2 = 0.0_dp
98743 : imax = 9*15*15
98744 : kmax = 10
98745 : DO i = 1, imax
98746 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98747 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98748 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98749 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98750 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
98751 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98752 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98753 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
98754 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98755 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98756 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98757 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98758 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
98759 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98760 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98761 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
98762 : END DO
98763 : buffer1 = 0.0_dp
98764 : imax = 9*7*15
98765 : kmax = 15
98766 : DO i = 1, imax
98767 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
98768 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
98769 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
98770 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
98771 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
98772 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
98773 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
98774 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
98775 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
98776 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
98777 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
98778 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
98779 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
98780 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
98781 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
98782 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
98783 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
98784 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
98785 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
98786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
98787 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
98788 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
98789 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
98790 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
98791 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
98792 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
98793 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
98794 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
98795 : END DO
98796 : imax = 9*7*9
98797 : kmax = 15
98798 : i = 0
98799 : DO i1 = 1, 9
98800 : DO i2 = 1, 7
98801 : DO i3 = 1, 9
98802 : i = i + 1
98803 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98804 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98805 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
98806 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98807 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98808 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
98809 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
98810 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
98811 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
98812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
98814 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
98815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98817 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
98818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
98819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
98820 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
98821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
98822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
98823 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
98824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98826 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
98827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
98828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
98829 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
98830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
98831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
98832 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
98833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98835 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
98836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98838 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
98839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98841 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
98842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
98843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
98844 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
98845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98847 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
98848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
98849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
98850 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
98851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
98852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
98853 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
98854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
98855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
98856 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
98857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
98858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
98859 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
98860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98862 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
98863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98865 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
98866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
98867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
98868 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
98869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
98870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
98871 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
98872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98874 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
98875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98877 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
98878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
98879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
98880 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
98881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
98882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
98883 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
98884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
98885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
98886 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
98887 : END DO
98888 : END DO
98889 : END DO
98890 : s_offset_d1 = s_offset_d1 + 9
98891 : END DO
98892 : s_offset_c1 = s_offset_c1 + 9
98893 : END DO
98894 : s_offset_b1 = s_offset_b1 + 7
98895 : END DO
98896 : s_offset_a1 = s_offset_a1 + 9
98897 : END DO
98898 : END SUBROUTINE contract_gfgg
98899 : #endif
98900 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
98901 : ! **************************************************************************************************
98902 : !> \brief ...
98903 : !> \param work ...
98904 : !> \param nl_a ...
98905 : !> \param nl_b ...
98906 : !> \param nl_c ...
98907 : !> \param nl_d ...
98908 : !> \param sphi_a ...
98909 : !> \param sphi_b ...
98910 : !> \param sphi_c ...
98911 : !> \param sphi_d ...
98912 : !> \param primitives ...
98913 : !> \param buffer1 ...
98914 : !> \param buffer2 ...
98915 : ! **************************************************************************************************
98916 : SUBROUTINE contract_ggss(work, &
98917 : nl_a, nl_b, nl_c, nl_d, &
98918 : sphi_a, sphi_b, sphi_c, sphi_d, &
98919 : primitives, &
98920 : buffer1, buffer2)
98921 : REAL(dp), DIMENSION(15*15*1*1), INTENT(IN) :: work
98922 : INTEGER :: nl_a, nl_b, nl_c, nl_d
98923 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
98924 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
98925 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
98926 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
98927 : REAL(dp), &
98928 : DIMENSION(9*nl_a, 9*nl_b, 1*nl_c, 1*nl_d) :: primitives
98929 : REAL(dp), DIMENSION(15*15*1*1) :: buffer1, buffer2
98930 :
98931 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
98932 : kmax, s_offset_a1, s_offset_b1, &
98933 : s_offset_c1, s_offset_d1
98934 :
98935 : s_offset_a1 = 0
98936 : DO ia = 1, nl_a
98937 : s_offset_b1 = 0
98938 : DO ib = 1, nl_b
98939 : s_offset_c1 = 0
98940 : DO ic = 1, nl_c
98941 : s_offset_d1 = 0
98942 : DO id = 1, nl_d
98943 : buffer1 = 0.0_dp
98944 : imax = 15*1*1
98945 : kmax = 15
98946 : DO i = 1, imax
98947 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
98948 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
98949 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
98950 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
98951 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
98952 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
98953 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
98954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
98955 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
98956 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
98957 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
98958 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
98959 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
98960 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
98961 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
98962 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
98963 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
98964 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
98965 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
98966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
98967 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
98968 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
98969 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
98970 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
98971 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
98972 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
98973 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
98974 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
98975 : END DO
98976 : buffer2 = 0.0_dp
98977 : imax = 9*1*1
98978 : kmax = 15
98979 : DO i = 1, imax
98980 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
98981 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
98982 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
98983 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
98984 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
98985 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
98986 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
98987 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
98988 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
98989 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
98990 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
98991 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
98992 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
98993 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
98994 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
98995 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
98996 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
98997 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
98998 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
98999 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99000 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99001 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99002 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99003 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99004 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99005 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99006 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99007 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99008 : END DO
99009 : buffer1 = 0.0_dp
99010 : imax = 9*9*1
99011 : kmax = 1
99012 : DO i = 1, imax
99013 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
99014 : END DO
99015 : imax = 9*9*1
99016 : kmax = 1
99017 : i = 0
99018 : DO i1 = 1, 1
99019 : DO i2 = 1, 9
99020 : DO i3 = 1, 9
99021 : i = i + 1
99022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99023 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
99024 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
99025 : END DO
99026 : END DO
99027 : END DO
99028 : s_offset_d1 = s_offset_d1 + 1
99029 : END DO
99030 : s_offset_c1 = s_offset_c1 + 1
99031 : END DO
99032 : s_offset_b1 = s_offset_b1 + 9
99033 : END DO
99034 : s_offset_a1 = s_offset_a1 + 9
99035 : END DO
99036 : END SUBROUTINE contract_ggss
99037 : #endif
99038 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99039 : ! **************************************************************************************************
99040 : !> \brief ...
99041 : !> \param work ...
99042 : !> \param nl_a ...
99043 : !> \param nl_b ...
99044 : !> \param nl_c ...
99045 : !> \param nl_d ...
99046 : !> \param sphi_a ...
99047 : !> \param sphi_b ...
99048 : !> \param sphi_c ...
99049 : !> \param sphi_d ...
99050 : !> \param primitives ...
99051 : !> \param buffer1 ...
99052 : !> \param buffer2 ...
99053 : ! **************************************************************************************************
99054 : SUBROUTINE contract_ggsp(work, &
99055 : nl_a, nl_b, nl_c, nl_d, &
99056 : sphi_a, sphi_b, sphi_c, sphi_d, &
99057 : primitives, &
99058 : buffer1, buffer2)
99059 : REAL(dp), DIMENSION(15*15*1*3), INTENT(IN) :: work
99060 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99061 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99062 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99063 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
99064 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
99065 : REAL(dp), &
99066 : DIMENSION(9*nl_a, 9*nl_b, 1*nl_c, 3*nl_d) :: primitives
99067 : REAL(dp), DIMENSION(15*15*1*3) :: buffer1, buffer2
99068 :
99069 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99070 : kmax, s_offset_a1, s_offset_b1, &
99071 : s_offset_c1, s_offset_d1
99072 :
99073 : s_offset_a1 = 0
99074 : DO ia = 1, nl_a
99075 : s_offset_b1 = 0
99076 : DO ib = 1, nl_b
99077 : s_offset_c1 = 0
99078 : DO ic = 1, nl_c
99079 : s_offset_d1 = 0
99080 : DO id = 1, nl_d
99081 : buffer1 = 0.0_dp
99082 : imax = 15*1*3
99083 : kmax = 15
99084 : DO i = 1, imax
99085 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99086 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99087 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99088 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99089 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99090 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99091 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99092 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99093 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99094 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99095 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99096 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99097 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99098 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99099 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99100 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99101 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99102 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99103 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99104 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99105 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99106 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99107 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99108 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99109 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99110 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99111 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99112 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99113 : END DO
99114 : buffer2 = 0.0_dp
99115 : imax = 9*1*3
99116 : kmax = 15
99117 : DO i = 1, imax
99118 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99119 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99120 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99121 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99122 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99123 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99124 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99125 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99126 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99127 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99128 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99129 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99130 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99131 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99132 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99133 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99134 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99135 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99136 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99137 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99138 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99139 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99140 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99141 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99142 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99143 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99144 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99145 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99146 : END DO
99147 : buffer1 = 0.0_dp
99148 : imax = 9*9*3
99149 : kmax = 1
99150 : DO i = 1, imax
99151 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
99152 : END DO
99153 : imax = 9*9*1
99154 : kmax = 3
99155 : i = 0
99156 : DO i1 = 1, 1
99157 : DO i2 = 1, 9
99158 : DO i3 = 1, 9
99159 : i = i + 1
99160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99161 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
99162 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
99163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99164 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
99165 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
99166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
99167 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
99168 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
99169 : END DO
99170 : END DO
99171 : END DO
99172 : s_offset_d1 = s_offset_d1 + 3
99173 : END DO
99174 : s_offset_c1 = s_offset_c1 + 1
99175 : END DO
99176 : s_offset_b1 = s_offset_b1 + 9
99177 : END DO
99178 : s_offset_a1 = s_offset_a1 + 9
99179 : END DO
99180 : END SUBROUTINE contract_ggsp
99181 : #endif
99182 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99183 : ! **************************************************************************************************
99184 : !> \brief ...
99185 : !> \param work ...
99186 : !> \param nl_a ...
99187 : !> \param nl_b ...
99188 : !> \param nl_c ...
99189 : !> \param nl_d ...
99190 : !> \param sphi_a ...
99191 : !> \param sphi_b ...
99192 : !> \param sphi_c ...
99193 : !> \param sphi_d ...
99194 : !> \param primitives ...
99195 : !> \param buffer1 ...
99196 : !> \param buffer2 ...
99197 : ! **************************************************************************************************
99198 : SUBROUTINE contract_ggsd(work, &
99199 : nl_a, nl_b, nl_c, nl_d, &
99200 : sphi_a, sphi_b, sphi_c, sphi_d, &
99201 : primitives, &
99202 : buffer1, buffer2)
99203 : REAL(dp), DIMENSION(15*15*1*6), INTENT(IN) :: work
99204 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99205 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99206 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99207 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
99208 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
99209 : REAL(dp), &
99210 : DIMENSION(9*nl_a, 9*nl_b, 1*nl_c, 5*nl_d) :: primitives
99211 : REAL(dp), DIMENSION(15*15*1*6) :: buffer1, buffer2
99212 :
99213 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99214 : kmax, s_offset_a1, s_offset_b1, &
99215 : s_offset_c1, s_offset_d1
99216 :
99217 : s_offset_a1 = 0
99218 : DO ia = 1, nl_a
99219 : s_offset_b1 = 0
99220 : DO ib = 1, nl_b
99221 : s_offset_c1 = 0
99222 : DO ic = 1, nl_c
99223 : s_offset_d1 = 0
99224 : DO id = 1, nl_d
99225 : buffer1 = 0.0_dp
99226 : imax = 15*1*6
99227 : kmax = 15
99228 : DO i = 1, imax
99229 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99230 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99231 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99232 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99233 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99234 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99235 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99236 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99237 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99238 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99239 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99240 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99241 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99242 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99243 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99244 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99245 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99246 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99247 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99250 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99251 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99252 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99253 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99254 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99255 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99257 : END DO
99258 : buffer2 = 0.0_dp
99259 : imax = 9*1*6
99260 : kmax = 15
99261 : DO i = 1, imax
99262 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99263 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99264 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99265 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99266 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99267 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99268 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99269 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99270 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99271 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99272 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99273 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99274 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99275 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99276 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99277 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99278 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99279 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99280 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99281 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99282 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99283 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99284 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99285 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99286 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99287 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99288 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99289 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99290 : END DO
99291 : buffer1 = 0.0_dp
99292 : imax = 9*9*6
99293 : kmax = 1
99294 : DO i = 1, imax
99295 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
99296 : END DO
99297 : imax = 9*9*1
99298 : kmax = 6
99299 : i = 0
99300 : DO i1 = 1, 1
99301 : DO i2 = 1, 9
99302 : DO i3 = 1, 9
99303 : i = i + 1
99304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99306 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
99307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99309 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
99310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
99312 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
99313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99315 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
99316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99318 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
99319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99321 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
99322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
99323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
99324 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
99325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99327 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
99328 : END DO
99329 : END DO
99330 : END DO
99331 : s_offset_d1 = s_offset_d1 + 5
99332 : END DO
99333 : s_offset_c1 = s_offset_c1 + 1
99334 : END DO
99335 : s_offset_b1 = s_offset_b1 + 9
99336 : END DO
99337 : s_offset_a1 = s_offset_a1 + 9
99338 : END DO
99339 : END SUBROUTINE contract_ggsd
99340 : #endif
99341 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99342 : ! **************************************************************************************************
99343 : !> \brief ...
99344 : !> \param work ...
99345 : !> \param nl_a ...
99346 : !> \param nl_b ...
99347 : !> \param nl_c ...
99348 : !> \param nl_d ...
99349 : !> \param sphi_a ...
99350 : !> \param sphi_b ...
99351 : !> \param sphi_c ...
99352 : !> \param sphi_d ...
99353 : !> \param primitives ...
99354 : !> \param buffer1 ...
99355 : !> \param buffer2 ...
99356 : ! **************************************************************************************************
99357 : SUBROUTINE contract_ggsf(work, &
99358 : nl_a, nl_b, nl_c, nl_d, &
99359 : sphi_a, sphi_b, sphi_c, sphi_d, &
99360 : primitives, &
99361 : buffer1, buffer2)
99362 : REAL(dp), DIMENSION(15*15*1*10), INTENT(IN) :: work
99363 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99364 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99365 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99366 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
99367 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
99368 : REAL(dp), &
99369 : DIMENSION(9*nl_a, 9*nl_b, 1*nl_c, 7*nl_d) :: primitives
99370 : REAL(dp), DIMENSION(15*15*1*10) :: buffer1, buffer2
99371 :
99372 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99373 : kmax, s_offset_a1, s_offset_b1, &
99374 : s_offset_c1, s_offset_d1
99375 :
99376 : s_offset_a1 = 0
99377 : DO ia = 1, nl_a
99378 : s_offset_b1 = 0
99379 : DO ib = 1, nl_b
99380 : s_offset_c1 = 0
99381 : DO ic = 1, nl_c
99382 : s_offset_d1 = 0
99383 : DO id = 1, nl_d
99384 : buffer1 = 0.0_dp
99385 : imax = 15*1*10
99386 : kmax = 15
99387 : DO i = 1, imax
99388 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99389 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99390 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99391 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99392 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99393 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99394 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99395 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99396 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99397 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99398 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99399 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99400 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99401 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99402 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99403 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99404 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99405 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99406 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99407 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99408 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99409 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99410 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99411 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99412 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99413 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99414 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99415 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99416 : END DO
99417 : buffer2 = 0.0_dp
99418 : imax = 9*1*10
99419 : kmax = 15
99420 : DO i = 1, imax
99421 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99422 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99423 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99424 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99425 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99426 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99427 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99428 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99429 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99430 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99431 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99432 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99433 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99434 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99435 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99436 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99437 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99438 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99439 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99440 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99441 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99442 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99443 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99444 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99445 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99446 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99447 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99448 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99449 : END DO
99450 : buffer1 = 0.0_dp
99451 : imax = 9*9*10
99452 : kmax = 1
99453 : DO i = 1, imax
99454 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
99455 : END DO
99456 : imax = 9*9*1
99457 : kmax = 10
99458 : i = 0
99459 : DO i1 = 1, 1
99460 : DO i2 = 1, 9
99461 : DO i3 = 1, 9
99462 : i = i + 1
99463 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99464 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99465 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
99466 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99467 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99468 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
99469 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99470 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
99471 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
99472 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99473 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99474 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
99475 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99476 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99477 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
99478 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
99479 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
99480 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
99481 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99482 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99483 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
99484 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99485 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99486 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
99487 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
99488 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
99489 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
99490 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99491 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99492 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
99493 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99494 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
99495 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
99496 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99497 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99498 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
99499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99501 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
99502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
99503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
99504 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
99505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99507 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
99508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99510 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
99511 : END DO
99512 : END DO
99513 : END DO
99514 : s_offset_d1 = s_offset_d1 + 7
99515 : END DO
99516 : s_offset_c1 = s_offset_c1 + 1
99517 : END DO
99518 : s_offset_b1 = s_offset_b1 + 9
99519 : END DO
99520 : s_offset_a1 = s_offset_a1 + 9
99521 : END DO
99522 : END SUBROUTINE contract_ggsf
99523 : #endif
99524 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99525 : ! **************************************************************************************************
99526 : !> \brief ...
99527 : !> \param work ...
99528 : !> \param nl_a ...
99529 : !> \param nl_b ...
99530 : !> \param nl_c ...
99531 : !> \param nl_d ...
99532 : !> \param sphi_a ...
99533 : !> \param sphi_b ...
99534 : !> \param sphi_c ...
99535 : !> \param sphi_d ...
99536 : !> \param primitives ...
99537 : !> \param buffer1 ...
99538 : !> \param buffer2 ...
99539 : ! **************************************************************************************************
99540 : SUBROUTINE contract_ggsg(work, &
99541 : nl_a, nl_b, nl_c, nl_d, &
99542 : sphi_a, sphi_b, sphi_c, sphi_d, &
99543 : primitives, &
99544 : buffer1, buffer2)
99545 : REAL(dp), DIMENSION(15*15*1*15), INTENT(IN) :: work
99546 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99547 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99548 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99549 : REAL(dp), DIMENSION(1, 1*nl_c), INTENT(IN) :: sphi_c
99550 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
99551 : REAL(dp), &
99552 : DIMENSION(9*nl_a, 9*nl_b, 1*nl_c, 9*nl_d) :: primitives
99553 : REAL(dp), DIMENSION(15*15*1*15) :: buffer1, buffer2
99554 :
99555 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99556 : kmax, s_offset_a1, s_offset_b1, &
99557 : s_offset_c1, s_offset_d1
99558 :
99559 : s_offset_a1 = 0
99560 : DO ia = 1, nl_a
99561 : s_offset_b1 = 0
99562 : DO ib = 1, nl_b
99563 : s_offset_c1 = 0
99564 : DO ic = 1, nl_c
99565 : s_offset_d1 = 0
99566 : DO id = 1, nl_d
99567 : buffer1 = 0.0_dp
99568 : imax = 15*1*15
99569 : kmax = 15
99570 : DO i = 1, imax
99571 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99572 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99573 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99574 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99575 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99576 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99577 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99578 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99579 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99580 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99581 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99582 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99583 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99584 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99585 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99586 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99587 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99588 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99589 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99590 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99591 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99592 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99593 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99594 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99595 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99596 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99597 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99598 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99599 : END DO
99600 : buffer2 = 0.0_dp
99601 : imax = 9*1*15
99602 : kmax = 15
99603 : DO i = 1, imax
99604 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99605 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99606 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99607 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99608 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99609 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99610 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99611 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99612 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99613 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99614 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99615 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99616 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99617 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99618 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99619 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99620 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99621 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99622 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99623 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99624 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99625 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99626 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99627 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99628 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99629 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99630 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99631 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99632 : END DO
99633 : buffer1 = 0.0_dp
99634 : imax = 9*9*15
99635 : kmax = 1
99636 : DO i = 1, imax
99637 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
99638 : END DO
99639 : imax = 9*9*1
99640 : kmax = 15
99641 : i = 0
99642 : DO i1 = 1, 1
99643 : DO i2 = 1, 9
99644 : DO i3 = 1, 9
99645 : i = i + 1
99646 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99647 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99648 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
99649 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99650 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99651 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
99652 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
99653 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
99654 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
99655 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99656 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
99657 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
99658 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99659 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99660 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
99661 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
99662 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
99663 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
99664 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
99665 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
99666 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
99667 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99668 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99669 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
99670 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
99671 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
99672 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
99673 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
99674 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
99675 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
99676 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99677 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99678 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
99679 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99680 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99681 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
99682 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99683 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99684 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
99685 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99686 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
99687 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
99688 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99689 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99690 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
99691 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
99692 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
99693 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
99694 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
99695 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
99696 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
99697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
99698 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
99699 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
99700 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
99701 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
99702 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
99703 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99704 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99705 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
99706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99708 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
99709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
99710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
99711 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
99712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
99713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
99714 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
99715 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99716 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99717 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
99718 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99719 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99720 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
99721 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
99722 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
99723 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
99724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
99725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
99726 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
99727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
99728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
99729 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
99730 : END DO
99731 : END DO
99732 : END DO
99733 : s_offset_d1 = s_offset_d1 + 9
99734 : END DO
99735 : s_offset_c1 = s_offset_c1 + 1
99736 : END DO
99737 : s_offset_b1 = s_offset_b1 + 9
99738 : END DO
99739 : s_offset_a1 = s_offset_a1 + 9
99740 : END DO
99741 : END SUBROUTINE contract_ggsg
99742 : #endif
99743 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99744 : ! **************************************************************************************************
99745 : !> \brief ...
99746 : !> \param work ...
99747 : !> \param nl_a ...
99748 : !> \param nl_b ...
99749 : !> \param nl_c ...
99750 : !> \param nl_d ...
99751 : !> \param sphi_a ...
99752 : !> \param sphi_b ...
99753 : !> \param sphi_c ...
99754 : !> \param sphi_d ...
99755 : !> \param primitives ...
99756 : !> \param buffer1 ...
99757 : !> \param buffer2 ...
99758 : ! **************************************************************************************************
99759 : SUBROUTINE contract_ggps(work, &
99760 : nl_a, nl_b, nl_c, nl_d, &
99761 : sphi_a, sphi_b, sphi_c, sphi_d, &
99762 : primitives, &
99763 : buffer1, buffer2)
99764 : REAL(dp), DIMENSION(15*15*3*1), INTENT(IN) :: work
99765 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99766 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99767 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99768 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
99769 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
99770 : REAL(dp), &
99771 : DIMENSION(9*nl_a, 9*nl_b, 3*nl_c, 1*nl_d) :: primitives
99772 : REAL(dp), DIMENSION(15*15*3*1) :: buffer1, buffer2
99773 :
99774 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99775 : kmax, s_offset_a1, s_offset_b1, &
99776 : s_offset_c1, s_offset_d1
99777 :
99778 : s_offset_a1 = 0
99779 : DO ia = 1, nl_a
99780 : s_offset_b1 = 0
99781 : DO ib = 1, nl_b
99782 : s_offset_c1 = 0
99783 : DO ic = 1, nl_c
99784 : s_offset_d1 = 0
99785 : DO id = 1, nl_d
99786 : buffer1 = 0.0_dp
99787 : imax = 15*3*1
99788 : kmax = 15
99789 : DO i = 1, imax
99790 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99791 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99792 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99793 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99794 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99795 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99796 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99797 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99798 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99799 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99800 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99801 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99802 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99803 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99804 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99805 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99806 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99807 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99808 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99809 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99810 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99811 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99812 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99813 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99814 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99815 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99816 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99817 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99818 : END DO
99819 : buffer2 = 0.0_dp
99820 : imax = 9*3*1
99821 : kmax = 15
99822 : DO i = 1, imax
99823 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99824 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99825 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99826 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99827 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99828 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99829 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99830 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99831 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99832 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99833 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99834 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99835 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99836 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99837 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99838 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99839 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99840 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99841 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99842 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99843 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99844 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99845 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99846 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99847 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99848 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99849 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99850 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99851 : END DO
99852 : buffer1 = 0.0_dp
99853 : imax = 9*9*1
99854 : kmax = 3
99855 : DO i = 1, imax
99856 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
99857 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
99858 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
99859 : END DO
99860 : imax = 9*9*3
99861 : kmax = 1
99862 : i = 0
99863 : DO i1 = 1, 3
99864 : DO i2 = 1, 9
99865 : DO i3 = 1, 9
99866 : i = i + 1
99867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
99868 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
99869 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
99870 : END DO
99871 : END DO
99872 : END DO
99873 : s_offset_d1 = s_offset_d1 + 1
99874 : END DO
99875 : s_offset_c1 = s_offset_c1 + 3
99876 : END DO
99877 : s_offset_b1 = s_offset_b1 + 9
99878 : END DO
99879 : s_offset_a1 = s_offset_a1 + 9
99880 : END DO
99881 : END SUBROUTINE contract_ggps
99882 : #endif
99883 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
99884 : ! **************************************************************************************************
99885 : !> \brief ...
99886 : !> \param work ...
99887 : !> \param nl_a ...
99888 : !> \param nl_b ...
99889 : !> \param nl_c ...
99890 : !> \param nl_d ...
99891 : !> \param sphi_a ...
99892 : !> \param sphi_b ...
99893 : !> \param sphi_c ...
99894 : !> \param sphi_d ...
99895 : !> \param primitives ...
99896 : !> \param buffer1 ...
99897 : !> \param buffer2 ...
99898 : ! **************************************************************************************************
99899 : SUBROUTINE contract_ggpp(work, &
99900 : nl_a, nl_b, nl_c, nl_d, &
99901 : sphi_a, sphi_b, sphi_c, sphi_d, &
99902 : primitives, &
99903 : buffer1, buffer2)
99904 : REAL(dp), DIMENSION(15*15*3*3), INTENT(IN) :: work
99905 : INTEGER :: nl_a, nl_b, nl_c, nl_d
99906 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
99907 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
99908 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
99909 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
99910 : REAL(dp), &
99911 : DIMENSION(9*nl_a, 9*nl_b, 3*nl_c, 3*nl_d) :: primitives
99912 : REAL(dp), DIMENSION(15*15*3*3) :: buffer1, buffer2
99913 :
99914 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
99915 : kmax, s_offset_a1, s_offset_b1, &
99916 : s_offset_c1, s_offset_d1
99917 :
99918 : s_offset_a1 = 0
99919 : DO ia = 1, nl_a
99920 : s_offset_b1 = 0
99921 : DO ib = 1, nl_b
99922 : s_offset_c1 = 0
99923 : DO ic = 1, nl_c
99924 : s_offset_d1 = 0
99925 : DO id = 1, nl_d
99926 : buffer1 = 0.0_dp
99927 : imax = 15*3*3
99928 : kmax = 15
99929 : DO i = 1, imax
99930 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
99931 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
99932 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
99933 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
99934 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
99935 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
99936 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
99937 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
99938 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
99939 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
99940 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
99941 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
99942 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
99943 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
99944 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
99945 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
99946 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
99947 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
99948 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
99949 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
99950 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
99951 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
99952 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
99953 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
99954 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
99955 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
99956 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
99957 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
99958 : END DO
99959 : buffer2 = 0.0_dp
99960 : imax = 9*3*3
99961 : kmax = 15
99962 : DO i = 1, imax
99963 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
99964 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
99965 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
99966 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
99967 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
99968 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
99969 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
99970 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
99971 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
99972 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
99973 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
99974 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
99975 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
99976 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
99977 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
99978 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
99979 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
99980 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
99981 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
99982 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
99983 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
99984 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
99985 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
99986 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
99987 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
99988 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
99989 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
99990 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
99991 : END DO
99992 : buffer1 = 0.0_dp
99993 : imax = 9*9*3
99994 : kmax = 3
99995 : DO i = 1, imax
99996 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
99997 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
99998 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
99999 : END DO
100000 : imax = 9*9*3
100001 : kmax = 3
100002 : i = 0
100003 : DO i1 = 1, 3
100004 : DO i2 = 1, 9
100005 : DO i3 = 1, 9
100006 : i = i + 1
100007 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100008 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
100009 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
100010 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100011 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
100012 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
100013 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100014 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
100015 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
100016 : END DO
100017 : END DO
100018 : END DO
100019 : s_offset_d1 = s_offset_d1 + 3
100020 : END DO
100021 : s_offset_c1 = s_offset_c1 + 3
100022 : END DO
100023 : s_offset_b1 = s_offset_b1 + 9
100024 : END DO
100025 : s_offset_a1 = s_offset_a1 + 9
100026 : END DO
100027 : END SUBROUTINE contract_ggpp
100028 : #endif
100029 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100030 : ! **************************************************************************************************
100031 : !> \brief ...
100032 : !> \param work ...
100033 : !> \param nl_a ...
100034 : !> \param nl_b ...
100035 : !> \param nl_c ...
100036 : !> \param nl_d ...
100037 : !> \param sphi_a ...
100038 : !> \param sphi_b ...
100039 : !> \param sphi_c ...
100040 : !> \param sphi_d ...
100041 : !> \param primitives ...
100042 : !> \param buffer1 ...
100043 : !> \param buffer2 ...
100044 : ! **************************************************************************************************
100045 : SUBROUTINE contract_ggpd(work, &
100046 : nl_a, nl_b, nl_c, nl_d, &
100047 : sphi_a, sphi_b, sphi_c, sphi_d, &
100048 : primitives, &
100049 : buffer1, buffer2)
100050 : REAL(dp), DIMENSION(15*15*3*6), INTENT(IN) :: work
100051 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100052 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100053 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100054 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
100055 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
100056 : REAL(dp), &
100057 : DIMENSION(9*nl_a, 9*nl_b, 3*nl_c, 5*nl_d) :: primitives
100058 : REAL(dp), DIMENSION(15*15*3*6) :: buffer1, buffer2
100059 :
100060 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100061 : kmax, s_offset_a1, s_offset_b1, &
100062 : s_offset_c1, s_offset_d1
100063 :
100064 : s_offset_a1 = 0
100065 : DO ia = 1, nl_a
100066 : s_offset_b1 = 0
100067 : DO ib = 1, nl_b
100068 : s_offset_c1 = 0
100069 : DO ic = 1, nl_c
100070 : s_offset_d1 = 0
100071 : DO id = 1, nl_d
100072 : buffer1 = 0.0_dp
100073 : imax = 15*3*6
100074 : kmax = 15
100075 : DO i = 1, imax
100076 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100077 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100078 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100079 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100080 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100081 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100082 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100083 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100084 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100085 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100086 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100087 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100088 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100089 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100090 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100091 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100092 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100093 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100094 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100095 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100096 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100097 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100098 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100099 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100100 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100101 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100102 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100103 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100104 : END DO
100105 : buffer2 = 0.0_dp
100106 : imax = 9*3*6
100107 : kmax = 15
100108 : DO i = 1, imax
100109 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100110 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100111 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100112 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100113 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100114 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100115 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100116 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100117 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100118 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100119 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100120 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100121 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100122 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100123 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100124 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100125 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100126 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100127 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100128 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100129 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100130 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100131 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100132 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100133 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100134 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100135 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100136 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
100137 : END DO
100138 : buffer1 = 0.0_dp
100139 : imax = 9*9*6
100140 : kmax = 3
100141 : DO i = 1, imax
100142 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
100143 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
100144 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
100145 : END DO
100146 : imax = 9*9*3
100147 : kmax = 6
100148 : i = 0
100149 : DO i1 = 1, 3
100150 : DO i2 = 1, 9
100151 : DO i3 = 1, 9
100152 : i = i + 1
100153 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100154 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100155 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
100156 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100157 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100158 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
100159 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100160 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
100161 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
100162 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100163 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100164 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
100165 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100166 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100167 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
100168 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100169 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100170 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
100171 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100172 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
100173 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
100174 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100175 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100176 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
100177 : END DO
100178 : END DO
100179 : END DO
100180 : s_offset_d1 = s_offset_d1 + 5
100181 : END DO
100182 : s_offset_c1 = s_offset_c1 + 3
100183 : END DO
100184 : s_offset_b1 = s_offset_b1 + 9
100185 : END DO
100186 : s_offset_a1 = s_offset_a1 + 9
100187 : END DO
100188 : END SUBROUTINE contract_ggpd
100189 : #endif
100190 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100191 : ! **************************************************************************************************
100192 : !> \brief ...
100193 : !> \param work ...
100194 : !> \param nl_a ...
100195 : !> \param nl_b ...
100196 : !> \param nl_c ...
100197 : !> \param nl_d ...
100198 : !> \param sphi_a ...
100199 : !> \param sphi_b ...
100200 : !> \param sphi_c ...
100201 : !> \param sphi_d ...
100202 : !> \param primitives ...
100203 : !> \param buffer1 ...
100204 : !> \param buffer2 ...
100205 : ! **************************************************************************************************
100206 : SUBROUTINE contract_ggpf(work, &
100207 : nl_a, nl_b, nl_c, nl_d, &
100208 : sphi_a, sphi_b, sphi_c, sphi_d, &
100209 : primitives, &
100210 : buffer1, buffer2)
100211 : REAL(dp), DIMENSION(15*15*3*10), INTENT(IN) :: work
100212 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100213 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100214 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100215 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
100216 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
100217 : REAL(dp), &
100218 : DIMENSION(9*nl_a, 9*nl_b, 3*nl_c, 7*nl_d) :: primitives
100219 : REAL(dp), DIMENSION(15*15*3*10) :: buffer1, buffer2
100220 :
100221 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100222 : kmax, s_offset_a1, s_offset_b1, &
100223 : s_offset_c1, s_offset_d1
100224 :
100225 : s_offset_a1 = 0
100226 : DO ia = 1, nl_a
100227 : s_offset_b1 = 0
100228 : DO ib = 1, nl_b
100229 : s_offset_c1 = 0
100230 : DO ic = 1, nl_c
100231 : s_offset_d1 = 0
100232 : DO id = 1, nl_d
100233 : buffer1 = 0.0_dp
100234 : imax = 15*3*10
100235 : kmax = 15
100236 : DO i = 1, imax
100237 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100238 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100239 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100240 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100241 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100242 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100243 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100244 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100245 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100246 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100247 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100251 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100252 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100253 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100257 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100258 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100259 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100260 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100261 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100262 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100265 : END DO
100266 : buffer2 = 0.0_dp
100267 : imax = 9*3*10
100268 : kmax = 15
100269 : DO i = 1, imax
100270 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100271 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100272 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100273 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100274 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100275 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100276 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100277 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100278 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100279 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100280 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100281 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100282 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100283 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100284 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100285 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100286 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100287 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100288 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100289 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100290 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100291 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100292 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100293 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100294 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100295 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100296 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100297 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
100298 : END DO
100299 : buffer1 = 0.0_dp
100300 : imax = 9*9*10
100301 : kmax = 3
100302 : DO i = 1, imax
100303 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
100304 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
100305 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
100306 : END DO
100307 : imax = 9*9*3
100308 : kmax = 10
100309 : i = 0
100310 : DO i1 = 1, 3
100311 : DO i2 = 1, 9
100312 : DO i3 = 1, 9
100313 : i = i + 1
100314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100316 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
100317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100319 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
100320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
100322 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
100323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100325 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
100326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100328 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
100329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
100330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
100331 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
100332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100334 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
100335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100337 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
100338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
100340 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
100341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100343 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
100344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
100346 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
100347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100349 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
100350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100352 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
100353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
100354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
100355 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
100356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100357 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100358 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
100359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100360 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100361 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
100362 : END DO
100363 : END DO
100364 : END DO
100365 : s_offset_d1 = s_offset_d1 + 7
100366 : END DO
100367 : s_offset_c1 = s_offset_c1 + 3
100368 : END DO
100369 : s_offset_b1 = s_offset_b1 + 9
100370 : END DO
100371 : s_offset_a1 = s_offset_a1 + 9
100372 : END DO
100373 : END SUBROUTINE contract_ggpf
100374 : #endif
100375 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100376 : ! **************************************************************************************************
100377 : !> \brief ...
100378 : !> \param work ...
100379 : !> \param nl_a ...
100380 : !> \param nl_b ...
100381 : !> \param nl_c ...
100382 : !> \param nl_d ...
100383 : !> \param sphi_a ...
100384 : !> \param sphi_b ...
100385 : !> \param sphi_c ...
100386 : !> \param sphi_d ...
100387 : !> \param primitives ...
100388 : !> \param buffer1 ...
100389 : !> \param buffer2 ...
100390 : ! **************************************************************************************************
100391 : SUBROUTINE contract_ggpg(work, &
100392 : nl_a, nl_b, nl_c, nl_d, &
100393 : sphi_a, sphi_b, sphi_c, sphi_d, &
100394 : primitives, &
100395 : buffer1, buffer2)
100396 : REAL(dp), DIMENSION(15*15*3*15), INTENT(IN) :: work
100397 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100398 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100399 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100400 : REAL(dp), DIMENSION(3, 3*nl_c), INTENT(IN) :: sphi_c
100401 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
100402 : REAL(dp), &
100403 : DIMENSION(9*nl_a, 9*nl_b, 3*nl_c, 9*nl_d) :: primitives
100404 : REAL(dp), DIMENSION(15*15*3*15) :: buffer1, buffer2
100405 :
100406 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100407 : kmax, s_offset_a1, s_offset_b1, &
100408 : s_offset_c1, s_offset_d1
100409 :
100410 : s_offset_a1 = 0
100411 : DO ia = 1, nl_a
100412 : s_offset_b1 = 0
100413 : DO ib = 1, nl_b
100414 : s_offset_c1 = 0
100415 : DO ic = 1, nl_c
100416 : s_offset_d1 = 0
100417 : DO id = 1, nl_d
100418 : buffer1 = 0.0_dp
100419 : imax = 15*3*15
100420 : kmax = 15
100421 : DO i = 1, imax
100422 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100423 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100424 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100425 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100426 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100427 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100428 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100429 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100430 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100431 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100432 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100433 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100434 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100435 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100436 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100437 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100438 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100439 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100440 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100441 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100442 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100443 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100444 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100445 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100446 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100447 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100448 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100449 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100450 : END DO
100451 : buffer2 = 0.0_dp
100452 : imax = 9*3*15
100453 : kmax = 15
100454 : DO i = 1, imax
100455 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100456 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100457 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100458 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100459 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100460 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100461 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100462 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100463 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100464 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100465 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100466 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100467 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100468 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100469 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100470 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100471 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100472 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100473 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100474 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100475 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100476 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100477 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100478 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100479 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100480 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100481 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100482 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
100483 : END DO
100484 : buffer1 = 0.0_dp
100485 : imax = 9*9*15
100486 : kmax = 3
100487 : DO i = 1, imax
100488 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
100489 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
100490 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
100491 : END DO
100492 : imax = 9*9*3
100493 : kmax = 15
100494 : i = 0
100495 : DO i1 = 1, 3
100496 : DO i2 = 1, 9
100497 : DO i3 = 1, 9
100498 : i = i + 1
100499 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100500 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100501 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
100502 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100503 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100504 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
100505 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
100506 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
100507 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
100508 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100509 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
100510 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
100511 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100512 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100513 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
100514 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
100515 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
100516 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
100517 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
100518 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
100519 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
100520 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100521 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100522 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
100523 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
100524 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
100525 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
100526 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100527 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
100528 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
100529 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100530 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100531 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
100532 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100533 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100534 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
100535 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100536 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100537 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
100538 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100539 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
100540 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
100541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100543 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
100544 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
100545 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
100546 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
100547 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
100548 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
100549 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
100550 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100551 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
100552 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
100553 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
100554 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
100555 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
100556 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100557 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100558 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
100559 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100560 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100561 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
100562 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
100563 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
100564 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
100565 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100566 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
100567 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
100568 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100569 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100570 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
100571 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100572 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100573 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
100574 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
100575 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
100576 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
100577 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
100578 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
100579 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
100580 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
100581 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
100582 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
100583 : END DO
100584 : END DO
100585 : END DO
100586 : s_offset_d1 = s_offset_d1 + 9
100587 : END DO
100588 : s_offset_c1 = s_offset_c1 + 3
100589 : END DO
100590 : s_offset_b1 = s_offset_b1 + 9
100591 : END DO
100592 : s_offset_a1 = s_offset_a1 + 9
100593 : END DO
100594 : END SUBROUTINE contract_ggpg
100595 : #endif
100596 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100597 : ! **************************************************************************************************
100598 : !> \brief ...
100599 : !> \param work ...
100600 : !> \param nl_a ...
100601 : !> \param nl_b ...
100602 : !> \param nl_c ...
100603 : !> \param nl_d ...
100604 : !> \param sphi_a ...
100605 : !> \param sphi_b ...
100606 : !> \param sphi_c ...
100607 : !> \param sphi_d ...
100608 : !> \param primitives ...
100609 : !> \param buffer1 ...
100610 : !> \param buffer2 ...
100611 : ! **************************************************************************************************
100612 : SUBROUTINE contract_ggds(work, &
100613 : nl_a, nl_b, nl_c, nl_d, &
100614 : sphi_a, sphi_b, sphi_c, sphi_d, &
100615 : primitives, &
100616 : buffer1, buffer2)
100617 : REAL(dp), DIMENSION(15*15*6*1), INTENT(IN) :: work
100618 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100619 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100620 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100621 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
100622 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
100623 : REAL(dp), &
100624 : DIMENSION(9*nl_a, 9*nl_b, 5*nl_c, 1*nl_d) :: primitives
100625 : REAL(dp), DIMENSION(15*15*6*1) :: buffer1, buffer2
100626 :
100627 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100628 : kmax, s_offset_a1, s_offset_b1, &
100629 : s_offset_c1, s_offset_d1
100630 :
100631 : s_offset_a1 = 0
100632 : DO ia = 1, nl_a
100633 : s_offset_b1 = 0
100634 : DO ib = 1, nl_b
100635 : s_offset_c1 = 0
100636 : DO ic = 1, nl_c
100637 : s_offset_d1 = 0
100638 : DO id = 1, nl_d
100639 : buffer1 = 0.0_dp
100640 : imax = 15*6*1
100641 : kmax = 15
100642 : DO i = 1, imax
100643 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100644 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100645 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100646 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100647 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100648 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100649 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100650 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100651 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100652 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100653 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100654 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100655 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100656 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100657 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100658 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100659 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100660 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100661 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100662 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100663 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100664 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100665 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100666 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100667 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100668 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100669 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100671 : END DO
100672 : buffer2 = 0.0_dp
100673 : imax = 9*6*1
100674 : kmax = 15
100675 : DO i = 1, imax
100676 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100677 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100678 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100679 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100680 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100681 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100682 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100683 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100684 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100685 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100686 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100687 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100688 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100689 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100690 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100691 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100692 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100693 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100694 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100695 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100696 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100697 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100698 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100699 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100700 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100701 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100702 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100703 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
100704 : END DO
100705 : buffer1 = 0.0_dp
100706 : imax = 9*9*1
100707 : kmax = 6
100708 : DO i = 1, imax
100709 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
100710 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
100711 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
100712 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
100713 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
100714 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
100715 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
100716 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
100717 : END DO
100718 : imax = 9*9*5
100719 : kmax = 1
100720 : i = 0
100721 : DO i1 = 1, 5
100722 : DO i2 = 1, 9
100723 : DO i3 = 1, 9
100724 : i = i + 1
100725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100726 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
100727 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
100728 : END DO
100729 : END DO
100730 : END DO
100731 : s_offset_d1 = s_offset_d1 + 1
100732 : END DO
100733 : s_offset_c1 = s_offset_c1 + 5
100734 : END DO
100735 : s_offset_b1 = s_offset_b1 + 9
100736 : END DO
100737 : s_offset_a1 = s_offset_a1 + 9
100738 : END DO
100739 : END SUBROUTINE contract_ggds
100740 : #endif
100741 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100742 : ! **************************************************************************************************
100743 : !> \brief ...
100744 : !> \param work ...
100745 : !> \param nl_a ...
100746 : !> \param nl_b ...
100747 : !> \param nl_c ...
100748 : !> \param nl_d ...
100749 : !> \param sphi_a ...
100750 : !> \param sphi_b ...
100751 : !> \param sphi_c ...
100752 : !> \param sphi_d ...
100753 : !> \param primitives ...
100754 : !> \param buffer1 ...
100755 : !> \param buffer2 ...
100756 : ! **************************************************************************************************
100757 : SUBROUTINE contract_ggdp(work, &
100758 : nl_a, nl_b, nl_c, nl_d, &
100759 : sphi_a, sphi_b, sphi_c, sphi_d, &
100760 : primitives, &
100761 : buffer1, buffer2)
100762 : REAL(dp), DIMENSION(15*15*6*3), INTENT(IN) :: work
100763 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100764 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100765 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100766 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
100767 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
100768 : REAL(dp), &
100769 : DIMENSION(9*nl_a, 9*nl_b, 5*nl_c, 3*nl_d) :: primitives
100770 : REAL(dp), DIMENSION(15*15*6*3) :: buffer1, buffer2
100771 :
100772 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100773 : kmax, s_offset_a1, s_offset_b1, &
100774 : s_offset_c1, s_offset_d1
100775 :
100776 : s_offset_a1 = 0
100777 : DO ia = 1, nl_a
100778 : s_offset_b1 = 0
100779 : DO ib = 1, nl_b
100780 : s_offset_c1 = 0
100781 : DO ic = 1, nl_c
100782 : s_offset_d1 = 0
100783 : DO id = 1, nl_d
100784 : buffer1 = 0.0_dp
100785 : imax = 15*6*3
100786 : kmax = 15
100787 : DO i = 1, imax
100788 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100789 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100790 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100791 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100792 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100793 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100794 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100795 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100796 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100797 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100798 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100799 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100800 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100801 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100802 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100803 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100804 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100805 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100806 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100807 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100808 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100809 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100810 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100811 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100812 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100813 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100814 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100815 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100816 : END DO
100817 : buffer2 = 0.0_dp
100818 : imax = 9*6*3
100819 : kmax = 15
100820 : DO i = 1, imax
100821 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100822 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100823 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100824 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100825 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100826 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100827 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100828 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100829 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100830 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100831 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100832 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100833 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100834 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100835 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100836 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100837 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100838 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100839 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100840 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100841 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100842 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100843 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100844 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100845 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100846 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100847 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100848 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
100849 : END DO
100850 : buffer1 = 0.0_dp
100851 : imax = 9*9*3
100852 : kmax = 6
100853 : DO i = 1, imax
100854 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
100855 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
100856 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
100857 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
100858 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
100859 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
100860 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
100861 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
100862 : END DO
100863 : imax = 9*9*5
100864 : kmax = 3
100865 : i = 0
100866 : DO i1 = 1, 5
100867 : DO i2 = 1, 9
100868 : DO i3 = 1, 9
100869 : i = i + 1
100870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
100871 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
100872 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
100873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
100874 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
100875 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
100876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
100877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
100878 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
100879 : END DO
100880 : END DO
100881 : END DO
100882 : s_offset_d1 = s_offset_d1 + 3
100883 : END DO
100884 : s_offset_c1 = s_offset_c1 + 5
100885 : END DO
100886 : s_offset_b1 = s_offset_b1 + 9
100887 : END DO
100888 : s_offset_a1 = s_offset_a1 + 9
100889 : END DO
100890 : END SUBROUTINE contract_ggdp
100891 : #endif
100892 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
100893 : ! **************************************************************************************************
100894 : !> \brief ...
100895 : !> \param work ...
100896 : !> \param nl_a ...
100897 : !> \param nl_b ...
100898 : !> \param nl_c ...
100899 : !> \param nl_d ...
100900 : !> \param sphi_a ...
100901 : !> \param sphi_b ...
100902 : !> \param sphi_c ...
100903 : !> \param sphi_d ...
100904 : !> \param primitives ...
100905 : !> \param buffer1 ...
100906 : !> \param buffer2 ...
100907 : ! **************************************************************************************************
100908 : SUBROUTINE contract_ggdd(work, &
100909 : nl_a, nl_b, nl_c, nl_d, &
100910 : sphi_a, sphi_b, sphi_c, sphi_d, &
100911 : primitives, &
100912 : buffer1, buffer2)
100913 : REAL(dp), DIMENSION(15*15*6*6), INTENT(IN) :: work
100914 : INTEGER :: nl_a, nl_b, nl_c, nl_d
100915 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
100916 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
100917 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
100918 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
100919 : REAL(dp), &
100920 : DIMENSION(9*nl_a, 9*nl_b, 5*nl_c, 5*nl_d) :: primitives
100921 : REAL(dp), DIMENSION(15*15*6*6) :: buffer1, buffer2
100922 :
100923 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
100924 : kmax, s_offset_a1, s_offset_b1, &
100925 : s_offset_c1, s_offset_d1
100926 :
100927 : s_offset_a1 = 0
100928 : DO ia = 1, nl_a
100929 : s_offset_b1 = 0
100930 : DO ib = 1, nl_b
100931 : s_offset_c1 = 0
100932 : DO ic = 1, nl_c
100933 : s_offset_d1 = 0
100934 : DO id = 1, nl_d
100935 : buffer1 = 0.0_dp
100936 : imax = 15*6*6
100937 : kmax = 15
100938 : DO i = 1, imax
100939 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
100940 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
100941 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
100942 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
100943 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
100944 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
100945 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
100946 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
100947 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
100948 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
100949 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
100950 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
100951 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
100952 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
100953 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
100954 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
100955 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
100956 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
100957 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
100958 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
100959 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
100960 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
100961 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
100962 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
100963 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
100964 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
100965 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
100966 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
100967 : END DO
100968 : buffer2 = 0.0_dp
100969 : imax = 9*6*6
100970 : kmax = 15
100971 : DO i = 1, imax
100972 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
100973 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
100974 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
100975 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
100976 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
100977 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
100978 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
100979 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
100980 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
100981 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
100982 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
100983 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
100984 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
100985 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
100986 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
100987 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
100988 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
100989 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
100990 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
100991 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
100992 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
100993 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
100994 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
100995 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
100996 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
100997 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
100998 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
100999 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101000 : END DO
101001 : buffer1 = 0.0_dp
101002 : imax = 9*9*6
101003 : kmax = 6
101004 : DO i = 1, imax
101005 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
101006 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101007 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101008 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101009 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
101010 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101011 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101012 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
101013 : END DO
101014 : imax = 9*9*5
101015 : kmax = 6
101016 : i = 0
101017 : DO i1 = 1, 5
101018 : DO i2 = 1, 9
101019 : DO i3 = 1, 9
101020 : i = i + 1
101021 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101022 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101023 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
101024 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101025 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101026 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
101027 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101028 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101029 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
101030 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101031 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101032 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
101033 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101034 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101035 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
101036 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101037 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101038 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
101039 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101040 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
101041 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
101042 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101043 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101044 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
101045 : END DO
101046 : END DO
101047 : END DO
101048 : s_offset_d1 = s_offset_d1 + 5
101049 : END DO
101050 : s_offset_c1 = s_offset_c1 + 5
101051 : END DO
101052 : s_offset_b1 = s_offset_b1 + 9
101053 : END DO
101054 : s_offset_a1 = s_offset_a1 + 9
101055 : END DO
101056 : END SUBROUTINE contract_ggdd
101057 : #endif
101058 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101059 : ! **************************************************************************************************
101060 : !> \brief ...
101061 : !> \param work ...
101062 : !> \param nl_a ...
101063 : !> \param nl_b ...
101064 : !> \param nl_c ...
101065 : !> \param nl_d ...
101066 : !> \param sphi_a ...
101067 : !> \param sphi_b ...
101068 : !> \param sphi_c ...
101069 : !> \param sphi_d ...
101070 : !> \param primitives ...
101071 : !> \param buffer1 ...
101072 : !> \param buffer2 ...
101073 : ! **************************************************************************************************
101074 : SUBROUTINE contract_ggdf(work, &
101075 : nl_a, nl_b, nl_c, nl_d, &
101076 : sphi_a, sphi_b, sphi_c, sphi_d, &
101077 : primitives, &
101078 : buffer1, buffer2)
101079 : REAL(dp), DIMENSION(15*15*6*10), INTENT(IN) :: work
101080 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101081 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101082 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101083 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
101084 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
101085 : REAL(dp), &
101086 : DIMENSION(9*nl_a, 9*nl_b, 5*nl_c, 7*nl_d) :: primitives
101087 : REAL(dp), DIMENSION(15*15*6*10) :: buffer1, buffer2
101088 :
101089 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101090 : kmax, s_offset_a1, s_offset_b1, &
101091 : s_offset_c1, s_offset_d1
101092 :
101093 : s_offset_a1 = 0
101094 : DO ia = 1, nl_a
101095 : s_offset_b1 = 0
101096 : DO ib = 1, nl_b
101097 : s_offset_c1 = 0
101098 : DO ic = 1, nl_c
101099 : s_offset_d1 = 0
101100 : DO id = 1, nl_d
101101 : buffer1 = 0.0_dp
101102 : imax = 15*6*10
101103 : kmax = 15
101104 : DO i = 1, imax
101105 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
101106 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
101107 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
101108 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
101109 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
101110 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
101111 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
101112 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
101113 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
101114 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
101115 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
101116 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
101117 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
101118 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
101119 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
101120 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
101121 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
101122 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
101123 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
101124 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
101125 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
101126 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
101127 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
101128 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
101129 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
101130 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
101131 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
101132 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
101133 : END DO
101134 : buffer2 = 0.0_dp
101135 : imax = 9*6*10
101136 : kmax = 15
101137 : DO i = 1, imax
101138 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
101139 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
101140 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
101141 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
101142 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
101143 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
101144 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
101145 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
101146 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
101147 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
101148 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
101149 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
101150 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
101151 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
101152 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
101153 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
101154 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
101155 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
101156 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
101157 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
101158 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
101159 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
101160 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
101161 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
101162 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
101163 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
101164 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
101165 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101166 : END DO
101167 : buffer1 = 0.0_dp
101168 : imax = 9*9*10
101169 : kmax = 6
101170 : DO i = 1, imax
101171 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
101172 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101173 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101174 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
101176 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101177 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101178 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
101179 : END DO
101180 : imax = 9*9*5
101181 : kmax = 10
101182 : i = 0
101183 : DO i1 = 1, 5
101184 : DO i2 = 1, 9
101185 : DO i3 = 1, 9
101186 : i = i + 1
101187 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101188 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101189 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
101190 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101191 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101192 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
101193 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101194 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101195 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
101196 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101197 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101198 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
101199 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101200 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101201 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
101202 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
101203 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
101204 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
101205 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101206 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101207 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
101208 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101209 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101210 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
101211 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101212 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
101213 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
101214 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101215 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101216 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
101217 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101218 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101219 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
101220 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101221 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101222 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
101223 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101224 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101225 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
101226 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
101227 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
101228 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
101229 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101230 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101231 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
101232 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101233 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101234 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
101235 : END DO
101236 : END DO
101237 : END DO
101238 : s_offset_d1 = s_offset_d1 + 7
101239 : END DO
101240 : s_offset_c1 = s_offset_c1 + 5
101241 : END DO
101242 : s_offset_b1 = s_offset_b1 + 9
101243 : END DO
101244 : s_offset_a1 = s_offset_a1 + 9
101245 : END DO
101246 : END SUBROUTINE contract_ggdf
101247 : #endif
101248 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101249 : ! **************************************************************************************************
101250 : !> \brief ...
101251 : !> \param work ...
101252 : !> \param nl_a ...
101253 : !> \param nl_b ...
101254 : !> \param nl_c ...
101255 : !> \param nl_d ...
101256 : !> \param sphi_a ...
101257 : !> \param sphi_b ...
101258 : !> \param sphi_c ...
101259 : !> \param sphi_d ...
101260 : !> \param primitives ...
101261 : !> \param buffer1 ...
101262 : !> \param buffer2 ...
101263 : ! **************************************************************************************************
101264 : SUBROUTINE contract_ggdg(work, &
101265 : nl_a, nl_b, nl_c, nl_d, &
101266 : sphi_a, sphi_b, sphi_c, sphi_d, &
101267 : primitives, &
101268 : buffer1, buffer2)
101269 : REAL(dp), DIMENSION(15*15*6*15), INTENT(IN) :: work
101270 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101271 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101272 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101273 : REAL(dp), DIMENSION(6, 5*nl_c), INTENT(IN) :: sphi_c
101274 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
101275 : REAL(dp), &
101276 : DIMENSION(9*nl_a, 9*nl_b, 5*nl_c, 9*nl_d) :: primitives
101277 : REAL(dp), DIMENSION(15*15*6*15) :: buffer1, buffer2
101278 :
101279 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101280 : kmax, s_offset_a1, s_offset_b1, &
101281 : s_offset_c1, s_offset_d1
101282 :
101283 : s_offset_a1 = 0
101284 : DO ia = 1, nl_a
101285 : s_offset_b1 = 0
101286 : DO ib = 1, nl_b
101287 : s_offset_c1 = 0
101288 : DO ic = 1, nl_c
101289 : s_offset_d1 = 0
101290 : DO id = 1, nl_d
101291 : buffer1 = 0.0_dp
101292 : imax = 15*6*15
101293 : kmax = 15
101294 : DO i = 1, imax
101295 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
101296 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
101297 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
101298 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
101299 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
101300 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
101301 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
101302 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
101303 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
101304 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
101305 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
101306 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
101307 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
101308 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
101309 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
101310 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
101311 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
101312 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
101313 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
101314 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
101315 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
101316 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
101317 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
101318 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
101319 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
101320 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
101321 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
101322 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
101323 : END DO
101324 : buffer2 = 0.0_dp
101325 : imax = 9*6*15
101326 : kmax = 15
101327 : DO i = 1, imax
101328 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
101329 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
101330 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
101331 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
101332 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
101333 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
101334 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
101335 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
101336 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
101337 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
101338 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
101339 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
101340 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
101341 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
101342 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
101343 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
101344 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
101345 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
101346 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
101347 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
101348 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
101349 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
101350 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
101351 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
101352 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
101353 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
101354 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
101355 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101356 : END DO
101357 : buffer1 = 0.0_dp
101358 : imax = 9*9*15
101359 : kmax = 6
101360 : DO i = 1, imax
101361 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
101362 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101363 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101364 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101365 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
101366 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101367 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101368 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
101369 : END DO
101370 : imax = 9*9*5
101371 : kmax = 15
101372 : i = 0
101373 : DO i1 = 1, 5
101374 : DO i2 = 1, 9
101375 : DO i3 = 1, 9
101376 : i = i + 1
101377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101378 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101379 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
101380 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101381 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101382 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
101383 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
101384 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
101385 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
101386 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101387 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101388 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
101389 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101390 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101391 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
101392 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
101393 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
101394 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
101395 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
101396 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
101397 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
101398 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101399 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101400 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
101401 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
101402 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
101403 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
101404 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101405 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
101406 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
101407 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101408 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101409 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
101410 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101411 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101412 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
101413 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101414 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101415 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
101416 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101417 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101418 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
101419 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101420 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101421 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
101422 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
101423 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
101424 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
101425 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
101426 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
101427 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
101428 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101429 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101430 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
101431 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
101432 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
101433 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
101434 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101435 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101436 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
101437 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101438 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101439 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
101440 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
101441 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
101442 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
101443 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101444 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
101445 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
101446 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101447 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101448 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
101449 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101450 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101451 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
101452 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
101453 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
101454 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
101455 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101456 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101457 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
101458 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101459 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101460 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
101461 : END DO
101462 : END DO
101463 : END DO
101464 : s_offset_d1 = s_offset_d1 + 9
101465 : END DO
101466 : s_offset_c1 = s_offset_c1 + 5
101467 : END DO
101468 : s_offset_b1 = s_offset_b1 + 9
101469 : END DO
101470 : s_offset_a1 = s_offset_a1 + 9
101471 : END DO
101472 : END SUBROUTINE contract_ggdg
101473 : #endif
101474 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101475 : ! **************************************************************************************************
101476 : !> \brief ...
101477 : !> \param work ...
101478 : !> \param nl_a ...
101479 : !> \param nl_b ...
101480 : !> \param nl_c ...
101481 : !> \param nl_d ...
101482 : !> \param sphi_a ...
101483 : !> \param sphi_b ...
101484 : !> \param sphi_c ...
101485 : !> \param sphi_d ...
101486 : !> \param primitives ...
101487 : !> \param buffer1 ...
101488 : !> \param buffer2 ...
101489 : ! **************************************************************************************************
101490 : SUBROUTINE contract_ggfs(work, &
101491 : nl_a, nl_b, nl_c, nl_d, &
101492 : sphi_a, sphi_b, sphi_c, sphi_d, &
101493 : primitives, &
101494 : buffer1, buffer2)
101495 : REAL(dp), DIMENSION(15*15*10*1), INTENT(IN) :: work
101496 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101497 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101498 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101499 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
101500 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
101501 : REAL(dp), &
101502 : DIMENSION(9*nl_a, 9*nl_b, 7*nl_c, 1*nl_d) :: primitives
101503 : REAL(dp), DIMENSION(15*15*10*1) :: buffer1, buffer2
101504 :
101505 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101506 : kmax, s_offset_a1, s_offset_b1, &
101507 : s_offset_c1, s_offset_d1
101508 :
101509 : s_offset_a1 = 0
101510 : DO ia = 1, nl_a
101511 : s_offset_b1 = 0
101512 : DO ib = 1, nl_b
101513 : s_offset_c1 = 0
101514 : DO ic = 1, nl_c
101515 : s_offset_d1 = 0
101516 : DO id = 1, nl_d
101517 : buffer1 = 0.0_dp
101518 : imax = 15*10*1
101519 : kmax = 15
101520 : DO i = 1, imax
101521 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
101522 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
101523 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
101524 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
101525 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
101526 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
101527 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
101528 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
101529 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
101530 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
101531 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
101532 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
101533 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
101534 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
101535 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
101536 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
101537 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
101538 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
101539 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
101540 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
101541 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
101542 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
101543 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
101544 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
101545 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
101546 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
101547 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
101548 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
101549 : END DO
101550 : buffer2 = 0.0_dp
101551 : imax = 9*10*1
101552 : kmax = 15
101553 : DO i = 1, imax
101554 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
101555 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
101556 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
101557 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
101558 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
101559 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
101560 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
101561 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
101562 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
101563 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
101564 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
101565 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
101566 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
101567 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
101568 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
101569 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
101570 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
101571 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
101572 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
101573 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
101574 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
101575 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
101576 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
101577 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
101578 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
101579 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
101580 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
101581 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101582 : END DO
101583 : buffer1 = 0.0_dp
101584 : imax = 9*9*1
101585 : kmax = 10
101586 : DO i = 1, imax
101587 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101588 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
101589 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101590 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
101591 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101592 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
101593 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101594 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
101595 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101596 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
101597 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
101598 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
101599 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
101600 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
101601 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
101602 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
101603 : END DO
101604 : imax = 9*9*7
101605 : kmax = 1
101606 : i = 0
101607 : DO i1 = 1, 7
101608 : DO i2 = 1, 9
101609 : DO i3 = 1, 9
101610 : i = i + 1
101611 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101612 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
101613 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
101614 : END DO
101615 : END DO
101616 : END DO
101617 : s_offset_d1 = s_offset_d1 + 1
101618 : END DO
101619 : s_offset_c1 = s_offset_c1 + 7
101620 : END DO
101621 : s_offset_b1 = s_offset_b1 + 9
101622 : END DO
101623 : s_offset_a1 = s_offset_a1 + 9
101624 : END DO
101625 : END SUBROUTINE contract_ggfs
101626 : #endif
101627 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101628 : ! **************************************************************************************************
101629 : !> \brief ...
101630 : !> \param work ...
101631 : !> \param nl_a ...
101632 : !> \param nl_b ...
101633 : !> \param nl_c ...
101634 : !> \param nl_d ...
101635 : !> \param sphi_a ...
101636 : !> \param sphi_b ...
101637 : !> \param sphi_c ...
101638 : !> \param sphi_d ...
101639 : !> \param primitives ...
101640 : !> \param buffer1 ...
101641 : !> \param buffer2 ...
101642 : ! **************************************************************************************************
101643 : SUBROUTINE contract_ggfp(work, &
101644 : nl_a, nl_b, nl_c, nl_d, &
101645 : sphi_a, sphi_b, sphi_c, sphi_d, &
101646 : primitives, &
101647 : buffer1, buffer2)
101648 : REAL(dp), DIMENSION(15*15*10*3), INTENT(IN) :: work
101649 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101650 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101651 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101652 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
101653 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
101654 : REAL(dp), &
101655 : DIMENSION(9*nl_a, 9*nl_b, 7*nl_c, 3*nl_d) :: primitives
101656 : REAL(dp), DIMENSION(15*15*10*3) :: buffer1, buffer2
101657 :
101658 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101659 : kmax, s_offset_a1, s_offset_b1, &
101660 : s_offset_c1, s_offset_d1
101661 :
101662 : s_offset_a1 = 0
101663 : DO ia = 1, nl_a
101664 : s_offset_b1 = 0
101665 : DO ib = 1, nl_b
101666 : s_offset_c1 = 0
101667 : DO ic = 1, nl_c
101668 : s_offset_d1 = 0
101669 : DO id = 1, nl_d
101670 : buffer1 = 0.0_dp
101671 : imax = 15*10*3
101672 : kmax = 15
101673 : DO i = 1, imax
101674 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
101675 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
101676 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
101677 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
101678 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
101679 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
101680 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
101681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
101682 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
101683 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
101684 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
101685 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
101686 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
101687 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
101688 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
101689 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
101690 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
101691 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
101692 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
101693 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
101694 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
101695 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
101696 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
101697 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
101698 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
101699 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
101700 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
101701 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
101702 : END DO
101703 : buffer2 = 0.0_dp
101704 : imax = 9*10*3
101705 : kmax = 15
101706 : DO i = 1, imax
101707 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
101708 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
101709 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
101710 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
101711 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
101712 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
101713 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
101714 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
101715 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
101716 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
101717 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
101718 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
101719 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
101720 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
101721 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
101722 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
101723 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
101724 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
101725 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
101726 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
101727 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
101728 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
101729 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
101730 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
101731 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
101732 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
101733 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
101734 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101735 : END DO
101736 : buffer1 = 0.0_dp
101737 : imax = 9*9*3
101738 : kmax = 10
101739 : DO i = 1, imax
101740 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101741 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
101742 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101743 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
101744 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101745 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
101746 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101747 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
101748 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101749 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
101750 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
101751 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
101752 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
101753 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
101754 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
101755 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
101756 : END DO
101757 : imax = 9*9*7
101758 : kmax = 3
101759 : i = 0
101760 : DO i1 = 1, 7
101761 : DO i2 = 1, 9
101762 : DO i3 = 1, 9
101763 : i = i + 1
101764 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
101766 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
101767 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
101769 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
101770 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
101772 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
101773 : END DO
101774 : END DO
101775 : END DO
101776 : s_offset_d1 = s_offset_d1 + 3
101777 : END DO
101778 : s_offset_c1 = s_offset_c1 + 7
101779 : END DO
101780 : s_offset_b1 = s_offset_b1 + 9
101781 : END DO
101782 : s_offset_a1 = s_offset_a1 + 9
101783 : END DO
101784 : END SUBROUTINE contract_ggfp
101785 : #endif
101786 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101787 : ! **************************************************************************************************
101788 : !> \brief ...
101789 : !> \param work ...
101790 : !> \param nl_a ...
101791 : !> \param nl_b ...
101792 : !> \param nl_c ...
101793 : !> \param nl_d ...
101794 : !> \param sphi_a ...
101795 : !> \param sphi_b ...
101796 : !> \param sphi_c ...
101797 : !> \param sphi_d ...
101798 : !> \param primitives ...
101799 : !> \param buffer1 ...
101800 : !> \param buffer2 ...
101801 : ! **************************************************************************************************
101802 : SUBROUTINE contract_ggfd(work, &
101803 : nl_a, nl_b, nl_c, nl_d, &
101804 : sphi_a, sphi_b, sphi_c, sphi_d, &
101805 : primitives, &
101806 : buffer1, buffer2)
101807 : REAL(dp), DIMENSION(15*15*10*6), INTENT(IN) :: work
101808 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101809 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101810 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101811 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
101812 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
101813 : REAL(dp), &
101814 : DIMENSION(9*nl_a, 9*nl_b, 7*nl_c, 5*nl_d) :: primitives
101815 : REAL(dp), DIMENSION(15*15*10*6) :: buffer1, buffer2
101816 :
101817 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101818 : kmax, s_offset_a1, s_offset_b1, &
101819 : s_offset_c1, s_offset_d1
101820 :
101821 : s_offset_a1 = 0
101822 : DO ia = 1, nl_a
101823 : s_offset_b1 = 0
101824 : DO ib = 1, nl_b
101825 : s_offset_c1 = 0
101826 : DO ic = 1, nl_c
101827 : s_offset_d1 = 0
101828 : DO id = 1, nl_d
101829 : buffer1 = 0.0_dp
101830 : imax = 15*10*6
101831 : kmax = 15
101832 : DO i = 1, imax
101833 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
101834 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
101835 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
101836 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
101837 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
101838 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
101839 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
101840 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
101841 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
101842 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
101843 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
101844 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
101845 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
101846 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
101847 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
101848 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
101849 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
101850 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
101851 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
101852 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
101853 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
101854 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
101855 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
101856 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
101857 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
101858 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
101859 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
101860 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
101861 : END DO
101862 : buffer2 = 0.0_dp
101863 : imax = 9*10*6
101864 : kmax = 15
101865 : DO i = 1, imax
101866 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
101867 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
101868 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
101869 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
101870 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
101871 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
101872 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
101873 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
101874 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
101875 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
101876 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
101877 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
101878 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
101879 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
101880 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
101881 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
101882 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
101883 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
101884 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
101885 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
101886 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
101887 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
101888 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
101889 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
101890 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
101891 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
101892 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
101893 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
101894 : END DO
101895 : buffer1 = 0.0_dp
101896 : imax = 9*9*6
101897 : kmax = 10
101898 : DO i = 1, imax
101899 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
101900 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
101901 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
101902 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
101903 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
101904 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
101905 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
101906 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
101907 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
101908 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
101909 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
101910 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
101911 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
101912 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
101913 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
101914 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
101915 : END DO
101916 : imax = 9*9*7
101917 : kmax = 6
101918 : i = 0
101919 : DO i1 = 1, 7
101920 : DO i2 = 1, 9
101921 : DO i3 = 1, 9
101922 : i = i + 1
101923 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101924 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101925 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
101926 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101927 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101928 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
101929 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
101930 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
101931 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
101932 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
101933 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
101934 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
101935 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101936 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101937 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
101938 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
101939 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
101940 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
101941 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
101942 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
101943 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
101944 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
101945 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
101946 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
101947 : END DO
101948 : END DO
101949 : END DO
101950 : s_offset_d1 = s_offset_d1 + 5
101951 : END DO
101952 : s_offset_c1 = s_offset_c1 + 7
101953 : END DO
101954 : s_offset_b1 = s_offset_b1 + 9
101955 : END DO
101956 : s_offset_a1 = s_offset_a1 + 9
101957 : END DO
101958 : END SUBROUTINE contract_ggfd
101959 : #endif
101960 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
101961 : ! **************************************************************************************************
101962 : !> \brief ...
101963 : !> \param work ...
101964 : !> \param nl_a ...
101965 : !> \param nl_b ...
101966 : !> \param nl_c ...
101967 : !> \param nl_d ...
101968 : !> \param sphi_a ...
101969 : !> \param sphi_b ...
101970 : !> \param sphi_c ...
101971 : !> \param sphi_d ...
101972 : !> \param primitives ...
101973 : !> \param buffer1 ...
101974 : !> \param buffer2 ...
101975 : ! **************************************************************************************************
101976 : SUBROUTINE contract_ggff(work, &
101977 : nl_a, nl_b, nl_c, nl_d, &
101978 : sphi_a, sphi_b, sphi_c, sphi_d, &
101979 : primitives, &
101980 : buffer1, buffer2)
101981 : REAL(dp), DIMENSION(15*15*10*10), INTENT(IN) :: work
101982 : INTEGER :: nl_a, nl_b, nl_c, nl_d
101983 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
101984 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
101985 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
101986 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
101987 : REAL(dp), &
101988 : DIMENSION(9*nl_a, 9*nl_b, 7*nl_c, 7*nl_d) :: primitives
101989 : REAL(dp), DIMENSION(15*15*10*10) :: buffer1, buffer2
101990 :
101991 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
101992 : kmax, s_offset_a1, s_offset_b1, &
101993 : s_offset_c1, s_offset_d1
101994 :
101995 : s_offset_a1 = 0
101996 : DO ia = 1, nl_a
101997 : s_offset_b1 = 0
101998 : DO ib = 1, nl_b
101999 : s_offset_c1 = 0
102000 : DO ic = 1, nl_c
102001 : s_offset_d1 = 0
102002 : DO id = 1, nl_d
102003 : buffer1 = 0.0_dp
102004 : imax = 15*10*10
102005 : kmax = 15
102006 : DO i = 1, imax
102007 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102008 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102009 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102010 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102011 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102012 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102013 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102014 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102015 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102016 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102017 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102018 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102019 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102020 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102021 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102022 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102023 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102024 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102025 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102026 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102027 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102028 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102029 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102030 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102031 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102032 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102033 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102034 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102035 : END DO
102036 : buffer2 = 0.0_dp
102037 : imax = 9*10*10
102038 : kmax = 15
102039 : DO i = 1, imax
102040 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102041 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102042 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102043 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102044 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102045 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
102046 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
102047 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
102048 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
102049 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
102050 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
102051 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
102052 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
102053 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
102054 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
102055 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
102056 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
102057 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
102058 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
102059 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
102060 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
102061 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
102062 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
102063 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
102064 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
102065 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
102066 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
102067 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
102068 : END DO
102069 : buffer1 = 0.0_dp
102070 : imax = 9*9*10
102071 : kmax = 10
102072 : DO i = 1, imax
102073 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
102074 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
102075 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
102076 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
102077 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
102078 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
102079 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
102080 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
102081 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
102082 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
102083 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
102084 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
102085 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
102086 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
102087 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
102088 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
102089 : END DO
102090 : imax = 9*9*7
102091 : kmax = 10
102092 : i = 0
102093 : DO i1 = 1, 7
102094 : DO i2 = 1, 9
102095 : DO i3 = 1, 9
102096 : i = i + 1
102097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102098 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102099 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
102100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102101 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102102 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
102103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102104 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
102105 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
102106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102107 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102108 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
102109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102110 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102111 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
102112 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
102113 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
102114 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
102115 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102116 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102117 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
102118 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102119 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102120 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
102121 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
102122 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
102123 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
102124 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102125 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102126 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
102127 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102128 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
102129 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
102130 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102131 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102132 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
102133 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102134 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102135 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
102136 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
102137 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
102138 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
102139 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102140 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102141 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
102142 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102143 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102144 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
102145 : END DO
102146 : END DO
102147 : END DO
102148 : s_offset_d1 = s_offset_d1 + 7
102149 : END DO
102150 : s_offset_c1 = s_offset_c1 + 7
102151 : END DO
102152 : s_offset_b1 = s_offset_b1 + 9
102153 : END DO
102154 : s_offset_a1 = s_offset_a1 + 9
102155 : END DO
102156 : END SUBROUTINE contract_ggff
102157 : #endif
102158 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
102159 : ! **************************************************************************************************
102160 : !> \brief ...
102161 : !> \param work ...
102162 : !> \param nl_a ...
102163 : !> \param nl_b ...
102164 : !> \param nl_c ...
102165 : !> \param nl_d ...
102166 : !> \param sphi_a ...
102167 : !> \param sphi_b ...
102168 : !> \param sphi_c ...
102169 : !> \param sphi_d ...
102170 : !> \param primitives ...
102171 : !> \param buffer1 ...
102172 : !> \param buffer2 ...
102173 : ! **************************************************************************************************
102174 : SUBROUTINE contract_ggfg(work, &
102175 : nl_a, nl_b, nl_c, nl_d, &
102176 : sphi_a, sphi_b, sphi_c, sphi_d, &
102177 : primitives, &
102178 : buffer1, buffer2)
102179 : REAL(dp), DIMENSION(15*15*10*15), INTENT(IN) :: work
102180 : INTEGER :: nl_a, nl_b, nl_c, nl_d
102181 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
102182 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
102183 : REAL(dp), DIMENSION(10, 7*nl_c), INTENT(IN) :: sphi_c
102184 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
102185 : REAL(dp), &
102186 : DIMENSION(9*nl_a, 9*nl_b, 7*nl_c, 9*nl_d) :: primitives
102187 : REAL(dp), DIMENSION(15*15*10*15) :: buffer1, buffer2
102188 :
102189 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
102190 : kmax, s_offset_a1, s_offset_b1, &
102191 : s_offset_c1, s_offset_d1
102192 :
102193 : s_offset_a1 = 0
102194 : DO ia = 1, nl_a
102195 : s_offset_b1 = 0
102196 : DO ib = 1, nl_b
102197 : s_offset_c1 = 0
102198 : DO ic = 1, nl_c
102199 : s_offset_d1 = 0
102200 : DO id = 1, nl_d
102201 : buffer1 = 0.0_dp
102202 : imax = 15*10*15
102203 : kmax = 15
102204 : DO i = 1, imax
102205 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102206 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102207 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102208 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102209 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102210 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102211 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102212 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102213 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102214 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102215 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102216 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102217 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102218 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102219 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102220 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102221 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102222 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102223 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102224 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102225 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102226 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102227 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102228 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102229 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102230 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102231 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102232 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102233 : END DO
102234 : buffer2 = 0.0_dp
102235 : imax = 9*10*15
102236 : kmax = 15
102237 : DO i = 1, imax
102238 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102239 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102240 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102241 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102242 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102243 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
102244 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
102245 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
102246 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
102247 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
102248 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
102249 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
102250 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
102251 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
102252 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
102253 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
102254 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
102255 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
102256 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
102257 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
102258 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
102259 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
102260 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
102261 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
102262 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
102263 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
102264 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
102265 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
102266 : END DO
102267 : buffer1 = 0.0_dp
102268 : imax = 9*9*15
102269 : kmax = 10
102270 : DO i = 1, imax
102271 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
102272 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
102273 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
102274 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
102275 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
102276 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
102277 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
102278 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
102279 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
102280 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
102281 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
102282 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
102283 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
102284 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
102285 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
102286 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
102287 : END DO
102288 : imax = 9*9*7
102289 : kmax = 15
102290 : i = 0
102291 : DO i1 = 1, 7
102292 : DO i2 = 1, 9
102293 : DO i3 = 1, 9
102294 : i = i + 1
102295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102296 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102297 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
102298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102299 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102300 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
102301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
102302 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
102303 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
102304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102305 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
102306 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
102307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102308 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102309 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
102310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
102311 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
102312 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
102313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
102314 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
102315 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
102316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102317 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102318 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
102319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
102320 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
102321 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
102322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
102323 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
102324 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
102325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102326 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102327 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
102328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102329 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102330 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
102331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102332 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102333 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
102334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102335 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
102336 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
102337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102338 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102339 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
102340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
102341 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
102342 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
102343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
102344 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
102345 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
102346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102347 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102348 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
102349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
102350 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
102351 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
102352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102353 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102354 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
102355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102356 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102357 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
102358 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
102359 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
102360 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
102361 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
102362 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
102363 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
102364 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102365 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102366 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
102367 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102368 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102369 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
102370 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
102371 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
102372 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
102373 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102374 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102375 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
102376 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102377 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102378 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
102379 : END DO
102380 : END DO
102381 : END DO
102382 : s_offset_d1 = s_offset_d1 + 9
102383 : END DO
102384 : s_offset_c1 = s_offset_c1 + 7
102385 : END DO
102386 : s_offset_b1 = s_offset_b1 + 9
102387 : END DO
102388 : s_offset_a1 = s_offset_a1 + 9
102389 : END DO
102390 : END SUBROUTINE contract_ggfg
102391 : #endif
102392 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
102393 : ! **************************************************************************************************
102394 : !> \brief ...
102395 : !> \param work ...
102396 : !> \param nl_a ...
102397 : !> \param nl_b ...
102398 : !> \param nl_c ...
102399 : !> \param nl_d ...
102400 : !> \param sphi_a ...
102401 : !> \param sphi_b ...
102402 : !> \param sphi_c ...
102403 : !> \param sphi_d ...
102404 : !> \param primitives ...
102405 : !> \param buffer1 ...
102406 : !> \param buffer2 ...
102407 : ! **************************************************************************************************
102408 : SUBROUTINE contract_gggs(work, &
102409 : nl_a, nl_b, nl_c, nl_d, &
102410 : sphi_a, sphi_b, sphi_c, sphi_d, &
102411 : primitives, &
102412 : buffer1, buffer2)
102413 : REAL(dp), DIMENSION(15*15*15*1), INTENT(IN) :: work
102414 : INTEGER :: nl_a, nl_b, nl_c, nl_d
102415 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
102416 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
102417 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
102418 : REAL(dp), DIMENSION(1, 1*nl_d), INTENT(IN) :: sphi_d
102419 : REAL(dp), &
102420 : DIMENSION(9*nl_a, 9*nl_b, 9*nl_c, 1*nl_d) :: primitives
102421 : REAL(dp), DIMENSION(15*15*15*1) :: buffer1, buffer2
102422 :
102423 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
102424 : kmax, s_offset_a1, s_offset_b1, &
102425 : s_offset_c1, s_offset_d1
102426 :
102427 : s_offset_a1 = 0
102428 : DO ia = 1, nl_a
102429 : s_offset_b1 = 0
102430 : DO ib = 1, nl_b
102431 : s_offset_c1 = 0
102432 : DO ic = 1, nl_c
102433 : s_offset_d1 = 0
102434 : DO id = 1, nl_d
102435 : buffer1 = 0.0_dp
102436 : imax = 15*15*1
102437 : kmax = 15
102438 : DO i = 1, imax
102439 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102440 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102441 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102442 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102443 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102444 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102445 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102446 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102447 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102448 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102449 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102450 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102451 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102452 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102453 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102454 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102455 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102456 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102457 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102458 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102459 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102460 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102461 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102462 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102463 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102464 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102465 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102466 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102467 : END DO
102468 : buffer2 = 0.0_dp
102469 : imax = 9*15*1
102470 : kmax = 15
102471 : DO i = 1, imax
102472 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102473 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102474 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102475 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102476 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102477 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
102478 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
102479 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
102480 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
102481 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
102482 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
102483 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
102484 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
102485 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
102486 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
102487 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
102488 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
102489 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
102490 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
102491 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
102492 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
102493 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
102494 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
102495 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
102496 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
102497 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
102498 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
102499 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
102500 : END DO
102501 : buffer1 = 0.0_dp
102502 : imax = 9*9*1
102503 : kmax = 15
102504 : DO i = 1, imax
102505 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
102506 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
102507 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
102508 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
102509 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
102510 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
102511 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
102512 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
102513 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
102514 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
102515 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
102516 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
102517 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
102518 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
102519 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
102520 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
102521 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
102522 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
102523 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
102524 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
102525 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
102526 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
102527 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
102528 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
102529 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
102530 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
102531 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
102532 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
102533 : END DO
102534 : imax = 9*9*9
102535 : kmax = 1
102536 : i = 0
102537 : DO i1 = 1, 9
102538 : DO i2 = 1, 9
102539 : DO i3 = 1, 9
102540 : i = i + 1
102541 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102542 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
102543 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
102544 : END DO
102545 : END DO
102546 : END DO
102547 : s_offset_d1 = s_offset_d1 + 1
102548 : END DO
102549 : s_offset_c1 = s_offset_c1 + 9
102550 : END DO
102551 : s_offset_b1 = s_offset_b1 + 9
102552 : END DO
102553 : s_offset_a1 = s_offset_a1 + 9
102554 : END DO
102555 : END SUBROUTINE contract_gggs
102556 : #endif
102557 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
102558 : ! **************************************************************************************************
102559 : !> \brief ...
102560 : !> \param work ...
102561 : !> \param nl_a ...
102562 : !> \param nl_b ...
102563 : !> \param nl_c ...
102564 : !> \param nl_d ...
102565 : !> \param sphi_a ...
102566 : !> \param sphi_b ...
102567 : !> \param sphi_c ...
102568 : !> \param sphi_d ...
102569 : !> \param primitives ...
102570 : !> \param buffer1 ...
102571 : !> \param buffer2 ...
102572 : ! **************************************************************************************************
102573 : SUBROUTINE contract_gggp(work, &
102574 : nl_a, nl_b, nl_c, nl_d, &
102575 : sphi_a, sphi_b, sphi_c, sphi_d, &
102576 : primitives, &
102577 : buffer1, buffer2)
102578 : REAL(dp), DIMENSION(15*15*15*3), INTENT(IN) :: work
102579 : INTEGER :: nl_a, nl_b, nl_c, nl_d
102580 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
102581 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
102582 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
102583 : REAL(dp), DIMENSION(3, 3*nl_d), INTENT(IN) :: sphi_d
102584 : REAL(dp), &
102585 : DIMENSION(9*nl_a, 9*nl_b, 9*nl_c, 3*nl_d) :: primitives
102586 : REAL(dp), DIMENSION(15*15*15*3) :: buffer1, buffer2
102587 :
102588 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
102589 : kmax, s_offset_a1, s_offset_b1, &
102590 : s_offset_c1, s_offset_d1
102591 :
102592 : s_offset_a1 = 0
102593 : DO ia = 1, nl_a
102594 : s_offset_b1 = 0
102595 : DO ib = 1, nl_b
102596 : s_offset_c1 = 0
102597 : DO ic = 1, nl_c
102598 : s_offset_d1 = 0
102599 : DO id = 1, nl_d
102600 : buffer1 = 0.0_dp
102601 : imax = 15*15*3
102602 : kmax = 15
102603 : DO i = 1, imax
102604 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102605 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102606 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102607 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102608 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102609 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102610 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102611 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102612 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102613 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102614 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102615 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102616 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102617 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102618 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102619 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102620 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102621 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102622 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102623 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102624 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102625 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102626 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102627 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102628 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102629 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102630 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102631 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102632 : END DO
102633 : buffer2 = 0.0_dp
102634 : imax = 9*15*3
102635 : kmax = 15
102636 : DO i = 1, imax
102637 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102638 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102639 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102640 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102641 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102642 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
102643 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
102644 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
102645 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
102646 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
102647 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
102648 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
102649 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
102650 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
102651 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
102652 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
102653 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
102654 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
102655 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
102656 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
102657 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
102658 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
102659 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
102660 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
102661 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
102662 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
102663 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
102664 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
102665 : END DO
102666 : buffer1 = 0.0_dp
102667 : imax = 9*9*3
102668 : kmax = 15
102669 : DO i = 1, imax
102670 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
102671 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
102672 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
102673 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
102674 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
102675 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
102676 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
102677 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
102678 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
102679 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
102680 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
102681 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
102682 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
102683 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
102684 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
102685 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
102686 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
102687 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
102688 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
102689 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
102690 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
102691 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
102692 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
102693 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
102694 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
102695 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
102696 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
102697 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
102698 : END DO
102699 : imax = 9*9*9
102700 : kmax = 3
102701 : i = 0
102702 : DO i1 = 1, 9
102703 : DO i2 = 1, 9
102704 : DO i3 = 1, 9
102705 : i = i + 1
102706 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
102708 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
102709 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
102711 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
102712 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
102713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
102714 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
102715 : END DO
102716 : END DO
102717 : END DO
102718 : s_offset_d1 = s_offset_d1 + 3
102719 : END DO
102720 : s_offset_c1 = s_offset_c1 + 9
102721 : END DO
102722 : s_offset_b1 = s_offset_b1 + 9
102723 : END DO
102724 : s_offset_a1 = s_offset_a1 + 9
102725 : END DO
102726 : END SUBROUTINE contract_gggp
102727 : #endif
102728 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
102729 : ! **************************************************************************************************
102730 : !> \brief ...
102731 : !> \param work ...
102732 : !> \param nl_a ...
102733 : !> \param nl_b ...
102734 : !> \param nl_c ...
102735 : !> \param nl_d ...
102736 : !> \param sphi_a ...
102737 : !> \param sphi_b ...
102738 : !> \param sphi_c ...
102739 : !> \param sphi_d ...
102740 : !> \param primitives ...
102741 : !> \param buffer1 ...
102742 : !> \param buffer2 ...
102743 : ! **************************************************************************************************
102744 : SUBROUTINE contract_gggd(work, &
102745 : nl_a, nl_b, nl_c, nl_d, &
102746 : sphi_a, sphi_b, sphi_c, sphi_d, &
102747 : primitives, &
102748 : buffer1, buffer2)
102749 : REAL(dp), DIMENSION(15*15*15*6), INTENT(IN) :: work
102750 : INTEGER :: nl_a, nl_b, nl_c, nl_d
102751 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
102752 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
102753 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
102754 : REAL(dp), DIMENSION(6, 5*nl_d), INTENT(IN) :: sphi_d
102755 : REAL(dp), &
102756 : DIMENSION(9*nl_a, 9*nl_b, 9*nl_c, 5*nl_d) :: primitives
102757 : REAL(dp), DIMENSION(15*15*15*6) :: buffer1, buffer2
102758 :
102759 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
102760 : kmax, s_offset_a1, s_offset_b1, &
102761 : s_offset_c1, s_offset_d1
102762 :
102763 : s_offset_a1 = 0
102764 : DO ia = 1, nl_a
102765 : s_offset_b1 = 0
102766 : DO ib = 1, nl_b
102767 : s_offset_c1 = 0
102768 : DO ic = 1, nl_c
102769 : s_offset_d1 = 0
102770 : DO id = 1, nl_d
102771 : buffer1 = 0.0_dp
102772 : imax = 15*15*6
102773 : kmax = 15
102774 : DO i = 1, imax
102775 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102776 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102777 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102778 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102779 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102780 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102781 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102782 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102783 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102784 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102785 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102786 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102787 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102788 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102789 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102790 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102791 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102792 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102793 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102794 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102795 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102796 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102797 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102798 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102799 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102800 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102801 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102802 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102803 : END DO
102804 : buffer2 = 0.0_dp
102805 : imax = 9*15*6
102806 : kmax = 15
102807 : DO i = 1, imax
102808 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102809 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102810 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102811 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102812 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102813 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
102814 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
102815 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
102816 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
102817 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
102818 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
102819 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
102820 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
102821 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
102822 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
102823 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
102824 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
102825 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
102826 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
102827 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
102828 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
102829 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
102830 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
102831 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
102832 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
102833 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
102834 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
102835 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
102836 : END DO
102837 : buffer1 = 0.0_dp
102838 : imax = 9*9*6
102839 : kmax = 15
102840 : DO i = 1, imax
102841 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
102842 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
102843 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
102844 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
102845 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
102846 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
102847 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
102848 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
102849 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
102850 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
102851 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
102852 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
102853 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
102854 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
102855 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
102856 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
102857 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
102858 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
102859 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
102860 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
102861 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
102862 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
102863 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
102864 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
102865 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
102866 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
102867 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
102868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
102869 : END DO
102870 : imax = 9*9*9
102871 : kmax = 6
102872 : i = 0
102873 : DO i1 = 1, 9
102874 : DO i2 = 1, 9
102875 : DO i3 = 1, 9
102876 : i = i + 1
102877 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102879 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
102880 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102882 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
102883 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
102884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
102885 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
102886 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
102887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
102888 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
102889 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102891 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
102892 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
102893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
102894 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
102895 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
102896 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
102897 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
102898 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
102899 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
102900 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
102901 : END DO
102902 : END DO
102903 : END DO
102904 : s_offset_d1 = s_offset_d1 + 5
102905 : END DO
102906 : s_offset_c1 = s_offset_c1 + 9
102907 : END DO
102908 : s_offset_b1 = s_offset_b1 + 9
102909 : END DO
102910 : s_offset_a1 = s_offset_a1 + 9
102911 : END DO
102912 : END SUBROUTINE contract_gggd
102913 : #endif
102914 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
102915 : ! **************************************************************************************************
102916 : !> \brief ...
102917 : !> \param work ...
102918 : !> \param nl_a ...
102919 : !> \param nl_b ...
102920 : !> \param nl_c ...
102921 : !> \param nl_d ...
102922 : !> \param sphi_a ...
102923 : !> \param sphi_b ...
102924 : !> \param sphi_c ...
102925 : !> \param sphi_d ...
102926 : !> \param primitives ...
102927 : !> \param buffer1 ...
102928 : !> \param buffer2 ...
102929 : ! **************************************************************************************************
102930 : SUBROUTINE contract_gggf(work, &
102931 : nl_a, nl_b, nl_c, nl_d, &
102932 : sphi_a, sphi_b, sphi_c, sphi_d, &
102933 : primitives, &
102934 : buffer1, buffer2)
102935 : REAL(dp), DIMENSION(15*15*15*10), INTENT(IN) :: work
102936 : INTEGER :: nl_a, nl_b, nl_c, nl_d
102937 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
102938 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
102939 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
102940 : REAL(dp), DIMENSION(10, 7*nl_d), INTENT(IN) :: sphi_d
102941 : REAL(dp), &
102942 : DIMENSION(9*nl_a, 9*nl_b, 9*nl_c, 7*nl_d) :: primitives
102943 : REAL(dp), DIMENSION(15*15*15*10) :: buffer1, buffer2
102944 :
102945 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
102946 : kmax, s_offset_a1, s_offset_b1, &
102947 : s_offset_c1, s_offset_d1
102948 :
102949 : s_offset_a1 = 0
102950 : DO ia = 1, nl_a
102951 : s_offset_b1 = 0
102952 : DO ib = 1, nl_b
102953 : s_offset_c1 = 0
102954 : DO ic = 1, nl_c
102955 : s_offset_d1 = 0
102956 : DO id = 1, nl_d
102957 : buffer1 = 0.0_dp
102958 : imax = 15*15*10
102959 : kmax = 15
102960 : DO i = 1, imax
102961 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
102962 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
102963 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
102964 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
102965 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
102966 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
102967 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
102968 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
102969 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
102970 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
102971 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
102972 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
102973 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
102974 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
102975 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
102976 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
102977 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
102978 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
102979 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
102980 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
102981 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
102982 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
102983 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
102984 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
102985 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
102986 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
102987 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
102988 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
102989 : END DO
102990 : buffer2 = 0.0_dp
102991 : imax = 9*15*10
102992 : kmax = 15
102993 : DO i = 1, imax
102994 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
102995 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
102996 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
102997 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
102998 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
102999 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
103000 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
103001 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
103002 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
103003 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
103004 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
103005 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
103006 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
103007 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
103008 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
103009 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
103010 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
103011 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
103012 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
103013 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
103014 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
103015 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
103016 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
103017 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
103018 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
103019 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
103020 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
103021 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
103022 : END DO
103023 : buffer1 = 0.0_dp
103024 : imax = 9*9*10
103025 : kmax = 15
103026 : DO i = 1, imax
103027 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
103028 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
103029 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
103030 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103031 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
103032 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
103033 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
103034 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
103035 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
103036 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
103037 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
103038 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
103039 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
103040 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
103041 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
103042 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
103043 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
103044 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
103045 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
103046 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
103047 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
103048 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
103049 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
103050 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
103051 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
103052 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
103053 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
103054 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
103055 : END DO
103056 : imax = 9*9*9
103057 : kmax = 10
103058 : i = 0
103059 : DO i1 = 1, 9
103060 : DO i2 = 1, 9
103061 : DO i3 = 1, 9
103062 : i = i + 1
103063 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103064 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103065 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
103066 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103067 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103068 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
103069 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103070 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103071 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103072 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103073 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103074 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
103075 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103076 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103077 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
103078 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103079 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103080 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
103081 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103082 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103083 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
103084 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103085 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103086 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
103087 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103088 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103089 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
103090 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103091 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103092 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
103093 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103094 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103095 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
103096 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103097 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103098 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
103099 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103100 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103101 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
103102 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103103 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103104 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
103105 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103106 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103107 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
103108 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103109 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103110 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
103111 : END DO
103112 : END DO
103113 : END DO
103114 : s_offset_d1 = s_offset_d1 + 7
103115 : END DO
103116 : s_offset_c1 = s_offset_c1 + 9
103117 : END DO
103118 : s_offset_b1 = s_offset_b1 + 9
103119 : END DO
103120 : s_offset_a1 = s_offset_a1 + 9
103121 : END DO
103122 : END SUBROUTINE contract_gggf
103123 : #endif
103124 : #if __MAX_CONTR > 4 || __MAX_CONTR == 4
103125 : ! **************************************************************************************************
103126 : !> \brief ...
103127 : !> \param work ...
103128 : !> \param nl_a ...
103129 : !> \param nl_b ...
103130 : !> \param nl_c ...
103131 : !> \param nl_d ...
103132 : !> \param sphi_a ...
103133 : !> \param sphi_b ...
103134 : !> \param sphi_c ...
103135 : !> \param sphi_d ...
103136 : !> \param primitives ...
103137 : !> \param buffer1 ...
103138 : !> \param buffer2 ...
103139 : ! **************************************************************************************************
103140 : SUBROUTINE contract_gggg(work, &
103141 : nl_a, nl_b, nl_c, nl_d, &
103142 : sphi_a, sphi_b, sphi_c, sphi_d, &
103143 : primitives, &
103144 : buffer1, buffer2)
103145 : REAL(dp), DIMENSION(15*15*15*15), INTENT(IN) :: work
103146 : INTEGER :: nl_a, nl_b, nl_c, nl_d
103147 : REAL(dp), DIMENSION(15, 9*nl_a), INTENT(IN) :: sphi_a
103148 : REAL(dp), DIMENSION(15, 9*nl_b), INTENT(IN) :: sphi_b
103149 : REAL(dp), DIMENSION(15, 9*nl_c), INTENT(IN) :: sphi_c
103150 : REAL(dp), DIMENSION(15, 9*nl_d), INTENT(IN) :: sphi_d
103151 : REAL(dp), &
103152 : DIMENSION(9*nl_a, 9*nl_b, 9*nl_c, 9*nl_d) :: primitives
103153 : REAL(dp), DIMENSION(15*15*15*15) :: buffer1, buffer2
103154 :
103155 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, &
103156 : kmax, s_offset_a1, s_offset_b1, &
103157 : s_offset_c1, s_offset_d1
103158 :
103159 : s_offset_a1 = 0
103160 : DO ia = 1, nl_a
103161 : s_offset_b1 = 0
103162 : DO ib = 1, nl_b
103163 : s_offset_c1 = 0
103164 : DO ic = 1, nl_c
103165 : s_offset_d1 = 0
103166 : DO id = 1, nl_d
103167 : buffer1 = 0.0_dp
103168 : imax = 15*15*15
103169 : kmax = 15
103170 : DO i = 1, imax
103171 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
103172 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
103173 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
103174 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
103175 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
103176 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
103177 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
103178 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
103179 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
103180 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
103181 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
103182 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
103183 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
103184 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
103185 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
103186 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
103187 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
103188 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
103189 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
103190 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
103191 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
103192 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
103193 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
103194 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
103195 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
103196 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
103197 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
103198 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
103199 : END DO
103200 : buffer2 = 0.0_dp
103201 : imax = 9*15*15
103202 : kmax = 15
103203 : DO i = 1, imax
103204 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
103205 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
103206 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
103207 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
103208 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
103209 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
103210 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
103211 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
103212 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
103213 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
103214 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
103215 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
103216 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
103217 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
103218 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
103219 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
103220 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
103221 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
103222 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
103223 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
103224 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
103225 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
103226 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
103227 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
103228 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
103229 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
103230 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
103231 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
103232 : END DO
103233 : buffer1 = 0.0_dp
103234 : imax = 9*9*15
103235 : kmax = 15
103236 : DO i = 1, imax
103237 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
103238 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
103239 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
103240 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103241 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
103242 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
103243 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
103244 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
103245 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
103246 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
103247 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
103248 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
103249 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
103250 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
103251 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
103252 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
103253 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
103254 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
103255 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
103256 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
103257 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
103258 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
103259 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
103260 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
103261 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
103262 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
103263 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
103264 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
103265 : END DO
103266 : imax = 9*9*9
103267 : kmax = 15
103268 : i = 0
103269 : DO i1 = 1, 9
103270 : DO i2 = 1, 9
103271 : DO i3 = 1, 9
103272 : i = i + 1
103273 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103274 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103275 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
103276 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103277 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103278 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
103279 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103280 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103281 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
103282 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103283 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103284 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103285 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103286 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103287 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
103288 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103289 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103290 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
103291 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
103292 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
103293 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
103294 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103295 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103296 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
103297 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103298 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103299 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
103300 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103301 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103302 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
103303 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103304 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103305 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
103306 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103307 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103308 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
103309 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103310 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103311 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
103312 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103313 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103314 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
103315 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103316 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103317 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
103318 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103319 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103320 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
103321 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
103322 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
103323 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
103324 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103325 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103326 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
103327 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103328 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103329 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
103330 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103331 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103332 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
103333 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103334 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103335 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
103336 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103337 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103338 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
103339 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103340 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103341 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
103342 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103343 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103344 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
103345 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103346 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103347 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
103348 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103349 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103350 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
103351 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103352 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103353 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
103354 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103355 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103356 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
103357 : END DO
103358 : END DO
103359 : END DO
103360 : s_offset_d1 = s_offset_d1 + 9
103361 : END DO
103362 : s_offset_c1 = s_offset_c1 + 9
103363 : END DO
103364 : s_offset_b1 = s_offset_b1 + 9
103365 : END DO
103366 : s_offset_a1 = s_offset_a1 + 9
103367 : END DO
103368 : END SUBROUTINE contract_gggg
103369 : #endif
103370 :
103371 : ! **************************************************************************************************
103372 : !> \brief ...
103373 : !> \param ncoa ...
103374 : !> \param ncob ...
103375 : !> \param ncoc ...
103376 : !> \param ncod ...
103377 : !> \param nsoa ...
103378 : !> \param nsob ...
103379 : !> \param nsoc ...
103380 : !> \param nsod ...
103381 : !> \param work ...
103382 : !> \param nl_a ...
103383 : !> \param nl_b ...
103384 : !> \param nl_c ...
103385 : !> \param nl_d ...
103386 : !> \param sphi_a ...
103387 : !> \param sphi_b ...
103388 : !> \param sphi_c ...
103389 : !> \param sphi_d ...
103390 : !> \param primitives ...
103391 : !> \param buffer1 ...
103392 : !> \param buffer2 ...
103393 : ! **************************************************************************************************
103394 780937 : SUBROUTINE contract_generic(ncoa, ncob, ncoc, ncod, &
103395 : nsoa, nsob, nsoc, nsod, &
103396 780937 : work, &
103397 : nl_a, nl_b, nl_c, nl_d, &
103398 780937 : sphi_a, sphi_b, sphi_c, sphi_d, &
103399 780937 : primitives, &
103400 780937 : buffer1, buffer2)
103401 :
103402 : INTEGER, INTENT(IN) :: ncoa, ncob, ncoc, ncod, nsoa, nsob, &
103403 : nsoc, nsod
103404 : REAL(dp), DIMENSION(ncoa*ncob*ncoc*ncod), &
103405 : INTENT(IN) :: work
103406 : INTEGER :: nl_a, nl_b, nl_c, nl_d
103407 : REAL(dp), DIMENSION(ncoa, nsoa*nl_a), INTENT(IN) :: sphi_a
103408 : REAL(dp), DIMENSION(ncob, nsob*nl_b), INTENT(IN) :: sphi_b
103409 : REAL(dp), DIMENSION(ncoc, nsoc*nl_c), INTENT(IN) :: sphi_c
103410 : REAL(dp), DIMENSION(ncod, nsod*nl_d), INTENT(IN) :: sphi_d
103411 : REAL(dp), DIMENSION(nsoa*nl_a, nsob*nl_b, nsoc*&
103412 : nl_c, nsod*nl_d) :: primitives
103413 : REAL(dp), DIMENSION(ncoa*ncob*ncoc*ncod) :: buffer1, buffer2
103414 :
103415 : INTEGER :: i, i1, i2, i3, ia, ib, ic, id, imax, j, &
103416 : jmax, k, kmax, s_offset_a1, &
103417 : s_offset_b1, s_offset_c1, s_offset_d1
103418 :
103419 780937 : s_offset_a1 = 0
103420 1657375 : DO ia = 1, nl_a
103421 : s_offset_b1 = 0
103422 1838141 : DO ib = 1, nl_b
103423 : s_offset_c1 = 0
103424 2045662 : DO ic = 1, nl_c
103425 : s_offset_d1 = 0
103426 2269302 : DO id = 1, nl_d
103427 :
103428 171186063 : buffer1 = 0.0_dp
103429 1185343 : imax = ncob*ncoc*ncod
103430 1185343 : jmax = nsoa
103431 1185343 : kmax = ncoa
103432 : SELECT CASE (kmax)
103433 : CASE (1)
103434 32216052 : DO i = 1, imax
103435 32216052 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 1 + s_offset_a1)
103436 : END DO
103437 : CASE (3)
103438 14441870 : DO i = 1, imax
103439 14200260 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
103440 14200260 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
103441 14441870 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 2 + s_offset_a1)
103442 : END DO
103443 : CASE (6)
103444 6308880 : DO i = 1, imax
103445 6219920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
103446 6219920 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
103447 6219920 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
103448 6219920 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
103449 6219920 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
103450 6219920 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
103451 6219920 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
103452 6308880 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 3 + s_offset_a1)
103453 : END DO
103454 : CASE (10)
103455 6185808 : DO i = 1, imax
103456 5837037 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
103457 5837037 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
103458 5837037 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
103459 5837037 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
103460 5837037 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
103461 5837037 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
103462 5837037 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
103463 5837037 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 7 + s_offset_a1)
103464 5837037 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
103465 5837037 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
103466 5837037 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
103467 5837037 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
103468 5837037 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 4 + s_offset_a1)
103469 5837037 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
103470 5837037 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
103471 6185808 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 4 + s_offset_a1)
103472 : END DO
103473 : CASE (15)
103474 0 : DO i = 1, imax
103475 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
103476 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 7 + s_offset_a1)
103477 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 9 + s_offset_a1)
103478 0 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
103479 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 3 + s_offset_a1)
103480 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 6 + s_offset_a1)
103481 0 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 8 + s_offset_a1)
103482 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
103483 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 9 + s_offset_a1)
103484 0 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
103485 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 4 + s_offset_a1)
103486 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 5 + s_offset_a1)
103487 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(6 + (i - 1)*kmax)*sphi_a(6, 7 + s_offset_a1)
103488 0 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 1 + s_offset_a1)
103489 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(7 + (i - 1)*kmax)*sphi_a(7, 3 + s_offset_a1)
103490 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 6 + s_offset_a1)
103491 0 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + work(8 + (i - 1)*kmax)*sphi_a(8, 8 + s_offset_a1)
103492 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(9 + (i - 1)*kmax)*sphi_a(9, 3 + s_offset_a1)
103493 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + work(10 + (i - 1)*kmax)*sphi_a(10, 6 + s_offset_a1)
103494 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 5 + s_offset_a1)
103495 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 7 + s_offset_a1)
103496 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + work(11 + (i - 1)*kmax)*sphi_a(11, 9 + s_offset_a1)
103497 0 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 2 + s_offset_a1)
103498 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(12 + (i - 1)*kmax)*sphi_a(12, 4 + s_offset_a1)
103499 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 5 + s_offset_a1)
103500 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + work(13 + (i - 1)*kmax)*sphi_a(13, 7 + s_offset_a1)
103501 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(14 + (i - 1)*kmax)*sphi_a(14, 4 + s_offset_a1)
103502 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(15 + (i - 1)*kmax)*sphi_a(15, 5 + s_offset_a1)
103503 : END DO
103504 : CASE DEFAULT
103505 1185343 : DO j = 1, jmax
103506 0 : DO i = 1, imax
103507 0 : DO k = 1, kmax
103508 0 : buffer1(i + imax*(j - 1)) = buffer1(i + imax*(j - 1)) + work(k + (i - 1)*kmax)*sphi_a(k, j + s_offset_a1)
103509 : END DO
103510 : END DO
103511 : END DO
103512 : END SELECT
103513 171186063 : buffer2 = 0.0_dp
103514 1185343 : imax = nsoa*ncoc*ncod
103515 1185343 : jmax = nsob
103516 1185343 : kmax = ncob
103517 : SELECT CASE (kmax)
103518 : CASE (1)
103519 27282961 : DO i = 1, imax
103520 27282961 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 1 + s_offset_b1)
103521 : END DO
103522 : CASE (3)
103523 10294992 : DO i = 1, imax
103524 10086928 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
103525 10086928 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
103526 10294992 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 2 + s_offset_b1)
103527 : END DO
103528 : CASE (6)
103529 5127461 : DO i = 1, imax
103530 5042517 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
103531 5042517 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
103532 5042517 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
103533 5042517 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
103534 5042517 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
103535 5042517 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
103536 5042517 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
103537 5127461 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 3 + s_offset_b1)
103538 : END DO
103539 : CASE (10)
103540 6219095 : DO i = 1, imax
103541 5904898 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
103542 5904898 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
103543 5904898 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
103544 5904898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
103545 5904898 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
103546 5904898 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
103547 5904898 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
103548 5904898 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 7 + s_offset_b1)
103549 5904898 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
103550 5904898 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
103551 5904898 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
103552 5904898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
103553 5904898 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 4 + s_offset_b1)
103554 5904898 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
103555 5904898 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
103556 6219095 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 4 + s_offset_b1)
103557 : END DO
103558 : CASE (15)
103559 0 : DO i = 1, imax
103560 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
103561 0 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 7 + s_offset_b1)
103562 0 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 9 + s_offset_b1)
103563 0 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
103564 0 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 3 + s_offset_b1)
103565 0 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 6 + s_offset_b1)
103566 0 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 8 + s_offset_b1)
103567 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
103568 0 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 9 + s_offset_b1)
103569 0 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
103570 0 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 4 + s_offset_b1)
103571 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 5 + s_offset_b1)
103572 0 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(6 + (i - 1)*kmax)*sphi_b(6, 7 + s_offset_b1)
103573 0 : buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 1 + s_offset_b1)
103574 0 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(7 + (i - 1)*kmax)*sphi_b(7, 3 + s_offset_b1)
103575 0 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 6 + s_offset_b1)
103576 0 : buffer2(i + imax*(8 - 1)) = buffer2(i + imax*(8 - 1)) + buffer1(8 + (i - 1)*kmax)*sphi_b(8, 8 + s_offset_b1)
103577 0 : buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(9 + (i - 1)*kmax)*sphi_b(9, 3 + s_offset_b1)
103578 0 : buffer2(i + imax*(6 - 1)) = buffer2(i + imax*(6 - 1)) + buffer1(10 + (i - 1)*kmax)*sphi_b(10, 6 + s_offset_b1)
103579 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 5 + s_offset_b1)
103580 0 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 7 + s_offset_b1)
103581 0 : buffer2(i + imax*(9 - 1)) = buffer2(i + imax*(9 - 1)) + buffer1(11 + (i - 1)*kmax)*sphi_b(11, 9 + s_offset_b1)
103582 0 : buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 2 + s_offset_b1)
103583 0 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(12 + (i - 1)*kmax)*sphi_b(12, 4 + s_offset_b1)
103584 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 5 + s_offset_b1)
103585 0 : buffer2(i + imax*(7 - 1)) = buffer2(i + imax*(7 - 1)) + buffer1(13 + (i - 1)*kmax)*sphi_b(13, 7 + s_offset_b1)
103586 0 : buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(14 + (i - 1)*kmax)*sphi_b(14, 4 + s_offset_b1)
103587 0 : buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(15 + (i - 1)*kmax)*sphi_b(15, 5 + s_offset_b1)
103588 : END DO
103589 : CASE DEFAULT
103590 1185343 : DO j = 1, jmax
103591 0 : DO i = 1, imax
103592 0 : DO k = 1, kmax
103593 0 : buffer2(i + imax*(j - 1)) = buffer2(i + imax*(j - 1)) + buffer1(k + (i - 1)*kmax)*sphi_b(k, j + s_offset_b1)
103594 : END DO
103595 : END DO
103596 : END DO
103597 : END SELECT
103598 171186063 : buffer1 = 0.0_dp
103599 1185343 : imax = nsoa*nsob*ncod
103600 1185343 : jmax = nsoc
103601 1185343 : kmax = ncoc
103602 : SELECT CASE (kmax)
103603 : CASE (1)
103604 22160546 : DO i = 1, imax
103605 22160546 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 1 + s_offset_c1)
103606 : END DO
103607 : CASE (3)
103608 10964314 : DO i = 1, imax
103609 10679364 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
103610 10679364 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103611 10964314 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 2 + s_offset_c1)
103612 : END DO
103613 : CASE (6)
103614 4474150 : DO i = 1, imax
103615 4383868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
103616 4383868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
103617 4383868 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103618 4383868 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
103619 4383868 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
103620 4383868 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
103621 4383868 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
103622 4474150 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 3 + s_offset_c1)
103623 : END DO
103624 : CASE (10)
103625 4639243 : DO i = 1, imax
103626 4353500 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
103627 4353500 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
103628 4353500 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103629 4353500 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
103630 4353500 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
103631 4353500 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
103632 4353500 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
103633 4353500 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 7 + s_offset_c1)
103634 4353500 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
103635 4353500 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
103636 4353500 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
103637 4353500 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
103638 4353500 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 4 + s_offset_c1)
103639 4353500 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
103640 4353500 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
103641 4639243 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 4 + s_offset_c1)
103642 : END DO
103643 : CASE (15)
103644 0 : DO i = 1, imax
103645 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
103646 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 7 + s_offset_c1)
103647 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 9 + s_offset_c1)
103648 0 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
103649 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 3 + s_offset_c1)
103650 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 6 + s_offset_c1)
103651 0 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 8 + s_offset_c1)
103652 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
103653 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 9 + s_offset_c1)
103654 0 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
103655 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 4 + s_offset_c1)
103656 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 5 + s_offset_c1)
103657 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(6 + (i - 1)*kmax)*sphi_c(6, 7 + s_offset_c1)
103658 0 : buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 1 + s_offset_c1)
103659 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(7 + (i - 1)*kmax)*sphi_c(7, 3 + s_offset_c1)
103660 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 6 + s_offset_c1)
103661 0 : buffer1(i + imax*(8 - 1)) = buffer1(i + imax*(8 - 1)) + buffer2(8 + (i - 1)*kmax)*sphi_c(8, 8 + s_offset_c1)
103662 0 : buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(9 + (i - 1)*kmax)*sphi_c(9, 3 + s_offset_c1)
103663 0 : buffer1(i + imax*(6 - 1)) = buffer1(i + imax*(6 - 1)) + buffer2(10 + (i - 1)*kmax)*sphi_c(10, 6 + s_offset_c1)
103664 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 5 + s_offset_c1)
103665 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 7 + s_offset_c1)
103666 0 : buffer1(i + imax*(9 - 1)) = buffer1(i + imax*(9 - 1)) + buffer2(11 + (i - 1)*kmax)*sphi_c(11, 9 + s_offset_c1)
103667 0 : buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 2 + s_offset_c1)
103668 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(12 + (i - 1)*kmax)*sphi_c(12, 4 + s_offset_c1)
103669 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 5 + s_offset_c1)
103670 0 : buffer1(i + imax*(7 - 1)) = buffer1(i + imax*(7 - 1)) + buffer2(13 + (i - 1)*kmax)*sphi_c(13, 7 + s_offset_c1)
103671 0 : buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(14 + (i - 1)*kmax)*sphi_c(14, 4 + s_offset_c1)
103672 0 : buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(15 + (i - 1)*kmax)*sphi_c(15, 5 + s_offset_c1)
103673 : END DO
103674 : CASE DEFAULT
103675 1185343 : DO j = 1, jmax
103676 0 : DO i = 1, imax
103677 0 : DO k = 1, kmax
103678 : buffer1(i + imax*(j - 1)) = &
103679 : buffer1(i + imax*(j - 1)) + &
103680 : buffer2(k + (i - 1)*kmax)* &
103681 0 : sphi_c(k, j + s_offset_c1)
103682 : END DO
103683 : END DO
103684 : END DO
103685 : END SELECT
103686 1185343 : imax = nsoa*nsob*nsoc
103687 1185343 : jmax = nsod
103688 1185343 : kmax = ncod
103689 1185343 : i = 0
103690 : SELECT CASE (kmax)
103691 : CASE (1)
103692 2028822 : DO i1 = 1, nsoc
103693 6286644 : DO i2 = 1, nsob
103694 19518406 : DO i3 = 1, nsoa
103695 13692574 : i = i + 1
103696 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103697 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
103698 17950396 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
103699 : END DO
103700 : END DO
103701 : END DO
103702 : CASE (3)
103703 1115806 : DO i1 = 1, nsoc
103704 3476404 : DO i2 = 1, nsob
103705 10075432 : DO i3 = 1, nsoa
103706 6855114 : i = i + 1
103707 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103708 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) &
103709 6855114 : + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
103710 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103711 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) &
103712 6855114 : + buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103713 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103714 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) &
103715 9215712 : + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
103716 : END DO
103717 : END DO
103718 : END DO
103719 : CASE (6)
103720 510454 : DO i1 = 1, nsoc
103721 1758076 : DO i2 = 1, nsob
103722 5380420 : DO i3 = 1, nsoa
103723 3728214 : i = i + 1
103724 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103725 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103726 3728214 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 3 + s_offset_d1)
103727 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103728 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103729 3728214 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
103730 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103731 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103732 3728214 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103733 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103734 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103735 3728214 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
103736 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103737 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103738 3728214 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 3 + s_offset_d1)
103739 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103740 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103741 3728214 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
103742 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103743 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103744 3728214 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
103745 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103746 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103747 4975836 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
103748 : END DO
103749 : END DO
103750 : END DO
103751 : CASE (10)
103752 1361090 : DO i1 = 1, nsoc
103753 3656671 : DO i2 = 1, nsob
103754 8238187 : DO i3 = 1, nsoa
103755 4944091 : i = i + 1
103756 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103757 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103758 4944091 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
103759 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103760 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103761 4944091 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
103762 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103763 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103764 4944091 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103765 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103766 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103767 4944091 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
103768 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103769 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103770 4944091 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 4 + s_offset_d1)
103771 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103772 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103773 4944091 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
103774 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103775 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103776 4944091 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
103777 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103778 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103779 4944091 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 7 + s_offset_d1)
103780 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103781 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103782 4944091 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
103783 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103784 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103785 4944091 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
103786 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103787 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103788 4944091 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
103789 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103790 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103791 4944091 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
103792 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103793 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103794 4944091 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 4 + s_offset_d1)
103795 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103796 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103797 4944091 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
103798 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103799 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103800 4944091 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
103801 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103802 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103803 7239672 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 4 + s_offset_d1)
103804 : END DO
103805 : END DO
103806 : END DO
103807 : CASE (15)
103808 0 : DO i1 = 1, nsoc
103809 0 : DO i2 = 1, nsob
103810 0 : DO i3 = 1, nsoa
103811 0 : i = i + 1
103812 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103813 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103814 0 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 5 + s_offset_d1)
103815 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103816 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103817 0 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 7 + s_offset_d1)
103818 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103819 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103820 0 : buffer1(1 + (i - 1)*kmax)*sphi_d(1, 9 + s_offset_d1)
103821 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103822 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103823 0 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 1 + s_offset_d1)
103824 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103825 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103826 0 : buffer1(2 + (i - 1)*kmax)*sphi_d(2, 3 + s_offset_d1)
103827 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103828 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103829 0 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 6 + s_offset_d1)
103830 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
103831 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
103832 0 : buffer1(3 + (i - 1)*kmax)*sphi_d(3, 8 + s_offset_d1)
103833 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103834 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103835 0 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 5 + s_offset_d1)
103836 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103837 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103838 0 : buffer1(4 + (i - 1)*kmax)*sphi_d(4, 9 + s_offset_d1)
103839 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103840 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103841 0 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 2 + s_offset_d1)
103842 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103843 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103844 0 : buffer1(5 + (i - 1)*kmax)*sphi_d(5, 4 + s_offset_d1)
103845 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103846 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103847 0 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 5 + s_offset_d1)
103848 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103849 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103850 0 : buffer1(6 + (i - 1)*kmax)*sphi_d(6, 7 + s_offset_d1)
103851 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) = &
103852 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 1) + &
103853 0 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 1 + s_offset_d1)
103854 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103855 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103856 0 : buffer1(7 + (i - 1)*kmax)*sphi_d(7, 3 + s_offset_d1)
103857 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103858 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103859 0 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 6 + s_offset_d1)
103860 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) = &
103861 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 8) + &
103862 0 : buffer1(8 + (i - 1)*kmax)*sphi_d(8, 8 + s_offset_d1)
103863 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) = &
103864 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 3) + &
103865 0 : buffer1(9 + (i - 1)*kmax)*sphi_d(9, 3 + s_offset_d1)
103866 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) = &
103867 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 6) + &
103868 0 : buffer1(10 + (i - 1)*kmax)*sphi_d(10, 6 + s_offset_d1)
103869 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103870 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103871 0 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 5 + s_offset_d1)
103872 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103873 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103874 0 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 7 + s_offset_d1)
103875 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) = &
103876 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 9) + &
103877 0 : buffer1(11 + (i - 1)*kmax)*sphi_d(11, 9 + s_offset_d1)
103878 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) = &
103879 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 2) + &
103880 0 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 2 + s_offset_d1)
103881 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103882 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103883 0 : buffer1(12 + (i - 1)*kmax)*sphi_d(12, 4 + s_offset_d1)
103884 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103885 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103886 0 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 5 + s_offset_d1)
103887 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) = &
103888 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 7) + &
103889 0 : buffer1(13 + (i - 1)*kmax)*sphi_d(13, 7 + s_offset_d1)
103890 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) = &
103891 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 4) + &
103892 0 : buffer1(14 + (i - 1)*kmax)*sphi_d(14, 4 + s_offset_d1)
103893 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) = &
103894 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + 5) + &
103895 0 : buffer1(15 + (i - 1)*kmax)*sphi_d(15, 5 + s_offset_d1)
103896 : END DO
103897 : END DO
103898 : END DO
103899 : CASE DEFAULT
103900 1185343 : DO j = 1, jmax
103901 : i = 0
103902 0 : DO i1 = 1, nsoc
103903 0 : DO i2 = 1, nsob
103904 0 : DO i3 = 1, nsoa
103905 0 : i = i + 1
103906 0 : DO k = 1, kmax
103907 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + j) = &
103908 : primitives(s_offset_a1 + i3, s_offset_b1 + i2, s_offset_c1 + i1, s_offset_d1 + j) &
103909 0 : + buffer1(k + (i - 1)*kmax)*sphi_d(k, j + s_offset_d1)
103910 : END DO
103911 : END DO
103912 : END DO
103913 : END DO
103914 : END DO
103915 : END SELECT
103916 2269302 : s_offset_d1 = s_offset_d1 + nsod
103917 : END DO
103918 2045662 : s_offset_c1 = s_offset_c1 + nsoc
103919 : END DO
103920 1838141 : s_offset_b1 = s_offset_b1 + nsob
103921 : END DO
103922 1657375 : s_offset_a1 = s_offset_a1 + nsoa
103923 : END DO
103924 780937 : END SUBROUTINE contract_generic
103925 : #endif
103926 : END MODULE hfx_contraction_methods
|