LCOV - code coverage report
Current view: top level - src/hfxbase - hfx_contraction_methods.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:42dac4a) Lines: 87.3 % 5059 4414
Test Date: 2025-07-25 12:55:17 Functions: 100.0 % 83 83

            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    477807975 :    SUBROUTINE contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
      67    477807975 :                        n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work, &
      68    477807975 :                        sphi_a, sphi_b, sphi_c, sphi_d, &
      69    477807975 :                        primitives, &
      70    477807975 :                        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    797929658 :       SELECT CASE (n_a)
     111              :       CASE (0)
     112    727802700 :          SELECT CASE (n_b)
     113              :          CASE (0)
     114    473936522 :             SELECT CASE (n_c)
     115              :             CASE (0)
     116    384284609 :                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    122522064 :                                      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     34384003 :                                      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      3292150 :                                      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    160216726 :                                         buffer1, buffer2)
     211              :                END SELECT
     212              :             CASE (1)
     213    183664527 :                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     72843656 :                                      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     25905071 :                                      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      2766019 :                                      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    101545819 :                                         buffer1, buffer2)
     308              :                END SELECT
     309              :             CASE (2)
     310     14761196 :                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      5420675 :                                      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      3082424 :                                      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       764281 :                                      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      9275052 :                                         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    271103066 :                                      buffer1, buffer2)
     609              :             END SELECT
     610              :          CASE (1)
     611     73123930 :             SELECT CASE (n_c)
     612              :             CASE (0)
     613     55592448 :                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     16033456 :                                      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      6616769 :                                      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      1500321 :                                      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     24169590 :                                         buffer1, buffer2)
     708              :                END SELECT
     709              :             CASE (1)
     710     25470252 :                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      7049969 :                                      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      7473532 :                                      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       858631 :                                      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     15389402 :                                         buffer1, buffer2)
     805              :                END SELECT
     806              :             CASE (2)
     807      4832143 :                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      1774405 :                                      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       886274 :                                      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       363018 :                                      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      3030881 :                                         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     42616730 :                                      buffer1, buffer2)
    1106              :             END SELECT
    1107              :          CASE (2)
    1108      9771309 :             SELECT CASE (n_c)
    1109              :             CASE (0)
    1110      7221890 :                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      1575492 :                                      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      1358935 :                                      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       431901 :                                      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      3369422 :                                         buffer1, buffer2)
    1205              :                END SELECT
    1206              :             CASE (1)
    1207      4162322 :                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      1202647 :                                      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       700712 :                                      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       367117 :                                      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      2276976 :                                         buffer1, buffer2)
    1302              :                END SELECT
    1303              :             CASE (2)
    1304       959708 :                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       268496 :                                      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       281320 :                                      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       131378 :                                      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       682699 :                                         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      6337610 :                                      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    320121683 :                                   buffer1, buffer2)
    2607              :          END SELECT
    2608              :       CASE (1)
    2609    259535773 :          SELECT CASE (n_b)
    2610              :          CASE (0)
    2611    187360235 :             SELECT CASE (n_c)
    2612              :             CASE (0)
    2613    137179005 :                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     40171975 :                                      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     13648342 :                                      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      2079184 :                                      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     55913975 :                                         buffer1, buffer2)
    2708              :                END SELECT
    2709              :             CASE (1)
    2710     71591392 :                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     25430086 :                                      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     14223724 :                                      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      1432504 :                                      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     41093055 :                                         buffer1, buffer2)
    2805              :                END SELECT
    2806              :             CASE (2)
    2807      8150751 :                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      3037321 :                                      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      1502845 :                                      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       522968 :                                      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      5068251 :                                         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    102120460 :                                      buffer1, buffer2)
    3106              :             END SELECT
    3107              :          CASE (1)
    3108     49568001 :             SELECT CASE (n_c)
    3109              :             CASE (0)
    3110     34363092 :                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      7094304 :                                      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      7237978 :                                      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       833082 :                                      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     15170400 :                                         buffer1, buffer2)
    3205              :                END SELECT
    3206              :             CASE (1)
    3207     21592717 :                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      7452108 :                                      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      3720366 :                                      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       917104 :                                      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     12098388 :                                         buffer1, buffer2)
    3302              :                END SELECT
    3303              :             CASE (2)
    3304      2955599 :                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       898587 :                                      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       908123 :                                      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       233351 :                                      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      2042221 :                                         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     29325800 :                                      buffer1, buffer2)
    3603              :             END SELECT
    3604              :          CASE (2)
    3605      7784150 :             SELECT CASE (n_c)
    3606              :             CASE (0)
    3607      5885057 :                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      1424878 :                                      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       803393 :                                      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       418673 :                                      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      2652459 :                                         buffer1, buffer2)
    3702              :                END SELECT
    3703              :             CASE (1)
    3704      3097039 :                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       683854 :                                      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       853811 :                                      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       267964 :                                      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      1807720 :                                         buffer1, buffer2)
    3799              :                END SELECT
    3800              :             CASE (2)
    3801       900926 :                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       289304 :                                      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       187029 :                                      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       127030 :                                      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       605465 :                                         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      5071801 :                                      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    136577951 :                                   buffer1, buffer2)
    5104              :          END SELECT
    5105              :       CASE (2)
    5106     34145715 :          SELECT CASE (n_b)
    5107              :          CASE (0)
    5108     25273401 :             SELECT CASE (n_c)
    5109              :             CASE (0)
    5110     15379916 :                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      3827296 :                                      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      2218887 :                                      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       600959 :                                      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      6650204 :                                         buffer1, buffer2)
    5205              :                END SELECT
    5206              :             CASE (1)
    5207      9194195 :                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      2818135 :                                      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      1552553 :                                      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       527091 :                                      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      4902416 :                                         buffer1, buffer2)
    5302              :                END SELECT
    5303              :             CASE (2)
    5304      2232008 :                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       747254 :                                      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       520557 :                                      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       204608 :                                      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      1473644 :                                         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     13037374 :                                      buffer1, buffer2)
    5603              :             END SELECT
    5604              :          CASE (1)
    5605     10632225 :             SELECT CASE (n_c)
    5606              :             CASE (0)
    5607      6521937 :                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      1648408 :                                      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       830455 :                                      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       376761 :                                      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      2859022 :                                         buffer1, buffer2)
    5702              :                END SELECT
    5703              :             CASE (1)
    5704      3572212 :                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       851096 :                                      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       911799 :                                      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       250147 :                                      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      2014507 :                                         buffer1, buffer2)
    5799              :                END SELECT
    5800              :             CASE (2)
    5801      1063784 :                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       351490 :                                      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       222776 :                                      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       131080 :                                      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       706609 :                                         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      5585823 :                                      buffer1, buffer2)
    6100              :             END SELECT
    6101              :          CASE (2)
    6102      3276215 :             SELECT CASE (n_c)
    6103              :             CASE (0)
    6104      2314673 :                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       457421 :                                      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       408233 :                                      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       195212 :                                      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      1062050 :                                         buffer1, buffer2)
    6199              :                END SELECT
    6200              :             CASE (1)
    6201      1492071 :                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       369443 :                                      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       257950 :                                      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       165920 :                                      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       795202 :                                         buffer1, buffer2)
    6296              :                END SELECT
    6297              :             CASE (2)
    6298       455853 :                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       125725 :                                      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       119355 :                                      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        81823 :                                      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       327426 :                                         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      2187380 :                                      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     20837362 :                                   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    477807975 :                                buffer1, buffer2)
   12605              :       END SELECT
   12606              : #endif
   12607    477807975 :    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    122522064 :    SUBROUTINE contract_ssss(work, &
   12627              :                             nl_a, nl_b, nl_c, nl_d, &
   12628    122522064 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12629    122522064 :                             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    122522064 :       s_offset_a1 = 0
   12647    257771141 :       DO ia = 1, nl_a
   12648              :          s_offset_b1 = 0
   12649    294992191 :          DO ib = 1, nl_b
   12650              :             s_offset_c1 = 0
   12651    367914946 :             DO ic = 1, nl_c
   12652              :                s_offset_d1 = 0
   12653    511493945 :                DO id = 1, nl_d
   12654              : 
   12655    303322113 :                   buffer1 = 0.0_dp
   12656    303322113 :                   imax = 1*1*1
   12657    303322113 :                   kmax = 1
   12658    606644226 :                   DO i = 1, imax
   12659    606644226 :                      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    303322113 :                   buffer2 = 0.0_dp
   12663    303322113 :                   imax = 1*1*1
   12664    303322113 :                   kmax = 1
   12665    606644226 :                   DO i = 1, imax
   12666    606644226 :                      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    303322113 :                   buffer1 = 0.0_dp
   12670    303322113 :                   imax = 1*1*1
   12671    303322113 :                   kmax = 1
   12672    606644226 :                   DO i = 1, imax
   12673    606644226 :                      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    606644226 :                   imax = 1*1*1
   12677    606644226 :                   kmax = 1
   12678              :                   i = 0
   12679    606644226 :                   DO i1 = 1, 1
   12680    909966339 :                   DO i2 = 1, 1
   12681    909966339 :                   DO i3 = 1, 1
   12682    303322113 :                      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    606644226 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   12686              :                   END DO
   12687              :                   END DO
   12688              :                   END DO
   12689    511493945 :                   s_offset_d1 = s_offset_d1 + 1
   12690              :                END DO
   12691    367914946 :                s_offset_c1 = s_offset_c1 + 1
   12692              :             END DO
   12693    294992191 :             s_offset_b1 = s_offset_b1 + 1
   12694              :          END DO
   12695    257771141 :          s_offset_a1 = s_offset_a1 + 1
   12696              :       END DO
   12697    122522064 :    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     34384003 :    SUBROUTINE contract_sssp(work, &
   12716              :                             nl_a, nl_b, nl_c, nl_d, &
   12717     34384003 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12718     34384003 :                             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     34384003 :       s_offset_a1 = 0
   12735     75366430 :       DO ia = 1, nl_a
   12736              :          s_offset_b1 = 0
   12737     94799324 :          DO ib = 1, nl_b
   12738              :             s_offset_c1 = 0
   12739    132687166 :             DO ic = 1, nl_c
   12740              :                s_offset_d1 = 0
   12741    198046038 :                DO id = 1, nl_d
   12742              : 
   12743    119175769 :                   buffer1 = 0.0_dp
   12744    119175769 :                   imax = 1*1*3
   12745    119175769 :                   kmax = 1
   12746    476703076 :                   DO i = 1, imax
   12747    476703076 :                      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    119175769 :                   buffer2 = 0.0_dp
   12751    119175769 :                   imax = 1*1*3
   12752    119175769 :                   kmax = 1
   12753    476703076 :                   DO i = 1, imax
   12754    476703076 :                      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    119175769 :                   buffer1 = 0.0_dp
   12758    119175769 :                   imax = 1*1*3
   12759    119175769 :                   kmax = 1
   12760    476703076 :                   DO i = 1, imax
   12761    476703076 :                      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    238351538 :                   imax = 1*1*1
   12765    238351538 :                   kmax = 3
   12766              :                   i = 0
   12767    238351538 :                   DO i1 = 1, 1
   12768    357527307 :                   DO i2 = 1, 1
   12769    357527307 :                   DO i3 = 1, 1
   12770    119175769 :                      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    119175769 :                         + 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    119175769 :                         + 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    238351538 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   12780              :                   END DO
   12781              :                   END DO
   12782              :                   END DO
   12783    198046038 :                   s_offset_d1 = s_offset_d1 + 3
   12784              :                END DO
   12785    132687166 :                s_offset_c1 = s_offset_c1 + 1
   12786              :             END DO
   12787     94799324 :             s_offset_b1 = s_offset_b1 + 1
   12788              :          END DO
   12789     75366430 :          s_offset_a1 = s_offset_a1 + 1
   12790              :       END DO
   12791     34384003 :    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      3292150 :    SUBROUTINE contract_sssd(work, &
   12810              :                             nl_a, nl_b, nl_c, nl_d, &
   12811      3292150 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12812      3292150 :                             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      3292150 :       s_offset_a1 = 0
   12829      8055838 :       DO ia = 1, nl_a
   12830              :          s_offset_b1 = 0
   12831     12391764 :          DO ib = 1, nl_b
   12832              :             s_offset_c1 = 0
   12833     20657452 :             DO ic = 1, nl_c
   12834              :                s_offset_d1 = 0
   12835     26756447 :                DO id = 1, nl_d
   12836     13727071 :                   buffer1 = 0.0_dp
   12837     13727071 :                   imax = 1*1*6
   12838     13727071 :                   kmax = 1
   12839     96089497 :                   DO i = 1, imax
   12840     96089497 :                      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     13727071 :                   buffer2 = 0.0_dp
   12843     13727071 :                   imax = 1*1*6
   12844     13727071 :                   kmax = 1
   12845     96089497 :                   DO i = 1, imax
   12846     96089497 :                      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     13727071 :                   buffer1 = 0.0_dp
   12849     13727071 :                   imax = 1*1*6
   12850     13727071 :                   kmax = 1
   12851     96089497 :                   DO i = 1, imax
   12852     96089497 :                      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     27454142 :                   imax = 1*1*1
   12856     27454142 :                   kmax = 6
   12857              :                   i = 0
   12858     27454142 :                   DO i1 = 1, 1
   12859     41181213 :                   DO i2 = 1, 1
   12860     41181213 :                   DO i3 = 1, 1
   12861     13727071 :                      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     13727071 :                         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     13727071 :                         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     13727071 :                         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     13727071 :                         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     13727071 :                         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     13727071 :                         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     13727071 :                         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     27454142 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   12886              :                   END DO
   12887              :                   END DO
   12888              :                   END DO
   12889     26756447 :                   s_offset_d1 = s_offset_d1 + 5
   12890              :                END DO
   12891     20657452 :                s_offset_c1 = s_offset_c1 + 1
   12892              :             END DO
   12893     12391764 :             s_offset_b1 = s_offset_b1 + 1
   12894              :          END DO
   12895      8055838 :          s_offset_a1 = s_offset_a1 + 1
   12896              :       END DO
   12897      3292150 :    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     72843656 :    SUBROUTINE contract_ssps(work, &
   13210              :                             nl_a, nl_b, nl_c, nl_d, &
   13211     72843656 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13212     72843656 :                             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     72843656 :       s_offset_a1 = 0
   13229    155806954 :       DO ia = 1, nl_a
   13230              :          s_offset_b1 = 0
   13231    185845048 :          DO ib = 1, nl_b
   13232              :             s_offset_c1 = 0
   13233    242260176 :             DO ic = 1, nl_c
   13234              :                s_offset_d1 = 0
   13235    354396331 :                DO id = 1, nl_d
   13236    215017905 :                   buffer1 = 0.0_dp
   13237    215017905 :                   imax = 1*3*1
   13238    215017905 :                   kmax = 1
   13239    860071620 :                   DO i = 1, imax
   13240    860071620 :                      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    215017905 :                   buffer2 = 0.0_dp
   13243    215017905 :                   imax = 1*3*1
   13244    215017905 :                   kmax = 1
   13245    860071620 :                   DO i = 1, imax
   13246    860071620 :                      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    215017905 :                   buffer1 = 0.0_dp
   13249    215017905 :                   imax = 1*1*1
   13250    215017905 :                   kmax = 3
   13251    430035810 :                   DO i = 1, imax
   13252    215017905 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13253    215017905 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13254    430035810 :                      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    860071620 :                   imax = 1*1*3
   13257    860071620 :                   kmax = 1
   13258              :                   i = 0
   13259    860071620 :                   DO i1 = 1, 3
   13260   1505125335 :                   DO i2 = 1, 1
   13261   1935161145 :                   DO i3 = 1, 1
   13262    645053715 :                      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   1290107430 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   13266              :                   END DO
   13267              :                   END DO
   13268              :                   END DO
   13269    354396331 :                   s_offset_d1 = s_offset_d1 + 1
   13270              :                END DO
   13271    242260176 :                s_offset_c1 = s_offset_c1 + 3
   13272              :             END DO
   13273    185845048 :             s_offset_b1 = s_offset_b1 + 1
   13274              :          END DO
   13275    155806954 :          s_offset_a1 = s_offset_a1 + 1
   13276              :       END DO
   13277     72843656 :    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     25905071 :    SUBROUTINE contract_sspp(work, &
   13296              :                             nl_a, nl_b, nl_c, nl_d, &
   13297     25905071 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13298     25905071 :                             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     25905071 :       s_offset_a1 = 0
   13315     56924042 :       DO ia = 1, nl_a
   13316              :          s_offset_b1 = 0
   13317     72033654 :          DO ib = 1, nl_b
   13318              :             s_offset_c1 = 0
   13319     99740514 :             DO ic = 1, nl_c
   13320              :                s_offset_d1 = 0
   13321    150647315 :                DO id = 1, nl_d
   13322     91921484 :                   buffer1 = 0.0_dp
   13323     91921484 :                   imax = 1*3*3
   13324     91921484 :                   kmax = 1
   13325    919214840 :                   DO i = 1, imax
   13326    919214840 :                      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     91921484 :                   buffer2 = 0.0_dp
   13329     91921484 :                   imax = 1*3*3
   13330     91921484 :                   kmax = 1
   13331    919214840 :                   DO i = 1, imax
   13332    919214840 :                      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     91921484 :                   buffer1 = 0.0_dp
   13335     91921484 :                   imax = 1*1*3
   13336     91921484 :                   kmax = 3
   13337    367685936 :                   DO i = 1, imax
   13338    275764452 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13339    275764452 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13340    367685936 :                      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    367685936 :                   imax = 1*1*3
   13343    367685936 :                   kmax = 3
   13344              :                   i = 0
   13345    367685936 :                   DO i1 = 1, 3
   13346    643450388 :                   DO i2 = 1, 1
   13347    827293356 :                   DO i3 = 1, 1
   13348    275764452 :                      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    275764452 :                         + 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    275764452 :                         + 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    551528904 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   13358              :                   END DO
   13359              :                   END DO
   13360              :                   END DO
   13361    150647315 :                   s_offset_d1 = s_offset_d1 + 3
   13362              :                END DO
   13363     99740514 :                s_offset_c1 = s_offset_c1 + 3
   13364              :             END DO
   13365     72033654 :             s_offset_b1 = s_offset_b1 + 1
   13366              :          END DO
   13367     56924042 :          s_offset_a1 = s_offset_a1 + 1
   13368              :       END DO
   13369     25905071 :    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      2766019 :    SUBROUTINE contract_sspd(work, &
   13388              :                             nl_a, nl_b, nl_c, nl_d, &
   13389      2766019 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13390      2766019 :                             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      2766019 :       s_offset_a1 = 0
   13407      6987549 :       DO ia = 1, nl_a
   13408              :          s_offset_b1 = 0
   13409     11312935 :          DO ib = 1, nl_b
   13410              :             s_offset_c1 = 0
   13411     19052300 :             DO ic = 1, nl_c
   13412              :                s_offset_d1 = 0
   13413     24239698 :                DO id = 1, nl_d
   13414     12278803 :                   buffer1 = 0.0_dp
   13415     12278803 :                   imax = 1*3*6
   13416     12278803 :                   kmax = 1
   13417    233297257 :                   DO i = 1, imax
   13418    233297257 :                      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     12278803 :                   buffer2 = 0.0_dp
   13421     12278803 :                   imax = 1*3*6
   13422     12278803 :                   kmax = 1
   13423    233297257 :                   DO i = 1, imax
   13424    233297257 :                      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     12278803 :                   buffer1 = 0.0_dp
   13427     12278803 :                   imax = 1*1*6
   13428     12278803 :                   kmax = 3
   13429     85951621 :                   DO i = 1, imax
   13430     73672818 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13431     73672818 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13432     85951621 :                      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     49115212 :                   imax = 1*1*3
   13435     49115212 :                   kmax = 6
   13436              :                   i = 0
   13437     49115212 :                   DO i1 = 1, 3
   13438     85951621 :                   DO i2 = 1, 1
   13439    110509227 :                   DO i3 = 1, 1
   13440     36836409 :                      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     36836409 :                         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     36836409 :                         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     36836409 :                         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     36836409 :                         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     36836409 :                         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     36836409 :                         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     36836409 :                         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     73672818 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   13465              :                   END DO
   13466              :                   END DO
   13467              :                   END DO
   13468     24239698 :                   s_offset_d1 = s_offset_d1 + 5
   13469              :                END DO
   13470     19052300 :                s_offset_c1 = s_offset_c1 + 3
   13471              :             END DO
   13472     11312935 :             s_offset_b1 = s_offset_b1 + 1
   13473              :          END DO
   13474      6987549 :          s_offset_a1 = s_offset_a1 + 1
   13475              :       END DO
   13476      2766019 :    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      5420675 :    SUBROUTINE contract_ssds(work, &
   13793              :                             nl_a, nl_b, nl_c, nl_d, &
   13794      5420675 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13795      5420675 :                             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      5420675 :       s_offset_a1 = 0
   13812     13219990 :       DO ia = 1, nl_a
   13813              :          s_offset_b1 = 0
   13814     20197346 :          DO ib = 1, nl_b
   13815              :             s_offset_c1 = 0
   13816     25066699 :             DO ic = 1, nl_c
   13817              :                s_offset_d1 = 0
   13818     34583236 :                DO id = 1, nl_d
   13819     21914568 :                   buffer1 = 0.0_dp
   13820     21914568 :                   imax = 1*6*1
   13821     21914568 :                   kmax = 1
   13822    153401976 :                   DO i = 1, imax
   13823    153401976 :                      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     21914568 :                   buffer2 = 0.0_dp
   13826     21914568 :                   imax = 1*6*1
   13827     21914568 :                   kmax = 1
   13828    153401976 :                   DO i = 1, imax
   13829    153401976 :                      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     21914568 :                   buffer1 = 0.0_dp
   13832     21914568 :                   imax = 1*1*1
   13833     21914568 :                   kmax = 6
   13834     43829136 :                   DO i = 1, imax
   13835     21914568 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13836     21914568 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   13837     21914568 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13838     21914568 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   13839     21914568 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   13840     21914568 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   13841     21914568 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   13842     43829136 :                      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    131487408 :                   imax = 1*1*5
   13845    131487408 :                   kmax = 1
   13846              :                   i = 0
   13847    131487408 :                   DO i1 = 1, 5
   13848    241060248 :                   DO i2 = 1, 1
   13849    328718520 :                   DO i3 = 1, 1
   13850    109572840 :                      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    219145680 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   13854              :                   END DO
   13855              :                   END DO
   13856              :                   END DO
   13857     34583236 :                   s_offset_d1 = s_offset_d1 + 1
   13858              :                END DO
   13859     25066699 :                s_offset_c1 = s_offset_c1 + 5
   13860              :             END DO
   13861     20197346 :             s_offset_b1 = s_offset_b1 + 1
   13862              :          END DO
   13863     13219990 :          s_offset_a1 = s_offset_a1 + 1
   13864              :       END DO
   13865      5420675 :    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      3082424 :    SUBROUTINE contract_ssdp(work, &
   13884              :                             nl_a, nl_b, nl_c, nl_d, &
   13885      3082424 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13886      3082424 :                             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      3082424 :       s_offset_a1 = 0
   13903      7647757 :       DO ia = 1, nl_a
   13904              :          s_offset_b1 = 0
   13905     12024108 :          DO ib = 1, nl_b
   13906              :             s_offset_c1 = 0
   13907     15133004 :             DO ic = 1, nl_c
   13908              :                s_offset_d1 = 0
   13909     20131455 :                DO id = 1, nl_d
   13910     12457226 :                   buffer1 = 0.0_dp
   13911     12457226 :                   imax = 1*6*3
   13912     12457226 :                   kmax = 1
   13913    236687294 :                   DO i = 1, imax
   13914    236687294 :                      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     12457226 :                   buffer2 = 0.0_dp
   13917     12457226 :                   imax = 1*6*3
   13918     12457226 :                   kmax = 1
   13919    236687294 :                   DO i = 1, imax
   13920    236687294 :                      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     12457226 :                   buffer1 = 0.0_dp
   13923     12457226 :                   imax = 1*1*3
   13924     12457226 :                   kmax = 6
   13925     49828904 :                   DO i = 1, imax
   13926     37371678 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13927     37371678 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   13928     37371678 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13929     37371678 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   13930     37371678 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   13931     37371678 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   13932     37371678 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   13933     49828904 :                      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     74743356 :                   imax = 1*1*5
   13936     74743356 :                   kmax = 3
   13937              :                   i = 0
   13938     74743356 :                   DO i1 = 1, 5
   13939    137029486 :                   DO i2 = 1, 1
   13940    186858390 :                   DO i3 = 1, 1
   13941     62286130 :                      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     62286130 :                         + 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     62286130 :                         + 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    124572260 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   13951              :                   END DO
   13952              :                   END DO
   13953              :                   END DO
   13954     20131455 :                   s_offset_d1 = s_offset_d1 + 3
   13955              :                END DO
   13956     15133004 :                s_offset_c1 = s_offset_c1 + 5
   13957              :             END DO
   13958     12024108 :             s_offset_b1 = s_offset_b1 + 1
   13959              :          END DO
   13960      7647757 :          s_offset_a1 = s_offset_a1 + 1
   13961              :       END DO
   13962      3082424 :    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       764281 :    SUBROUTINE contract_ssdd(work, &
   13981              :                             nl_a, nl_b, nl_c, nl_d, &
   13982       764281 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13983       764281 :                             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       764281 :       s_offset_a1 = 0
   14000      1948345 :       DO ia = 1, nl_a
   14001              :          s_offset_b1 = 0
   14002      3173106 :          DO ib = 1, nl_b
   14003              :             s_offset_c1 = 0
   14004      4120188 :             DO ic = 1, nl_c
   14005              :                s_offset_d1 = 0
   14006      4460377 :                DO id = 1, nl_d
   14007      2329231 :                   buffer1 = 0.0_dp
   14008      2329231 :                   imax = 1*6*6
   14009      2329231 :                   kmax = 1
   14010     86181547 :                   DO i = 1, imax
   14011     86181547 :                      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      2329231 :                   buffer2 = 0.0_dp
   14014      2329231 :                   imax = 1*6*6
   14015      2329231 :                   kmax = 1
   14016     86181547 :                   DO i = 1, imax
   14017     86181547 :                      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      2329231 :                   buffer1 = 0.0_dp
   14020      2329231 :                   imax = 1*1*6
   14021      2329231 :                   kmax = 6
   14022     16304617 :                   DO i = 1, imax
   14023     13975386 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   14024     13975386 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   14025     13975386 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   14026     13975386 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   14027     13975386 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   14028     13975386 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   14029     13975386 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   14030     16304617 :                      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     13975386 :                   imax = 1*1*5
   14033     13975386 :                   kmax = 6
   14034              :                   i = 0
   14035     13975386 :                   DO i1 = 1, 5
   14036     25621541 :                   DO i2 = 1, 1
   14037     34938465 :                   DO i3 = 1, 1
   14038     11646155 :                      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     11646155 :                         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     11646155 :                         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     11646155 :                         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     11646155 :                         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     11646155 :                         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     11646155 :                         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     11646155 :                         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     23292310 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   14063              :                   END DO
   14064              :                   END DO
   14065              :                   END DO
   14066      4460377 :                   s_offset_d1 = s_offset_d1 + 5
   14067              :                END DO
   14068      4120188 :                s_offset_c1 = s_offset_c1 + 5
   14069              :             END DO
   14070      3173106 :             s_offset_b1 = s_offset_b1 + 1
   14071              :          END DO
   14072      1948345 :          s_offset_a1 = s_offset_a1 + 1
   14073              :       END DO
   14074       764281 :    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     16033456 :    SUBROUTINE contract_spss(work, &
   15757              :                             nl_a, nl_b, nl_c, nl_d, &
   15758     16033456 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15759     16033456 :                             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     16033456 :       s_offset_a1 = 0
   15776     35566429 :       DO ia = 1, nl_a
   15777              :          s_offset_b1 = 0
   15778     42616429 :          DO ib = 1, nl_b
   15779              :             s_offset_c1 = 0
   15780     56332665 :             DO ic = 1, nl_c
   15781              :                s_offset_d1 = 0
   15782     86256086 :                DO id = 1, nl_d
   15783     53006877 :                   buffer1 = 0.0_dp
   15784     53006877 :                   imax = 3*1*1
   15785     53006877 :                   kmax = 1
   15786    212027508 :                   DO i = 1, imax
   15787    212027508 :                      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     53006877 :                   buffer2 = 0.0_dp
   15790     53006877 :                   imax = 1*1*1
   15791     53006877 :                   kmax = 3
   15792    106013754 :                   DO i = 1, imax
   15793     53006877 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15794     53006877 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15795    106013754 :                      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     53006877 :                   buffer1 = 0.0_dp
   15798     53006877 :                   imax = 1*3*1
   15799     53006877 :                   kmax = 1
   15800    212027508 :                   DO i = 1, imax
   15801    212027508 :                      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    106013754 :                   imax = 1*3*1
   15804    106013754 :                   kmax = 1
   15805              :                   i = 0
   15806    106013754 :                   DO i1 = 1, 1
   15807    265034385 :                   DO i2 = 1, 3
   15808    371048139 :                   DO i3 = 1, 1
   15809    159020631 :                      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    318041262 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   15813              :                   END DO
   15814              :                   END DO
   15815              :                   END DO
   15816     86256086 :                   s_offset_d1 = s_offset_d1 + 1
   15817              :                END DO
   15818     56332665 :                s_offset_c1 = s_offset_c1 + 1
   15819              :             END DO
   15820     42616429 :             s_offset_b1 = s_offset_b1 + 3
   15821              :          END DO
   15822     35566429 :          s_offset_a1 = s_offset_a1 + 1
   15823              :       END DO
   15824     16033456 :    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      6616769 :    SUBROUTINE contract_spsp(work, &
   15843              :                             nl_a, nl_b, nl_c, nl_d, &
   15844      6616769 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15845      6616769 :                             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      6616769 :       s_offset_a1 = 0
   15862     15217487 :       DO ia = 1, nl_a
   15863              :          s_offset_b1 = 0
   15864     19044566 :          DO ib = 1, nl_b
   15865              :             s_offset_c1 = 0
   15866     26424048 :             DO ic = 1, nl_c
   15867              :                s_offset_d1 = 0
   15868     40118042 :                DO id = 1, nl_d
   15869     24137842 :                   buffer1 = 0.0_dp
   15870     24137842 :                   imax = 3*1*3
   15871     24137842 :                   kmax = 1
   15872    241378420 :                   DO i = 1, imax
   15873    241378420 :                      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     24137842 :                   buffer2 = 0.0_dp
   15876     24137842 :                   imax = 1*1*3
   15877     24137842 :                   kmax = 3
   15878     96551368 :                   DO i = 1, imax
   15879     72413526 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15880     72413526 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15881     96551368 :                      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     24137842 :                   buffer1 = 0.0_dp
   15884     24137842 :                   imax = 1*3*3
   15885     24137842 :                   kmax = 1
   15886    241378420 :                   DO i = 1, imax
   15887    241378420 :                      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     48275684 :                   imax = 1*3*1
   15890     48275684 :                   kmax = 3
   15891              :                   i = 0
   15892     48275684 :                   DO i1 = 1, 1
   15893    120689210 :                   DO i2 = 1, 3
   15894    168964894 :                   DO i3 = 1, 1
   15895     72413526 :                      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     72413526 :                         + 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     72413526 :                         + 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    144827052 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   15905              :                   END DO
   15906              :                   END DO
   15907              :                   END DO
   15908     40118042 :                   s_offset_d1 = s_offset_d1 + 3
   15909              :                END DO
   15910     26424048 :                s_offset_c1 = s_offset_c1 + 1
   15911              :             END DO
   15912     19044566 :             s_offset_b1 = s_offset_b1 + 3
   15913              :          END DO
   15914     15217487 :          s_offset_a1 = s_offset_a1 + 1
   15915              :       END DO
   15916      6616769 :    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      1500321 :    SUBROUTINE contract_spsd(work, &
   15935              :                             nl_a, nl_b, nl_c, nl_d, &
   15936      1500321 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15937      1500321 :                             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      1500321 :       s_offset_a1 = 0
   15954      3712478 :       DO ia = 1, nl_a
   15955              :          s_offset_b1 = 0
   15956      5187764 :          DO ib = 1, nl_b
   15957              :             s_offset_c1 = 0
   15958      8025255 :             DO ic = 1, nl_c
   15959              :                s_offset_d1 = 0
   15960     10363989 :                DO id = 1, nl_d
   15961      5314341 :                   buffer1 = 0.0_dp
   15962      5314341 :                   imax = 3*1*6
   15963      5314341 :                   kmax = 1
   15964    100972479 :                   DO i = 1, imax
   15965    100972479 :                      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      5314341 :                   buffer2 = 0.0_dp
   15968      5314341 :                   imax = 1*1*6
   15969      5314341 :                   kmax = 3
   15970     37200387 :                   DO i = 1, imax
   15971     31886046 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15972     31886046 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15973     37200387 :                      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      5314341 :                   buffer1 = 0.0_dp
   15976      5314341 :                   imax = 1*3*6
   15977      5314341 :                   kmax = 1
   15978    100972479 :                   DO i = 1, imax
   15979    100972479 :                      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     10628682 :                   imax = 1*3*1
   15982     10628682 :                   kmax = 6
   15983              :                   i = 0
   15984     10628682 :                   DO i1 = 1, 1
   15985     26571705 :                   DO i2 = 1, 3
   15986     37200387 :                   DO i3 = 1, 1
   15987     15943023 :                      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     15943023 :                         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     15943023 :                         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     15943023 :                         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     15943023 :                         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     15943023 :                         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     15943023 :                         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     15943023 :                         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     31886046 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   16012              :                   END DO
   16013              :                   END DO
   16014              :                   END DO
   16015     10363989 :                   s_offset_d1 = s_offset_d1 + 5
   16016              :                END DO
   16017      8025255 :                s_offset_c1 = s_offset_c1 + 1
   16018              :             END DO
   16019      5187764 :             s_offset_b1 = s_offset_b1 + 3
   16020              :          END DO
   16021      3712478 :          s_offset_a1 = s_offset_a1 + 1
   16022              :       END DO
   16023      1500321 :    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      7049969 :    SUBROUTINE contract_spps(work, &
   16340              :                             nl_a, nl_b, nl_c, nl_d, &
   16341      7049969 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16342      7049969 :                             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      7049969 :       s_offset_a1 = 0
   16359     15974944 :       DO ia = 1, nl_a
   16360              :          s_offset_b1 = 0
   16361     19665072 :          DO ib = 1, nl_b
   16362              :             s_offset_c1 = 0
   16363     26012065 :             DO ic = 1, nl_c
   16364              :                s_offset_d1 = 0
   16365     40301693 :                DO id = 1, nl_d
   16366     25029725 :                   buffer1 = 0.0_dp
   16367     25029725 :                   imax = 3*3*1
   16368     25029725 :                   kmax = 1
   16369    250297250 :                   DO i = 1, imax
   16370    250297250 :                      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     25029725 :                   buffer2 = 0.0_dp
   16373     25029725 :                   imax = 1*3*1
   16374     25029725 :                   kmax = 3
   16375    100118900 :                   DO i = 1, imax
   16376     75089175 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16377     75089175 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16378    100118900 :                      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     25029725 :                   buffer1 = 0.0_dp
   16381     25029725 :                   imax = 1*3*1
   16382     25029725 :                   kmax = 3
   16383    100118900 :                   DO i = 1, imax
   16384     75089175 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16385     75089175 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16386    100118900 :                      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    100118900 :                   imax = 1*3*3
   16389    100118900 :                   kmax = 1
   16390              :                   i = 0
   16391    100118900 :                   DO i1 = 1, 3
   16392    325386425 :                   DO i2 = 1, 3
   16393    525624225 :                   DO i3 = 1, 1
   16394    225267525 :                      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    450535050 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   16398              :                   END DO
   16399              :                   END DO
   16400              :                   END DO
   16401     40301693 :                   s_offset_d1 = s_offset_d1 + 1
   16402              :                END DO
   16403     26012065 :                s_offset_c1 = s_offset_c1 + 3
   16404              :             END DO
   16405     19665072 :             s_offset_b1 = s_offset_b1 + 3
   16406              :          END DO
   16407     15974944 :          s_offset_a1 = s_offset_a1 + 1
   16408              :       END DO
   16409      7049969 :    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      7473532 :    SUBROUTINE contract_sppp(work, &
   16428              :                             nl_a, nl_b, nl_c, nl_d, &
   16429      7473532 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16430      7473532 :                             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      7473532 :       s_offset_a1 = 0
   16447     17342867 :       DO ia = 1, nl_a
   16448              :          s_offset_b1 = 0
   16449     23229960 :          DO ib = 1, nl_b
   16450              :             s_offset_c1 = 0
   16451     34261246 :             DO ic = 1, nl_c
   16452              :                s_offset_d1 = 0
   16453     56498611 :                DO id = 1, nl_d
   16454     35597990 :                   buffer1 = 0.0_dp
   16455     35597990 :                   imax = 3*3*3
   16456     35597990 :                   kmax = 1
   16457    996743720 :                   DO i = 1, imax
   16458    996743720 :                      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     35597990 :                   buffer2 = 0.0_dp
   16461     35597990 :                   imax = 1*3*3
   16462     35597990 :                   kmax = 3
   16463    355979900 :                   DO i = 1, imax
   16464    320381910 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16465    320381910 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16466    355979900 :                      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     35597990 :                   buffer1 = 0.0_dp
   16469     35597990 :                   imax = 1*3*3
   16470     35597990 :                   kmax = 3
   16471    355979900 :                   DO i = 1, imax
   16472    320381910 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16473    320381910 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16474    355979900 :                      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    142391960 :                   imax = 1*3*3
   16477    142391960 :                   kmax = 3
   16478              :                   i = 0
   16479    142391960 :                   DO i1 = 1, 3
   16480    462773870 :                   DO i2 = 1, 3
   16481    747557790 :                   DO i3 = 1, 1
   16482    320381910 :                      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    320381910 :                         + 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    320381910 :                         + 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    640763820 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   16492              :                   END DO
   16493              :                   END DO
   16494              :                   END DO
   16495     56498611 :                   s_offset_d1 = s_offset_d1 + 3
   16496              :                END DO
   16497     34261246 :                s_offset_c1 = s_offset_c1 + 3
   16498              :             END DO
   16499     23229960 :             s_offset_b1 = s_offset_b1 + 3
   16500              :          END DO
   16501     17342867 :          s_offset_a1 = s_offset_a1 + 1
   16502              :       END DO
   16503      7473532 :    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       858631 :    SUBROUTINE contract_sppd(work, &
   16522              :                             nl_a, nl_b, nl_c, nl_d, &
   16523       858631 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16524       858631 :                             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       858631 :       s_offset_a1 = 0
   16541      2145143 :       DO ia = 1, nl_a
   16542              :          s_offset_b1 = 0
   16543      2947544 :          DO ib = 1, nl_b
   16544              :             s_offset_c1 = 0
   16545      4210831 :             DO ic = 1, nl_c
   16546              :                s_offset_d1 = 0
   16547      5223539 :                DO id = 1, nl_d
   16548      2673740 :                   buffer1 = 0.0_dp
   16549      2673740 :                   imax = 3*3*6
   16550      2673740 :                   kmax = 1
   16551    147055700 :                   DO i = 1, imax
   16552    147055700 :                      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      2673740 :                   buffer2 = 0.0_dp
   16555      2673740 :                   imax = 1*3*6
   16556      2673740 :                   kmax = 3
   16557     50801060 :                   DO i = 1, imax
   16558     48127320 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16559     48127320 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16560     50801060 :                      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      2673740 :                   buffer1 = 0.0_dp
   16563      2673740 :                   imax = 1*3*6
   16564      2673740 :                   kmax = 3
   16565     50801060 :                   DO i = 1, imax
   16566     48127320 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16567     48127320 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16568     50801060 :                      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     10694960 :                   imax = 1*3*3
   16571     10694960 :                   kmax = 6
   16572              :                   i = 0
   16573     10694960 :                   DO i1 = 1, 3
   16574     34758620 :                   DO i2 = 1, 3
   16575     56148540 :                   DO i3 = 1, 1
   16576     24063660 :                      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     24063660 :                         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     24063660 :                         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     24063660 :                         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     24063660 :                         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     24063660 :                         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     24063660 :                         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     24063660 :                         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     48127320 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   16601              :                   END DO
   16602              :                   END DO
   16603              :                   END DO
   16604      5223539 :                   s_offset_d1 = s_offset_d1 + 5
   16605              :                END DO
   16606      4210831 :                s_offset_c1 = s_offset_c1 + 3
   16607              :             END DO
   16608      2947544 :             s_offset_b1 = s_offset_b1 + 3
   16609              :          END DO
   16610      2145143 :          s_offset_a1 = s_offset_a1 + 1
   16611              :       END DO
   16612       858631 :    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      1774405 :    SUBROUTINE contract_spds(work, &
   16933              :                             nl_a, nl_b, nl_c, nl_d, &
   16934      1774405 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16935      1774405 :                             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      1774405 :       s_offset_a1 = 0
   16952      4208352 :       DO ia = 1, nl_a
   16953              :          s_offset_b1 = 0
   16954      5624198 :          DO ib = 1, nl_b
   16955              :             s_offset_c1 = 0
   16956      6463281 :             DO ic = 1, nl_c
   16957              :                s_offset_d1 = 0
   16958      8599901 :                DO id = 1, nl_d
   16959      5326871 :                   buffer1 = 0.0_dp
   16960      5326871 :                   imax = 3*6*1
   16961      5326871 :                   kmax = 1
   16962    101210549 :                   DO i = 1, imax
   16963    101210549 :                      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      5326871 :                   buffer2 = 0.0_dp
   16966      5326871 :                   imax = 1*6*1
   16967      5326871 :                   kmax = 3
   16968     37288097 :                   DO i = 1, imax
   16969     31961226 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16970     31961226 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16971     37288097 :                      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      5326871 :                   buffer1 = 0.0_dp
   16974      5326871 :                   imax = 1*3*1
   16975      5326871 :                   kmax = 6
   16976     21307484 :                   DO i = 1, imax
   16977     15980613 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16978     15980613 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   16979     15980613 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16980     15980613 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   16981     15980613 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   16982     15980613 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   16983     15980613 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   16984     21307484 :                      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     31961226 :                   imax = 1*3*5
   16987     31961226 :                   kmax = 1
   16988              :                   i = 0
   16989     31961226 :                   DO i1 = 1, 5
   16990    111864291 :                   DO i2 = 1, 3
   16991    186440485 :                   DO i3 = 1, 1
   16992     79903065 :                      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    159806130 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   16996              :                   END DO
   16997              :                   END DO
   16998              :                   END DO
   16999      8599901 :                   s_offset_d1 = s_offset_d1 + 1
   17000              :                END DO
   17001      6463281 :                s_offset_c1 = s_offset_c1 + 5
   17002              :             END DO
   17003      5624198 :             s_offset_b1 = s_offset_b1 + 3
   17004              :          END DO
   17005      4208352 :          s_offset_a1 = s_offset_a1 + 1
   17006              :       END DO
   17007      1774405 :    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       886274 :    SUBROUTINE contract_spdp(work, &
   17026              :                             nl_a, nl_b, nl_c, nl_d, &
   17027       886274 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   17028       886274 :                             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       886274 :       s_offset_a1 = 0
   17045      2162314 :       DO ia = 1, nl_a
   17046              :          s_offset_b1 = 0
   17047      2925530 :          DO ib = 1, nl_b
   17048              :             s_offset_c1 = 0
   17049      3369521 :             DO ic = 1, nl_c
   17050              :                s_offset_d1 = 0
   17051      4285240 :                DO id = 1, nl_d
   17052      2565209 :                   buffer1 = 0.0_dp
   17053      2565209 :                   imax = 3*6*3
   17054      2565209 :                   kmax = 1
   17055    141086495 :                   DO i = 1, imax
   17056    141086495 :                      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      2565209 :                   buffer2 = 0.0_dp
   17059      2565209 :                   imax = 1*6*3
   17060      2565209 :                   kmax = 3
   17061     48738971 :                   DO i = 1, imax
   17062     46173762 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   17063     46173762 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   17064     48738971 :                      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      2565209 :                   buffer1 = 0.0_dp
   17067      2565209 :                   imax = 1*3*3
   17068      2565209 :                   kmax = 6
   17069     25652090 :                   DO i = 1, imax
   17070     23086881 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   17071     23086881 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   17072     23086881 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   17073     23086881 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   17074     23086881 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   17075     23086881 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   17076     23086881 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   17077     25652090 :                      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     15391254 :                   imax = 1*3*5
   17080     15391254 :                   kmax = 3
   17081              :                   i = 0
   17082     15391254 :                   DO i1 = 1, 5
   17083     53869389 :                   DO i2 = 1, 3
   17084     89782315 :                   DO i3 = 1, 1
   17085     38478135 :                      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     38478135 :                         + 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     38478135 :                         + 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     76956270 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   17095              :                   END DO
   17096              :                   END DO
   17097              :                   END DO
   17098      4285240 :                   s_offset_d1 = s_offset_d1 + 3
   17099              :                END DO
   17100      3369521 :                s_offset_c1 = s_offset_c1 + 5
   17101              :             END DO
   17102      2925530 :             s_offset_b1 = s_offset_b1 + 3
   17103              :          END DO
   17104      2162314 :          s_offset_a1 = s_offset_a1 + 1
   17105              :       END DO
   17106       886274 :    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       363018 :    SUBROUTINE contract_spdd(work, &
   17125              :                             nl_a, nl_b, nl_c, nl_d, &
   17126       363018 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   17127       363018 :                             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       363018 :       s_offset_a1 = 0
   17144       932156 :       DO ia = 1, nl_a
   17145              :          s_offset_b1 = 0
   17146      1340881 :          DO ib = 1, nl_b
   17147              :             s_offset_c1 = 0
   17148      1592860 :             DO ic = 1, nl_c
   17149              :                s_offset_d1 = 0
   17150      1717846 :                DO id = 1, nl_d
   17151       896729 :                   buffer1 = 0.0_dp
   17152       896729 :                   imax = 3*6*6
   17153       896729 :                   kmax = 1
   17154     97743461 :                   DO i = 1, imax
   17155     97743461 :                      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       896729 :                   buffer2 = 0.0_dp
   17158       896729 :                   imax = 1*6*6
   17159       896729 :                   kmax = 3
   17160     33178973 :                   DO i = 1, imax
   17161     32282244 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   17162     32282244 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   17163     33178973 :                      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       896729 :                   buffer1 = 0.0_dp
   17166       896729 :                   imax = 1*3*6
   17167       896729 :                   kmax = 6
   17168     17037851 :                   DO i = 1, imax
   17169     16141122 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   17170     16141122 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   17171     16141122 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   17172     16141122 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   17173     16141122 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   17174     16141122 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   17175     16141122 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   17176     17037851 :                      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      5380374 :                   imax = 1*3*5
   17179      5380374 :                   kmax = 6
   17180              :                   i = 0
   17181      5380374 :                   DO i1 = 1, 5
   17182     18831309 :                   DO i2 = 1, 3
   17183     31385515 :                   DO i3 = 1, 1
   17184     13450935 :                      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     13450935 :                         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     13450935 :                         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     13450935 :                         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     13450935 :                         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     13450935 :                         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     13450935 :                         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     13450935 :                         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     26901870 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   17209              :                   END DO
   17210              :                   END DO
   17211              :                   END DO
   17212      1717846 :                   s_offset_d1 = s_offset_d1 + 5
   17213              :                END DO
   17214      1592860 :                s_offset_c1 = s_offset_c1 + 5
   17215              :             END DO
   17216      1340881 :             s_offset_b1 = s_offset_b1 + 3
   17217              :          END DO
   17218       932156 :          s_offset_a1 = s_offset_a1 + 1
   17219              :       END DO
   17220       363018 :    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      1575492 :    SUBROUTINE contract_sdss(work, &
   18927              :                             nl_a, nl_b, nl_c, nl_d, &
   18928      1575492 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   18929      1575492 :                             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      1575492 :       s_offset_a1 = 0
   18946      3913336 :       DO ia = 1, nl_a
   18947              :          s_offset_b1 = 0
   18948      5015419 :          DO ib = 1, nl_b
   18949              :             s_offset_c1 = 0
   18950      6911333 :             DO ic = 1, nl_c
   18951              :                s_offset_d1 = 0
   18952     11473290 :                DO id = 1, nl_d
   18953      7239532 :                   buffer1 = 0.0_dp
   18954      7239532 :                   imax = 6*1*1
   18955      7239532 :                   kmax = 1
   18956     50676724 :                   DO i = 1, imax
   18957     50676724 :                      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      7239532 :                   buffer2 = 0.0_dp
   18960      7239532 :                   imax = 1*1*1
   18961      7239532 :                   kmax = 6
   18962     14479064 :                   DO i = 1, imax
   18963      7239532 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   18964      7239532 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   18965      7239532 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   18966      7239532 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   18967      7239532 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   18968      7239532 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   18969      7239532 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   18970     14479064 :                      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      7239532 :                   buffer1 = 0.0_dp
   18973      7239532 :                   imax = 1*5*1
   18974      7239532 :                   kmax = 1
   18975     43437192 :                   DO i = 1, imax
   18976     43437192 :                      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     14479064 :                   imax = 1*5*1
   18979     14479064 :                   kmax = 1
   18980              :                   i = 0
   18981     14479064 :                   DO i1 = 1, 1
   18982     50676724 :                   DO i2 = 1, 5
   18983     79634852 :                   DO i3 = 1, 1
   18984     36197660 :                      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     72395320 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   18988              :                   END DO
   18989              :                   END DO
   18990              :                   END DO
   18991     11473290 :                   s_offset_d1 = s_offset_d1 + 1
   18992              :                END DO
   18993      6911333 :                s_offset_c1 = s_offset_c1 + 1
   18994              :             END DO
   18995      5015419 :             s_offset_b1 = s_offset_b1 + 5
   18996              :          END DO
   18997      3913336 :          s_offset_a1 = s_offset_a1 + 1
   18998              :       END DO
   18999      1575492 :    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      1358935 :    SUBROUTINE contract_sdsp(work, &
   19018              :                             nl_a, nl_b, nl_c, nl_d, &
   19019      1358935 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19020      1358935 :                             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      1358935 :       s_offset_a1 = 0
   19037      3508403 :       DO ia = 1, nl_a
   19038              :          s_offset_b1 = 0
   19039      4575647 :          DO ib = 1, nl_b
   19040              :             s_offset_c1 = 0
   19041      6468004 :             DO ic = 1, nl_c
   19042              :                s_offset_d1 = 0
   19043      9831481 :                DO id = 1, nl_d
   19044      5789656 :                   buffer1 = 0.0_dp
   19045      5789656 :                   imax = 6*1*3
   19046      5789656 :                   kmax = 1
   19047    110003464 :                   DO i = 1, imax
   19048    110003464 :                      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      5789656 :                   buffer2 = 0.0_dp
   19051      5789656 :                   imax = 1*1*3
   19052      5789656 :                   kmax = 6
   19053     23158624 :                   DO i = 1, imax
   19054     17368968 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19055     17368968 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19056     17368968 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19057     17368968 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19058     17368968 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19059     17368968 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19060     17368968 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19061     23158624 :                      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      5789656 :                   buffer1 = 0.0_dp
   19064      5789656 :                   imax = 1*5*3
   19065      5789656 :                   kmax = 1
   19066     92634496 :                   DO i = 1, imax
   19067     92634496 :                      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     11579312 :                   imax = 1*5*1
   19070     11579312 :                   kmax = 3
   19071              :                   i = 0
   19072     11579312 :                   DO i1 = 1, 1
   19073     40527592 :                   DO i2 = 1, 5
   19074     63686216 :                   DO i3 = 1, 1
   19075     28948280 :                      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     28948280 :                         + 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     28948280 :                         + 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     57896560 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   19085              :                   END DO
   19086              :                   END DO
   19087              :                   END DO
   19088      9831481 :                   s_offset_d1 = s_offset_d1 + 3
   19089              :                END DO
   19090      6468004 :                s_offset_c1 = s_offset_c1 + 1
   19091              :             END DO
   19092      4575647 :             s_offset_b1 = s_offset_b1 + 5
   19093              :          END DO
   19094      3508403 :          s_offset_a1 = s_offset_a1 + 1
   19095              :       END DO
   19096      1358935 :    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       431901 :    SUBROUTINE contract_sdsd(work, &
   19115              :                             nl_a, nl_b, nl_c, nl_d, &
   19116       431901 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19117       431901 :                             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       431901 :       s_offset_a1 = 0
   19134      1156551 :       DO ia = 1, nl_a
   19135              :          s_offset_b1 = 0
   19136      1621235 :          DO ib = 1, nl_b
   19137              :             s_offset_c1 = 0
   19138      2400496 :             DO ic = 1, nl_c
   19139              :                s_offset_d1 = 0
   19140      3313187 :                DO id = 1, nl_d
   19141      1809276 :                   buffer1 = 0.0_dp
   19142      1809276 :                   imax = 6*1*6
   19143      1809276 :                   kmax = 1
   19144     66943212 :                   DO i = 1, imax
   19145     66943212 :                      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      1809276 :                   buffer2 = 0.0_dp
   19148      1809276 :                   imax = 1*1*6
   19149      1809276 :                   kmax = 6
   19150     12664932 :                   DO i = 1, imax
   19151     10855656 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19152     10855656 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19153     10855656 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19154     10855656 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19155     10855656 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19156     10855656 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19157     10855656 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19158     12664932 :                      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      1809276 :                   buffer1 = 0.0_dp
   19161      1809276 :                   imax = 1*5*6
   19162      1809276 :                   kmax = 1
   19163     56087556 :                   DO i = 1, imax
   19164     56087556 :                      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      3618552 :                   imax = 1*5*1
   19167      3618552 :                   kmax = 6
   19168              :                   i = 0
   19169      3618552 :                   DO i1 = 1, 1
   19170     12664932 :                   DO i2 = 1, 5
   19171     19902036 :                   DO i3 = 1, 1
   19172      9046380 :                      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      9046380 :                         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      9046380 :                         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      9046380 :                         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      9046380 :                         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      9046380 :                         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      9046380 :                         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      9046380 :                         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     18092760 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   19197              :                   END DO
   19198              :                   END DO
   19199              :                   END DO
   19200      3313187 :                   s_offset_d1 = s_offset_d1 + 5
   19201              :                END DO
   19202      2400496 :                s_offset_c1 = s_offset_c1 + 1
   19203              :             END DO
   19204      1621235 :             s_offset_b1 = s_offset_b1 + 5
   19205              :          END DO
   19206      1156551 :          s_offset_a1 = s_offset_a1 + 1
   19207              :       END DO
   19208       431901 :    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      1202647 :    SUBROUTINE contract_sdps(work, &
   19535              :                             nl_a, nl_b, nl_c, nl_d, &
   19536      1202647 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19537      1202647 :                             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      1202647 :       s_offset_a1 = 0
   19554      3059082 :       DO ia = 1, nl_a
   19555              :          s_offset_b1 = 0
   19556      3911627 :          DO ib = 1, nl_b
   19557              :             s_offset_c1 = 0
   19558      5025822 :             DO ic = 1, nl_c
   19559              :                s_offset_d1 = 0
   19560      8179565 :                DO id = 1, nl_d
   19561      5208935 :                   buffer1 = 0.0_dp
   19562      5208935 :                   imax = 6*3*1
   19563      5208935 :                   kmax = 1
   19564     98969765 :                   DO i = 1, imax
   19565     98969765 :                      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      5208935 :                   buffer2 = 0.0_dp
   19568      5208935 :                   imax = 1*3*1
   19569      5208935 :                   kmax = 6
   19570     20835740 :                   DO i = 1, imax
   19571     15626805 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19572     15626805 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19573     15626805 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19574     15626805 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19575     15626805 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19576     15626805 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19577     15626805 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19578     20835740 :                      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      5208935 :                   buffer1 = 0.0_dp
   19581      5208935 :                   imax = 1*5*1
   19582      5208935 :                   kmax = 3
   19583     31253610 :                   DO i = 1, imax
   19584     26044675 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19585     26044675 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19586     31253610 :                      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     20835740 :                   imax = 1*5*3
   19589     20835740 :                   kmax = 1
   19590              :                   i = 0
   19591     20835740 :                   DO i1 = 1, 3
   19592     98969765 :                   DO i2 = 1, 5
   19593    171894855 :                   DO i3 = 1, 1
   19594     78134025 :                      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    156268050 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   19598              :                   END DO
   19599              :                   END DO
   19600              :                   END DO
   19601      8179565 :                   s_offset_d1 = s_offset_d1 + 1
   19602              :                END DO
   19603      5025822 :                s_offset_c1 = s_offset_c1 + 3
   19604              :             END DO
   19605      3911627 :             s_offset_b1 = s_offset_b1 + 5
   19606              :          END DO
   19607      3059082 :          s_offset_a1 = s_offset_a1 + 1
   19608              :       END DO
   19609      1202647 :    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       700712 :    SUBROUTINE contract_sdpp(work, &
   19628              :                             nl_a, nl_b, nl_c, nl_d, &
   19629       700712 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19630       700712 :                             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       700712 :       s_offset_a1 = 0
   19647      1837132 :       DO ia = 1, nl_a
   19648              :          s_offset_b1 = 0
   19649      2447893 :          DO ib = 1, nl_b
   19650              :             s_offset_c1 = 0
   19651      3139158 :             DO ic = 1, nl_c
   19652              :                s_offset_d1 = 0
   19653      4501022 :                DO id = 1, nl_d
   19654      2673337 :                   buffer1 = 0.0_dp
   19655      2673337 :                   imax = 6*3*3
   19656      2673337 :                   kmax = 1
   19657    147033535 :                   DO i = 1, imax
   19658    147033535 :                      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      2673337 :                   buffer2 = 0.0_dp
   19661      2673337 :                   imax = 1*3*3
   19662      2673337 :                   kmax = 6
   19663     26733370 :                   DO i = 1, imax
   19664     24060033 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19665     24060033 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19666     24060033 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19667     24060033 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19668     24060033 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19669     24060033 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19670     24060033 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19671     26733370 :                      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      2673337 :                   buffer1 = 0.0_dp
   19674      2673337 :                   imax = 1*5*3
   19675      2673337 :                   kmax = 3
   19676     42773392 :                   DO i = 1, imax
   19677     40100055 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19678     40100055 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19679     42773392 :                      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     10693348 :                   imax = 1*5*3
   19682     10693348 :                   kmax = 3
   19683              :                   i = 0
   19684     10693348 :                   DO i1 = 1, 3
   19685     50793403 :                   DO i2 = 1, 5
   19686     88220121 :                   DO i3 = 1, 1
   19687     40100055 :                      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     40100055 :                         + 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     40100055 :                         + 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     80200110 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   19697              :                   END DO
   19698              :                   END DO
   19699              :                   END DO
   19700      4501022 :                   s_offset_d1 = s_offset_d1 + 3
   19701              :                END DO
   19702      3139158 :                s_offset_c1 = s_offset_c1 + 3
   19703              :             END DO
   19704      2447893 :             s_offset_b1 = s_offset_b1 + 5
   19705              :          END DO
   19706      1837132 :          s_offset_a1 = s_offset_a1 + 1
   19707              :       END DO
   19708       700712 :    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       367117 :    SUBROUTINE contract_sdpd(work, &
   19727              :                             nl_a, nl_b, nl_c, nl_d, &
   19728       367117 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19729       367117 :                             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       367117 :       s_offset_a1 = 0
   19746       982838 :       DO ia = 1, nl_a
   19747              :          s_offset_b1 = 0
   19748      1351653 :          DO ib = 1, nl_b
   19749              :             s_offset_c1 = 0
   19750      1767625 :             DO ic = 1, nl_c
   19751              :                s_offset_d1 = 0
   19752      2206969 :                DO id = 1, nl_d
   19753      1175276 :                   buffer1 = 0.0_dp
   19754      1175276 :                   imax = 6*3*6
   19755      1175276 :                   kmax = 1
   19756    128105084 :                   DO i = 1, imax
   19757    128105084 :                      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      1175276 :                   buffer2 = 0.0_dp
   19760      1175276 :                   imax = 1*3*6
   19761      1175276 :                   kmax = 6
   19762     22330244 :                   DO i = 1, imax
   19763     21154968 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19764     21154968 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19765     21154968 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19766     21154968 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19767     21154968 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19768     21154968 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19769     21154968 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19770     22330244 :                      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      1175276 :                   buffer1 = 0.0_dp
   19773      1175276 :                   imax = 1*5*6
   19774      1175276 :                   kmax = 3
   19775     36433556 :                   DO i = 1, imax
   19776     35258280 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19777     35258280 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19778     36433556 :                      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      4701104 :                   imax = 1*5*3
   19781      4701104 :                   kmax = 6
   19782              :                   i = 0
   19783      4701104 :                   DO i1 = 1, 3
   19784     22330244 :                   DO i2 = 1, 5
   19785     38784108 :                   DO i3 = 1, 1
   19786     17629140 :                      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     17629140 :                         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     17629140 :                         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     17629140 :                         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     17629140 :                         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     17629140 :                         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     17629140 :                         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     17629140 :                         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     35258280 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   19811              :                   END DO
   19812              :                   END DO
   19813              :                   END DO
   19814      2206969 :                   s_offset_d1 = s_offset_d1 + 5
   19815              :                END DO
   19816      1767625 :                s_offset_c1 = s_offset_c1 + 3
   19817              :             END DO
   19818      1351653 :             s_offset_b1 = s_offset_b1 + 5
   19819              :          END DO
   19820       982838 :          s_offset_a1 = s_offset_a1 + 1
   19821              :       END DO
   19822       367117 :    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       268496 :    SUBROUTINE contract_sdds(work, &
   20153              :                             nl_a, nl_b, nl_c, nl_d, &
   20154       268496 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20155       268496 :                             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       268496 :       s_offset_a1 = 0
   20172       693278 :       DO ia = 1, nl_a
   20173              :          s_offset_b1 = 0
   20174       930845 :          DO ib = 1, nl_b
   20175              :             s_offset_c1 = 0
   20176      1063837 :             DO ic = 1, nl_c
   20177              :                s_offset_d1 = 0
   20178      1509977 :                DO id = 1, nl_d
   20179       952203 :                   buffer1 = 0.0_dp
   20180       952203 :                   imax = 6*6*1
   20181       952203 :                   kmax = 1
   20182     35231511 :                   DO i = 1, imax
   20183     35231511 :                      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       952203 :                   buffer2 = 0.0_dp
   20186       952203 :                   imax = 1*6*1
   20187       952203 :                   kmax = 6
   20188      6665421 :                   DO i = 1, imax
   20189      5713218 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20190      5713218 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20191      5713218 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20192      5713218 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20193      5713218 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20194      5713218 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20195      5713218 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20196      6665421 :                      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       952203 :                   buffer1 = 0.0_dp
   20199       952203 :                   imax = 1*5*1
   20200       952203 :                   kmax = 6
   20201      5713218 :                   DO i = 1, imax
   20202      4761015 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20203      4761015 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20204      4761015 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20205      4761015 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20206      4761015 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20207      4761015 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20208      4761015 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20209      5713218 :                      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      5713218 :                   imax = 1*5*5
   20212      5713218 :                   kmax = 1
   20213              :                   i = 0
   20214      5713218 :                   DO i1 = 1, 5
   20215     29518293 :                   DO i2 = 1, 5
   20216     52371165 :                   DO i3 = 1, 1
   20217     23805075 :                      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     47610150 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   20221              :                   END DO
   20222              :                   END DO
   20223              :                   END DO
   20224      1509977 :                   s_offset_d1 = s_offset_d1 + 1
   20225              :                END DO
   20226      1063837 :                s_offset_c1 = s_offset_c1 + 5
   20227              :             END DO
   20228       930845 :             s_offset_b1 = s_offset_b1 + 5
   20229              :          END DO
   20230       693278 :          s_offset_a1 = s_offset_a1 + 1
   20231              :       END DO
   20232       268496 :    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       281320 :    SUBROUTINE contract_sddp(work, &
   20251              :                             nl_a, nl_b, nl_c, nl_d, &
   20252       281320 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20253       281320 :                             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       281320 :       s_offset_a1 = 0
   20270       743157 :       DO ia = 1, nl_a
   20271              :          s_offset_b1 = 0
   20272       992291 :          DO ib = 1, nl_b
   20273              :             s_offset_c1 = 0
   20274      1100969 :             DO ic = 1, nl_c
   20275              :                s_offset_d1 = 0
   20276      1358048 :                DO id = 1, nl_d
   20277       787533 :                   buffer1 = 0.0_dp
   20278       787533 :                   imax = 6*6*3
   20279       787533 :                   kmax = 1
   20280     85841097 :                   DO i = 1, imax
   20281     85841097 :                      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       787533 :                   buffer2 = 0.0_dp
   20284       787533 :                   imax = 1*6*3
   20285       787533 :                   kmax = 6
   20286     14963127 :                   DO i = 1, imax
   20287     14175594 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20288     14175594 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20289     14175594 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20290     14175594 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20291     14175594 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20292     14175594 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20293     14175594 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20294     14963127 :                      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       787533 :                   buffer1 = 0.0_dp
   20297       787533 :                   imax = 1*5*3
   20298       787533 :                   kmax = 6
   20299     12600528 :                   DO i = 1, imax
   20300     11812995 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20301     11812995 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20302     11812995 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20303     11812995 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20304     11812995 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20305     11812995 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20306     11812995 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20307     12600528 :                      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      4725198 :                   imax = 1*5*5
   20310      4725198 :                   kmax = 3
   20311              :                   i = 0
   20312      4725198 :                   DO i1 = 1, 5
   20313     24413523 :                   DO i2 = 1, 5
   20314     43314315 :                   DO i3 = 1, 1
   20315     19688325 :                      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     19688325 :                         + 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     19688325 :                         + 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     39376650 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   20325              :                   END DO
   20326              :                   END DO
   20327              :                   END DO
   20328      1358048 :                   s_offset_d1 = s_offset_d1 + 3
   20329              :                END DO
   20330      1100969 :                s_offset_c1 = s_offset_c1 + 5
   20331              :             END DO
   20332       992291 :             s_offset_b1 = s_offset_b1 + 5
   20333              :          END DO
   20334       743157 :          s_offset_a1 = s_offset_a1 + 1
   20335              :       END DO
   20336       281320 :    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       131378 :    SUBROUTINE contract_sddd(work, &
   20355              :                             nl_a, nl_b, nl_c, nl_d, &
   20356       131378 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20357       131378 :                             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       131378 :       s_offset_a1 = 0
   20374       354648 :       DO ia = 1, nl_a
   20375              :          s_offset_b1 = 0
   20376       508034 :          DO ib = 1, nl_b
   20377              :             s_offset_c1 = 0
   20378       604863 :             DO ic = 1, nl_c
   20379              :                s_offset_d1 = 0
   20380       720272 :                DO id = 1, nl_d
   20381       400173 :                   buffer1 = 0.0_dp
   20382       400173 :                   imax = 6*6*6
   20383       400173 :                   kmax = 1
   20384     86837541 :                   DO i = 1, imax
   20385     86837541 :                      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       400173 :                   buffer2 = 0.0_dp
   20388       400173 :                   imax = 1*6*6
   20389       400173 :                   kmax = 6
   20390     14806401 :                   DO i = 1, imax
   20391     14406228 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20392     14406228 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20393     14406228 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20394     14406228 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20395     14406228 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20396     14406228 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20397     14406228 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20398     14806401 :                      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       400173 :                   buffer1 = 0.0_dp
   20401       400173 :                   imax = 1*5*6
   20402       400173 :                   kmax = 6
   20403     12405363 :                   DO i = 1, imax
   20404     12005190 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20405     12005190 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20406     12005190 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20407     12005190 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20408     12005190 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20409     12005190 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20410     12005190 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20411     12405363 :                      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      2401038 :                   imax = 1*5*5
   20414      2401038 :                   kmax = 6
   20415              :                   i = 0
   20416      2401038 :                   DO i1 = 1, 5
   20417     12405363 :                   DO i2 = 1, 5
   20418     22009515 :                   DO i3 = 1, 1
   20419     10004325 :                      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     10004325 :                         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     10004325 :                         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     10004325 :                         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     10004325 :                         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     10004325 :                         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     10004325 :                         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     10004325 :                         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     20008650 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   20444              :                   END DO
   20445              :                   END DO
   20446              :                   END DO
   20447       720272 :                   s_offset_d1 = s_offset_d1 + 5
   20448              :                END DO
   20449       604863 :                s_offset_c1 = s_offset_c1 + 5
   20450              :             END DO
   20451       508034 :             s_offset_b1 = s_offset_b1 + 5
   20452              :          END DO
   20453       354648 :          s_offset_a1 = s_offset_a1 + 1
   20454              :       END DO
   20455       131378 :    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     40171975 :    SUBROUTINE contract_psss(work, &
   29512              :                             nl_a, nl_b, nl_c, nl_d, &
   29513     40171975 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29514     40171975 :                             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     40171975 :       s_offset_a1 = 0
   29531     85867005 :       DO ia = 1, nl_a
   29532              :          s_offset_b1 = 0
   29533    103644593 :          DO ib = 1, nl_b
   29534              :             s_offset_c1 = 0
   29535    140225684 :             DO ic = 1, nl_c
   29536              :                s_offset_d1 = 0
   29537    212981575 :                DO id = 1, nl_d
   29538    130705454 :                   buffer1 = 0.0_dp
   29539    130705454 :                   imax = 1*1*1
   29540    130705454 :                   kmax = 3
   29541    261410908 :                   DO i = 1, imax
   29542    130705454 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29543    130705454 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29544    261410908 :                      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    130705454 :                   buffer2 = 0.0_dp
   29547    130705454 :                   imax = 3*1*1
   29548    130705454 :                   kmax = 1
   29549    522821816 :                   DO i = 1, imax
   29550    522821816 :                      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    130705454 :                   buffer1 = 0.0_dp
   29553    130705454 :                   imax = 3*1*1
   29554    130705454 :                   kmax = 1
   29555    522821816 :                   DO i = 1, imax
   29556    522821816 :                      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    261410908 :                   imax = 3*1*1
   29559    261410908 :                   kmax = 1
   29560              :                   i = 0
   29561    261410908 :                   DO i1 = 1, 1
   29562    392116362 :                   DO i2 = 1, 1
   29563    653527270 :                   DO i3 = 1, 3
   29564    392116362 :                      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    522821816 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   29568              :                   END DO
   29569              :                   END DO
   29570              :                   END DO
   29571    212981575 :                   s_offset_d1 = s_offset_d1 + 1
   29572              :                END DO
   29573    140225684 :                s_offset_c1 = s_offset_c1 + 1
   29574              :             END DO
   29575    103644593 :             s_offset_b1 = s_offset_b1 + 1
   29576              :          END DO
   29577     85867005 :          s_offset_a1 = s_offset_a1 + 3
   29578              :       END DO
   29579     40171975 :    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     13648342 :    SUBROUTINE contract_pssp(work, &
   29598              :                             nl_a, nl_b, nl_c, nl_d, &
   29599     13648342 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29600     13648342 :                             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     13648342 :       s_offset_a1 = 0
   29617     29816977 :       DO ia = 1, nl_a
   29618              :          s_offset_b1 = 0
   29619     38155731 :          DO ib = 1, nl_b
   29620              :             s_offset_c1 = 0
   29621     55368703 :             DO ic = 1, nl_c
   29622              :                s_offset_d1 = 0
   29623     85772878 :                DO id = 1, nl_d
   29624     52391271 :                   buffer1 = 0.0_dp
   29625     52391271 :                   imax = 1*1*3
   29626     52391271 :                   kmax = 3
   29627    209565084 :                   DO i = 1, imax
   29628    157173813 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29629    157173813 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29630    209565084 :                      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     52391271 :                   buffer2 = 0.0_dp
   29633     52391271 :                   imax = 3*1*3
   29634     52391271 :                   kmax = 1
   29635    523912710 :                   DO i = 1, imax
   29636    523912710 :                      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     52391271 :                   buffer1 = 0.0_dp
   29639     52391271 :                   imax = 3*1*3
   29640     52391271 :                   kmax = 1
   29641    523912710 :                   DO i = 1, imax
   29642    523912710 :                      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    104782542 :                   imax = 3*1*1
   29645    104782542 :                   kmax = 3
   29646              :                   i = 0
   29647    104782542 :                   DO i1 = 1, 1
   29648    157173813 :                   DO i2 = 1, 1
   29649    261956355 :                   DO i3 = 1, 3
   29650    157173813 :                      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    157173813 :                         + 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    157173813 :                         + 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    209565084 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   29660              :                   END DO
   29661              :                   END DO
   29662              :                   END DO
   29663     85772878 :                   s_offset_d1 = s_offset_d1 + 3
   29664              :                END DO
   29665     55368703 :                s_offset_c1 = s_offset_c1 + 1
   29666              :             END DO
   29667     38155731 :             s_offset_b1 = s_offset_b1 + 1
   29668              :          END DO
   29669     29816977 :          s_offset_a1 = s_offset_a1 + 3
   29670              :       END DO
   29671     13648342 :    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      2079184 :    SUBROUTINE contract_pssd(work, &
   29690              :                             nl_a, nl_b, nl_c, nl_d, &
   29691      2079184 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29692      2079184 :                             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      2079184 :       s_offset_a1 = 0
   29709      4940701 :       DO ia = 1, nl_a
   29710              :          s_offset_b1 = 0
   29711      7601852 :          DO ib = 1, nl_b
   29712              :             s_offset_c1 = 0
   29713     13053617 :             DO ic = 1, nl_c
   29714              :                s_offset_d1 = 0
   29715     16998590 :                DO id = 1, nl_d
   29716      8685308 :                   buffer1 = 0.0_dp
   29717      8685308 :                   imax = 1*1*6
   29718      8685308 :                   kmax = 3
   29719     60797156 :                   DO i = 1, imax
   29720     52111848 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29721     52111848 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29722     60797156 :                      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      8685308 :                   buffer2 = 0.0_dp
   29725      8685308 :                   imax = 3*1*6
   29726      8685308 :                   kmax = 1
   29727    165020852 :                   DO i = 1, imax
   29728    165020852 :                      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      8685308 :                   buffer1 = 0.0_dp
   29731      8685308 :                   imax = 3*1*6
   29732      8685308 :                   kmax = 1
   29733    165020852 :                   DO i = 1, imax
   29734    165020852 :                      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     17370616 :                   imax = 3*1*1
   29737     17370616 :                   kmax = 6
   29738              :                   i = 0
   29739     17370616 :                   DO i1 = 1, 1
   29740     26055924 :                   DO i2 = 1, 1
   29741     43426540 :                   DO i3 = 1, 3
   29742     26055924 :                      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     26055924 :                         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     26055924 :                         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     26055924 :                         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     26055924 :                         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     26055924 :                         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     26055924 :                         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     26055924 :                         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     34741232 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   29767              :                   END DO
   29768              :                   END DO
   29769              :                   END DO
   29770     16998590 :                   s_offset_d1 = s_offset_d1 + 5
   29771              :                END DO
   29772     13053617 :                s_offset_c1 = s_offset_c1 + 1
   29773              :             END DO
   29774      7601852 :             s_offset_b1 = s_offset_b1 + 1
   29775              :          END DO
   29776      4940701 :          s_offset_a1 = s_offset_a1 + 3
   29777              :       END DO
   29778      2079184 :    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     25430086 :    SUBROUTINE contract_psps(work, &
   30095              :                             nl_a, nl_b, nl_c, nl_d, &
   30096     25430086 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30097     25430086 :                             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     25430086 :       s_offset_a1 = 0
   30114     55033935 :       DO ia = 1, nl_a
   30115              :          s_offset_b1 = 0
   30116     68268091 :          DO ib = 1, nl_b
   30117              :             s_offset_c1 = 0
   30118     94263923 :             DO ic = 1, nl_c
   30119              :                s_offset_d1 = 0
   30120    146074307 :                DO id = 1, nl_d
   30121     90474626 :                   buffer1 = 0.0_dp
   30122     90474626 :                   imax = 1*3*1
   30123     90474626 :                   kmax = 3
   30124    361898504 :                   DO i = 1, imax
   30125    271423878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30126    271423878 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30127    361898504 :                      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     90474626 :                   buffer2 = 0.0_dp
   30130     90474626 :                   imax = 3*3*1
   30131     90474626 :                   kmax = 1
   30132    904746260 :                   DO i = 1, imax
   30133    904746260 :                      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     90474626 :                   buffer1 = 0.0_dp
   30136     90474626 :                   imax = 3*1*1
   30137     90474626 :                   kmax = 3
   30138    361898504 :                   DO i = 1, imax
   30139    271423878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30140    271423878 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30141    361898504 :                      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    361898504 :                   imax = 3*1*3
   30144    361898504 :                   kmax = 1
   30145              :                   i = 0
   30146    361898504 :                   DO i1 = 1, 3
   30147    633322382 :                   DO i2 = 1, 1
   30148   1357119390 :                   DO i3 = 1, 3
   30149    814271634 :                      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   1085695512 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   30153              :                   END DO
   30154              :                   END DO
   30155              :                   END DO
   30156    146074307 :                   s_offset_d1 = s_offset_d1 + 1
   30157              :                END DO
   30158     94263923 :                s_offset_c1 = s_offset_c1 + 3
   30159              :             END DO
   30160     68268091 :             s_offset_b1 = s_offset_b1 + 1
   30161              :          END DO
   30162     55033935 :          s_offset_a1 = s_offset_a1 + 3
   30163              :       END DO
   30164     25430086 :    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     14223724 :    SUBROUTINE contract_pspp(work, &
   30183              :                             nl_a, nl_b, nl_c, nl_d, &
   30184     14223724 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30185     14223724 :                             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     14223724 :       s_offset_a1 = 0
   30202     31750812 :       DO ia = 1, nl_a
   30203              :          s_offset_b1 = 0
   30204     42162117 :          DO ib = 1, nl_b
   30205              :             s_offset_c1 = 0
   30206     62615984 :             DO ic = 1, nl_c
   30207              :                s_offset_d1 = 0
   30208    101516440 :                DO id = 1, nl_d
   30209     63535485 :                   buffer1 = 0.0_dp
   30210     63535485 :                   imax = 1*3*3
   30211     63535485 :                   kmax = 3
   30212    635354850 :                   DO i = 1, imax
   30213    571819365 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30214    571819365 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30215    635354850 :                      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     63535485 :                   buffer2 = 0.0_dp
   30218     63535485 :                   imax = 3*3*3
   30219     63535485 :                   kmax = 1
   30220   1778993580 :                   DO i = 1, imax
   30221   1778993580 :                      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     63535485 :                   buffer1 = 0.0_dp
   30224     63535485 :                   imax = 3*1*3
   30225     63535485 :                   kmax = 3
   30226    635354850 :                   DO i = 1, imax
   30227    571819365 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30228    571819365 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30229    635354850 :                      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    254141940 :                   imax = 3*1*3
   30232    254141940 :                   kmax = 3
   30233              :                   i = 0
   30234    254141940 :                   DO i1 = 1, 3
   30235    444748395 :                   DO i2 = 1, 1
   30236    953032275 :                   DO i3 = 1, 3
   30237    571819365 :                      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    571819365 :                         + 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    571819365 :                         + 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    762425820 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   30247              :                   END DO
   30248              :                   END DO
   30249              :                   END DO
   30250    101516440 :                   s_offset_d1 = s_offset_d1 + 3
   30251              :                END DO
   30252     62615984 :                s_offset_c1 = s_offset_c1 + 3
   30253              :             END DO
   30254     42162117 :             s_offset_b1 = s_offset_b1 + 1
   30255              :          END DO
   30256     31750812 :          s_offset_a1 = s_offset_a1 + 3
   30257              :       END DO
   30258     14223724 :    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      1432504 :    SUBROUTINE contract_pspd(work, &
   30277              :                             nl_a, nl_b, nl_c, nl_d, &
   30278      1432504 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30279      1432504 :                             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      1432504 :       s_offset_a1 = 0
   30296      3435316 :       DO ia = 1, nl_a
   30297              :          s_offset_b1 = 0
   30298      5372092 :          DO ib = 1, nl_b
   30299              :             s_offset_c1 = 0
   30300      9004772 :             DO ic = 1, nl_c
   30301              :                s_offset_d1 = 0
   30302     11450552 :                DO id = 1, nl_d
   30303      5815060 :                   buffer1 = 0.0_dp
   30304      5815060 :                   imax = 1*3*6
   30305      5815060 :                   kmax = 3
   30306    110486140 :                   DO i = 1, imax
   30307    104671080 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30308    104671080 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30309    110486140 :                      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      5815060 :                   buffer2 = 0.0_dp
   30312      5815060 :                   imax = 3*3*6
   30313      5815060 :                   kmax = 1
   30314    319828300 :                   DO i = 1, imax
   30315    319828300 :                      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      5815060 :                   buffer1 = 0.0_dp
   30318      5815060 :                   imax = 3*1*6
   30319      5815060 :                   kmax = 3
   30320    110486140 :                   DO i = 1, imax
   30321    104671080 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30322    104671080 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30323    110486140 :                      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     23260240 :                   imax = 3*1*3
   30326     23260240 :                   kmax = 6
   30327              :                   i = 0
   30328     23260240 :                   DO i1 = 1, 3
   30329     40705420 :                   DO i2 = 1, 1
   30330     87225900 :                   DO i3 = 1, 3
   30331     52335540 :                      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     52335540 :                         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     52335540 :                         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     52335540 :                         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     52335540 :                         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     52335540 :                         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     52335540 :                         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     52335540 :                         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     69780720 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   30356              :                   END DO
   30357              :                   END DO
   30358              :                   END DO
   30359     11450552 :                   s_offset_d1 = s_offset_d1 + 5
   30360              :                END DO
   30361      9004772 :                s_offset_c1 = s_offset_c1 + 3
   30362              :             END DO
   30363      5372092 :             s_offset_b1 = s_offset_b1 + 1
   30364              :          END DO
   30365      3435316 :          s_offset_a1 = s_offset_a1 + 3
   30366              :       END DO
   30367      1432504 :    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      3037321 :    SUBROUTINE contract_psds(work, &
   30688              :                             nl_a, nl_b, nl_c, nl_d, &
   30689      3037321 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30690      3037321 :                             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      3037321 :       s_offset_a1 = 0
   30707      7291332 :       DO ia = 1, nl_a
   30708              :          s_offset_b1 = 0
   30709     11182802 :          DO ib = 1, nl_b
   30710              :             s_offset_c1 = 0
   30711     13996635 :             DO ic = 1, nl_c
   30712              :                s_offset_d1 = 0
   30713     19564360 :                DO id = 1, nl_d
   30714     12496516 :                   buffer1 = 0.0_dp
   30715     12496516 :                   imax = 1*6*1
   30716     12496516 :                   kmax = 3
   30717     87475612 :                   DO i = 1, imax
   30718     74979096 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30719     74979096 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30720     87475612 :                      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     12496516 :                   buffer2 = 0.0_dp
   30723     12496516 :                   imax = 3*6*1
   30724     12496516 :                   kmax = 1
   30725    237433804 :                   DO i = 1, imax
   30726    237433804 :                      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     12496516 :                   buffer1 = 0.0_dp
   30729     12496516 :                   imax = 3*1*1
   30730     12496516 :                   kmax = 6
   30731     49986064 :                   DO i = 1, imax
   30732     37489548 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30733     37489548 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30734     37489548 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30735     37489548 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30736     37489548 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30737     37489548 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30738     37489548 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30739     49986064 :                      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     74979096 :                   imax = 3*1*5
   30742     74979096 :                   kmax = 1
   30743              :                   i = 0
   30744     74979096 :                   DO i1 = 1, 5
   30745    137461676 :                   DO i2 = 1, 1
   30746    312412900 :                   DO i3 = 1, 3
   30747    187447740 :                      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    249930320 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   30751              :                   END DO
   30752              :                   END DO
   30753              :                   END DO
   30754     19564360 :                   s_offset_d1 = s_offset_d1 + 1
   30755              :                END DO
   30756     13996635 :                s_offset_c1 = s_offset_c1 + 5
   30757              :             END DO
   30758     11182802 :             s_offset_b1 = s_offset_b1 + 1
   30759              :          END DO
   30760      7291332 :          s_offset_a1 = s_offset_a1 + 3
   30761              :       END DO
   30762      3037321 :    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      1502845 :    SUBROUTINE contract_psdp(work, &
   30781              :                             nl_a, nl_b, nl_c, nl_d, &
   30782      1502845 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30783      1502845 :                             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      1502845 :       s_offset_a1 = 0
   30800      3589246 :       DO ia = 1, nl_a
   30801              :          s_offset_b1 = 0
   30802      5531958 :          DO ib = 1, nl_b
   30803              :             s_offset_c1 = 0
   30804      7002871 :             DO ic = 1, nl_c
   30805              :                s_offset_d1 = 0
   30806      9321267 :                DO id = 1, nl_d
   30807      5763953 :                   buffer1 = 0.0_dp
   30808      5763953 :                   imax = 1*6*3
   30809      5763953 :                   kmax = 3
   30810    109515107 :                   DO i = 1, imax
   30811    103751154 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30812    103751154 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30813    109515107 :                      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      5763953 :                   buffer2 = 0.0_dp
   30816      5763953 :                   imax = 3*6*3
   30817      5763953 :                   kmax = 1
   30818    317017415 :                   DO i = 1, imax
   30819    317017415 :                      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      5763953 :                   buffer1 = 0.0_dp
   30822      5763953 :                   imax = 3*1*3
   30823      5763953 :                   kmax = 6
   30824     57639530 :                   DO i = 1, imax
   30825     51875577 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30826     51875577 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30827     51875577 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30828     51875577 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30829     51875577 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30830     51875577 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30831     51875577 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30832     57639530 :                      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     34583718 :                   imax = 3*1*5
   30835     34583718 :                   kmax = 3
   30836              :                   i = 0
   30837     34583718 :                   DO i1 = 1, 5
   30838     63403483 :                   DO i2 = 1, 1
   30839    144098825 :                   DO i3 = 1, 3
   30840     86459295 :                      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     86459295 :                         + 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     86459295 :                         + 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    115279060 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   30850              :                   END DO
   30851              :                   END DO
   30852              :                   END DO
   30853      9321267 :                   s_offset_d1 = s_offset_d1 + 3
   30854              :                END DO
   30855      7002871 :                s_offset_c1 = s_offset_c1 + 5
   30856              :             END DO
   30857      5531958 :             s_offset_b1 = s_offset_b1 + 1
   30858              :          END DO
   30859      3589246 :          s_offset_a1 = s_offset_a1 + 3
   30860              :       END DO
   30861      1502845 :    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       522968 :    SUBROUTINE contract_psdd(work, &
   30880              :                             nl_a, nl_b, nl_c, nl_d, &
   30881       522968 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30882       522968 :                             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       522968 :       s_offset_a1 = 0
   30899      1252220 :       DO ia = 1, nl_a
   30900              :          s_offset_b1 = 0
   30901      1981345 :          DO ib = 1, nl_b
   30902              :             s_offset_c1 = 0
   30903      2575988 :             DO ic = 1, nl_c
   30904              :                s_offset_d1 = 0
   30905      2754819 :                DO id = 1, nl_d
   30906      1430924 :                   buffer1 = 0.0_dp
   30907      1430924 :                   imax = 1*6*6
   30908      1430924 :                   kmax = 3
   30909     52944188 :                   DO i = 1, imax
   30910     51513264 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30911     51513264 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30912     52944188 :                      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      1430924 :                   buffer2 = 0.0_dp
   30915      1430924 :                   imax = 3*6*6
   30916      1430924 :                   kmax = 1
   30917    155970716 :                   DO i = 1, imax
   30918    155970716 :                      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      1430924 :                   buffer1 = 0.0_dp
   30921      1430924 :                   imax = 3*1*6
   30922      1430924 :                   kmax = 6
   30923     27187556 :                   DO i = 1, imax
   30924     25756632 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30925     25756632 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30926     25756632 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30927     25756632 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30928     25756632 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30929     25756632 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30930     25756632 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30931     27187556 :                      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      8585544 :                   imax = 3*1*5
   30934      8585544 :                   kmax = 6
   30935              :                   i = 0
   30936      8585544 :                   DO i1 = 1, 5
   30937     15740164 :                   DO i2 = 1, 1
   30938     35773100 :                   DO i3 = 1, 3
   30939     21463860 :                      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     21463860 :                         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     21463860 :                         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     21463860 :                         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     21463860 :                         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     21463860 :                         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     21463860 :                         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     21463860 :                         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     28618480 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   30964              :                   END DO
   30965              :                   END DO
   30966              :                   END DO
   30967      2754819 :                   s_offset_d1 = s_offset_d1 + 5
   30968              :                END DO
   30969      2575988 :                s_offset_c1 = s_offset_c1 + 5
   30970              :             END DO
   30971      1981345 :             s_offset_b1 = s_offset_b1 + 1
   30972              :          END DO
   30973      1252220 :          s_offset_a1 = s_offset_a1 + 3
   30974              :       END DO
   30975       522968 :    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      7094304 :    SUBROUTINE contract_ppss(work, &
   32682              :                             nl_a, nl_b, nl_c, nl_d, &
   32683      7094304 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32684      7094304 :                             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      7094304 :       s_offset_a1 = 0
   32701     15397895 :       DO ia = 1, nl_a
   32702              :          s_offset_b1 = 0
   32703     18441148 :          DO ib = 1, nl_b
   32704              :             s_offset_c1 = 0
   32705     25241377 :             DO ic = 1, nl_c
   32706              :                s_offset_d1 = 0
   32707     39932012 :                DO id = 1, nl_d
   32708     24828192 :                   buffer1 = 0.0_dp
   32709     24828192 :                   imax = 3*1*1
   32710     24828192 :                   kmax = 3
   32711     99312768 :                   DO i = 1, imax
   32712     74484576 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32713     74484576 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32714     99312768 :                      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     24828192 :                   buffer2 = 0.0_dp
   32717     24828192 :                   imax = 3*1*1
   32718     24828192 :                   kmax = 3
   32719     99312768 :                   DO i = 1, imax
   32720     74484576 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32721     74484576 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32722     99312768 :                      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     24828192 :                   buffer1 = 0.0_dp
   32725     24828192 :                   imax = 3*3*1
   32726     24828192 :                   kmax = 1
   32727    248281920 :                   DO i = 1, imax
   32728    248281920 :                      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     49656384 :                   imax = 3*3*1
   32731     49656384 :                   kmax = 1
   32732              :                   i = 0
   32733     49656384 :                   DO i1 = 1, 1
   32734    124140960 :                   DO i2 = 1, 3
   32735    322766496 :                   DO i3 = 1, 3
   32736    223453728 :                      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    297938304 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   32740              :                   END DO
   32741              :                   END DO
   32742              :                   END DO
   32743     39932012 :                   s_offset_d1 = s_offset_d1 + 1
   32744              :                END DO
   32745     25241377 :                s_offset_c1 = s_offset_c1 + 1
   32746              :             END DO
   32747     18441148 :             s_offset_b1 = s_offset_b1 + 3
   32748              :          END DO
   32749     15397895 :          s_offset_a1 = s_offset_a1 + 3
   32750              :       END DO
   32751      7094304 :    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      7237978 :    SUBROUTINE contract_ppsp(work, &
   32770              :                             nl_a, nl_b, nl_c, nl_d, &
   32771      7237978 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32772      7237978 :                             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      7237978 :       s_offset_a1 = 0
   32789     16415047 :       DO ia = 1, nl_a
   32790              :          s_offset_b1 = 0
   32791     21851902 :          DO ib = 1, nl_b
   32792              :             s_offset_c1 = 0
   32793     33144502 :             DO ic = 1, nl_c
   32794              :                s_offset_d1 = 0
   32795     55325496 :                DO id = 1, nl_d
   32796     34855827 :                   buffer1 = 0.0_dp
   32797     34855827 :                   imax = 3*1*3
   32798     34855827 :                   kmax = 3
   32799    348558270 :                   DO i = 1, imax
   32800    313702443 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32801    313702443 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32802    348558270 :                      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     34855827 :                   buffer2 = 0.0_dp
   32805     34855827 :                   imax = 3*1*3
   32806     34855827 :                   kmax = 3
   32807    348558270 :                   DO i = 1, imax
   32808    313702443 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32809    313702443 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32810    348558270 :                      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     34855827 :                   buffer1 = 0.0_dp
   32813     34855827 :                   imax = 3*3*3
   32814     34855827 :                   kmax = 1
   32815    975963156 :                   DO i = 1, imax
   32816    975963156 :                      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     69711654 :                   imax = 3*3*1
   32819     69711654 :                   kmax = 3
   32820              :                   i = 0
   32821     69711654 :                   DO i1 = 1, 1
   32822    174279135 :                   DO i2 = 1, 3
   32823    453125751 :                   DO i3 = 1, 3
   32824    313702443 :                      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    313702443 :                         + 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    313702443 :                         + 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    418269924 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   32834              :                   END DO
   32835              :                   END DO
   32836              :                   END DO
   32837     55325496 :                   s_offset_d1 = s_offset_d1 + 3
   32838              :                END DO
   32839     33144502 :                s_offset_c1 = s_offset_c1 + 1
   32840              :             END DO
   32841     21851902 :             s_offset_b1 = s_offset_b1 + 3
   32842              :          END DO
   32843     16415047 :          s_offset_a1 = s_offset_a1 + 3
   32844              :       END DO
   32845      7237978 :    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       833082 :    SUBROUTINE contract_ppsd(work, &
   32864              :                             nl_a, nl_b, nl_c, nl_d, &
   32865       833082 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32866       833082 :                             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       833082 :       s_offset_a1 = 0
   32883      1917366 :       DO ia = 1, nl_a
   32884              :          s_offset_b1 = 0
   32885      2543603 :          DO ib = 1, nl_b
   32886              :             s_offset_c1 = 0
   32887      3963993 :             DO ic = 1, nl_c
   32888              :                s_offset_d1 = 0
   32889      5161258 :                DO id = 1, nl_d
   32890      2656584 :                   buffer1 = 0.0_dp
   32891      2656584 :                   imax = 3*1*6
   32892      2656584 :                   kmax = 3
   32893     50475096 :                   DO i = 1, imax
   32894     47818512 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32895     47818512 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32896     50475096 :                      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      2656584 :                   buffer2 = 0.0_dp
   32899      2656584 :                   imax = 3*1*6
   32900      2656584 :                   kmax = 3
   32901     50475096 :                   DO i = 1, imax
   32902     47818512 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32903     47818512 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32904     50475096 :                      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      2656584 :                   buffer1 = 0.0_dp
   32907      2656584 :                   imax = 3*3*6
   32908      2656584 :                   kmax = 1
   32909    146112120 :                   DO i = 1, imax
   32910    146112120 :                      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      5313168 :                   imax = 3*3*1
   32913      5313168 :                   kmax = 6
   32914              :                   i = 0
   32915      5313168 :                   DO i1 = 1, 1
   32916     13282920 :                   DO i2 = 1, 3
   32917     34535592 :                   DO i3 = 1, 3
   32918     23909256 :                      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     23909256 :                         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     23909256 :                         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     23909256 :                         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     23909256 :                         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     23909256 :                         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     23909256 :                         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     23909256 :                         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     31879008 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   32943              :                   END DO
   32944              :                   END DO
   32945              :                   END DO
   32946      5161258 :                   s_offset_d1 = s_offset_d1 + 5
   32947              :                END DO
   32948      3963993 :                s_offset_c1 = s_offset_c1 + 1
   32949              :             END DO
   32950      2543603 :             s_offset_b1 = s_offset_b1 + 3
   32951              :          END DO
   32952      1917366 :          s_offset_a1 = s_offset_a1 + 3
   32953              :       END DO
   32954       833082 :    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      7452108 :    SUBROUTINE contract_ppps(work, &
   33275              :                             nl_a, nl_b, nl_c, nl_d, &
   33276      7452108 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33277      7452108 :                             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      7452108 :       s_offset_a1 = 0
   33294     16887089 :       DO ia = 1, nl_a
   33295              :          s_offset_b1 = 0
   33296     22352647 :          DO ib = 1, nl_b
   33297              :             s_offset_c1 = 0
   33298     33264713 :             DO ic = 1, nl_c
   33299              :                s_offset_d1 = 0
   33300     55858555 :                DO id = 1, nl_d
   33301     35511508 :                   buffer1 = 0.0_dp
   33302     35511508 :                   imax = 3*3*1
   33303     35511508 :                   kmax = 3
   33304    355115080 :                   DO i = 1, imax
   33305    319603572 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33306    319603572 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33307    355115080 :                      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     35511508 :                   buffer2 = 0.0_dp
   33310     35511508 :                   imax = 3*3*1
   33311     35511508 :                   kmax = 3
   33312    355115080 :                   DO i = 1, imax
   33313    319603572 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33314    319603572 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33315    355115080 :                      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     35511508 :                   buffer1 = 0.0_dp
   33318     35511508 :                   imax = 3*3*1
   33319     35511508 :                   kmax = 3
   33320    355115080 :                   DO i = 1, imax
   33321    319603572 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33322    319603572 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33323    355115080 :                      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    142046032 :                   imax = 3*3*3
   33326    142046032 :                   kmax = 1
   33327              :                   i = 0
   33328    142046032 :                   DO i1 = 1, 3
   33329    461649604 :                   DO i2 = 1, 3
   33330   1384948812 :                   DO i3 = 1, 3
   33331    958810716 :                      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   1278414288 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   33335              :                   END DO
   33336              :                   END DO
   33337              :                   END DO
   33338     55858555 :                   s_offset_d1 = s_offset_d1 + 1
   33339              :                END DO
   33340     33264713 :                s_offset_c1 = s_offset_c1 + 3
   33341              :             END DO
   33342     22352647 :             s_offset_b1 = s_offset_b1 + 3
   33343              :          END DO
   33344     16887089 :          s_offset_a1 = s_offset_a1 + 3
   33345              :       END DO
   33346      7452108 :    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      3720366 :    SUBROUTINE contract_pppp(work, &
   33365              :                             nl_a, nl_b, nl_c, nl_d, &
   33366      3720366 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33367      3720366 :                             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      3720366 :       s_offset_a1 = 0
   33384      8501860 :       DO ia = 1, nl_a
   33385              :          s_offset_b1 = 0
   33386     11361875 :          DO ib = 1, nl_b
   33387              :             s_offset_c1 = 0
   33388     17055792 :             DO ic = 1, nl_c
   33389              :                s_offset_d1 = 0
   33390     28531941 :                DO id = 1, nl_d
   33391     18056530 :                   buffer1 = 0.0_dp
   33392     18056530 :                   imax = 3*3*3
   33393     18056530 :                   kmax = 3
   33394    505582840 :                   DO i = 1, imax
   33395    487526310 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33396    487526310 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33397    505582840 :                      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     18056530 :                   buffer2 = 0.0_dp
   33400     18056530 :                   imax = 3*3*3
   33401     18056530 :                   kmax = 3
   33402    505582840 :                   DO i = 1, imax
   33403    487526310 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33404    487526310 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33405    505582840 :                      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     18056530 :                   buffer1 = 0.0_dp
   33408     18056530 :                   imax = 3*3*3
   33409     18056530 :                   kmax = 3
   33410    505582840 :                   DO i = 1, imax
   33411    487526310 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33412    487526310 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33413    505582840 :                      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     72226120 :                   imax = 3*3*3
   33416     72226120 :                   kmax = 3
   33417              :                   i = 0
   33418     72226120 :                   DO i1 = 1, 3
   33419    234734890 :                   DO i2 = 1, 3
   33420    704204670 :                   DO i3 = 1, 3
   33421    487526310 :                      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    487526310 :                         + 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    487526310 :                         + 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    650035080 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   33431              :                   END DO
   33432              :                   END DO
   33433              :                   END DO
   33434     28531941 :                   s_offset_d1 = s_offset_d1 + 3
   33435              :                END DO
   33436     17055792 :                s_offset_c1 = s_offset_c1 + 3
   33437              :             END DO
   33438     11361875 :             s_offset_b1 = s_offset_b1 + 3
   33439              :          END DO
   33440      8501860 :          s_offset_a1 = s_offset_a1 + 3
   33441              :       END DO
   33442      3720366 :    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       917104 :    SUBROUTINE contract_pppd(work, &
   33461              :                             nl_a, nl_b, nl_c, nl_d, &
   33462       917104 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33463       917104 :                             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       917104 :       s_offset_a1 = 0
   33480      2259013 :       DO ia = 1, nl_a
   33481              :          s_offset_b1 = 0
   33482      3430779 :          DO ib = 1, nl_b
   33483              :             s_offset_c1 = 0
   33484      5748796 :             DO ic = 1, nl_c
   33485              :                s_offset_d1 = 0
   33486      7393301 :                DO id = 1, nl_d
   33487      3733375 :                   buffer1 = 0.0_dp
   33488      3733375 :                   imax = 3*3*6
   33489      3733375 :                   kmax = 3
   33490    205335625 :                   DO i = 1, imax
   33491    201602250 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33492    201602250 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33493    205335625 :                      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      3733375 :                   buffer2 = 0.0_dp
   33496      3733375 :                   imax = 3*3*6
   33497      3733375 :                   kmax = 3
   33498    205335625 :                   DO i = 1, imax
   33499    201602250 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33500    201602250 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33501    205335625 :                      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      3733375 :                   buffer1 = 0.0_dp
   33504      3733375 :                   imax = 3*3*6
   33505      3733375 :                   kmax = 3
   33506    205335625 :                   DO i = 1, imax
   33507    201602250 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33508    201602250 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33509    205335625 :                      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     14933500 :                   imax = 3*3*3
   33512     14933500 :                   kmax = 6
   33513              :                   i = 0
   33514     14933500 :                   DO i1 = 1, 3
   33515     48533875 :                   DO i2 = 1, 3
   33516    145601625 :                   DO i3 = 1, 3
   33517    100801125 :                      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    100801125 :                         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    100801125 :                         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    100801125 :                         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    100801125 :                         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    100801125 :                         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    100801125 :                         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    100801125 :                         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    134401500 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   33542              :                   END DO
   33543              :                   END DO
   33544              :                   END DO
   33545      7393301 :                   s_offset_d1 = s_offset_d1 + 5
   33546              :                END DO
   33547      5748796 :                s_offset_c1 = s_offset_c1 + 3
   33548              :             END DO
   33549      3430779 :             s_offset_b1 = s_offset_b1 + 3
   33550              :          END DO
   33551      2259013 :          s_offset_a1 = s_offset_a1 + 3
   33552              :       END DO
   33553       917104 :    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       898587 :    SUBROUTINE contract_ppds(work, &
   33878              :                             nl_a, nl_b, nl_c, nl_d, &
   33879       898587 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33880       898587 :                             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       898587 :       s_offset_a1 = 0
   33897      2051563 :       DO ia = 1, nl_a
   33898              :          s_offset_b1 = 0
   33899      2675685 :          DO ib = 1, nl_b
   33900              :             s_offset_c1 = 0
   33901      3094069 :             DO ic = 1, nl_c
   33902              :                s_offset_d1 = 0
   33903      4185669 :                DO id = 1, nl_d
   33904      2614309 :                   buffer1 = 0.0_dp
   33905      2614309 :                   imax = 3*6*1
   33906      2614309 :                   kmax = 3
   33907     49671871 :                   DO i = 1, imax
   33908     47057562 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33909     47057562 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33910     49671871 :                      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      2614309 :                   buffer2 = 0.0_dp
   33913      2614309 :                   imax = 3*6*1
   33914      2614309 :                   kmax = 3
   33915     49671871 :                   DO i = 1, imax
   33916     47057562 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33917     47057562 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33918     49671871 :                      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      2614309 :                   buffer1 = 0.0_dp
   33921      2614309 :                   imax = 3*3*1
   33922      2614309 :                   kmax = 6
   33923     26143090 :                   DO i = 1, imax
   33924     23528781 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33925     23528781 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   33926     23528781 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33927     23528781 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   33928     23528781 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   33929     23528781 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   33930     23528781 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   33931     26143090 :                      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     15685854 :                   imax = 3*3*5
   33934     15685854 :                   kmax = 1
   33935              :                   i = 0
   33936     15685854 :                   DO i1 = 1, 5
   33937     54900489 :                   DO i2 = 1, 3
   33938    169930085 :                   DO i3 = 1, 3
   33939    117643905 :                      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    156858540 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   33943              :                   END DO
   33944              :                   END DO
   33945              :                   END DO
   33946      4185669 :                   s_offset_d1 = s_offset_d1 + 1
   33947              :                END DO
   33948      3094069 :                s_offset_c1 = s_offset_c1 + 5
   33949              :             END DO
   33950      2675685 :             s_offset_b1 = s_offset_b1 + 3
   33951              :          END DO
   33952      2051563 :          s_offset_a1 = s_offset_a1 + 3
   33953              :       END DO
   33954       898587 :    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       908123 :    SUBROUTINE contract_ppdp(work, &
   33973              :                             nl_a, nl_b, nl_c, nl_d, &
   33974       908123 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33975       908123 :                             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       908123 :       s_offset_a1 = 0
   33992      2237184 :       DO ia = 1, nl_a
   33993              :          s_offset_b1 = 0
   33994      3404726 :          DO ib = 1, nl_b
   33995              :             s_offset_c1 = 0
   33996      4191825 :             DO ic = 1, nl_c
   33997              :                s_offset_d1 = 0
   33998      5774783 :                DO id = 1, nl_d
   33999      3658623 :                   buffer1 = 0.0_dp
   34000      3658623 :                   imax = 3*6*3
   34001      3658623 :                   kmax = 3
   34002    201224265 :                   DO i = 1, imax
   34003    197565642 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   34004    197565642 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   34005    201224265 :                      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      3658623 :                   buffer2 = 0.0_dp
   34008      3658623 :                   imax = 3*6*3
   34009      3658623 :                   kmax = 3
   34010    201224265 :                   DO i = 1, imax
   34011    197565642 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   34012    197565642 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   34013    201224265 :                      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      3658623 :                   buffer1 = 0.0_dp
   34016      3658623 :                   imax = 3*3*3
   34017      3658623 :                   kmax = 6
   34018    102441444 :                   DO i = 1, imax
   34019     98782821 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   34020     98782821 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   34021     98782821 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   34022     98782821 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   34023     98782821 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   34024     98782821 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   34025     98782821 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   34026    102441444 :                      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     21951738 :                   imax = 3*3*5
   34029     21951738 :                   kmax = 3
   34030              :                   i = 0
   34031     21951738 :                   DO i1 = 1, 5
   34032     76831083 :                   DO i2 = 1, 3
   34033    237810495 :                   DO i3 = 1, 3
   34034    164638035 :                      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    164638035 :                         + 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    164638035 :                         + 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    219517380 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   34044              :                   END DO
   34045              :                   END DO
   34046              :                   END DO
   34047      5774783 :                   s_offset_d1 = s_offset_d1 + 3
   34048              :                END DO
   34049      4191825 :                s_offset_c1 = s_offset_c1 + 5
   34050              :             END DO
   34051      3404726 :             s_offset_b1 = s_offset_b1 + 3
   34052              :          END DO
   34053      2237184 :          s_offset_a1 = s_offset_a1 + 3
   34054              :       END DO
   34055       908123 :    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       233351 :    SUBROUTINE contract_ppdd(work, &
   34074              :                             nl_a, nl_b, nl_c, nl_d, &
   34075       233351 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   34076       233351 :                             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       233351 :       s_offset_a1 = 0
   34093       538288 :       DO ia = 1, nl_a
   34094              :          s_offset_b1 = 0
   34095       714192 :          DO ib = 1, nl_b
   34096              :             s_offset_c1 = 0
   34097       846364 :             DO ic = 1, nl_c
   34098              :                s_offset_d1 = 0
   34099       919476 :                DO id = 1, nl_d
   34100       482367 :                   buffer1 = 0.0_dp
   34101       482367 :                   imax = 3*6*6
   34102       482367 :                   kmax = 3
   34103     52578003 :                   DO i = 1, imax
   34104     52095636 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   34105     52095636 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   34106     52578003 :                      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       482367 :                   buffer2 = 0.0_dp
   34109       482367 :                   imax = 3*6*6
   34110       482367 :                   kmax = 3
   34111     52578003 :                   DO i = 1, imax
   34112     52095636 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   34113     52095636 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   34114     52578003 :                      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       482367 :                   buffer1 = 0.0_dp
   34117       482367 :                   imax = 3*3*6
   34118       482367 :                   kmax = 6
   34119     26530185 :                   DO i = 1, imax
   34120     26047818 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   34121     26047818 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   34122     26047818 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   34123     26047818 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   34124     26047818 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   34125     26047818 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   34126     26047818 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   34127     26530185 :                      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      2894202 :                   imax = 3*3*5
   34130      2894202 :                   kmax = 6
   34131              :                   i = 0
   34132      2894202 :                   DO i1 = 1, 5
   34133     10129707 :                   DO i2 = 1, 3
   34134     31353855 :                   DO i3 = 1, 3
   34135     21706515 :                      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     21706515 :                         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     21706515 :                         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     21706515 :                         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     21706515 :                         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     21706515 :                         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     21706515 :                         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     21706515 :                         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     28942020 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   34160              :                   END DO
   34161              :                   END DO
   34162              :                   END DO
   34163       919476 :                   s_offset_d1 = s_offset_d1 + 5
   34164              :                END DO
   34165       846364 :                s_offset_c1 = s_offset_c1 + 5
   34166              :             END DO
   34167       714192 :             s_offset_b1 = s_offset_b1 + 3
   34168              :          END DO
   34169       538288 :          s_offset_a1 = s_offset_a1 + 3
   34170              :       END DO
   34171       233351 :    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      1424878 :    SUBROUTINE contract_pdss(work, &
   35902              :                             nl_a, nl_b, nl_c, nl_d, &
   35903      1424878 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   35904      1424878 :                             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      1424878 :       s_offset_a1 = 0
   35921      3295005 :       DO ia = 1, nl_a
   35922              :          s_offset_b1 = 0
   35923      3915737 :          DO ib = 1, nl_b
   35924              :             s_offset_c1 = 0
   35925      5373844 :             DO ic = 1, nl_c
   35926              :                s_offset_d1 = 0
   35927      9207941 :                DO id = 1, nl_d
   35928      5879707 :                   buffer1 = 0.0_dp
   35929      5879707 :                   imax = 6*1*1
   35930      5879707 :                   kmax = 3
   35931     41157949 :                   DO i = 1, imax
   35932     35278242 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   35933     35278242 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   35934     41157949 :                      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      5879707 :                   buffer2 = 0.0_dp
   35937      5879707 :                   imax = 3*1*1
   35938      5879707 :                   kmax = 6
   35939     23518828 :                   DO i = 1, imax
   35940     17639121 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   35941     17639121 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   35942     17639121 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   35943     17639121 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   35944     17639121 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   35945     17639121 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   35946     17639121 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   35947     23518828 :                      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      5879707 :                   buffer1 = 0.0_dp
   35950      5879707 :                   imax = 3*5*1
   35951      5879707 :                   kmax = 1
   35952     94075312 :                   DO i = 1, imax
   35953     94075312 :                      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     11759414 :                   imax = 3*5*1
   35956     11759414 :                   kmax = 1
   35957              :                   i = 0
   35958     11759414 :                   DO i1 = 1, 1
   35959     41157949 :                   DO i2 = 1, 5
   35960    123473847 :                   DO i3 = 1, 3
   35961     88195605 :                      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    117594140 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   35965              :                   END DO
   35966              :                   END DO
   35967              :                   END DO
   35968      9207941 :                   s_offset_d1 = s_offset_d1 + 1
   35969              :                END DO
   35970      5373844 :                s_offset_c1 = s_offset_c1 + 1
   35971              :             END DO
   35972      3915737 :             s_offset_b1 = s_offset_b1 + 5
   35973              :          END DO
   35974      3295005 :          s_offset_a1 = s_offset_a1 + 3
   35975              :       END DO
   35976      1424878 :    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       803393 :    SUBROUTINE contract_pdsp(work, &
   35995              :                             nl_a, nl_b, nl_c, nl_d, &
   35996       803393 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   35997       803393 :                             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       803393 :       s_offset_a1 = 0
   36014      1848067 :       DO ia = 1, nl_a
   36015              :          s_offset_b1 = 0
   36016      2233614 :          DO ib = 1, nl_b
   36017              :             s_offset_c1 = 0
   36018      3183548 :             DO ic = 1, nl_c
   36019              :                s_offset_d1 = 0
   36020      4833882 :                DO id = 1, nl_d
   36021      2839274 :                   buffer1 = 0.0_dp
   36022      2839274 :                   imax = 6*1*3
   36023      2839274 :                   kmax = 3
   36024     53946206 :                   DO i = 1, imax
   36025     51106932 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36026     51106932 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36027     53946206 :                      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      2839274 :                   buffer2 = 0.0_dp
   36030      2839274 :                   imax = 3*1*3
   36031      2839274 :                   kmax = 6
   36032     28392740 :                   DO i = 1, imax
   36033     25553466 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36034     25553466 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36035     25553466 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36036     25553466 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36037     25553466 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36038     25553466 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36039     25553466 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36040     28392740 :                      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      2839274 :                   buffer1 = 0.0_dp
   36043      2839274 :                   imax = 3*5*3
   36044      2839274 :                   kmax = 1
   36045    130606604 :                   DO i = 1, imax
   36046    130606604 :                      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      5678548 :                   imax = 3*5*1
   36049      5678548 :                   kmax = 3
   36050              :                   i = 0
   36051      5678548 :                   DO i1 = 1, 1
   36052     19874918 :                   DO i2 = 1, 5
   36053     59624754 :                   DO i3 = 1, 3
   36054     42589110 :                      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     42589110 :                         + 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     42589110 :                         + 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     56785480 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   36064              :                   END DO
   36065              :                   END DO
   36066              :                   END DO
   36067      4833882 :                   s_offset_d1 = s_offset_d1 + 3
   36068              :                END DO
   36069      3183548 :                s_offset_c1 = s_offset_c1 + 1
   36070              :             END DO
   36071      2233614 :             s_offset_b1 = s_offset_b1 + 5
   36072              :          END DO
   36073      1848067 :          s_offset_a1 = s_offset_a1 + 3
   36074              :       END DO
   36075       803393 :    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       418673 :    SUBROUTINE contract_pdsd(work, &
   36094              :                             nl_a, nl_b, nl_c, nl_d, &
   36095       418673 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36096       418673 :                             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       418673 :       s_offset_a1 = 0
   36113       970976 :       DO ia = 1, nl_a
   36114              :          s_offset_b1 = 0
   36115      1198693 :          DO ib = 1, nl_b
   36116              :             s_offset_c1 = 0
   36117      1743929 :             DO ic = 1, nl_c
   36118              :                s_offset_d1 = 0
   36119      2362675 :                DO id = 1, nl_d
   36120      1265136 :                   buffer1 = 0.0_dp
   36121      1265136 :                   imax = 6*1*6
   36122      1265136 :                   kmax = 3
   36123     46810032 :                   DO i = 1, imax
   36124     45544896 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36125     45544896 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36126     46810032 :                      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      1265136 :                   buffer2 = 0.0_dp
   36129      1265136 :                   imax = 3*1*6
   36130      1265136 :                   kmax = 6
   36131     24037584 :                   DO i = 1, imax
   36132     22772448 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36133     22772448 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36134     22772448 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36135     22772448 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36136     22772448 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36137     22772448 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36138     22772448 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36139     24037584 :                      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      1265136 :                   buffer1 = 0.0_dp
   36142      1265136 :                   imax = 3*5*6
   36143      1265136 :                   kmax = 1
   36144    115127376 :                   DO i = 1, imax
   36145    115127376 :                      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      2530272 :                   imax = 3*5*1
   36148      2530272 :                   kmax = 6
   36149              :                   i = 0
   36150      2530272 :                   DO i1 = 1, 1
   36151      8855952 :                   DO i2 = 1, 5
   36152     26567856 :                   DO i3 = 1, 3
   36153     18977040 :                      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     18977040 :                         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     18977040 :                         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     18977040 :                         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     18977040 :                         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     18977040 :                         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     18977040 :                         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     18977040 :                         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     25302720 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   36178              :                   END DO
   36179              :                   END DO
   36180              :                   END DO
   36181      2362675 :                   s_offset_d1 = s_offset_d1 + 5
   36182              :                END DO
   36183      1743929 :                s_offset_c1 = s_offset_c1 + 1
   36184              :             END DO
   36185      1198693 :             s_offset_b1 = s_offset_b1 + 5
   36186              :          END DO
   36187       970976 :          s_offset_a1 = s_offset_a1 + 3
   36188              :       END DO
   36189       418673 :    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       683854 :    SUBROUTINE contract_pdps(work, &
   36520              :                             nl_a, nl_b, nl_c, nl_d, &
   36521       683854 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36522       683854 :                             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       683854 :       s_offset_a1 = 0
   36539      1592307 :       DO ia = 1, nl_a
   36540              :          s_offset_b1 = 0
   36541      1927627 :          DO ib = 1, nl_b
   36542              :             s_offset_c1 = 0
   36543      2499851 :             DO ic = 1, nl_c
   36544              :                s_offset_d1 = 0
   36545      4106173 :                DO id = 1, nl_d
   36546      2625496 :                   buffer1 = 0.0_dp
   36547      2625496 :                   imax = 6*3*1
   36548      2625496 :                   kmax = 3
   36549     49884424 :                   DO i = 1, imax
   36550     47258928 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36551     47258928 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36552     49884424 :                      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      2625496 :                   buffer2 = 0.0_dp
   36555      2625496 :                   imax = 3*3*1
   36556      2625496 :                   kmax = 6
   36557     26254960 :                   DO i = 1, imax
   36558     23629464 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36559     23629464 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36560     23629464 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36561     23629464 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36562     23629464 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36563     23629464 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36564     23629464 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36565     26254960 :                      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      2625496 :                   buffer1 = 0.0_dp
   36568      2625496 :                   imax = 3*5*1
   36569      2625496 :                   kmax = 3
   36570     42007936 :                   DO i = 1, imax
   36571     39382440 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36572     39382440 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36573     42007936 :                      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     10501984 :                   imax = 3*5*3
   36576     10501984 :                   kmax = 1
   36577              :                   i = 0
   36578     10501984 :                   DO i1 = 1, 3
   36579     49884424 :                   DO i2 = 1, 5
   36580    165406248 :                   DO i3 = 1, 3
   36581    118147320 :                      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    157529760 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   36585              :                   END DO
   36586              :                   END DO
   36587              :                   END DO
   36588      4106173 :                   s_offset_d1 = s_offset_d1 + 1
   36589              :                END DO
   36590      2499851 :                s_offset_c1 = s_offset_c1 + 3
   36591              :             END DO
   36592      1927627 :             s_offset_b1 = s_offset_b1 + 5
   36593              :          END DO
   36594      1592307 :          s_offset_a1 = s_offset_a1 + 3
   36595              :       END DO
   36596       683854 :    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       853811 :    SUBROUTINE contract_pdpp(work, &
   36615              :                             nl_a, nl_b, nl_c, nl_d, &
   36616       853811 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36617       853811 :                             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       853811 :       s_offset_a1 = 0
   36634      2116126 :       DO ia = 1, nl_a
   36635              :          s_offset_b1 = 0
   36636      2621484 :          DO ib = 1, nl_b
   36637              :             s_offset_c1 = 0
   36638      3548063 :             DO ic = 1, nl_c
   36639              :                s_offset_d1 = 0
   36640      5917358 :                DO id = 1, nl_d
   36641      3728464 :                   buffer1 = 0.0_dp
   36642      3728464 :                   imax = 6*3*3
   36643      3728464 :                   kmax = 3
   36644    205065520 :                   DO i = 1, imax
   36645    201337056 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36646    201337056 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36647    205065520 :                      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      3728464 :                   buffer2 = 0.0_dp
   36650      3728464 :                   imax = 3*3*3
   36651      3728464 :                   kmax = 6
   36652    104396992 :                   DO i = 1, imax
   36653    100668528 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36654    100668528 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36655    100668528 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36656    100668528 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36657    100668528 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36658    100668528 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36659    100668528 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36660    104396992 :                      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      3728464 :                   buffer1 = 0.0_dp
   36663      3728464 :                   imax = 3*5*3
   36664      3728464 :                   kmax = 3
   36665    171509344 :                   DO i = 1, imax
   36666    167780880 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36667    167780880 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36668    171509344 :                      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     14913856 :                   imax = 3*5*3
   36671     14913856 :                   kmax = 3
   36672              :                   i = 0
   36673     14913856 :                   DO i1 = 1, 3
   36674     70840816 :                   DO i2 = 1, 5
   36675    234893232 :                   DO i3 = 1, 3
   36676    167780880 :                      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    167780880 :                         + 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    167780880 :                         + 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    223707840 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   36686              :                   END DO
   36687              :                   END DO
   36688              :                   END DO
   36689      5917358 :                   s_offset_d1 = s_offset_d1 + 3
   36690              :                END DO
   36691      3548063 :                s_offset_c1 = s_offset_c1 + 3
   36692              :             END DO
   36693      2621484 :             s_offset_b1 = s_offset_b1 + 5
   36694              :          END DO
   36695      2116126 :          s_offset_a1 = s_offset_a1 + 3
   36696              :       END DO
   36697       853811 :    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       267964 :    SUBROUTINE contract_pdpd(work, &
   36716              :                             nl_a, nl_b, nl_c, nl_d, &
   36717       267964 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36718       267964 :                             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       267964 :       s_offset_a1 = 0
   36735       611700 :       DO ia = 1, nl_a
   36736              :          s_offset_b1 = 0
   36737       757838 :          DO ib = 1, nl_b
   36738              :             s_offset_c1 = 0
   36739       989711 :             DO ic = 1, nl_c
   36740              :                s_offset_d1 = 0
   36741      1236312 :                DO id = 1, nl_d
   36742       660703 :                   buffer1 = 0.0_dp
   36743       660703 :                   imax = 6*3*6
   36744       660703 :                   kmax = 3
   36745     72016627 :                   DO i = 1, imax
   36746     71355924 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36747     71355924 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36748     72016627 :                      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       660703 :                   buffer2 = 0.0_dp
   36751       660703 :                   imax = 3*3*6
   36752       660703 :                   kmax = 6
   36753     36338665 :                   DO i = 1, imax
   36754     35677962 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36755     35677962 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36756     35677962 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36757     35677962 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36758     35677962 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36759     35677962 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36760     35677962 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36761     36338665 :                      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       660703 :                   buffer1 = 0.0_dp
   36764       660703 :                   imax = 3*5*6
   36765       660703 :                   kmax = 3
   36766     60123973 :                   DO i = 1, imax
   36767     59463270 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36768     59463270 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36769     60123973 :                      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      2642812 :                   imax = 3*5*3
   36772      2642812 :                   kmax = 6
   36773              :                   i = 0
   36774      2642812 :                   DO i1 = 1, 3
   36775     12553357 :                   DO i2 = 1, 5
   36776     41624289 :                   DO i3 = 1, 3
   36777     29731635 :                      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     29731635 :                         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     29731635 :                         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     29731635 :                         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     29731635 :                         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     29731635 :                         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     29731635 :                         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     29731635 :                         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     39642180 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   36802              :                   END DO
   36803              :                   END DO
   36804              :                   END DO
   36805      1236312 :                   s_offset_d1 = s_offset_d1 + 5
   36806              :                END DO
   36807       989711 :                s_offset_c1 = s_offset_c1 + 3
   36808              :             END DO
   36809       757838 :             s_offset_b1 = s_offset_b1 + 5
   36810              :          END DO
   36811       611700 :          s_offset_a1 = s_offset_a1 + 3
   36812              :       END DO
   36813       267964 :    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       289304 :    SUBROUTINE contract_pdds(work, &
   37148              :                             nl_a, nl_b, nl_c, nl_d, &
   37149       289304 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37150       289304 :                             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       289304 :       s_offset_a1 = 0
   37167       691417 :       DO ia = 1, nl_a
   37168              :          s_offset_b1 = 0
   37169       851493 :          DO ib = 1, nl_b
   37170              :             s_offset_c1 = 0
   37171       927030 :             DO ic = 1, nl_c
   37172              :                s_offset_d1 = 0
   37173      1308921 :                DO id = 1, nl_d
   37174       831271 :                   buffer1 = 0.0_dp
   37175       831271 :                   imax = 6*6*1
   37176       831271 :                   kmax = 3
   37177     30757027 :                   DO i = 1, imax
   37178     29925756 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37179     29925756 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37180     30757027 :                      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       831271 :                   buffer2 = 0.0_dp
   37183       831271 :                   imax = 3*6*1
   37184       831271 :                   kmax = 6
   37185     15794149 :                   DO i = 1, imax
   37186     14962878 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37187     14962878 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37188     14962878 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37189     14962878 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37190     14962878 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37191     14962878 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37192     14962878 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37193     15794149 :                      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       831271 :                   buffer1 = 0.0_dp
   37196       831271 :                   imax = 3*5*1
   37197       831271 :                   kmax = 6
   37198     13300336 :                   DO i = 1, imax
   37199     12469065 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37200     12469065 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37201     12469065 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37202     12469065 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37203     12469065 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37204     12469065 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37205     12469065 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37206     13300336 :                      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      4987626 :                   imax = 3*5*5
   37209      4987626 :                   kmax = 1
   37210              :                   i = 0
   37211      4987626 :                   DO i1 = 1, 5
   37212     25769401 :                   DO i2 = 1, 5
   37213     87283455 :                   DO i3 = 1, 3
   37214     62345325 :                      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     83127100 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   37218              :                   END DO
   37219              :                   END DO
   37220              :                   END DO
   37221      1308921 :                   s_offset_d1 = s_offset_d1 + 1
   37222              :                END DO
   37223       927030 :                s_offset_c1 = s_offset_c1 + 5
   37224              :             END DO
   37225       851493 :             s_offset_b1 = s_offset_b1 + 5
   37226              :          END DO
   37227       691417 :          s_offset_a1 = s_offset_a1 + 3
   37228              :       END DO
   37229       289304 :    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       187029 :    SUBROUTINE contract_pddp(work, &
   37248              :                             nl_a, nl_b, nl_c, nl_d, &
   37249       187029 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37250       187029 :                             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       187029 :       s_offset_a1 = 0
   37267       437026 :       DO ia = 1, nl_a
   37268              :          s_offset_b1 = 0
   37269       540714 :          DO ib = 1, nl_b
   37270              :             s_offset_c1 = 0
   37271       604583 :             DO ic = 1, nl_c
   37272              :                s_offset_d1 = 0
   37273       739898 :                DO id = 1, nl_d
   37274       426032 :                   buffer1 = 0.0_dp
   37275       426032 :                   imax = 6*6*3
   37276       426032 :                   kmax = 3
   37277     46437488 :                   DO i = 1, imax
   37278     46011456 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37279     46011456 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37280     46437488 :                      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       426032 :                   buffer2 = 0.0_dp
   37283       426032 :                   imax = 3*6*3
   37284       426032 :                   kmax = 6
   37285     23431760 :                   DO i = 1, imax
   37286     23005728 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37287     23005728 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37288     23005728 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37289     23005728 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37290     23005728 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37291     23005728 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37292     23005728 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37293     23431760 :                      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       426032 :                   buffer1 = 0.0_dp
   37296       426032 :                   imax = 3*5*3
   37297       426032 :                   kmax = 6
   37298     19597472 :                   DO i = 1, imax
   37299     19171440 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37300     19171440 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37301     19171440 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37302     19171440 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37303     19171440 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37304     19171440 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37305     19171440 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37306     19597472 :                      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      2556192 :                   imax = 3*5*5
   37309      2556192 :                   kmax = 3
   37310              :                   i = 0
   37311      2556192 :                   DO i1 = 1, 5
   37312     13206992 :                   DO i2 = 1, 5
   37313     44733360 :                   DO i3 = 1, 3
   37314     31952400 :                      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     31952400 :                         + 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     31952400 :                         + 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     42603200 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   37324              :                   END DO
   37325              :                   END DO
   37326              :                   END DO
   37327       739898 :                   s_offset_d1 = s_offset_d1 + 3
   37328              :                END DO
   37329       604583 :                s_offset_c1 = s_offset_c1 + 5
   37330              :             END DO
   37331       540714 :             s_offset_b1 = s_offset_b1 + 5
   37332              :          END DO
   37333       437026 :          s_offset_a1 = s_offset_a1 + 3
   37334              :       END DO
   37335       187029 :    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       127030 :    SUBROUTINE contract_pddd(work, &
   37354              :                             nl_a, nl_b, nl_c, nl_d, &
   37355       127030 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37356       127030 :                             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       127030 :       s_offset_a1 = 0
   37373       292693 :       DO ia = 1, nl_a
   37374              :          s_offset_b1 = 0
   37375       366723 :          DO ib = 1, nl_b
   37376              :             s_offset_c1 = 0
   37377       420609 :             DO ic = 1, nl_c
   37378              :                s_offset_d1 = 0
   37379       483452 :                DO id = 1, nl_d
   37380       263903 :                   buffer1 = 0.0_dp
   37381       263903 :                   imax = 6*6*6
   37382       263903 :                   kmax = 3
   37383     57266951 :                   DO i = 1, imax
   37384     57003048 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37385     57003048 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37386     57266951 :                      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       263903 :                   buffer2 = 0.0_dp
   37389       263903 :                   imax = 3*6*6
   37390       263903 :                   kmax = 6
   37391     28765427 :                   DO i = 1, imax
   37392     28501524 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37393     28501524 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37394     28501524 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37395     28501524 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37396     28501524 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37397     28501524 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37398     28501524 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37399     28765427 :                      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       263903 :                   buffer1 = 0.0_dp
   37402       263903 :                   imax = 3*5*6
   37403       263903 :                   kmax = 6
   37404     24015173 :                   DO i = 1, imax
   37405     23751270 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37406     23751270 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37407     23751270 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37408     23751270 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37409     23751270 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37410     23751270 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37411     23751270 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37412     24015173 :                      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      1583418 :                   imax = 3*5*5
   37415      1583418 :                   kmax = 6
   37416              :                   i = 0
   37417      1583418 :                   DO i1 = 1, 5
   37418      8180993 :                   DO i2 = 1, 5
   37419     27709815 :                   DO i3 = 1, 3
   37420     19792725 :                      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     19792725 :                         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     19792725 :                         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     19792725 :                         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     19792725 :                         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     19792725 :                         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     19792725 :                         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     19792725 :                         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     26390300 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   37445              :                   END DO
   37446              :                   END DO
   37447              :                   END DO
   37448       483452 :                   s_offset_d1 = s_offset_d1 + 5
   37449              :                END DO
   37450       420609 :                s_offset_c1 = s_offset_c1 + 5
   37451              :             END DO
   37452       366723 :             s_offset_b1 = s_offset_b1 + 5
   37453              :          END DO
   37454       292693 :          s_offset_a1 = s_offset_a1 + 3
   37455              :       END DO
   37456       127030 :    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      3827296 :    SUBROUTINE contract_dsss(work, &
   46637              :                             nl_a, nl_b, nl_c, nl_d, &
   46638      3827296 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46639      3827296 :                             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      3827296 :       s_offset_a1 = 0
   46656      7765296 :       DO ia = 1, nl_a
   46657              :          s_offset_b1 = 0
   46658      9506960 :          DO ib = 1, nl_b
   46659              :             s_offset_c1 = 0
   46660     14250763 :             DO ic = 1, nl_c
   46661              :                s_offset_d1 = 0
   46662     23521489 :                DO id = 1, nl_d
   46663     14839686 :                   buffer1 = 0.0_dp
   46664     14839686 :                   imax = 1*1*1
   46665     14839686 :                   kmax = 6
   46666     29679372 :                   DO i = 1, imax
   46667     14839686 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46668     14839686 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46669     14839686 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46670     14839686 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46671     14839686 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46672     14839686 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46673     14839686 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46674     29679372 :                      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     14839686 :                   buffer2 = 0.0_dp
   46677     14839686 :                   imax = 5*1*1
   46678     14839686 :                   kmax = 1
   46679     89038116 :                   DO i = 1, imax
   46680     89038116 :                      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     14839686 :                   buffer1 = 0.0_dp
   46683     14839686 :                   imax = 5*1*1
   46684     14839686 :                   kmax = 1
   46685     89038116 :                   DO i = 1, imax
   46686     89038116 :                      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     29679372 :                   imax = 5*1*1
   46689     29679372 :                   kmax = 1
   46690              :                   i = 0
   46691     29679372 :                   DO i1 = 1, 1
   46692     44519058 :                   DO i2 = 1, 1
   46693    103877802 :                   DO i3 = 1, 5
   46694     74198430 :                      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     89038116 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   46698              :                   END DO
   46699              :                   END DO
   46700              :                   END DO
   46701     23521489 :                   s_offset_d1 = s_offset_d1 + 1
   46702              :                END DO
   46703     14250763 :                s_offset_c1 = s_offset_c1 + 1
   46704              :             END DO
   46705      9506960 :             s_offset_b1 = s_offset_b1 + 1
   46706              :          END DO
   46707      7765296 :          s_offset_a1 = s_offset_a1 + 5
   46708              :       END DO
   46709      3827296 :    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      2218887 :    SUBROUTINE contract_dssp(work, &
   46728              :                             nl_a, nl_b, nl_c, nl_d, &
   46729      2218887 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46730      2218887 :                             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      2218887 :       s_offset_a1 = 0
   46747      4527318 :       DO ia = 1, nl_a
   46748              :          s_offset_b1 = 0
   46749      5790069 :          DO ib = 1, nl_b
   46750              :             s_offset_c1 = 0
   46751      9149861 :             DO ic = 1, nl_c
   46752              :                s_offset_d1 = 0
   46753     14438434 :                DO id = 1, nl_d
   46754      8770211 :                   buffer1 = 0.0_dp
   46755      8770211 :                   imax = 1*1*3
   46756      8770211 :                   kmax = 6
   46757     35080844 :                   DO i = 1, imax
   46758     26310633 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46759     26310633 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46760     26310633 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46761     26310633 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46762     26310633 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46763     26310633 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46764     26310633 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46765     35080844 :                      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      8770211 :                   buffer2 = 0.0_dp
   46768      8770211 :                   imax = 5*1*3
   46769      8770211 :                   kmax = 1
   46770    140323376 :                   DO i = 1, imax
   46771    140323376 :                      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      8770211 :                   buffer1 = 0.0_dp
   46774      8770211 :                   imax = 5*1*3
   46775      8770211 :                   kmax = 1
   46776    140323376 :                   DO i = 1, imax
   46777    140323376 :                      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     17540422 :                   imax = 5*1*1
   46780     17540422 :                   kmax = 3
   46781              :                   i = 0
   46782     17540422 :                   DO i1 = 1, 1
   46783     26310633 :                   DO i2 = 1, 1
   46784     61391477 :                   DO i3 = 1, 5
   46785     43851055 :                      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     43851055 :                         + 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     43851055 :                         + 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     52621266 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   46795              :                   END DO
   46796              :                   END DO
   46797              :                   END DO
   46798     14438434 :                   s_offset_d1 = s_offset_d1 + 3
   46799              :                END DO
   46800      9149861 :                s_offset_c1 = s_offset_c1 + 1
   46801              :             END DO
   46802      5790069 :             s_offset_b1 = s_offset_b1 + 1
   46803              :          END DO
   46804      4527318 :          s_offset_a1 = s_offset_a1 + 5
   46805              :       END DO
   46806      2218887 :    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       600959 :    SUBROUTINE contract_dssd(work, &
   46825              :                             nl_a, nl_b, nl_c, nl_d, &
   46826       600959 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46827       600959 :                             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       600959 :       s_offset_a1 = 0
   46844      1262799 :       DO ia = 1, nl_a
   46845              :          s_offset_b1 = 0
   46846      1734909 :          DO ib = 1, nl_b
   46847              :             s_offset_c1 = 0
   46848      2842596 :             DO ic = 1, nl_c
   46849              :                s_offset_d1 = 0
   46850      3792265 :                DO id = 1, nl_d
   46851      2022738 :                   buffer1 = 0.0_dp
   46852      2022738 :                   imax = 1*1*6
   46853      2022738 :                   kmax = 6
   46854     14159166 :                   DO i = 1, imax
   46855     12136428 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46856     12136428 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46857     12136428 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46858     12136428 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46859     12136428 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46860     12136428 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46861     12136428 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46862     14159166 :                      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      2022738 :                   buffer2 = 0.0_dp
   46865      2022738 :                   imax = 5*1*6
   46866      2022738 :                   kmax = 1
   46867     62704878 :                   DO i = 1, imax
   46868     62704878 :                      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      2022738 :                   buffer1 = 0.0_dp
   46871      2022738 :                   imax = 5*1*6
   46872      2022738 :                   kmax = 1
   46873     62704878 :                   DO i = 1, imax
   46874     62704878 :                      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      4045476 :                   imax = 5*1*1
   46877      4045476 :                   kmax = 6
   46878              :                   i = 0
   46879      4045476 :                   DO i1 = 1, 1
   46880      6068214 :                   DO i2 = 1, 1
   46881     14159166 :                   DO i3 = 1, 5
   46882     10113690 :                      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     10113690 :                         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     10113690 :                         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     10113690 :                         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     10113690 :                         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     10113690 :                         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     10113690 :                         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     10113690 :                         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     12136428 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   46907              :                   END DO
   46908              :                   END DO
   46909              :                   END DO
   46910      3792265 :                   s_offset_d1 = s_offset_d1 + 5
   46911              :                END DO
   46912      2842596 :                s_offset_c1 = s_offset_c1 + 1
   46913              :             END DO
   46914      1734909 :             s_offset_b1 = s_offset_b1 + 1
   46915              :          END DO
   46916      1262799 :          s_offset_a1 = s_offset_a1 + 5
   46917              :       END DO
   46918       600959 :    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      2818135 :    SUBROUTINE contract_dsps(work, &
   47245              :                             nl_a, nl_b, nl_c, nl_d, &
   47246      2818135 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47247      2818135 :                             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      2818135 :       s_offset_a1 = 0
   47264      5713899 :       DO ia = 1, nl_a
   47265              :          s_offset_b1 = 0
   47266      7321534 :          DO ib = 1, nl_b
   47267              :             s_offset_c1 = 0
   47268     11370749 :             DO ic = 1, nl_c
   47269              :                s_offset_d1 = 0
   47270     19357356 :                DO id = 1, nl_d
   47271     12412377 :                   buffer1 = 0.0_dp
   47272     12412377 :                   imax = 1*3*1
   47273     12412377 :                   kmax = 6
   47274     49649508 :                   DO i = 1, imax
   47275     37237131 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47276     37237131 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47277     37237131 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47278     37237131 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47279     37237131 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47280     37237131 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47281     37237131 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47282     49649508 :                      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     12412377 :                   buffer2 = 0.0_dp
   47285     12412377 :                   imax = 5*3*1
   47286     12412377 :                   kmax = 1
   47287    198598032 :                   DO i = 1, imax
   47288    198598032 :                      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     12412377 :                   buffer1 = 0.0_dp
   47291     12412377 :                   imax = 5*1*1
   47292     12412377 :                   kmax = 3
   47293     74474262 :                   DO i = 1, imax
   47294     62061885 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47295     62061885 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47296     74474262 :                      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     49649508 :                   imax = 5*1*3
   47299     49649508 :                   kmax = 1
   47300              :                   i = 0
   47301     49649508 :                   DO i1 = 1, 3
   47302     86886639 :                   DO i2 = 1, 1
   47303    260659917 :                   DO i3 = 1, 5
   47304    186185655 :                      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    223422786 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   47308              :                   END DO
   47309              :                   END DO
   47310              :                   END DO
   47311     19357356 :                   s_offset_d1 = s_offset_d1 + 1
   47312              :                END DO
   47313     11370749 :                s_offset_c1 = s_offset_c1 + 3
   47314              :             END DO
   47315      7321534 :             s_offset_b1 = s_offset_b1 + 1
   47316              :          END DO
   47317      5713899 :          s_offset_a1 = s_offset_a1 + 5
   47318              :       END DO
   47319      2818135 :    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      1552553 :    SUBROUTINE contract_dspp(work, &
   47338              :                             nl_a, nl_b, nl_c, nl_d, &
   47339      1552553 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47340      1552553 :                             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      1552553 :       s_offset_a1 = 0
   47357      3171252 :       DO ia = 1, nl_a
   47358              :          s_offset_b1 = 0
   47359      4103047 :          DO ib = 1, nl_b
   47360              :             s_offset_c1 = 0
   47361      6228602 :             DO ic = 1, nl_c
   47362              :                s_offset_d1 = 0
   47363      9750310 :                DO id = 1, nl_d
   47364      6006056 :                   buffer1 = 0.0_dp
   47365      6006056 :                   imax = 1*3*3
   47366      6006056 :                   kmax = 6
   47367     60060560 :                   DO i = 1, imax
   47368     54054504 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47369     54054504 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47370     54054504 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47371     54054504 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47372     54054504 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47373     54054504 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47374     54054504 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47375     60060560 :                      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      6006056 :                   buffer2 = 0.0_dp
   47378      6006056 :                   imax = 5*3*3
   47379      6006056 :                   kmax = 1
   47380    276278576 :                   DO i = 1, imax
   47381    276278576 :                      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      6006056 :                   buffer1 = 0.0_dp
   47384      6006056 :                   imax = 5*1*3
   47385      6006056 :                   kmax = 3
   47386     96096896 :                   DO i = 1, imax
   47387     90090840 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47388     90090840 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47389     96096896 :                      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     24024224 :                   imax = 5*1*3
   47392     24024224 :                   kmax = 3
   47393              :                   i = 0
   47394     24024224 :                   DO i1 = 1, 3
   47395     42042392 :                   DO i2 = 1, 1
   47396    126127176 :                   DO i3 = 1, 5
   47397     90090840 :                      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     90090840 :                         + 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     90090840 :                         + 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    108109008 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   47407              :                   END DO
   47408              :                   END DO
   47409              :                   END DO
   47410      9750310 :                   s_offset_d1 = s_offset_d1 + 3
   47411              :                END DO
   47412      6228602 :                s_offset_c1 = s_offset_c1 + 3
   47413              :             END DO
   47414      4103047 :             s_offset_b1 = s_offset_b1 + 1
   47415              :          END DO
   47416      3171252 :          s_offset_a1 = s_offset_a1 + 5
   47417              :       END DO
   47418      1552553 :    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       527091 :    SUBROUTINE contract_dspd(work, &
   47437              :                             nl_a, nl_b, nl_c, nl_d, &
   47438       527091 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47439       527091 :                             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       527091 :       s_offset_a1 = 0
   47456      1101323 :       DO ia = 1, nl_a
   47457              :          s_offset_b1 = 0
   47458      1537021 :          DO ib = 1, nl_b
   47459              :             s_offset_c1 = 0
   47460      2386314 :             DO ic = 1, nl_c
   47461              :                s_offset_d1 = 0
   47462      2980793 :                DO id = 1, nl_d
   47463      1557268 :                   buffer1 = 0.0_dp
   47464      1557268 :                   imax = 1*3*6
   47465      1557268 :                   kmax = 6
   47466     29588092 :                   DO i = 1, imax
   47467     28030824 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47468     28030824 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47469     28030824 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47470     28030824 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47471     28030824 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47472     28030824 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47473     28030824 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47474     29588092 :                      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      1557268 :                   buffer2 = 0.0_dp
   47477      1557268 :                   imax = 5*3*6
   47478      1557268 :                   kmax = 1
   47479    141711388 :                   DO i = 1, imax
   47480    141711388 :                      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      1557268 :                   buffer1 = 0.0_dp
   47483      1557268 :                   imax = 5*1*6
   47484      1557268 :                   kmax = 3
   47485     48275308 :                   DO i = 1, imax
   47486     46718040 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47487     46718040 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47488     48275308 :                      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      6229072 :                   imax = 5*1*3
   47491      6229072 :                   kmax = 6
   47492              :                   i = 0
   47493      6229072 :                   DO i1 = 1, 3
   47494     10900876 :                   DO i2 = 1, 1
   47495     32702628 :                   DO i3 = 1, 5
   47496     23359020 :                      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     23359020 :                         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     23359020 :                         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     23359020 :                         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     23359020 :                         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     23359020 :                         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     23359020 :                         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     23359020 :                         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     28030824 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   47521              :                   END DO
   47522              :                   END DO
   47523              :                   END DO
   47524      2980793 :                   s_offset_d1 = s_offset_d1 + 5
   47525              :                END DO
   47526      2386314 :                s_offset_c1 = s_offset_c1 + 3
   47527              :             END DO
   47528      1537021 :             s_offset_b1 = s_offset_b1 + 1
   47529              :          END DO
   47530      1101323 :          s_offset_a1 = s_offset_a1 + 5
   47531              :       END DO
   47532       527091 :    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       747254 :    SUBROUTINE contract_dsds(work, &
   47863              :                             nl_a, nl_b, nl_c, nl_d, &
   47864       747254 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47865       747254 :                             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       747254 :       s_offset_a1 = 0
   47882      1540151 :       DO ia = 1, nl_a
   47883              :          s_offset_b1 = 0
   47884      2031897 :          DO ib = 1, nl_b
   47885              :             s_offset_c1 = 0
   47886      2576363 :             DO ic = 1, nl_c
   47887              :                s_offset_d1 = 0
   47888      3631126 :                DO id = 1, nl_d
   47889      2293763 :                   buffer1 = 0.0_dp
   47890      2293763 :                   imax = 1*6*1
   47891      2293763 :                   kmax = 6
   47892     16056341 :                   DO i = 1, imax
   47893     13762578 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47894     13762578 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47895     13762578 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47896     13762578 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47897     13762578 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47898     13762578 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47899     13762578 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47900     16056341 :                      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      2293763 :                   buffer2 = 0.0_dp
   47903      2293763 :                   imax = 5*6*1
   47904      2293763 :                   kmax = 1
   47905     71106653 :                   DO i = 1, imax
   47906     71106653 :                      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      2293763 :                   buffer1 = 0.0_dp
   47909      2293763 :                   imax = 5*1*1
   47910      2293763 :                   kmax = 6
   47911     13762578 :                   DO i = 1, imax
   47912     11468815 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47913     11468815 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   47914     11468815 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47915     11468815 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   47916     11468815 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   47917     11468815 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   47918     11468815 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   47919     13762578 :                      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     13762578 :                   imax = 5*1*5
   47922     13762578 :                   kmax = 1
   47923              :                   i = 0
   47924     13762578 :                   DO i1 = 1, 5
   47925     25231393 :                   DO i2 = 1, 1
   47926     80281705 :                   DO i3 = 1, 5
   47927     57344075 :                      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     68812890 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   47931              :                   END DO
   47932              :                   END DO
   47933              :                   END DO
   47934      3631126 :                   s_offset_d1 = s_offset_d1 + 1
   47935              :                END DO
   47936      2576363 :                s_offset_c1 = s_offset_c1 + 5
   47937              :             END DO
   47938      2031897 :             s_offset_b1 = s_offset_b1 + 1
   47939              :          END DO
   47940      1540151 :          s_offset_a1 = s_offset_a1 + 5
   47941              :       END DO
   47942       747254 :    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       520557 :    SUBROUTINE contract_dsdp(work, &
   47961              :                             nl_a, nl_b, nl_c, nl_d, &
   47962       520557 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47963       520557 :                             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       520557 :       s_offset_a1 = 0
   47980      1079424 :       DO ia = 1, nl_a
   47981              :          s_offset_b1 = 0
   47982      1470271 :          DO ib = 1, nl_b
   47983              :             s_offset_c1 = 0
   47984      1903370 :             DO ic = 1, nl_c
   47985              :                s_offset_d1 = 0
   47986      2402992 :                DO id = 1, nl_d
   47987      1411026 :                   buffer1 = 0.0_dp
   47988      1411026 :                   imax = 1*6*3
   47989      1411026 :                   kmax = 6
   47990     26809494 :                   DO i = 1, imax
   47991     25398468 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47992     25398468 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47993     25398468 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47994     25398468 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47995     25398468 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47996     25398468 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47997     25398468 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47998     26809494 :                      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      1411026 :                   buffer2 = 0.0_dp
   48001      1411026 :                   imax = 5*6*3
   48002      1411026 :                   kmax = 1
   48003    128403366 :                   DO i = 1, imax
   48004    128403366 :                      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      1411026 :                   buffer1 = 0.0_dp
   48007      1411026 :                   imax = 5*1*3
   48008      1411026 :                   kmax = 6
   48009     22576416 :                   DO i = 1, imax
   48010     21165390 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   48011     21165390 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   48012     21165390 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   48013     21165390 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   48014     21165390 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   48015     21165390 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   48016     21165390 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   48017     22576416 :                      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      8466156 :                   imax = 5*1*5
   48020      8466156 :                   kmax = 3
   48021              :                   i = 0
   48022      8466156 :                   DO i1 = 1, 5
   48023     15521286 :                   DO i2 = 1, 1
   48024     49385910 :                   DO i3 = 1, 5
   48025     35275650 :                      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     35275650 :                         + 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     35275650 :                         + 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     42330780 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   48035              :                   END DO
   48036              :                   END DO
   48037              :                   END DO
   48038      2402992 :                   s_offset_d1 = s_offset_d1 + 3
   48039              :                END DO
   48040      1903370 :                s_offset_c1 = s_offset_c1 + 5
   48041              :             END DO
   48042      1470271 :             s_offset_b1 = s_offset_b1 + 1
   48043              :          END DO
   48044      1079424 :          s_offset_a1 = s_offset_a1 + 5
   48045              :       END DO
   48046       520557 :    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       204608 :    SUBROUTINE contract_dsdd(work, &
   48065              :                             nl_a, nl_b, nl_c, nl_d, &
   48066       204608 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   48067       204608 :                             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       204608 :       s_offset_a1 = 0
   48084       439258 :       DO ia = 1, nl_a
   48085              :          s_offset_b1 = 0
   48086       631530 :          DO ib = 1, nl_b
   48087              :             s_offset_c1 = 0
   48088       851939 :             DO ic = 1, nl_c
   48089              :                s_offset_d1 = 0
   48090      1002036 :                DO id = 1, nl_d
   48091       546977 :                   buffer1 = 0.0_dp
   48092       546977 :                   imax = 1*6*6
   48093       546977 :                   kmax = 6
   48094     20238149 :                   DO i = 1, imax
   48095     19691172 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   48096     19691172 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   48097     19691172 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   48098     19691172 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   48099     19691172 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   48100     19691172 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   48101     19691172 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   48102     20238149 :                      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       546977 :                   buffer2 = 0.0_dp
   48105       546977 :                   imax = 5*6*6
   48106       546977 :                   kmax = 1
   48107     99002837 :                   DO i = 1, imax
   48108     99002837 :                      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       546977 :                   buffer1 = 0.0_dp
   48111       546977 :                   imax = 5*1*6
   48112       546977 :                   kmax = 6
   48113     16956287 :                   DO i = 1, imax
   48114     16409310 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   48115     16409310 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   48116     16409310 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   48117     16409310 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   48118     16409310 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   48119     16409310 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   48120     16409310 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   48121     16956287 :                      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      3281862 :                   imax = 5*1*5
   48124      3281862 :                   kmax = 6
   48125              :                   i = 0
   48126      3281862 :                   DO i1 = 1, 5
   48127      6016747 :                   DO i2 = 1, 1
   48128     19144195 :                   DO i3 = 1, 5
   48129     13674425 :                      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     13674425 :                         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     13674425 :                         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     13674425 :                         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     13674425 :                         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     13674425 :                         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     13674425 :                         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     13674425 :                         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     16409310 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   48154              :                   END DO
   48155              :                   END DO
   48156              :                   END DO
   48157      1002036 :                   s_offset_d1 = s_offset_d1 + 5
   48158              :                END DO
   48159       851939 :                s_offset_c1 = s_offset_c1 + 5
   48160              :             END DO
   48161       631530 :             s_offset_b1 = s_offset_b1 + 1
   48162              :          END DO
   48163       439258 :          s_offset_a1 = s_offset_a1 + 5
   48164              :       END DO
   48165       204608 :    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      1648408 :    SUBROUTINE contract_dpss(work, &
   49932              :                             nl_a, nl_b, nl_c, nl_d, &
   49933      1648408 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   49934      1648408 :                             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      1648408 :       s_offset_a1 = 0
   49951      3365943 :       DO ia = 1, nl_a
   49952              :          s_offset_b1 = 0
   49953      3818561 :          DO ib = 1, nl_b
   49954              :             s_offset_c1 = 0
   49955      5314685 :             DO ic = 1, nl_c
   49956              :                s_offset_d1 = 0
   49957      8617904 :                DO id = 1, nl_d
   49958      5404245 :                   buffer1 = 0.0_dp
   49959      5404245 :                   imax = 3*1*1
   49960      5404245 :                   kmax = 6
   49961     21616980 :                   DO i = 1, imax
   49962     16212735 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   49963     16212735 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   49964     16212735 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   49965     16212735 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   49966     16212735 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   49967     16212735 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   49968     16212735 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   49969     21616980 :                      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      5404245 :                   buffer2 = 0.0_dp
   49972      5404245 :                   imax = 5*1*1
   49973      5404245 :                   kmax = 3
   49974     32425470 :                   DO i = 1, imax
   49975     27021225 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   49976     27021225 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   49977     32425470 :                      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      5404245 :                   buffer1 = 0.0_dp
   49980      5404245 :                   imax = 5*3*1
   49981      5404245 :                   kmax = 1
   49982     86467920 :                   DO i = 1, imax
   49983     86467920 :                      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     10808490 :                   imax = 5*3*1
   49986     10808490 :                   kmax = 1
   49987              :                   i = 0
   49988     10808490 :                   DO i1 = 1, 1
   49989     27021225 :                   DO i2 = 1, 3
   49990    102680655 :                   DO i3 = 1, 5
   49991     81063675 :                      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     97276410 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   49995              :                   END DO
   49996              :                   END DO
   49997              :                   END DO
   49998      8617904 :                   s_offset_d1 = s_offset_d1 + 1
   49999              :                END DO
   50000      5314685 :                s_offset_c1 = s_offset_c1 + 1
   50001              :             END DO
   50002      3818561 :             s_offset_b1 = s_offset_b1 + 3
   50003              :          END DO
   50004      3365943 :          s_offset_a1 = s_offset_a1 + 5
   50005              :       END DO
   50006      1648408 :    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       830455 :    SUBROUTINE contract_dpsp(work, &
   50025              :                             nl_a, nl_b, nl_c, nl_d, &
   50026       830455 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50027       830455 :                             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       830455 :       s_offset_a1 = 0
   50044      1717896 :       DO ia = 1, nl_a
   50045              :          s_offset_b1 = 0
   50046      1966314 :          DO ib = 1, nl_b
   50047              :             s_offset_c1 = 0
   50048      2803211 :             DO ic = 1, nl_c
   50049              :                s_offset_d1 = 0
   50050      4276799 :                DO id = 1, nl_d
   50051      2552461 :                   buffer1 = 0.0_dp
   50052      2552461 :                   imax = 3*1*3
   50053      2552461 :                   kmax = 6
   50054     25524610 :                   DO i = 1, imax
   50055     22972149 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50056     22972149 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50057     22972149 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50058     22972149 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50059     22972149 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50060     22972149 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50061     22972149 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50062     25524610 :                      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      2552461 :                   buffer2 = 0.0_dp
   50065      2552461 :                   imax = 5*1*3
   50066      2552461 :                   kmax = 3
   50067     40839376 :                   DO i = 1, imax
   50068     38286915 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50069     38286915 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50070     40839376 :                      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      2552461 :                   buffer1 = 0.0_dp
   50073      2552461 :                   imax = 5*3*3
   50074      2552461 :                   kmax = 1
   50075    117413206 :                   DO i = 1, imax
   50076    117413206 :                      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      5104922 :                   imax = 5*3*1
   50079      5104922 :                   kmax = 3
   50080              :                   i = 0
   50081      5104922 :                   DO i1 = 1, 1
   50082     12762305 :                   DO i2 = 1, 3
   50083     48496759 :                   DO i3 = 1, 5
   50084     38286915 :                      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     38286915 :                         + 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     38286915 :                         + 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     45944298 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   50094              :                   END DO
   50095              :                   END DO
   50096              :                   END DO
   50097      4276799 :                   s_offset_d1 = s_offset_d1 + 3
   50098              :                END DO
   50099      2803211 :                s_offset_c1 = s_offset_c1 + 1
   50100              :             END DO
   50101      1966314 :             s_offset_b1 = s_offset_b1 + 3
   50102              :          END DO
   50103      1717896 :          s_offset_a1 = s_offset_a1 + 5
   50104              :       END DO
   50105       830455 :    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       376761 :    SUBROUTINE contract_dpsd(work, &
   50124              :                             nl_a, nl_b, nl_c, nl_d, &
   50125       376761 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50126       376761 :                             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       376761 :       s_offset_a1 = 0
   50143       793127 :       DO ia = 1, nl_a
   50144              :          s_offset_b1 = 0
   50145       937296 :          DO ib = 1, nl_b
   50146              :             s_offset_c1 = 0
   50147      1397207 :             DO ic = 1, nl_c
   50148              :                s_offset_d1 = 0
   50149      1852077 :                DO id = 1, nl_d
   50150       975800 :                   buffer1 = 0.0_dp
   50151       975800 :                   imax = 3*1*6
   50152       975800 :                   kmax = 6
   50153     18540200 :                   DO i = 1, imax
   50154     17564400 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50155     17564400 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50156     17564400 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50157     17564400 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50158     17564400 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50159     17564400 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50160     17564400 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50161     18540200 :                      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       975800 :                   buffer2 = 0.0_dp
   50164       975800 :                   imax = 5*1*6
   50165       975800 :                   kmax = 3
   50166     30249800 :                   DO i = 1, imax
   50167     29274000 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50168     29274000 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50169     30249800 :                      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       975800 :                   buffer1 = 0.0_dp
   50172       975800 :                   imax = 5*3*6
   50173       975800 :                   kmax = 1
   50174     88797800 :                   DO i = 1, imax
   50175     88797800 :                      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      1951600 :                   imax = 5*3*1
   50178      1951600 :                   kmax = 6
   50179              :                   i = 0
   50180      1951600 :                   DO i1 = 1, 1
   50181      4879000 :                   DO i2 = 1, 3
   50182     18540200 :                   DO i3 = 1, 5
   50183     14637000 :                      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     14637000 :                         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     14637000 :                         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     14637000 :                         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     14637000 :                         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     14637000 :                         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     14637000 :                         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     14637000 :                         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     17564400 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   50208              :                   END DO
   50209              :                   END DO
   50210              :                   END DO
   50211      1852077 :                   s_offset_d1 = s_offset_d1 + 5
   50212              :                END DO
   50213      1397207 :                s_offset_c1 = s_offset_c1 + 1
   50214              :             END DO
   50215       937296 :             s_offset_b1 = s_offset_b1 + 3
   50216              :          END DO
   50217       793127 :          s_offset_a1 = s_offset_a1 + 5
   50218              :       END DO
   50219       376761 :    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       851096 :    SUBROUTINE contract_dpps(work, &
   50550              :                             nl_a, nl_b, nl_c, nl_d, &
   50551       851096 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50552       851096 :                             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       851096 :       s_offset_a1 = 0
   50569      1750588 :       DO ia = 1, nl_a
   50570              :          s_offset_b1 = 0
   50571      1989679 :          DO ib = 1, nl_b
   50572              :             s_offset_c1 = 0
   50573      2641765 :             DO ic = 1, nl_c
   50574              :                s_offset_d1 = 0
   50575      4179879 :                DO id = 1, nl_d
   50576      2628301 :                   buffer1 = 0.0_dp
   50577      2628301 :                   imax = 3*3*1
   50578      2628301 :                   kmax = 6
   50579     26283010 :                   DO i = 1, imax
   50580     23654709 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50581     23654709 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50582     23654709 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50583     23654709 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50584     23654709 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50585     23654709 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50586     23654709 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50587     26283010 :                      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      2628301 :                   buffer2 = 0.0_dp
   50590      2628301 :                   imax = 5*3*1
   50591      2628301 :                   kmax = 3
   50592     42052816 :                   DO i = 1, imax
   50593     39424515 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50594     39424515 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50595     42052816 :                      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      2628301 :                   buffer1 = 0.0_dp
   50598      2628301 :                   imax = 5*3*1
   50599      2628301 :                   kmax = 3
   50600     42052816 :                   DO i = 1, imax
   50601     39424515 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50602     39424515 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50603     42052816 :                      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     10513204 :                   imax = 5*3*3
   50606     10513204 :                   kmax = 1
   50607              :                   i = 0
   50608     10513204 :                   DO i1 = 1, 3
   50609     34167913 :                   DO i2 = 1, 3
   50610    149813157 :                   DO i3 = 1, 5
   50611    118273545 :                      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    141928254 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   50615              :                   END DO
   50616              :                   END DO
   50617              :                   END DO
   50618      4179879 :                   s_offset_d1 = s_offset_d1 + 1
   50619              :                END DO
   50620      2641765 :                s_offset_c1 = s_offset_c1 + 3
   50621              :             END DO
   50622      1989679 :             s_offset_b1 = s_offset_b1 + 3
   50623              :          END DO
   50624      1750588 :          s_offset_a1 = s_offset_a1 + 5
   50625              :       END DO
   50626       851096 :    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       911799 :    SUBROUTINE contract_dppp(work, &
   50645              :                             nl_a, nl_b, nl_c, nl_d, &
   50646       911799 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50647       911799 :                             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       911799 :       s_offset_a1 = 0
   50664      1864828 :       DO ia = 1, nl_a
   50665              :          s_offset_b1 = 0
   50666      2284634 :          DO ib = 1, nl_b
   50667              :             s_offset_c1 = 0
   50668      3479080 :             DO ic = 1, nl_c
   50669              :                s_offset_d1 = 0
   50670      5849422 :                DO id = 1, nl_d
   50671      3701947 :                   buffer1 = 0.0_dp
   50672      3701947 :                   imax = 3*3*3
   50673      3701947 :                   kmax = 6
   50674    103654516 :                   DO i = 1, imax
   50675     99952569 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50676     99952569 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50677     99952569 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50678     99952569 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50679     99952569 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50680     99952569 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50681     99952569 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50682    103654516 :                      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      3701947 :                   buffer2 = 0.0_dp
   50685      3701947 :                   imax = 5*3*3
   50686      3701947 :                   kmax = 3
   50687    170289562 :                   DO i = 1, imax
   50688    166587615 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50689    166587615 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50690    170289562 :                      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      3701947 :                   buffer1 = 0.0_dp
   50693      3701947 :                   imax = 5*3*3
   50694      3701947 :                   kmax = 3
   50695    170289562 :                   DO i = 1, imax
   50696    166587615 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50697    166587615 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50698    170289562 :                      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     14807788 :                   imax = 5*3*3
   50701     14807788 :                   kmax = 3
   50702              :                   i = 0
   50703     14807788 :                   DO i1 = 1, 3
   50704     48125311 :                   DO i2 = 1, 3
   50705    211010979 :                   DO i3 = 1, 5
   50706    166587615 :                      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    166587615 :                         + 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    166587615 :                         + 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    199905138 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   50716              :                   END DO
   50717              :                   END DO
   50718              :                   END DO
   50719      5849422 :                   s_offset_d1 = s_offset_d1 + 3
   50720              :                END DO
   50721      3479080 :                s_offset_c1 = s_offset_c1 + 3
   50722              :             END DO
   50723      2284634 :             s_offset_b1 = s_offset_b1 + 3
   50724              :          END DO
   50725      1864828 :          s_offset_a1 = s_offset_a1 + 5
   50726              :       END DO
   50727       911799 :    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       250147 :    SUBROUTINE contract_dppd(work, &
   50746              :                             nl_a, nl_b, nl_c, nl_d, &
   50747       250147 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50748       250147 :                             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       250147 :       s_offset_a1 = 0
   50765       531471 :       DO ia = 1, nl_a
   50766              :          s_offset_b1 = 0
   50767       619067 :          DO ib = 1, nl_b
   50768              :             s_offset_c1 = 0
   50769       814117 :             DO ic = 1, nl_c
   50770              :                s_offset_d1 = 0
   50771      1007478 :                DO id = 1, nl_d
   50772       531104 :                   buffer1 = 0.0_dp
   50773       531104 :                   imax = 3*3*6
   50774       531104 :                   kmax = 6
   50775     29210720 :                   DO i = 1, imax
   50776     28679616 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50777     28679616 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50778     28679616 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50779     28679616 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50780     28679616 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50781     28679616 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50782     28679616 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50783     29210720 :                      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       531104 :                   buffer2 = 0.0_dp
   50786       531104 :                   imax = 5*3*6
   50787       531104 :                   kmax = 3
   50788     48330464 :                   DO i = 1, imax
   50789     47799360 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50790     47799360 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50791     48330464 :                      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       531104 :                   buffer1 = 0.0_dp
   50794       531104 :                   imax = 5*3*6
   50795       531104 :                   kmax = 3
   50796     48330464 :                   DO i = 1, imax
   50797     47799360 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50798     47799360 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50799     48330464 :                      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      2124416 :                   imax = 5*3*3
   50802      2124416 :                   kmax = 6
   50803              :                   i = 0
   50804      2124416 :                   DO i1 = 1, 3
   50805      6904352 :                   DO i2 = 1, 3
   50806     30272928 :                   DO i3 = 1, 5
   50807     23899680 :                      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     23899680 :                         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     23899680 :                         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     23899680 :                         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     23899680 :                         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     23899680 :                         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     23899680 :                         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     23899680 :                         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     28679616 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   50832              :                   END DO
   50833              :                   END DO
   50834              :                   END DO
   50835      1007478 :                   s_offset_d1 = s_offset_d1 + 5
   50836              :                END DO
   50837       814117 :                s_offset_c1 = s_offset_c1 + 3
   50838              :             END DO
   50839       619067 :             s_offset_b1 = s_offset_b1 + 3
   50840              :          END DO
   50841       531471 :          s_offset_a1 = s_offset_a1 + 5
   50842              :       END DO
   50843       250147 :    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       351490 :    SUBROUTINE contract_dpds(work, &
   51178              :                             nl_a, nl_b, nl_c, nl_d, &
   51179       351490 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51180       351490 :                             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       351490 :       s_offset_a1 = 0
   51197       729703 :       DO ia = 1, nl_a
   51198              :          s_offset_b1 = 0
   51199       860735 :          DO ib = 1, nl_b
   51200              :             s_offset_c1 = 0
   51201      1000446 :             DO ic = 1, nl_c
   51202              :                s_offset_d1 = 0
   51203      1392695 :                DO id = 1, nl_d
   51204       874771 :                   buffer1 = 0.0_dp
   51205       874771 :                   imax = 3*6*1
   51206       874771 :                   kmax = 6
   51207     16620649 :                   DO i = 1, imax
   51208     15745878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51209     15745878 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51210     15745878 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51211     15745878 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51212     15745878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51213     15745878 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51214     15745878 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51215     16620649 :                      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       874771 :                   buffer2 = 0.0_dp
   51218       874771 :                   imax = 5*6*1
   51219       874771 :                   kmax = 3
   51220     27117901 :                   DO i = 1, imax
   51221     26243130 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51222     26243130 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51223     27117901 :                      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       874771 :                   buffer1 = 0.0_dp
   51226       874771 :                   imax = 5*3*1
   51227       874771 :                   kmax = 6
   51228     13996336 :                   DO i = 1, imax
   51229     13121565 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51230     13121565 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51231     13121565 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51232     13121565 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51233     13121565 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51234     13121565 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51235     13121565 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51236     13996336 :                      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      5248626 :                   imax = 5*3*5
   51239      5248626 :                   kmax = 1
   51240              :                   i = 0
   51241      5248626 :                   DO i1 = 1, 5
   51242     18370191 :                   DO i2 = 1, 3
   51243     83103245 :                   DO i3 = 1, 5
   51244     65607825 :                      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     78729390 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   51248              :                   END DO
   51249              :                   END DO
   51250              :                   END DO
   51251      1392695 :                   s_offset_d1 = s_offset_d1 + 1
   51252              :                END DO
   51253      1000446 :                s_offset_c1 = s_offset_c1 + 5
   51254              :             END DO
   51255       860735 :             s_offset_b1 = s_offset_b1 + 3
   51256              :          END DO
   51257       729703 :          s_offset_a1 = s_offset_a1 + 5
   51258              :       END DO
   51259       351490 :    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       222776 :    SUBROUTINE contract_dpdp(work, &
   51278              :                             nl_a, nl_b, nl_c, nl_d, &
   51279       222776 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51280       222776 :                             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       222776 :       s_offset_a1 = 0
   51297       469196 :       DO ia = 1, nl_a
   51298              :          s_offset_b1 = 0
   51299       549253 :          DO ib = 1, nl_b
   51300              :             s_offset_c1 = 0
   51301       637324 :             DO ic = 1, nl_c
   51302              :                s_offset_d1 = 0
   51303       789619 :                DO id = 1, nl_d
   51304       455128 :                   buffer1 = 0.0_dp
   51305       455128 :                   imax = 3*6*3
   51306       455128 :                   kmax = 6
   51307     25032040 :                   DO i = 1, imax
   51308     24576912 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51309     24576912 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51310     24576912 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51311     24576912 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51312     24576912 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51313     24576912 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51314     24576912 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51315     25032040 :                      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       455128 :                   buffer2 = 0.0_dp
   51318       455128 :                   imax = 5*6*3
   51319       455128 :                   kmax = 3
   51320     41416648 :                   DO i = 1, imax
   51321     40961520 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51322     40961520 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51323     41416648 :                      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       455128 :                   buffer1 = 0.0_dp
   51326       455128 :                   imax = 5*3*3
   51327       455128 :                   kmax = 6
   51328     20935888 :                   DO i = 1, imax
   51329     20480760 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51330     20480760 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51331     20480760 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51332     20480760 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51333     20480760 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51334     20480760 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51335     20480760 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51336     20935888 :                      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      2730768 :                   imax = 5*3*5
   51339      2730768 :                   kmax = 3
   51340              :                   i = 0
   51341      2730768 :                   DO i1 = 1, 5
   51342      9557688 :                   DO i2 = 1, 3
   51343     43237160 :                   DO i3 = 1, 5
   51344     34134600 :                      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     34134600 :                         + 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     34134600 :                         + 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     40961520 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   51354              :                   END DO
   51355              :                   END DO
   51356              :                   END DO
   51357       789619 :                   s_offset_d1 = s_offset_d1 + 3
   51358              :                END DO
   51359       637324 :                s_offset_c1 = s_offset_c1 + 5
   51360              :             END DO
   51361       549253 :             s_offset_b1 = s_offset_b1 + 3
   51362              :          END DO
   51363       469196 :          s_offset_a1 = s_offset_a1 + 5
   51364              :       END DO
   51365       222776 :    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       131080 :    SUBROUTINE contract_dpdd(work, &
   51384              :                             nl_a, nl_b, nl_c, nl_d, &
   51385       131080 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51386       131080 :                             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       131080 :       s_offset_a1 = 0
   51403       281287 :       DO ia = 1, nl_a
   51404              :          s_offset_b1 = 0
   51405       332731 :          DO ib = 1, nl_b
   51406              :             s_offset_c1 = 0
   51407       387753 :             DO ic = 1, nl_c
   51408              :                s_offset_d1 = 0
   51409       446719 :                DO id = 1, nl_d
   51410       241490 :                   buffer1 = 0.0_dp
   51411       241490 :                   imax = 3*6*6
   51412       241490 :                   kmax = 6
   51413     26322410 :                   DO i = 1, imax
   51414     26080920 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51415     26080920 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51416     26080920 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51417     26080920 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51418     26080920 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51419     26080920 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51420     26080920 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51421     26322410 :                      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       241490 :                   buffer2 = 0.0_dp
   51424       241490 :                   imax = 5*6*6
   51425       241490 :                   kmax = 3
   51426     43709690 :                   DO i = 1, imax
   51427     43468200 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51428     43468200 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51429     43709690 :                      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       241490 :                   buffer1 = 0.0_dp
   51432       241490 :                   imax = 5*3*6
   51433       241490 :                   kmax = 6
   51434     21975590 :                   DO i = 1, imax
   51435     21734100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51436     21734100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51437     21734100 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51438     21734100 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51439     21734100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51440     21734100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51441     21734100 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51442     21975590 :                      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      1448940 :                   imax = 5*3*5
   51445      1448940 :                   kmax = 6
   51446              :                   i = 0
   51447      1448940 :                   DO i1 = 1, 5
   51448      5071290 :                   DO i2 = 1, 3
   51449     22941550 :                   DO i3 = 1, 5
   51450     18111750 :                      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     18111750 :                         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     18111750 :                         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     18111750 :                         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     18111750 :                         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     18111750 :                         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     18111750 :                         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     18111750 :                         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     21734100 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   51475              :                   END DO
   51476              :                   END DO
   51477              :                   END DO
   51478       446719 :                   s_offset_d1 = s_offset_d1 + 5
   51479              :                END DO
   51480       387753 :                s_offset_c1 = s_offset_c1 + 5
   51481              :             END DO
   51482       332731 :             s_offset_b1 = s_offset_b1 + 3
   51483              :          END DO
   51484       281287 :          s_offset_a1 = s_offset_a1 + 5
   51485              :       END DO
   51486       131080 :    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       457421 :    SUBROUTINE contract_ddss(work, &
   53277              :                             nl_a, nl_b, nl_c, nl_d, &
   53278       457421 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53279       457421 :                             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       457421 :       s_offset_a1 = 0
   53296       974744 :       DO ia = 1, nl_a
   53297              :          s_offset_b1 = 0
   53298      1157269 :          DO ib = 1, nl_b
   53299              :             s_offset_c1 = 0
   53300      1664337 :             DO ic = 1, nl_c
   53301              :                s_offset_d1 = 0
   53302      2822246 :                DO id = 1, nl_d
   53303      1797855 :                   buffer1 = 0.0_dp
   53304      1797855 :                   imax = 6*1*1
   53305      1797855 :                   kmax = 6
   53306     12584985 :                   DO i = 1, imax
   53307     10787130 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53308     10787130 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53309     10787130 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53310     10787130 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53311     10787130 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53312     10787130 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53313     10787130 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53314     12584985 :                      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      1797855 :                   buffer2 = 0.0_dp
   53317      1797855 :                   imax = 5*1*1
   53318      1797855 :                   kmax = 6
   53319     10787130 :                   DO i = 1, imax
   53320      8989275 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53321      8989275 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53322      8989275 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53323      8989275 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53324      8989275 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53325      8989275 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53326      8989275 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53327     10787130 :                      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      1797855 :                   buffer1 = 0.0_dp
   53330      1797855 :                   imax = 5*5*1
   53331      1797855 :                   kmax = 1
   53332     46744230 :                   DO i = 1, imax
   53333     46744230 :                      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      3595710 :                   imax = 5*5*1
   53336      3595710 :                   kmax = 1
   53337              :                   i = 0
   53338      3595710 :                   DO i1 = 1, 1
   53339     12584985 :                   DO i2 = 1, 5
   53340     55733505 :                   DO i3 = 1, 5
   53341     44946375 :                      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     53935650 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   53345              :                   END DO
   53346              :                   END DO
   53347              :                   END DO
   53348      2822246 :                   s_offset_d1 = s_offset_d1 + 1
   53349              :                END DO
   53350      1664337 :                s_offset_c1 = s_offset_c1 + 1
   53351              :             END DO
   53352      1157269 :             s_offset_b1 = s_offset_b1 + 5
   53353              :          END DO
   53354       974744 :          s_offset_a1 = s_offset_a1 + 5
   53355              :       END DO
   53356       457421 :    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       408233 :    SUBROUTINE contract_ddsp(work, &
   53375              :                             nl_a, nl_b, nl_c, nl_d, &
   53376       408233 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53377       408233 :                             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       408233 :       s_offset_a1 = 0
   53394       864252 :       DO ia = 1, nl_a
   53395              :          s_offset_b1 = 0
   53396      1011328 :          DO ib = 1, nl_b
   53397              :             s_offset_c1 = 0
   53398      1463038 :             DO ic = 1, nl_c
   53399              :                s_offset_d1 = 0
   53400      2081090 :                DO id = 1, nl_d
   53401      1173361 :                   buffer1 = 0.0_dp
   53402      1173361 :                   imax = 6*1*3
   53403      1173361 :                   kmax = 6
   53404     22293859 :                   DO i = 1, imax
   53405     21120498 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53406     21120498 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53407     21120498 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53408     21120498 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53409     21120498 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53410     21120498 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53411     21120498 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53412     22293859 :                      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      1173361 :                   buffer2 = 0.0_dp
   53415      1173361 :                   imax = 5*1*3
   53416      1173361 :                   kmax = 6
   53417     18773776 :                   DO i = 1, imax
   53418     17600415 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53419     17600415 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53420     17600415 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53421     17600415 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53422     17600415 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53423     17600415 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53424     17600415 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53425     18773776 :                      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      1173361 :                   buffer1 = 0.0_dp
   53428      1173361 :                   imax = 5*5*3
   53429      1173361 :                   kmax = 1
   53430     89175436 :                   DO i = 1, imax
   53431     89175436 :                      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      2346722 :                   imax = 5*5*1
   53434      2346722 :                   kmax = 3
   53435              :                   i = 0
   53436      2346722 :                   DO i1 = 1, 1
   53437      8213527 :                   DO i2 = 1, 5
   53438     36374191 :                   DO i3 = 1, 5
   53439     29334025 :                      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     29334025 :                         + 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     29334025 :                         + 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     35200830 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   53449              :                   END DO
   53450              :                   END DO
   53451              :                   END DO
   53452      2081090 :                   s_offset_d1 = s_offset_d1 + 3
   53453              :                END DO
   53454      1463038 :                s_offset_c1 = s_offset_c1 + 1
   53455              :             END DO
   53456      1011328 :             s_offset_b1 = s_offset_b1 + 5
   53457              :          END DO
   53458       864252 :          s_offset_a1 = s_offset_a1 + 5
   53459              :       END DO
   53460       408233 :    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       195212 :    SUBROUTINE contract_ddsd(work, &
   53479              :                             nl_a, nl_b, nl_c, nl_d, &
   53480       195212 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53481       195212 :                             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       195212 :       s_offset_a1 = 0
   53498       424511 :       DO ia = 1, nl_a
   53499              :          s_offset_b1 = 0
   53500       530168 :          DO ib = 1, nl_b
   53501              :             s_offset_c1 = 0
   53502       796867 :             DO ic = 1, nl_c
   53503              :                s_offset_d1 = 0
   53504      1114518 :                DO id = 1, nl_d
   53505       618520 :                   buffer1 = 0.0_dp
   53506       618520 :                   imax = 6*1*6
   53507       618520 :                   kmax = 6
   53508     22885240 :                   DO i = 1, imax
   53509     22266720 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53510     22266720 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53511     22266720 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53512     22266720 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53513     22266720 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53514     22266720 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53515     22266720 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53516     22885240 :                      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       618520 :                   buffer2 = 0.0_dp
   53519       618520 :                   imax = 5*1*6
   53520       618520 :                   kmax = 6
   53521     19174120 :                   DO i = 1, imax
   53522     18555600 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53523     18555600 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53524     18555600 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53525     18555600 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53526     18555600 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53527     18555600 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53528     18555600 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53529     19174120 :                      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       618520 :                   buffer1 = 0.0_dp
   53532       618520 :                   imax = 5*5*6
   53533       618520 :                   kmax = 1
   53534     93396520 :                   DO i = 1, imax
   53535     93396520 :                      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      1237040 :                   imax = 5*5*1
   53538      1237040 :                   kmax = 6
   53539              :                   i = 0
   53540      1237040 :                   DO i1 = 1, 1
   53541      4329640 :                   DO i2 = 1, 5
   53542     19174120 :                   DO i3 = 1, 5
   53543     15463000 :                      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     15463000 :                         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     15463000 :                         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     15463000 :                         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     15463000 :                         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     15463000 :                         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     15463000 :                         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     15463000 :                         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     18555600 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   53568              :                   END DO
   53569              :                   END DO
   53570              :                   END DO
   53571      1114518 :                   s_offset_d1 = s_offset_d1 + 5
   53572              :                END DO
   53573       796867 :                s_offset_c1 = s_offset_c1 + 1
   53574              :             END DO
   53575       530168 :             s_offset_b1 = s_offset_b1 + 5
   53576              :          END DO
   53577       424511 :          s_offset_a1 = s_offset_a1 + 5
   53578              :       END DO
   53579       195212 :    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       369443 :    SUBROUTINE contract_ddps(work, &
   53920              :                             nl_a, nl_b, nl_c, nl_d, &
   53921       369443 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53922       369443 :                             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       369443 :       s_offset_a1 = 0
   53939       779786 :       DO ia = 1, nl_a
   53940              :          s_offset_b1 = 0
   53941       906525 :          DO ib = 1, nl_b
   53942              :             s_offset_c1 = 0
   53943      1163330 :             DO ic = 1, nl_c
   53944              :                s_offset_d1 = 0
   53945      1828696 :                DO id = 1, nl_d
   53946      1161548 :                   buffer1 = 0.0_dp
   53947      1161548 :                   imax = 6*3*1
   53948      1161548 :                   kmax = 6
   53949     22069412 :                   DO i = 1, imax
   53950     20907864 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53951     20907864 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53952     20907864 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53953     20907864 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53954     20907864 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53955     20907864 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53956     20907864 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53957     22069412 :                      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      1161548 :                   buffer2 = 0.0_dp
   53960      1161548 :                   imax = 5*3*1
   53961      1161548 :                   kmax = 6
   53962     18584768 :                   DO i = 1, imax
   53963     17423220 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53964     17423220 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53965     17423220 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53966     17423220 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53967     17423220 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53968     17423220 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53969     17423220 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53970     18584768 :                      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      1161548 :                   buffer1 = 0.0_dp
   53973      1161548 :                   imax = 5*5*1
   53974      1161548 :                   kmax = 3
   53975     30200248 :                   DO i = 1, imax
   53976     29038700 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   53977     29038700 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   53978     30200248 :                      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      4646192 :                   imax = 5*5*3
   53981      4646192 :                   kmax = 1
   53982              :                   i = 0
   53983      4646192 :                   DO i1 = 1, 3
   53984     22069412 :                   DO i2 = 1, 5
   53985    108023964 :                   DO i3 = 1, 5
   53986     87116100 :                      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    104539320 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   53990              :                   END DO
   53991              :                   END DO
   53992              :                   END DO
   53993      1828696 :                   s_offset_d1 = s_offset_d1 + 1
   53994              :                END DO
   53995      1163330 :                s_offset_c1 = s_offset_c1 + 3
   53996              :             END DO
   53997       906525 :             s_offset_b1 = s_offset_b1 + 5
   53998              :          END DO
   53999       779786 :          s_offset_a1 = s_offset_a1 + 5
   54000              :       END DO
   54001       369443 :    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       257950 :    SUBROUTINE contract_ddpp(work, &
   54020              :                             nl_a, nl_b, nl_c, nl_d, &
   54021       257950 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54022       257950 :                             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       257950 :       s_offset_a1 = 0
   54039       550803 :       DO ia = 1, nl_a
   54040              :          s_offset_b1 = 0
   54041       659879 :          DO ib = 1, nl_b
   54042              :             s_offset_c1 = 0
   54043       848710 :             DO ic = 1, nl_c
   54044              :                s_offset_d1 = 0
   54045      1105771 :                DO id = 1, nl_d
   54046       624087 :                   buffer1 = 0.0_dp
   54047       624087 :                   imax = 6*3*3
   54048       624087 :                   kmax = 6
   54049     34324785 :                   DO i = 1, imax
   54050     33700698 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54051     33700698 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54052     33700698 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54053     33700698 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54054     33700698 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54055     33700698 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54056     33700698 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54057     34324785 :                      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       624087 :                   buffer2 = 0.0_dp
   54060       624087 :                   imax = 5*3*3
   54061       624087 :                   kmax = 6
   54062     28708002 :                   DO i = 1, imax
   54063     28083915 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54064     28083915 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54065     28083915 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54066     28083915 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54067     28083915 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54068     28083915 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54069     28083915 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54070     28708002 :                      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       624087 :                   buffer1 = 0.0_dp
   54073       624087 :                   imax = 5*5*3
   54074       624087 :                   kmax = 3
   54075     47430612 :                   DO i = 1, imax
   54076     46806525 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54077     46806525 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54078     47430612 :                      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      2496348 :                   imax = 5*5*3
   54081      2496348 :                   kmax = 3
   54082              :                   i = 0
   54083      2496348 :                   DO i1 = 1, 3
   54084     11857653 :                   DO i2 = 1, 5
   54085     58040091 :                   DO i3 = 1, 5
   54086     46806525 :                      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     46806525 :                         + 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     46806525 :                         + 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     56167830 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   54096              :                   END DO
   54097              :                   END DO
   54098              :                   END DO
   54099      1105771 :                   s_offset_d1 = s_offset_d1 + 3
   54100              :                END DO
   54101       848710 :                s_offset_c1 = s_offset_c1 + 3
   54102              :             END DO
   54103       659879 :             s_offset_b1 = s_offset_b1 + 5
   54104              :          END DO
   54105       550803 :          s_offset_a1 = s_offset_a1 + 5
   54106              :       END DO
   54107       257950 :    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       165920 :    SUBROUTINE contract_ddpd(work, &
   54126              :                             nl_a, nl_b, nl_c, nl_d, &
   54127       165920 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54128       165920 :                             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       165920 :       s_offset_a1 = 0
   54145       358014 :       DO ia = 1, nl_a
   54146              :          s_offset_b1 = 0
   54147       441069 :          DO ib = 1, nl_b
   54148              :             s_offset_c1 = 0
   54149       572468 :             DO ic = 1, nl_c
   54150              :                s_offset_d1 = 0
   54151       713529 :                DO id = 1, nl_d
   54152       390036 :                   buffer1 = 0.0_dp
   54153       390036 :                   imax = 6*3*6
   54154       390036 :                   kmax = 6
   54155     42513924 :                   DO i = 1, imax
   54156     42123888 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54157     42123888 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54158     42123888 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54159     42123888 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54160     42123888 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54161     42123888 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54162     42123888 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54163     42513924 :                      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       390036 :                   buffer2 = 0.0_dp
   54166       390036 :                   imax = 5*3*6
   54167       390036 :                   kmax = 6
   54168     35493276 :                   DO i = 1, imax
   54169     35103240 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54170     35103240 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54171     35103240 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54172     35103240 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54173     35103240 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54174     35103240 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54175     35103240 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54176     35493276 :                      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       390036 :                   buffer1 = 0.0_dp
   54179       390036 :                   imax = 5*5*6
   54180       390036 :                   kmax = 3
   54181     58895436 :                   DO i = 1, imax
   54182     58505400 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54183     58505400 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54184     58895436 :                      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      1560144 :                   imax = 5*5*3
   54187      1560144 :                   kmax = 6
   54188              :                   i = 0
   54189      1560144 :                   DO i1 = 1, 3
   54190      7410684 :                   DO i2 = 1, 5
   54191     36273348 :                   DO i3 = 1, 5
   54192     29252700 :                      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     29252700 :                         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     29252700 :                         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     29252700 :                         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     29252700 :                         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     29252700 :                         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     29252700 :                         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     29252700 :                         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     35103240 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   54217              :                   END DO
   54218              :                   END DO
   54219              :                   END DO
   54220       713529 :                   s_offset_d1 = s_offset_d1 + 5
   54221              :                END DO
   54222       572468 :                s_offset_c1 = s_offset_c1 + 3
   54223              :             END DO
   54224       441069 :             s_offset_b1 = s_offset_b1 + 5
   54225              :          END DO
   54226       358014 :          s_offset_a1 = s_offset_a1 + 5
   54227              :       END DO
   54228       165920 :    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       125725 :    SUBROUTINE contract_ddds(work, &
   54573              :                             nl_a, nl_b, nl_c, nl_d, &
   54574       125725 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54575       125725 :                             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       125725 :       s_offset_a1 = 0
   54592       272253 :       DO ia = 1, nl_a
   54593              :          s_offset_b1 = 0
   54594       337244 :          DO ib = 1, nl_b
   54595              :             s_offset_c1 = 0
   54596       408948 :             DO ic = 1, nl_c
   54597              :                s_offset_d1 = 0
   54598       603197 :                DO id = 1, nl_d
   54599       384965 :                   buffer1 = 0.0_dp
   54600       384965 :                   imax = 6*6*1
   54601       384965 :                   kmax = 6
   54602     14243705 :                   DO i = 1, imax
   54603     13858740 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54604     13858740 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54605     13858740 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54606     13858740 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54607     13858740 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54608     13858740 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54609     13858740 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54610     14243705 :                      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       384965 :                   buffer2 = 0.0_dp
   54613       384965 :                   imax = 5*6*1
   54614       384965 :                   kmax = 6
   54615     11933915 :                   DO i = 1, imax
   54616     11548950 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54617     11548950 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54618     11548950 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54619     11548950 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54620     11548950 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54621     11548950 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54622     11548950 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54623     11933915 :                      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       384965 :                   buffer1 = 0.0_dp
   54626       384965 :                   imax = 5*5*1
   54627       384965 :                   kmax = 6
   54628     10009090 :                   DO i = 1, imax
   54629      9624125 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54630      9624125 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54631      9624125 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54632      9624125 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54633      9624125 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54634      9624125 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54635      9624125 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54636     10009090 :                      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      2309790 :                   imax = 5*5*5
   54639      2309790 :                   kmax = 1
   54640              :                   i = 0
   54641      2309790 :                   DO i1 = 1, 5
   54642     11933915 :                   DO i2 = 1, 5
   54643     59669575 :                   DO i3 = 1, 5
   54644     48120625 :                      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     57744750 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   54648              :                   END DO
   54649              :                   END DO
   54650              :                   END DO
   54651       603197 :                   s_offset_d1 = s_offset_d1 + 1
   54652              :                END DO
   54653       408948 :                s_offset_c1 = s_offset_c1 + 5
   54654              :             END DO
   54655       337244 :             s_offset_b1 = s_offset_b1 + 5
   54656              :          END DO
   54657       272253 :          s_offset_a1 = s_offset_a1 + 5
   54658              :       END DO
   54659       125725 :    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       119355 :    SUBROUTINE contract_dddp(work, &
   54678              :                             nl_a, nl_b, nl_c, nl_d, &
   54679       119355 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54680       119355 :                             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       119355 :       s_offset_a1 = 0
   54697       255974 :       DO ia = 1, nl_a
   54698              :          s_offset_b1 = 0
   54699       310031 :          DO ib = 1, nl_b
   54700              :             s_offset_c1 = 0
   54701       367859 :             DO ic = 1, nl_c
   54702              :                s_offset_d1 = 0
   54703       429795 :                DO id = 1, nl_d
   54704       235348 :                   buffer1 = 0.0_dp
   54705       235348 :                   imax = 6*6*3
   54706       235348 :                   kmax = 6
   54707     25652932 :                   DO i = 1, imax
   54708     25417584 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54709     25417584 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54710     25417584 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54711     25417584 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54712     25417584 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54713     25417584 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54714     25417584 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54715     25652932 :                      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       235348 :                   buffer2 = 0.0_dp
   54718       235348 :                   imax = 5*6*3
   54719       235348 :                   kmax = 6
   54720     21416668 :                   DO i = 1, imax
   54721     21181320 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54722     21181320 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54723     21181320 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54724     21181320 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54725     21181320 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54726     21181320 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54727     21181320 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54728     21416668 :                      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       235348 :                   buffer1 = 0.0_dp
   54731       235348 :                   imax = 5*5*3
   54732       235348 :                   kmax = 6
   54733     17886448 :                   DO i = 1, imax
   54734     17651100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54735     17651100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54736     17651100 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54737     17651100 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54738     17651100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54739     17651100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54740     17651100 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54741     17886448 :                      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      1412088 :                   imax = 5*5*5
   54744      1412088 :                   kmax = 3
   54745              :                   i = 0
   54746      1412088 :                   DO i1 = 1, 5
   54747      7295788 :                   DO i2 = 1, 5
   54748     36478940 :                   DO i3 = 1, 5
   54749     29418500 :                      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     29418500 :                         + 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     29418500 :                         + 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     35302200 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   54759              :                   END DO
   54760              :                   END DO
   54761              :                   END DO
   54762       429795 :                   s_offset_d1 = s_offset_d1 + 3
   54763              :                END DO
   54764       367859 :                s_offset_c1 = s_offset_c1 + 5
   54765              :             END DO
   54766       310031 :             s_offset_b1 = s_offset_b1 + 5
   54767              :          END DO
   54768       255974 :          s_offset_a1 = s_offset_a1 + 5
   54769              :       END DO
   54770       119355 :    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        81823 :    SUBROUTINE contract_dddd(work, &
   54789              :                             nl_a, nl_b, nl_c, nl_d, &
   54790        81823 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54791        81823 :                             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        81823 :       s_offset_a1 = 0
   54808       179109 :       DO ia = 1, nl_a
   54809              :          s_offset_b1 = 0
   54810       228250 :          DO ib = 1, nl_b
   54811              :             s_offset_c1 = 0
   54812       281186 :             DO ic = 1, nl_c
   54813              :                s_offset_d1 = 0
   54814       343504 :                DO id = 1, nl_d
   54815       193282 :                   buffer1 = 0.0_dp
   54816       193282 :                   imax = 6*6*6
   54817       193282 :                   kmax = 6
   54818     41942194 :                   DO i = 1, imax
   54819     41748912 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54820     41748912 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54821     41748912 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54822     41748912 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54823     41748912 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54824     41748912 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54825     41748912 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54826     41942194 :                      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       193282 :                   buffer2 = 0.0_dp
   54829       193282 :                   imax = 5*6*6
   54830       193282 :                   kmax = 6
   54831     34984042 :                   DO i = 1, imax
   54832     34790760 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54833     34790760 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54834     34790760 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54835     34790760 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54836     34790760 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54837     34790760 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54838     34790760 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54839     34984042 :                      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       193282 :                   buffer1 = 0.0_dp
   54842       193282 :                   imax = 5*5*6
   54843       193282 :                   kmax = 6
   54844     29185582 :                   DO i = 1, imax
   54845     28992300 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54846     28992300 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54847     28992300 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54848     28992300 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54849     28992300 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54850     28992300 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54851     28992300 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54852     29185582 :                      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      1159692 :                   imax = 5*5*5
   54855      1159692 :                   kmax = 6
   54856              :                   i = 0
   54857      1159692 :                   DO i1 = 1, 5
   54858      5991742 :                   DO i2 = 1, 5
   54859     29958710 :                   DO i3 = 1, 5
   54860     24160250 :                      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     24160250 :                         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     24160250 :                         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     24160250 :                         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     24160250 :                         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     24160250 :                         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     24160250 :                         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     24160250 :                         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     28992300 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   54885              :                   END DO
   54886              :                   END DO
   54887              :                   END DO
   54888       343504 :                   s_offset_d1 = s_offset_d1 + 5
   54889              :                END DO
   54890       281186 :                s_offset_c1 = s_offset_c1 + 5
   54891              :             END DO
   54892       228250 :             s_offset_b1 = s_offset_b1 + 5
   54893              :          END DO
   54894       179109 :          s_offset_a1 = s_offset_a1 + 5
   54895              :       END DO
   54896        81823 :    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
        

Generated by: LCOV version 2.0-1