LCOV - code coverage report
Current view: top level - src/hfxbase - hfx_contraction_methods.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:ccc2433) Lines: 4414 5059 87.3 %
Date: 2024-04-25 07:09:54 Functions: 83 83 100.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 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   464817326 :    SUBROUTINE contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
      67   464817326 :                        n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work, &
      68   464817326 :                        sphi_a, sphi_b, sphi_c, sphi_d, &
      69   464817326 :                        primitives, &
      70   464817326 :                        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   776188317 :       SELECT CASE (n_a)
     111             :       CASE (0)
     112   709146433 :          SELECT CASE (n_b)
     113             :          CASE (0)
     114   461258800 :             SELECT CASE (n_c)
     115             :             CASE (0)
     116   375293073 :                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   119534487 :                                      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    33333190 :                                      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     3108691 :                                      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   155994877 :                                         buffer1, buffer2)
     211             :                END SELECT
     212             :             CASE (1)
     213   180320866 :                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    71697580 :                                      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    25368143 :                                      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     2666913 :                                      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    99763709 :                                         buffer1, buffer2)
     308             :                END SELECT
     309             :             CASE (2)
     310    14075379 :                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     5150333 :                                      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     2963502 :                                      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      738070 :                                      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     8859577 :                                         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   264683632 :                                      buffer1, buffer2)
     609             :             END SELECT
     610             :          CASE (1)
     611    69459887 :             SELECT CASE (n_c)
     612             :             CASE (0)
     613    52744084 :                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    15088936 :                                      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     6287002 :                                      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     1441823 :                                      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    22836805 :                                         buffer1, buffer2)
     708             :                END SELECT
     709             :             CASE (1)
     710    24404610 :                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     6687981 :                                      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     7295955 :                                      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      827137 :                                      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    14818343 :                                         buffer1, buffer2)
     805             :                END SELECT
     806             :             CASE (2)
     807     4613796 :                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     1688653 :                                      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      848921 :                                      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      353528 :                                      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     2898286 :                                         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    40580291 :                                      buffer1, buffer2)
    1106             :             END SELECT
    1107             :          CASE (2)
    1108     9280320 :             SELECT CASE (n_c)
    1109             :             CASE (0)
    1110     6807378 :                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     1436309 :                                      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     1310745 :                                      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      423104 :                                      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     3173252 :                                         buffer1, buffer2)
    1205             :                END SELECT
    1206             :             CASE (1)
    1207     4013098 :                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     1152072 :                                      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      677648 :                                      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      361597 :                                      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     2197817 :                                         buffer1, buffer2)
    1302             :                END SELECT
    1303             :             CASE (2)
    1304      928262 :                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      256540 :                                      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      275192 :                                      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      129972 :                                      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      663209 :                                         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     6042791 :                                      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   311370991 :                                   buffer1, buffer2)
    2607             :          END SELECT
    2608             :       CASE (1)
    2609   252945197 :          SELECT CASE (n_b)
    2610             :          CASE (0)
    2611   182512338 :             SELECT CASE (n_c)
    2612             :             CASE (0)
    2613   133923727 :                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    39110620 :                                      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    13264380 :                                      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     2013014 :                                      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    54402488 :                                         buffer1, buffer2)
    2708             :                END SELECT
    2709             :             CASE (1)
    2710    70319715 :                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    24997541 :                                      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    14011354 :                                      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     1394983 :                                      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    40410619 :                                         buffer1, buffer2)
    2805             :                END SELECT
    2806             :             CASE (2)
    2807     7893440 :                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     2936706 :                                      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     1457602 :                                      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      512130 :                                      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     4911555 :                                         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    99769841 :                                      buffer1, buffer2)
    3106             :             END SELECT
    3107             :          CASE (1)
    3108    47795012 :             SELECT CASE (n_c)
    3109             :             CASE (0)
    3110    32999504 :                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     6651082 :                                      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     7071174 :                                      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      805641 :                                      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    14532933 :                                         buffer1, buffer2)
    3205             :                END SELECT
    3206             :             CASE (1)
    3207    21061374 :                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     7269089 :                                      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     3639132 :                                      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      898458 :                                      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    11815489 :                                         buffer1, buffer2)
    3302             :                END SELECT
    3303             :             CASE (2)
    3304     2850440 :                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      858853 :                                      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      886851 :                                      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      228932 :                                      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     1976796 :                                         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    28340009 :                                      buffer1, buffer2)
    3603             :             END SELECT
    3604             :          CASE (2)
    3605     7538318 :             SELECT CASE (n_c)
    3606             :             CASE (0)
    3607     5679362 :                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     1357954 :                                      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      779500 :                                      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      413389 :                                      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     2556358 :                                         buffer1, buffer2)
    3702             :                END SELECT
    3703             :             CASE (1)
    3704     3018317 :                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      658762 :                                      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      838817 :                                      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      265380 :                                      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     1765050 :                                         buffer1, buffer2)
    3799             :                END SELECT
    3800             :             CASE (2)
    3801      883078 :                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      282416 :                                      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      184113 :                                      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      125874 :                                      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      594505 :                                         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     4922070 :                                      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   133091810 :                                   buffer1, buffer2)
    5104             :          END SELECT
    5105             :       CASE (2)
    5106    32884407 :          SELECT CASE (n_b)
    5107             :          CASE (0)
    5108    24231340 :             SELECT CASE (n_c)
    5109             :             CASE (0)
    5110    14674803 :                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     3595449 :                                      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     2136148 :                                      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      586349 :                                      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     6321008 :                                         buffer1, buffer2)
    5205             :                END SELECT
    5206             :             CASE (1)
    5207     8923193 :                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     2725429 :                                      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     1510422 :                                      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      517858 :                                      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     4758346 :                                         buffer1, buffer2)
    5302             :                END SELECT
    5303             :             CASE (2)
    5304     2176383 :                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      725855 :                                      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      510000 :                                      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      202338 :                                      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     1439418 :                                         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    12529882 :                                      buffer1, buffer2)
    5603             :             END SELECT
    5604             :          CASE (1)
    5605    10254853 :             SELECT CASE (n_c)
    5606             :             CASE (0)
    5607     6239881 :                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     1556954 :                                      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      797789 :                                      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      369833 :                                      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     2727974 :                                         buffer1, buffer2)
    5702             :                END SELECT
    5703             :             CASE (1)
    5704     3461913 :                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      815122 :                                      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      891851 :                                      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      246515 :                                      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     1954953 :                                         buffer1, buffer2)
    5799             :                END SELECT
    5800             :             CASE (2)
    5801     1039665 :                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      342142 :                                      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      218730 :                                      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      129703 :                                      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      691838 :                                         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     5380450 :                                      buffer1, buffer2)
    6100             :             END SELECT
    6101             :          CASE (2)
    6102     3209489 :             SELECT CASE (n_c)
    6103             :             CASE (0)
    6104     2259436 :                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      440021 :                                      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      401176 :                                      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      193894 :                                      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     1036275 :                                         buffer1, buffer2)
    6199             :                END SELECT
    6200             :             CASE (1)
    6201     1469422 :                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      361970 :                                      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      254497 :                                      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      164784 :                                      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      783140 :                                         buffer1, buffer2)
    6296             :                END SELECT
    6297             :             CASE (2)
    6298      451045 :                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      124031 :                                      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      118155 :                                      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       81603 :                                      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      324312 :                                         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     2146429 :                                      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    20083546 :                                   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   464817326 :                                buffer1, buffer2)
   12605             :       END SELECT
   12606             : #endif
   12607   464817326 :    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   119534487 :    SUBROUTINE contract_ssss(work, &
   12627             :                             nl_a, nl_b, nl_c, nl_d, &
   12628   119534487 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12629   119534487 :                             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   119534487 :       s_offset_a1 = 0
   12647   251795987 :       DO ia = 1, nl_a
   12648             :          s_offset_b1 = 0
   12649   289017037 :          DO ib = 1, nl_b
   12650             :             s_offset_c1 = 0
   12651   361939792 :             DO ic = 1, nl_c
   12652             :                s_offset_d1 = 0
   12653   505518791 :                DO id = 1, nl_d
   12654             : 
   12655   300334536 :                   buffer1 = 0.0_dp
   12656   300334536 :                   imax = 1*1*1
   12657   300334536 :                   kmax = 1
   12658   600669072 :                   DO i = 1, imax
   12659   600669072 :                      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   300334536 :                   buffer2 = 0.0_dp
   12663   300334536 :                   imax = 1*1*1
   12664   300334536 :                   kmax = 1
   12665   600669072 :                   DO i = 1, imax
   12666   600669072 :                      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   300334536 :                   buffer1 = 0.0_dp
   12670   300334536 :                   imax = 1*1*1
   12671   300334536 :                   kmax = 1
   12672   600669072 :                   DO i = 1, imax
   12673   600669072 :                      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   600669072 :                   imax = 1*1*1
   12677   600669072 :                   kmax = 1
   12678             :                   i = 0
   12679   600669072 :                   DO i1 = 1, 1
   12680   901003608 :                   DO i2 = 1, 1
   12681   901003608 :                   DO i3 = 1, 1
   12682   300334536 :                      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   600669072 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   12686             :                   END DO
   12687             :                   END DO
   12688             :                   END DO
   12689   505518791 :                   s_offset_d1 = s_offset_d1 + 1
   12690             :                END DO
   12691   361939792 :                s_offset_c1 = s_offset_c1 + 1
   12692             :             END DO
   12693   289017037 :             s_offset_b1 = s_offset_b1 + 1
   12694             :          END DO
   12695   251795987 :          s_offset_a1 = s_offset_a1 + 1
   12696             :       END DO
   12697   119534487 :    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    33333190 :    SUBROUTINE contract_sssp(work, &
   12716             :                             nl_a, nl_b, nl_c, nl_d, &
   12717    33333190 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12718    33333190 :                             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    33333190 :       s_offset_a1 = 0
   12735    73264822 :       DO ia = 1, nl_a
   12736             :          s_offset_b1 = 0
   12737    92697770 :          DO ib = 1, nl_b
   12738             :             s_offset_c1 = 0
   12739   130585720 :             DO ic = 1, nl_c
   12740             :                s_offset_d1 = 0
   12741   195944808 :                DO id = 1, nl_d
   12742             : 
   12743   118125226 :                   buffer1 = 0.0_dp
   12744   118125226 :                   imax = 1*1*3
   12745   118125226 :                   kmax = 1
   12746   472500904 :                   DO i = 1, imax
   12747   472500904 :                      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   118125226 :                   buffer2 = 0.0_dp
   12751   118125226 :                   imax = 1*1*3
   12752   118125226 :                   kmax = 1
   12753   472500904 :                   DO i = 1, imax
   12754   472500904 :                      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   118125226 :                   buffer1 = 0.0_dp
   12758   118125226 :                   imax = 1*1*3
   12759   118125226 :                   kmax = 1
   12760   472500904 :                   DO i = 1, imax
   12761   472500904 :                      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   236250452 :                   imax = 1*1*1
   12765   236250452 :                   kmax = 3
   12766             :                   i = 0
   12767   236250452 :                   DO i1 = 1, 1
   12768   354375678 :                   DO i2 = 1, 1
   12769   354375678 :                   DO i3 = 1, 1
   12770   118125226 :                      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   118125226 :                         + 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   118125226 :                         + 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   236250452 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   12780             :                   END DO
   12781             :                   END DO
   12782             :                   END DO
   12783   195944808 :                   s_offset_d1 = s_offset_d1 + 3
   12784             :                END DO
   12785   130585720 :                s_offset_c1 = s_offset_c1 + 1
   12786             :             END DO
   12787    92697770 :             s_offset_b1 = s_offset_b1 + 1
   12788             :          END DO
   12789    73264822 :          s_offset_a1 = s_offset_a1 + 1
   12790             :       END DO
   12791    33333190 :    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     3108691 :    SUBROUTINE contract_sssd(work, &
   12810             :                             nl_a, nl_b, nl_c, nl_d, &
   12811     3108691 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   12812     3108691 :                             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     3108691 :       s_offset_a1 = 0
   12829     7688848 :       DO ia = 1, nl_a
   12830             :          s_offset_b1 = 0
   12831    12024558 :          DO ib = 1, nl_b
   12832             :             s_offset_c1 = 0
   12833    20289814 :             DO ic = 1, nl_c
   12834             :                s_offset_d1 = 0
   12835    26388521 :                DO id = 1, nl_d
   12836    13543108 :                   buffer1 = 0.0_dp
   12837    13543108 :                   imax = 1*1*6
   12838    13543108 :                   kmax = 1
   12839    94801756 :                   DO i = 1, imax
   12840    94801756 :                      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    13543108 :                   buffer2 = 0.0_dp
   12843    13543108 :                   imax = 1*1*6
   12844    13543108 :                   kmax = 1
   12845    94801756 :                   DO i = 1, imax
   12846    94801756 :                      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    13543108 :                   buffer1 = 0.0_dp
   12849    13543108 :                   imax = 1*1*6
   12850    13543108 :                   kmax = 1
   12851    94801756 :                   DO i = 1, imax
   12852    94801756 :                      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    27086216 :                   imax = 1*1*1
   12856    27086216 :                   kmax = 6
   12857             :                   i = 0
   12858    27086216 :                   DO i1 = 1, 1
   12859    40629324 :                   DO i2 = 1, 1
   12860    40629324 :                   DO i3 = 1, 1
   12861    13543108 :                      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    13543108 :                         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    13543108 :                         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    13543108 :                         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    13543108 :                         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    13543108 :                         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    13543108 :                         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    13543108 :                         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    27086216 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   12886             :                   END DO
   12887             :                   END DO
   12888             :                   END DO
   12889    26388521 :                   s_offset_d1 = s_offset_d1 + 5
   12890             :                END DO
   12891    20289814 :                s_offset_c1 = s_offset_c1 + 1
   12892             :             END DO
   12893    12024558 :             s_offset_b1 = s_offset_b1 + 1
   12894             :          END DO
   12895     7688848 :          s_offset_a1 = s_offset_a1 + 1
   12896             :       END DO
   12897     3108691 :    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    71697580 :    SUBROUTINE contract_ssps(work, &
   13210             :                             nl_a, nl_b, nl_c, nl_d, &
   13211    71697580 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13212    71697580 :                             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    71697580 :       s_offset_a1 = 0
   13229   153514976 :       DO ia = 1, nl_a
   13230             :          s_offset_b1 = 0
   13231   183553592 :          DO ib = 1, nl_b
   13232             :             s_offset_c1 = 0
   13233   239969476 :             DO ic = 1, nl_c
   13234             :                s_offset_d1 = 0
   13235   352107143 :                DO id = 1, nl_d
   13236   213873863 :                   buffer1 = 0.0_dp
   13237   213873863 :                   imax = 1*3*1
   13238   213873863 :                   kmax = 1
   13239   855495452 :                   DO i = 1, imax
   13240   855495452 :                      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   213873863 :                   buffer2 = 0.0_dp
   13243   213873863 :                   imax = 1*3*1
   13244   213873863 :                   kmax = 1
   13245   855495452 :                   DO i = 1, imax
   13246   855495452 :                      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   213873863 :                   buffer1 = 0.0_dp
   13249   213873863 :                   imax = 1*1*1
   13250   213873863 :                   kmax = 3
   13251   427747726 :                   DO i = 1, imax
   13252   213873863 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13253   213873863 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13254   427747726 :                      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   855495452 :                   imax = 1*1*3
   13257   855495452 :                   kmax = 1
   13258             :                   i = 0
   13259   855495452 :                   DO i1 = 1, 3
   13260  1497117041 :                   DO i2 = 1, 1
   13261  1924864767 :                   DO i3 = 1, 1
   13262   641621589 :                      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  1283243178 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   13266             :                   END DO
   13267             :                   END DO
   13268             :                   END DO
   13269   352107143 :                   s_offset_d1 = s_offset_d1 + 1
   13270             :                END DO
   13271   239969476 :                s_offset_c1 = s_offset_c1 + 3
   13272             :             END DO
   13273   183553592 :             s_offset_b1 = s_offset_b1 + 1
   13274             :          END DO
   13275   153514976 :          s_offset_a1 = s_offset_a1 + 1
   13276             :       END DO
   13277    71697580 :    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    25368143 :    SUBROUTINE contract_sspp(work, &
   13296             :                             nl_a, nl_b, nl_c, nl_d, &
   13297    25368143 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13298    25368143 :                             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    25368143 :       s_offset_a1 = 0
   13315    55850354 :       DO ia = 1, nl_a
   13316             :          s_offset_b1 = 0
   13317    70960470 :          DO ib = 1, nl_b
   13318             :             s_offset_c1 = 0
   13319    98668338 :             DO ic = 1, nl_c
   13320             :                s_offset_d1 = 0
   13321   149577155 :                DO id = 1, nl_d
   13322    91387076 :                   buffer1 = 0.0_dp
   13323    91387076 :                   imax = 1*3*3
   13324    91387076 :                   kmax = 1
   13325   913870760 :                   DO i = 1, imax
   13326   913870760 :                      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    91387076 :                   buffer2 = 0.0_dp
   13329    91387076 :                   imax = 1*3*3
   13330    91387076 :                   kmax = 1
   13331   913870760 :                   DO i = 1, imax
   13332   913870760 :                      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    91387076 :                   buffer1 = 0.0_dp
   13335    91387076 :                   imax = 1*1*3
   13336    91387076 :                   kmax = 3
   13337   365548304 :                   DO i = 1, imax
   13338   274161228 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13339   274161228 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13340   365548304 :                      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   365548304 :                   imax = 1*1*3
   13343   365548304 :                   kmax = 3
   13344             :                   i = 0
   13345   365548304 :                   DO i1 = 1, 3
   13346   639709532 :                   DO i2 = 1, 1
   13347   822483684 :                   DO i3 = 1, 1
   13348   274161228 :                      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   274161228 :                         + 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   274161228 :                         + 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   548322456 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   13358             :                   END DO
   13359             :                   END DO
   13360             :                   END DO
   13361   149577155 :                   s_offset_d1 = s_offset_d1 + 3
   13362             :                END DO
   13363    98668338 :                s_offset_c1 = s_offset_c1 + 3
   13364             :             END DO
   13365    70960470 :             s_offset_b1 = s_offset_b1 + 1
   13366             :          END DO
   13367    55850354 :          s_offset_a1 = s_offset_a1 + 1
   13368             :       END DO
   13369    25368143 :    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     2666913 :    SUBROUTINE contract_sspd(work, &
   13388             :                             nl_a, nl_b, nl_c, nl_d, &
   13389     2666913 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13390     2666913 :                             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     2666913 :       s_offset_a1 = 0
   13407     6789318 :       DO ia = 1, nl_a
   13408             :          s_offset_b1 = 0
   13409    11114647 :          DO ib = 1, nl_b
   13410             :             s_offset_c1 = 0
   13411    18853898 :             DO ic = 1, nl_c
   13412             :                s_offset_d1 = 0
   13413    24041220 :                DO id = 1, nl_d
   13414    12179564 :                   buffer1 = 0.0_dp
   13415    12179564 :                   imax = 1*3*6
   13416    12179564 :                   kmax = 1
   13417   231411716 :                   DO i = 1, imax
   13418   231411716 :                      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    12179564 :                   buffer2 = 0.0_dp
   13421    12179564 :                   imax = 1*3*6
   13422    12179564 :                   kmax = 1
   13423   231411716 :                   DO i = 1, imax
   13424   231411716 :                      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    12179564 :                   buffer1 = 0.0_dp
   13427    12179564 :                   imax = 1*1*6
   13428    12179564 :                   kmax = 3
   13429    85256948 :                   DO i = 1, imax
   13430    73077384 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13431    73077384 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13432    85256948 :                      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    48718256 :                   imax = 1*1*3
   13435    48718256 :                   kmax = 6
   13436             :                   i = 0
   13437    48718256 :                   DO i1 = 1, 3
   13438    85256948 :                   DO i2 = 1, 1
   13439   109616076 :                   DO i3 = 1, 1
   13440    36538692 :                      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    36538692 :                         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    36538692 :                         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    36538692 :                         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    36538692 :                         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    36538692 :                         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    36538692 :                         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    36538692 :                         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    73077384 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   13465             :                   END DO
   13466             :                   END DO
   13467             :                   END DO
   13468    24041220 :                   s_offset_d1 = s_offset_d1 + 5
   13469             :                END DO
   13470    18853898 :                s_offset_c1 = s_offset_c1 + 3
   13471             :             END DO
   13472    11114647 :             s_offset_b1 = s_offset_b1 + 1
   13473             :          END DO
   13474     6789318 :          s_offset_a1 = s_offset_a1 + 1
   13475             :       END DO
   13476     2666913 :    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     5150333 :    SUBROUTINE contract_ssds(work, &
   13793             :                             nl_a, nl_b, nl_c, nl_d, &
   13794     5150333 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13795     5150333 :                             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     5150333 :       s_offset_a1 = 0
   13812    12679234 :       DO ia = 1, nl_a
   13813             :          s_offset_b1 = 0
   13814    19656374 :          DO ib = 1, nl_b
   13815             :             s_offset_c1 = 0
   13816    24525583 :             DO ic = 1, nl_c
   13817             :                s_offset_d1 = 0
   13818    34041832 :                DO id = 1, nl_d
   13819    21643722 :                   buffer1 = 0.0_dp
   13820    21643722 :                   imax = 1*6*1
   13821    21643722 :                   kmax = 1
   13822   151506054 :                   DO i = 1, imax
   13823   151506054 :                      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    21643722 :                   buffer2 = 0.0_dp
   13826    21643722 :                   imax = 1*6*1
   13827    21643722 :                   kmax = 1
   13828   151506054 :                   DO i = 1, imax
   13829   151506054 :                      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    21643722 :                   buffer1 = 0.0_dp
   13832    21643722 :                   imax = 1*1*1
   13833    21643722 :                   kmax = 6
   13834    43287444 :                   DO i = 1, imax
   13835    21643722 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13836    21643722 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   13837    21643722 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13838    21643722 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   13839    21643722 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   13840    21643722 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   13841    21643722 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   13842    43287444 :                      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   129862332 :                   imax = 1*1*5
   13845   129862332 :                   kmax = 1
   13846             :                   i = 0
   13847   129862332 :                   DO i1 = 1, 5
   13848   238080942 :                   DO i2 = 1, 1
   13849   324655830 :                   DO i3 = 1, 1
   13850   108218610 :                      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   216437220 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   13854             :                   END DO
   13855             :                   END DO
   13856             :                   END DO
   13857    34041832 :                   s_offset_d1 = s_offset_d1 + 1
   13858             :                END DO
   13859    24525583 :                s_offset_c1 = s_offset_c1 + 5
   13860             :             END DO
   13861    19656374 :             s_offset_b1 = s_offset_b1 + 1
   13862             :          END DO
   13863    12679234 :          s_offset_a1 = s_offset_a1 + 1
   13864             :       END DO
   13865     5150333 :    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     2963502 :    SUBROUTINE contract_ssdp(work, &
   13884             :                             nl_a, nl_b, nl_c, nl_d, &
   13885     2963502 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13886     2963502 :                             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     2963502 :       s_offset_a1 = 0
   13903     7409894 :       DO ia = 1, nl_a
   13904             :          s_offset_b1 = 0
   13905    11786188 :          DO ib = 1, nl_b
   13906             :             s_offset_c1 = 0
   13907    14895046 :             DO ic = 1, nl_c
   13908             :                s_offset_d1 = 0
   13909    19893421 :                DO id = 1, nl_d
   13910    12338171 :                   buffer1 = 0.0_dp
   13911    12338171 :                   imax = 1*6*3
   13912    12338171 :                   kmax = 1
   13913   234425249 :                   DO i = 1, imax
   13914   234425249 :                      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    12338171 :                   buffer2 = 0.0_dp
   13917    12338171 :                   imax = 1*6*3
   13918    12338171 :                   kmax = 1
   13919   234425249 :                   DO i = 1, imax
   13920   234425249 :                      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    12338171 :                   buffer1 = 0.0_dp
   13923    12338171 :                   imax = 1*1*3
   13924    12338171 :                   kmax = 6
   13925    49352684 :                   DO i = 1, imax
   13926    37014513 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   13927    37014513 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   13928    37014513 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   13929    37014513 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   13930    37014513 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   13931    37014513 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   13932    37014513 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   13933    49352684 :                      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    74029026 :                   imax = 1*1*5
   13936    74029026 :                   kmax = 3
   13937             :                   i = 0
   13938    74029026 :                   DO i1 = 1, 5
   13939   135719881 :                   DO i2 = 1, 1
   13940   185072565 :                   DO i3 = 1, 1
   13941    61690855 :                      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    61690855 :                         + 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    61690855 :                         + 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   123381710 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   13951             :                   END DO
   13952             :                   END DO
   13953             :                   END DO
   13954    19893421 :                   s_offset_d1 = s_offset_d1 + 3
   13955             :                END DO
   13956    14895046 :                s_offset_c1 = s_offset_c1 + 5
   13957             :             END DO
   13958    11786188 :             s_offset_b1 = s_offset_b1 + 1
   13959             :          END DO
   13960     7409894 :          s_offset_a1 = s_offset_a1 + 1
   13961             :       END DO
   13962     2963502 :    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      738070 :    SUBROUTINE contract_ssdd(work, &
   13981             :                             nl_a, nl_b, nl_c, nl_d, &
   13982      738070 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   13983      738070 :                             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      738070 :       s_offset_a1 = 0
   14000     1895923 :       DO ia = 1, nl_a
   14001             :          s_offset_b1 = 0
   14002     3120684 :          DO ib = 1, nl_b
   14003             :             s_offset_c1 = 0
   14004     4067766 :             DO ic = 1, nl_c
   14005             :                s_offset_d1 = 0
   14006     4407955 :                DO id = 1, nl_d
   14007     2303020 :                   buffer1 = 0.0_dp
   14008     2303020 :                   imax = 1*6*6
   14009     2303020 :                   kmax = 1
   14010    85211740 :                   DO i = 1, imax
   14011    85211740 :                      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     2303020 :                   buffer2 = 0.0_dp
   14014     2303020 :                   imax = 1*6*6
   14015     2303020 :                   kmax = 1
   14016    85211740 :                   DO i = 1, imax
   14017    85211740 :                      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     2303020 :                   buffer1 = 0.0_dp
   14020     2303020 :                   imax = 1*1*6
   14021     2303020 :                   kmax = 6
   14022    16121140 :                   DO i = 1, imax
   14023    13818120 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   14024    13818120 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   14025    13818120 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   14026    13818120 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   14027    13818120 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   14028    13818120 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   14029    13818120 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   14030    16121140 :                      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    13818120 :                   imax = 1*1*5
   14033    13818120 :                   kmax = 6
   14034             :                   i = 0
   14035    13818120 :                   DO i1 = 1, 5
   14036    25333220 :                   DO i2 = 1, 1
   14037    34545300 :                   DO i3 = 1, 1
   14038    11515100 :                      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    11515100 :                         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    11515100 :                         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    11515100 :                         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    11515100 :                         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    11515100 :                         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    11515100 :                         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    11515100 :                         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    23030200 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   14063             :                   END DO
   14064             :                   END DO
   14065             :                   END DO
   14066     4407955 :                   s_offset_d1 = s_offset_d1 + 5
   14067             :                END DO
   14068     4067766 :                s_offset_c1 = s_offset_c1 + 5
   14069             :             END DO
   14070     3120684 :             s_offset_b1 = s_offset_b1 + 1
   14071             :          END DO
   14072     1895923 :          s_offset_a1 = s_offset_a1 + 1
   14073             :       END DO
   14074      738070 :    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    15088936 :    SUBROUTINE contract_spss(work, &
   15757             :                             nl_a, nl_b, nl_c, nl_d, &
   15758    15088936 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15759    15088936 :                             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    15088936 :       s_offset_a1 = 0
   15776    33677407 :       DO ia = 1, nl_a
   15777             :          s_offset_b1 = 0
   15778    40727461 :          DO ib = 1, nl_b
   15779             :             s_offset_c1 = 0
   15780    54443805 :             DO ic = 1, nl_c
   15781             :                s_offset_d1 = 0
   15782    84367442 :                DO id = 1, nl_d
   15783    52062627 :                   buffer1 = 0.0_dp
   15784    52062627 :                   imax = 3*1*1
   15785    52062627 :                   kmax = 1
   15786   208250508 :                   DO i = 1, imax
   15787   208250508 :                      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    52062627 :                   buffer2 = 0.0_dp
   15790    52062627 :                   imax = 1*1*1
   15791    52062627 :                   kmax = 3
   15792   104125254 :                   DO i = 1, imax
   15793    52062627 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15794    52062627 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15795   104125254 :                      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    52062627 :                   buffer1 = 0.0_dp
   15798    52062627 :                   imax = 1*3*1
   15799    52062627 :                   kmax = 1
   15800   208250508 :                   DO i = 1, imax
   15801   208250508 :                      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   104125254 :                   imax = 1*3*1
   15804   104125254 :                   kmax = 1
   15805             :                   i = 0
   15806   104125254 :                   DO i1 = 1, 1
   15807   260313135 :                   DO i2 = 1, 3
   15808   364438389 :                   DO i3 = 1, 1
   15809   156187881 :                      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   312375762 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   15813             :                   END DO
   15814             :                   END DO
   15815             :                   END DO
   15816    84367442 :                   s_offset_d1 = s_offset_d1 + 1
   15817             :                END DO
   15818    54443805 :                s_offset_c1 = s_offset_c1 + 1
   15819             :             END DO
   15820    40727461 :             s_offset_b1 = s_offset_b1 + 3
   15821             :          END DO
   15822    33677407 :          s_offset_a1 = s_offset_a1 + 1
   15823             :       END DO
   15824    15088936 :    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     6287002 :    SUBROUTINE contract_spsp(work, &
   15843             :                             nl_a, nl_b, nl_c, nl_d, &
   15844     6287002 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15845     6287002 :                             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     6287002 :       s_offset_a1 = 0
   15862    14558001 :       DO ia = 1, nl_a
   15863             :          s_offset_b1 = 0
   15864    18385224 :          DO ib = 1, nl_b
   15865             :             s_offset_c1 = 0
   15866    25764994 :             DO ic = 1, nl_c
   15867             :                s_offset_d1 = 0
   15868    39459564 :                DO id = 1, nl_d
   15869    23808795 :                   buffer1 = 0.0_dp
   15870    23808795 :                   imax = 3*1*3
   15871    23808795 :                   kmax = 1
   15872   238087950 :                   DO i = 1, imax
   15873   238087950 :                      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    23808795 :                   buffer2 = 0.0_dp
   15876    23808795 :                   imax = 1*1*3
   15877    23808795 :                   kmax = 3
   15878    95235180 :                   DO i = 1, imax
   15879    71426385 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15880    71426385 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15881    95235180 :                      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    23808795 :                   buffer1 = 0.0_dp
   15884    23808795 :                   imax = 1*3*3
   15885    23808795 :                   kmax = 1
   15886   238087950 :                   DO i = 1, imax
   15887   238087950 :                      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    47617590 :                   imax = 1*3*1
   15890    47617590 :                   kmax = 3
   15891             :                   i = 0
   15892    47617590 :                   DO i1 = 1, 1
   15893   119043975 :                   DO i2 = 1, 3
   15894   166661565 :                   DO i3 = 1, 1
   15895    71426385 :                      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    71426385 :                         + 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    71426385 :                         + 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   142852770 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   15905             :                   END DO
   15906             :                   END DO
   15907             :                   END DO
   15908    39459564 :                   s_offset_d1 = s_offset_d1 + 3
   15909             :                END DO
   15910    25764994 :                s_offset_c1 = s_offset_c1 + 1
   15911             :             END DO
   15912    18385224 :             s_offset_b1 = s_offset_b1 + 3
   15913             :          END DO
   15914    14558001 :          s_offset_a1 = s_offset_a1 + 1
   15915             :       END DO
   15916     6287002 :    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     1441823 :    SUBROUTINE contract_spsd(work, &
   15935             :                             nl_a, nl_b, nl_c, nl_d, &
   15936     1441823 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   15937     1441823 :                             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     1441823 :       s_offset_a1 = 0
   15954     3595475 :       DO ia = 1, nl_a
   15955             :          s_offset_b1 = 0
   15956     5070740 :          DO ib = 1, nl_b
   15957             :             s_offset_c1 = 0
   15958     7908189 :             DO ic = 1, nl_c
   15959             :                s_offset_d1 = 0
   15960    10246895 :                DO id = 1, nl_d
   15961     5255794 :                   buffer1 = 0.0_dp
   15962     5255794 :                   imax = 3*1*6
   15963     5255794 :                   kmax = 1
   15964    99860086 :                   DO i = 1, imax
   15965    99860086 :                      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     5255794 :                   buffer2 = 0.0_dp
   15968     5255794 :                   imax = 1*1*6
   15969     5255794 :                   kmax = 3
   15970    36790558 :                   DO i = 1, imax
   15971    31534764 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   15972    31534764 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   15973    36790558 :                      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     5255794 :                   buffer1 = 0.0_dp
   15976     5255794 :                   imax = 1*3*6
   15977     5255794 :                   kmax = 1
   15978    99860086 :                   DO i = 1, imax
   15979    99860086 :                      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    10511588 :                   imax = 1*3*1
   15982    10511588 :                   kmax = 6
   15983             :                   i = 0
   15984    10511588 :                   DO i1 = 1, 1
   15985    26278970 :                   DO i2 = 1, 3
   15986    36790558 :                   DO i3 = 1, 1
   15987    15767382 :                      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    15767382 :                         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    15767382 :                         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    15767382 :                         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    15767382 :                         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    15767382 :                         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    15767382 :                         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    15767382 :                         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    31534764 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   16012             :                   END DO
   16013             :                   END DO
   16014             :                   END DO
   16015    10246895 :                   s_offset_d1 = s_offset_d1 + 5
   16016             :                END DO
   16017     7908189 :                s_offset_c1 = s_offset_c1 + 1
   16018             :             END DO
   16019     5070740 :             s_offset_b1 = s_offset_b1 + 3
   16020             :          END DO
   16021     3595475 :          s_offset_a1 = s_offset_a1 + 1
   16022             :       END DO
   16023     1441823 :    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     6687981 :    SUBROUTINE contract_spps(work, &
   16340             :                             nl_a, nl_b, nl_c, nl_d, &
   16341     6687981 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16342     6687981 :                             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     6687981 :       s_offset_a1 = 0
   16359    15251016 :       DO ia = 1, nl_a
   16360             :          s_offset_b1 = 0
   16361    18941288 :          DO ib = 1, nl_b
   16362             :             s_offset_c1 = 0
   16363    25288569 :             DO ic = 1, nl_c
   16364             :                s_offset_d1 = 0
   16365    39578773 :                DO id = 1, nl_d
   16366    24668457 :                   buffer1 = 0.0_dp
   16367    24668457 :                   imax = 3*3*1
   16368    24668457 :                   kmax = 1
   16369   246684570 :                   DO i = 1, imax
   16370   246684570 :                      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    24668457 :                   buffer2 = 0.0_dp
   16373    24668457 :                   imax = 1*3*1
   16374    24668457 :                   kmax = 3
   16375    98673828 :                   DO i = 1, imax
   16376    74005371 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16377    74005371 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16378    98673828 :                      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    24668457 :                   buffer1 = 0.0_dp
   16381    24668457 :                   imax = 1*3*1
   16382    24668457 :                   kmax = 3
   16383    98673828 :                   DO i = 1, imax
   16384    74005371 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16385    74005371 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16386    98673828 :                      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    98673828 :                   imax = 1*3*3
   16389    98673828 :                   kmax = 1
   16390             :                   i = 0
   16391    98673828 :                   DO i1 = 1, 3
   16392   320689941 :                   DO i2 = 1, 3
   16393   518037597 :                   DO i3 = 1, 1
   16394   222016113 :                      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   444032226 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   16398             :                   END DO
   16399             :                   END DO
   16400             :                   END DO
   16401    39578773 :                   s_offset_d1 = s_offset_d1 + 1
   16402             :                END DO
   16403    25288569 :                s_offset_c1 = s_offset_c1 + 3
   16404             :             END DO
   16405    18941288 :             s_offset_b1 = s_offset_b1 + 3
   16406             :          END DO
   16407    15251016 :          s_offset_a1 = s_offset_a1 + 1
   16408             :       END DO
   16409     6687981 :    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     7295955 :    SUBROUTINE contract_sppp(work, &
   16428             :                             nl_a, nl_b, nl_c, nl_d, &
   16429     7295955 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16430     7295955 :                             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     7295955 :       s_offset_a1 = 0
   16447    16987768 :       DO ia = 1, nl_a
   16448             :          s_offset_b1 = 0
   16449    22875026 :          DO ib = 1, nl_b
   16450             :             s_offset_c1 = 0
   16451    33906642 :             DO ic = 1, nl_c
   16452             :                s_offset_d1 = 0
   16453    56144667 :                DO id = 1, nl_d
   16454    35421238 :                   buffer1 = 0.0_dp
   16455    35421238 :                   imax = 3*3*3
   16456    35421238 :                   kmax = 1
   16457   991794664 :                   DO i = 1, imax
   16458   991794664 :                      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    35421238 :                   buffer2 = 0.0_dp
   16461    35421238 :                   imax = 1*3*3
   16462    35421238 :                   kmax = 3
   16463   354212380 :                   DO i = 1, imax
   16464   318791142 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16465   318791142 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16466   354212380 :                      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    35421238 :                   buffer1 = 0.0_dp
   16469    35421238 :                   imax = 1*3*3
   16470    35421238 :                   kmax = 3
   16471   354212380 :                   DO i = 1, imax
   16472   318791142 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16473   318791142 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16474   354212380 :                      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   141684952 :                   imax = 1*3*3
   16477   141684952 :                   kmax = 3
   16478             :                   i = 0
   16479   141684952 :                   DO i1 = 1, 3
   16480   460476094 :                   DO i2 = 1, 3
   16481   743845998 :                   DO i3 = 1, 1
   16482   318791142 :                      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   318791142 :                         + 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   318791142 :                         + 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   637582284 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   16492             :                   END DO
   16493             :                   END DO
   16494             :                   END DO
   16495    56144667 :                   s_offset_d1 = s_offset_d1 + 3
   16496             :                END DO
   16497    33906642 :                s_offset_c1 = s_offset_c1 + 3
   16498             :             END DO
   16499    22875026 :             s_offset_b1 = s_offset_b1 + 3
   16500             :          END DO
   16501    16987768 :          s_offset_a1 = s_offset_a1 + 1
   16502             :       END DO
   16503     7295955 :    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      827137 :    SUBROUTINE contract_sppd(work, &
   16522             :                             nl_a, nl_b, nl_c, nl_d, &
   16523      827137 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16524      827137 :                             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      827137 :       s_offset_a1 = 0
   16541     2082131 :       DO ia = 1, nl_a
   16542             :          s_offset_b1 = 0
   16543     2884460 :          DO ib = 1, nl_b
   16544             :             s_offset_c1 = 0
   16545     4147603 :             DO ic = 1, nl_c
   16546             :                s_offset_d1 = 0
   16547     5160215 :                DO id = 1, nl_d
   16548     2642078 :                   buffer1 = 0.0_dp
   16549     2642078 :                   imax = 3*3*6
   16550     2642078 :                   kmax = 1
   16551   145314290 :                   DO i = 1, imax
   16552   145314290 :                      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     2642078 :                   buffer2 = 0.0_dp
   16555     2642078 :                   imax = 1*3*6
   16556     2642078 :                   kmax = 3
   16557    50199482 :                   DO i = 1, imax
   16558    47557404 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16559    47557404 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16560    50199482 :                      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     2642078 :                   buffer1 = 0.0_dp
   16563     2642078 :                   imax = 1*3*6
   16564     2642078 :                   kmax = 3
   16565    50199482 :                   DO i = 1, imax
   16566    47557404 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16567    47557404 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16568    50199482 :                      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    10568312 :                   imax = 1*3*3
   16571    10568312 :                   kmax = 6
   16572             :                   i = 0
   16573    10568312 :                   DO i1 = 1, 3
   16574    34347014 :                   DO i2 = 1, 3
   16575    55483638 :                   DO i3 = 1, 1
   16576    23778702 :                      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    23778702 :                         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    23778702 :                         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    23778702 :                         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    23778702 :                         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    23778702 :                         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    23778702 :                         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    23778702 :                         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    47557404 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   16601             :                   END DO
   16602             :                   END DO
   16603             :                   END DO
   16604     5160215 :                   s_offset_d1 = s_offset_d1 + 5
   16605             :                END DO
   16606     4147603 :                s_offset_c1 = s_offset_c1 + 3
   16607             :             END DO
   16608     2884460 :             s_offset_b1 = s_offset_b1 + 3
   16609             :          END DO
   16610     2082131 :          s_offset_a1 = s_offset_a1 + 1
   16611             :       END DO
   16612      827137 :    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     1688653 :    SUBROUTINE contract_spds(work, &
   16933             :                             nl_a, nl_b, nl_c, nl_d, &
   16934     1688653 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   16935     1688653 :                             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     1688653 :       s_offset_a1 = 0
   16952     4036841 :       DO ia = 1, nl_a
   16953             :          s_offset_b1 = 0
   16954     5452666 :          DO ib = 1, nl_b
   16955             :             s_offset_c1 = 0
   16956     6291735 :             DO ic = 1, nl_c
   16957             :                s_offset_d1 = 0
   16958     8428327 :                DO id = 1, nl_d
   16959     5241070 :                   buffer1 = 0.0_dp
   16960     5241070 :                   imax = 3*6*1
   16961     5241070 :                   kmax = 1
   16962    99580330 :                   DO i = 1, imax
   16963    99580330 :                      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     5241070 :                   buffer2 = 0.0_dp
   16966     5241070 :                   imax = 1*6*1
   16967     5241070 :                   kmax = 3
   16968    36687490 :                   DO i = 1, imax
   16969    31446420 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   16970    31446420 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   16971    36687490 :                      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     5241070 :                   buffer1 = 0.0_dp
   16974     5241070 :                   imax = 1*3*1
   16975     5241070 :                   kmax = 6
   16976    20964280 :                   DO i = 1, imax
   16977    15723210 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   16978    15723210 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   16979    15723210 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   16980    15723210 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   16981    15723210 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   16982    15723210 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   16983    15723210 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   16984    20964280 :                      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    31446420 :                   imax = 1*3*5
   16987    31446420 :                   kmax = 1
   16988             :                   i = 0
   16989    31446420 :                   DO i1 = 1, 5
   16990   110062470 :                   DO i2 = 1, 3
   16991   183437450 :                   DO i3 = 1, 1
   16992    78616050 :                      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   157232100 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   16996             :                   END DO
   16997             :                   END DO
   16998             :                   END DO
   16999     8428327 :                   s_offset_d1 = s_offset_d1 + 1
   17000             :                END DO
   17001     6291735 :                s_offset_c1 = s_offset_c1 + 5
   17002             :             END DO
   17003     5452666 :             s_offset_b1 = s_offset_b1 + 3
   17004             :          END DO
   17005     4036841 :          s_offset_a1 = s_offset_a1 + 1
   17006             :       END DO
   17007     1688653 :    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      848921 :    SUBROUTINE contract_spdp(work, &
   17026             :                             nl_a, nl_b, nl_c, nl_d, &
   17027      848921 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   17028      848921 :                             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      848921 :       s_offset_a1 = 0
   17045     2087584 :       DO ia = 1, nl_a
   17046             :          s_offset_b1 = 0
   17047     2850728 :          DO ib = 1, nl_b
   17048             :             s_offset_c1 = 0
   17049     3294671 :             DO ic = 1, nl_c
   17050             :                s_offset_d1 = 0
   17051     4210294 :                DO id = 1, nl_d
   17052     2527688 :                   buffer1 = 0.0_dp
   17053     2527688 :                   imax = 3*6*3
   17054     2527688 :                   kmax = 1
   17055   139022840 :                   DO i = 1, imax
   17056   139022840 :                      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     2527688 :                   buffer2 = 0.0_dp
   17059     2527688 :                   imax = 1*6*3
   17060     2527688 :                   kmax = 3
   17061    48026072 :                   DO i = 1, imax
   17062    45498384 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   17063    45498384 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   17064    48026072 :                      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     2527688 :                   buffer1 = 0.0_dp
   17067     2527688 :                   imax = 1*3*3
   17068     2527688 :                   kmax = 6
   17069    25276880 :                   DO i = 1, imax
   17070    22749192 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   17071    22749192 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   17072    22749192 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   17073    22749192 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   17074    22749192 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   17075    22749192 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   17076    22749192 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   17077    25276880 :                      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    15166128 :                   imax = 1*3*5
   17080    15166128 :                   kmax = 3
   17081             :                   i = 0
   17082    15166128 :                   DO i1 = 1, 5
   17083    53081448 :                   DO i2 = 1, 3
   17084    88469080 :                   DO i3 = 1, 1
   17085    37915320 :                      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    37915320 :                         + 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    37915320 :                         + 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    75830640 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   17095             :                   END DO
   17096             :                   END DO
   17097             :                   END DO
   17098     4210294 :                   s_offset_d1 = s_offset_d1 + 3
   17099             :                END DO
   17100     3294671 :                s_offset_c1 = s_offset_c1 + 5
   17101             :             END DO
   17102     2850728 :             s_offset_b1 = s_offset_b1 + 3
   17103             :          END DO
   17104     2087584 :          s_offset_a1 = s_offset_a1 + 1
   17105             :       END DO
   17106      848921 :    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      353528 :    SUBROUTINE contract_spdd(work, &
   17125             :                             nl_a, nl_b, nl_c, nl_d, &
   17126      353528 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   17127      353528 :                             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      353528 :       s_offset_a1 = 0
   17144      913179 :       DO ia = 1, nl_a
   17145             :          s_offset_b1 = 0
   17146     1321913 :          DO ib = 1, nl_b
   17147             :             s_offset_c1 = 0
   17148     1573898 :             DO ic = 1, nl_c
   17149             :                s_offset_d1 = 0
   17150     1698884 :                DO id = 1, nl_d
   17151      887248 :                   buffer1 = 0.0_dp
   17152      887248 :                   imax = 3*6*6
   17153      887248 :                   kmax = 1
   17154    96710032 :                   DO i = 1, imax
   17155    96710032 :                      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      887248 :                   buffer2 = 0.0_dp
   17158      887248 :                   imax = 1*6*6
   17159      887248 :                   kmax = 3
   17160    32828176 :                   DO i = 1, imax
   17161    31940928 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   17162    31940928 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   17163    32828176 :                      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      887248 :                   buffer1 = 0.0_dp
   17166      887248 :                   imax = 1*3*6
   17167      887248 :                   kmax = 6
   17168    16857712 :                   DO i = 1, imax
   17169    15970464 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   17170    15970464 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   17171    15970464 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   17172    15970464 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   17173    15970464 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   17174    15970464 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   17175    15970464 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   17176    16857712 :                      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     5323488 :                   imax = 1*3*5
   17179     5323488 :                   kmax = 6
   17180             :                   i = 0
   17181     5323488 :                   DO i1 = 1, 5
   17182    18632208 :                   DO i2 = 1, 3
   17183    31053680 :                   DO i3 = 1, 1
   17184    13308720 :                      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    13308720 :                         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    13308720 :                         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    13308720 :                         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    13308720 :                         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    13308720 :                         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    13308720 :                         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    13308720 :                         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    26617440 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   17209             :                   END DO
   17210             :                   END DO
   17211             :                   END DO
   17212     1698884 :                   s_offset_d1 = s_offset_d1 + 5
   17213             :                END DO
   17214     1573898 :                s_offset_c1 = s_offset_c1 + 5
   17215             :             END DO
   17216     1321913 :             s_offset_b1 = s_offset_b1 + 3
   17217             :          END DO
   17218      913179 :          s_offset_a1 = s_offset_a1 + 1
   17219             :       END DO
   17220      353528 :    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     1436309 :    SUBROUTINE contract_sdss(work, &
   18927             :                             nl_a, nl_b, nl_c, nl_d, &
   18928     1436309 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   18929     1436309 :                             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     1436309 :       s_offset_a1 = 0
   18946     3634898 :       DO ia = 1, nl_a
   18947             :          s_offset_b1 = 0
   18948     4736909 :          DO ib = 1, nl_b
   18949             :             s_offset_c1 = 0
   18950     6632679 :             DO ic = 1, nl_c
   18951             :                s_offset_d1 = 0
   18952    11194204 :                DO id = 1, nl_d
   18953     7099845 :                   buffer1 = 0.0_dp
   18954     7099845 :                   imax = 6*1*1
   18955     7099845 :                   kmax = 1
   18956    49698915 :                   DO i = 1, imax
   18957    49698915 :                      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     7099845 :                   buffer2 = 0.0_dp
   18960     7099845 :                   imax = 1*1*1
   18961     7099845 :                   kmax = 6
   18962    14199690 :                   DO i = 1, imax
   18963     7099845 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   18964     7099845 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   18965     7099845 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   18966     7099845 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   18967     7099845 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   18968     7099845 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   18969     7099845 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   18970    14199690 :                      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     7099845 :                   buffer1 = 0.0_dp
   18973     7099845 :                   imax = 1*5*1
   18974     7099845 :                   kmax = 1
   18975    42599070 :                   DO i = 1, imax
   18976    42599070 :                      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    14199690 :                   imax = 1*5*1
   18979    14199690 :                   kmax = 1
   18980             :                   i = 0
   18981    14199690 :                   DO i1 = 1, 1
   18982    49698915 :                   DO i2 = 1, 5
   18983    78098295 :                   DO i3 = 1, 1
   18984    35499225 :                      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    70998450 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   18988             :                   END DO
   18989             :                   END DO
   18990             :                   END DO
   18991    11194204 :                   s_offset_d1 = s_offset_d1 + 1
   18992             :                END DO
   18993     6632679 :                s_offset_c1 = s_offset_c1 + 1
   18994             :             END DO
   18995     4736909 :             s_offset_b1 = s_offset_b1 + 5
   18996             :          END DO
   18997     3634898 :          s_offset_a1 = s_offset_a1 + 1
   18998             :       END DO
   18999     1436309 :    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     1310745 :    SUBROUTINE contract_sdsp(work, &
   19018             :                             nl_a, nl_b, nl_c, nl_d, &
   19019     1310745 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19020     1310745 :                             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     1310745 :       s_offset_a1 = 0
   19037     3412016 :       DO ia = 1, nl_a
   19038             :          s_offset_b1 = 0
   19039     4479253 :          DO ib = 1, nl_b
   19040             :             s_offset_c1 = 0
   19041     6371596 :             DO ic = 1, nl_c
   19042             :                s_offset_d1 = 0
   19043     9735031 :                DO id = 1, nl_d
   19044     5741417 :                   buffer1 = 0.0_dp
   19045     5741417 :                   imax = 6*1*3
   19046     5741417 :                   kmax = 1
   19047   109086923 :                   DO i = 1, imax
   19048   109086923 :                      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     5741417 :                   buffer2 = 0.0_dp
   19051     5741417 :                   imax = 1*1*3
   19052     5741417 :                   kmax = 6
   19053    22965668 :                   DO i = 1, imax
   19054    17224251 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19055    17224251 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19056    17224251 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19057    17224251 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19058    17224251 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19059    17224251 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19060    17224251 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19061    22965668 :                      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     5741417 :                   buffer1 = 0.0_dp
   19064     5741417 :                   imax = 1*5*3
   19065     5741417 :                   kmax = 1
   19066    91862672 :                   DO i = 1, imax
   19067    91862672 :                      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    11482834 :                   imax = 1*5*1
   19070    11482834 :                   kmax = 3
   19071             :                   i = 0
   19072    11482834 :                   DO i1 = 1, 1
   19073    40189919 :                   DO i2 = 1, 5
   19074    63155587 :                   DO i3 = 1, 1
   19075    28707085 :                      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    28707085 :                         + 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    28707085 :                         + 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    57414170 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   19085             :                   END DO
   19086             :                   END DO
   19087             :                   END DO
   19088     9735031 :                   s_offset_d1 = s_offset_d1 + 3
   19089             :                END DO
   19090     6371596 :                s_offset_c1 = s_offset_c1 + 1
   19091             :             END DO
   19092     4479253 :             s_offset_b1 = s_offset_b1 + 5
   19093             :          END DO
   19094     3412016 :          s_offset_a1 = s_offset_a1 + 1
   19095             :       END DO
   19096     1310745 :    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      423104 :    SUBROUTINE contract_sdsd(work, &
   19115             :                             nl_a, nl_b, nl_c, nl_d, &
   19116      423104 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19117      423104 :                             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      423104 :       s_offset_a1 = 0
   19134     1138957 :       DO ia = 1, nl_a
   19135             :          s_offset_b1 = 0
   19136     1603641 :          DO ib = 1, nl_b
   19137             :             s_offset_c1 = 0
   19138     2382902 :             DO ic = 1, nl_c
   19139             :                s_offset_d1 = 0
   19140     3295593 :                DO id = 1, nl_d
   19141     1800479 :                   buffer1 = 0.0_dp
   19142     1800479 :                   imax = 6*1*6
   19143     1800479 :                   kmax = 1
   19144    66617723 :                   DO i = 1, imax
   19145    66617723 :                      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     1800479 :                   buffer2 = 0.0_dp
   19148     1800479 :                   imax = 1*1*6
   19149     1800479 :                   kmax = 6
   19150    12603353 :                   DO i = 1, imax
   19151    10802874 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19152    10802874 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19153    10802874 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19154    10802874 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19155    10802874 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19156    10802874 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19157    10802874 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19158    12603353 :                      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     1800479 :                   buffer1 = 0.0_dp
   19161     1800479 :                   imax = 1*5*6
   19162     1800479 :                   kmax = 1
   19163    55814849 :                   DO i = 1, imax
   19164    55814849 :                      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     3600958 :                   imax = 1*5*1
   19167     3600958 :                   kmax = 6
   19168             :                   i = 0
   19169     3600958 :                   DO i1 = 1, 1
   19170    12603353 :                   DO i2 = 1, 5
   19171    19805269 :                   DO i3 = 1, 1
   19172     9002395 :                      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     9002395 :                         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     9002395 :                         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     9002395 :                         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     9002395 :                         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     9002395 :                         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     9002395 :                         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     9002395 :                         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    18004790 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   19197             :                   END DO
   19198             :                   END DO
   19199             :                   END DO
   19200     3295593 :                   s_offset_d1 = s_offset_d1 + 5
   19201             :                END DO
   19202     2382902 :                s_offset_c1 = s_offset_c1 + 1
   19203             :             END DO
   19204     1603641 :             s_offset_b1 = s_offset_b1 + 5
   19205             :          END DO
   19206     1138957 :          s_offset_a1 = s_offset_a1 + 1
   19207             :       END DO
   19208      423104 :    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     1152072 :    SUBROUTINE contract_sdps(work, &
   19535             :                             nl_a, nl_b, nl_c, nl_d, &
   19536     1152072 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19537     1152072 :                             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     1152072 :       s_offset_a1 = 0
   19554     2957925 :       DO ia = 1, nl_a
   19555             :          s_offset_b1 = 0
   19556     3810463 :          DO ib = 1, nl_b
   19557             :             s_offset_c1 = 0
   19558     4924644 :             DO ic = 1, nl_c
   19559             :                s_offset_d1 = 0
   19560     8078345 :                DO id = 1, nl_d
   19561     5158311 :                   buffer1 = 0.0_dp
   19562     5158311 :                   imax = 6*3*1
   19563     5158311 :                   kmax = 1
   19564    98007909 :                   DO i = 1, imax
   19565    98007909 :                      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     5158311 :                   buffer2 = 0.0_dp
   19568     5158311 :                   imax = 1*3*1
   19569     5158311 :                   kmax = 6
   19570    20633244 :                   DO i = 1, imax
   19571    15474933 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19572    15474933 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19573    15474933 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19574    15474933 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19575    15474933 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19576    15474933 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19577    15474933 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19578    20633244 :                      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     5158311 :                   buffer1 = 0.0_dp
   19581     5158311 :                   imax = 1*5*1
   19582     5158311 :                   kmax = 3
   19583    30949866 :                   DO i = 1, imax
   19584    25791555 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19585    25791555 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19586    30949866 :                      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    20633244 :                   imax = 1*5*3
   19589    20633244 :                   kmax = 1
   19590             :                   i = 0
   19591    20633244 :                   DO i1 = 1, 3
   19592    98007909 :                   DO i2 = 1, 5
   19593   170224263 :                   DO i3 = 1, 1
   19594    77374665 :                      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   154749330 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   19598             :                   END DO
   19599             :                   END DO
   19600             :                   END DO
   19601     8078345 :                   s_offset_d1 = s_offset_d1 + 1
   19602             :                END DO
   19603     4924644 :                s_offset_c1 = s_offset_c1 + 3
   19604             :             END DO
   19605     3810463 :             s_offset_b1 = s_offset_b1 + 5
   19606             :          END DO
   19607     2957925 :          s_offset_a1 = s_offset_a1 + 1
   19608             :       END DO
   19609     1152072 :    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      677648 :    SUBROUTINE contract_sdpp(work, &
   19628             :                             nl_a, nl_b, nl_c, nl_d, &
   19629      677648 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19630      677648 :                             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      677648 :       s_offset_a1 = 0
   19647     1790980 :       DO ia = 1, nl_a
   19648             :          s_offset_b1 = 0
   19649     2401717 :          DO ib = 1, nl_b
   19650             :             s_offset_c1 = 0
   19651     3092934 :             DO ic = 1, nl_c
   19652             :                s_offset_d1 = 0
   19653     4454654 :                DO id = 1, nl_d
   19654     2650105 :                   buffer1 = 0.0_dp
   19655     2650105 :                   imax = 6*3*3
   19656     2650105 :                   kmax = 1
   19657   145755775 :                   DO i = 1, imax
   19658   145755775 :                      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     2650105 :                   buffer2 = 0.0_dp
   19661     2650105 :                   imax = 1*3*3
   19662     2650105 :                   kmax = 6
   19663    26501050 :                   DO i = 1, imax
   19664    23850945 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19665    23850945 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19666    23850945 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19667    23850945 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19668    23850945 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19669    23850945 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19670    23850945 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19671    26501050 :                      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     2650105 :                   buffer1 = 0.0_dp
   19674     2650105 :                   imax = 1*5*3
   19675     2650105 :                   kmax = 3
   19676    42401680 :                   DO i = 1, imax
   19677    39751575 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19678    39751575 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19679    42401680 :                      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    10600420 :                   imax = 1*5*3
   19682    10600420 :                   kmax = 3
   19683             :                   i = 0
   19684    10600420 :                   DO i1 = 1, 3
   19685    50351995 :                   DO i2 = 1, 5
   19686    87453465 :                   DO i3 = 1, 1
   19687    39751575 :                      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    39751575 :                         + 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    39751575 :                         + 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    79503150 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   19697             :                   END DO
   19698             :                   END DO
   19699             :                   END DO
   19700     4454654 :                   s_offset_d1 = s_offset_d1 + 3
   19701             :                END DO
   19702     3092934 :                s_offset_c1 = s_offset_c1 + 3
   19703             :             END DO
   19704     2401717 :             s_offset_b1 = s_offset_b1 + 5
   19705             :          END DO
   19706     1790980 :          s_offset_a1 = s_offset_a1 + 1
   19707             :       END DO
   19708      677648 :    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      361597 :    SUBROUTINE contract_sdpd(work, &
   19727             :                             nl_a, nl_b, nl_c, nl_d, &
   19728      361597 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   19729      361597 :                             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      361597 :       s_offset_a1 = 0
   19746      971790 :       DO ia = 1, nl_a
   19747             :          s_offset_b1 = 0
   19748     1340597 :          DO ib = 1, nl_b
   19749             :             s_offset_c1 = 0
   19750     1756553 :             DO ic = 1, nl_c
   19751             :                s_offset_d1 = 0
   19752     2195881 :                DO id = 1, nl_d
   19753     1169732 :                   buffer1 = 0.0_dp
   19754     1169732 :                   imax = 6*3*6
   19755     1169732 :                   kmax = 1
   19756   127500788 :                   DO i = 1, imax
   19757   127500788 :                      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     1169732 :                   buffer2 = 0.0_dp
   19760     1169732 :                   imax = 1*3*6
   19761     1169732 :                   kmax = 6
   19762    22224908 :                   DO i = 1, imax
   19763    21055176 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   19764    21055176 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   19765    21055176 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   19766    21055176 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   19767    21055176 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   19768    21055176 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   19769    21055176 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   19770    22224908 :                      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     1169732 :                   buffer1 = 0.0_dp
   19773     1169732 :                   imax = 1*5*6
   19774     1169732 :                   kmax = 3
   19775    36261692 :                   DO i = 1, imax
   19776    35091960 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   19777    35091960 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   19778    36261692 :                      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     4678928 :                   imax = 1*5*3
   19781     4678928 :                   kmax = 6
   19782             :                   i = 0
   19783     4678928 :                   DO i1 = 1, 3
   19784    22224908 :                   DO i2 = 1, 5
   19785    38601156 :                   DO i3 = 1, 1
   19786    17545980 :                      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    17545980 :                         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    17545980 :                         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    17545980 :                         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    17545980 :                         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    17545980 :                         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    17545980 :                         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    17545980 :                         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    35091960 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   19811             :                   END DO
   19812             :                   END DO
   19813             :                   END DO
   19814     2195881 :                   s_offset_d1 = s_offset_d1 + 5
   19815             :                END DO
   19816     1756553 :                s_offset_c1 = s_offset_c1 + 3
   19817             :             END DO
   19818     1340597 :             s_offset_b1 = s_offset_b1 + 5
   19819             :          END DO
   19820      971790 :          s_offset_a1 = s_offset_a1 + 1
   19821             :       END DO
   19822      361597 :    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      256540 :    SUBROUTINE contract_sdds(work, &
   20153             :                             nl_a, nl_b, nl_c, nl_d, &
   20154      256540 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20155      256540 :                             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      256540 :       s_offset_a1 = 0
   20172      669366 :       DO ia = 1, nl_a
   20173             :          s_offset_b1 = 0
   20174      906933 :          DO ib = 1, nl_b
   20175             :             s_offset_c1 = 0
   20176     1039925 :             DO ic = 1, nl_c
   20177             :                s_offset_d1 = 0
   20178     1486065 :                DO id = 1, nl_d
   20179      940247 :                   buffer1 = 0.0_dp
   20180      940247 :                   imax = 6*6*1
   20181      940247 :                   kmax = 1
   20182    34789139 :                   DO i = 1, imax
   20183    34789139 :                      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      940247 :                   buffer2 = 0.0_dp
   20186      940247 :                   imax = 1*6*1
   20187      940247 :                   kmax = 6
   20188     6581729 :                   DO i = 1, imax
   20189     5641482 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20190     5641482 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20191     5641482 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20192     5641482 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20193     5641482 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20194     5641482 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20195     5641482 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20196     6581729 :                      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      940247 :                   buffer1 = 0.0_dp
   20199      940247 :                   imax = 1*5*1
   20200      940247 :                   kmax = 6
   20201     5641482 :                   DO i = 1, imax
   20202     4701235 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20203     4701235 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20204     4701235 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20205     4701235 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20206     4701235 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20207     4701235 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20208     4701235 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20209     5641482 :                      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     5641482 :                   imax = 1*5*5
   20212     5641482 :                   kmax = 1
   20213             :                   i = 0
   20214     5641482 :                   DO i1 = 1, 5
   20215    29147657 :                   DO i2 = 1, 5
   20216    51713585 :                   DO i3 = 1, 1
   20217    23506175 :                      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    47012350 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   20221             :                   END DO
   20222             :                   END DO
   20223             :                   END DO
   20224     1486065 :                   s_offset_d1 = s_offset_d1 + 1
   20225             :                END DO
   20226     1039925 :                s_offset_c1 = s_offset_c1 + 5
   20227             :             END DO
   20228      906933 :             s_offset_b1 = s_offset_b1 + 5
   20229             :          END DO
   20230      669366 :          s_offset_a1 = s_offset_a1 + 1
   20231             :       END DO
   20232      256540 :    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      275192 :    SUBROUTINE contract_sddp(work, &
   20251             :                             nl_a, nl_b, nl_c, nl_d, &
   20252      275192 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20253      275192 :                             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      275192 :       s_offset_a1 = 0
   20270      730893 :       DO ia = 1, nl_a
   20271             :          s_offset_b1 = 0
   20272      980019 :          DO ib = 1, nl_b
   20273             :             s_offset_c1 = 0
   20274     1088697 :             DO ic = 1, nl_c
   20275             :                s_offset_d1 = 0
   20276     1345760 :                DO id = 1, nl_d
   20277      781381 :                   buffer1 = 0.0_dp
   20278      781381 :                   imax = 6*6*3
   20279      781381 :                   kmax = 1
   20280    85170529 :                   DO i = 1, imax
   20281    85170529 :                      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      781381 :                   buffer2 = 0.0_dp
   20284      781381 :                   imax = 1*6*3
   20285      781381 :                   kmax = 6
   20286    14846239 :                   DO i = 1, imax
   20287    14064858 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20288    14064858 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20289    14064858 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20290    14064858 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20291    14064858 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20292    14064858 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20293    14064858 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20294    14846239 :                      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      781381 :                   buffer1 = 0.0_dp
   20297      781381 :                   imax = 1*5*3
   20298      781381 :                   kmax = 6
   20299    12502096 :                   DO i = 1, imax
   20300    11720715 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20301    11720715 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20302    11720715 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20303    11720715 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20304    11720715 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20305    11720715 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20306    11720715 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20307    12502096 :                      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     4688286 :                   imax = 1*5*5
   20310     4688286 :                   kmax = 3
   20311             :                   i = 0
   20312     4688286 :                   DO i1 = 1, 5
   20313    24222811 :                   DO i2 = 1, 5
   20314    42975955 :                   DO i3 = 1, 1
   20315    19534525 :                      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    19534525 :                         + 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    19534525 :                         + 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    39069050 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   20325             :                   END DO
   20326             :                   END DO
   20327             :                   END DO
   20328     1345760 :                   s_offset_d1 = s_offset_d1 + 3
   20329             :                END DO
   20330     1088697 :                s_offset_c1 = s_offset_c1 + 5
   20331             :             END DO
   20332      980019 :             s_offset_b1 = s_offset_b1 + 5
   20333             :          END DO
   20334      730893 :          s_offset_a1 = s_offset_a1 + 1
   20335             :       END DO
   20336      275192 :    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      129972 :    SUBROUTINE contract_sddd(work, &
   20355             :                             nl_a, nl_b, nl_c, nl_d, &
   20356      129972 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   20357      129972 :                             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      129972 :       s_offset_a1 = 0
   20374      351836 :       DO ia = 1, nl_a
   20375             :          s_offset_b1 = 0
   20376      505222 :          DO ib = 1, nl_b
   20377             :             s_offset_c1 = 0
   20378      602051 :             DO ic = 1, nl_c
   20379             :                s_offset_d1 = 0
   20380      717460 :                DO id = 1, nl_d
   20381      398767 :                   buffer1 = 0.0_dp
   20382      398767 :                   imax = 6*6*6
   20383      398767 :                   kmax = 1
   20384    86532439 :                   DO i = 1, imax
   20385    86532439 :                      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      398767 :                   buffer2 = 0.0_dp
   20388      398767 :                   imax = 1*6*6
   20389      398767 :                   kmax = 6
   20390    14754379 :                   DO i = 1, imax
   20391    14355612 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   20392    14355612 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   20393    14355612 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   20394    14355612 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   20395    14355612 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   20396    14355612 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   20397    14355612 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   20398    14754379 :                      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      398767 :                   buffer1 = 0.0_dp
   20401      398767 :                   imax = 1*5*6
   20402      398767 :                   kmax = 6
   20403    12361777 :                   DO i = 1, imax
   20404    11963010 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   20405    11963010 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   20406    11963010 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   20407    11963010 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   20408    11963010 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   20409    11963010 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   20410    11963010 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   20411    12361777 :                      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     2392602 :                   imax = 1*5*5
   20414     2392602 :                   kmax = 6
   20415             :                   i = 0
   20416     2392602 :                   DO i1 = 1, 5
   20417    12361777 :                   DO i2 = 1, 5
   20418    21932185 :                   DO i3 = 1, 1
   20419     9969175 :                      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     9969175 :                         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     9969175 :                         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     9969175 :                         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     9969175 :                         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     9969175 :                         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     9969175 :                         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     9969175 :                         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    19938350 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   20444             :                   END DO
   20445             :                   END DO
   20446             :                   END DO
   20447      717460 :                   s_offset_d1 = s_offset_d1 + 5
   20448             :                END DO
   20449      602051 :                s_offset_c1 = s_offset_c1 + 5
   20450             :             END DO
   20451      505222 :             s_offset_b1 = s_offset_b1 + 5
   20452             :          END DO
   20453      351836 :          s_offset_a1 = s_offset_a1 + 1
   20454             :       END DO
   20455      129972 :    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    39110620 :    SUBROUTINE contract_psss(work, &
   29512             :                             nl_a, nl_b, nl_c, nl_d, &
   29513    39110620 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29514    39110620 :                             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    39110620 :       s_offset_a1 = 0
   29531    83744361 :       DO ia = 1, nl_a
   29532             :          s_offset_b1 = 0
   29533   101522207 :          DO ib = 1, nl_b
   29534             :             s_offset_c1 = 0
   29535   138103874 :             DO ic = 1, nl_c
   29536             :                s_offset_d1 = 0
   29537   210860917 :                DO id = 1, nl_d
   29538   129645509 :                   buffer1 = 0.0_dp
   29539   129645509 :                   imax = 1*1*1
   29540   129645509 :                   kmax = 3
   29541   259291018 :                   DO i = 1, imax
   29542   129645509 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29543   129645509 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29544   259291018 :                      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   129645509 :                   buffer2 = 0.0_dp
   29547   129645509 :                   imax = 3*1*1
   29548   129645509 :                   kmax = 1
   29549   518582036 :                   DO i = 1, imax
   29550   518582036 :                      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   129645509 :                   buffer1 = 0.0_dp
   29553   129645509 :                   imax = 3*1*1
   29554   129645509 :                   kmax = 1
   29555   518582036 :                   DO i = 1, imax
   29556   518582036 :                      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   259291018 :                   imax = 3*1*1
   29559   259291018 :                   kmax = 1
   29560             :                   i = 0
   29561   259291018 :                   DO i1 = 1, 1
   29562   388936527 :                   DO i2 = 1, 1
   29563   648227545 :                   DO i3 = 1, 3
   29564   388936527 :                      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   518582036 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   29568             :                   END DO
   29569             :                   END DO
   29570             :                   END DO
   29571   210860917 :                   s_offset_d1 = s_offset_d1 + 1
   29572             :                END DO
   29573   138103874 :                s_offset_c1 = s_offset_c1 + 1
   29574             :             END DO
   29575   101522207 :             s_offset_b1 = s_offset_b1 + 1
   29576             :          END DO
   29577    83744361 :          s_offset_a1 = s_offset_a1 + 3
   29578             :       END DO
   29579    39110620 :    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    13264380 :    SUBROUTINE contract_pssp(work, &
   29598             :                             nl_a, nl_b, nl_c, nl_d, &
   29599    13264380 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29600    13264380 :                             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    13264380 :       s_offset_a1 = 0
   29617    29049125 :       DO ia = 1, nl_a
   29618             :          s_offset_b1 = 0
   29619    37388095 :          DO ib = 1, nl_b
   29620             :             s_offset_c1 = 0
   29621    54601499 :             DO ic = 1, nl_c
   29622             :                s_offset_d1 = 0
   29623    85006538 :                DO id = 1, nl_d
   29624    52008389 :                   buffer1 = 0.0_dp
   29625    52008389 :                   imax = 1*1*3
   29626    52008389 :                   kmax = 3
   29627   208033556 :                   DO i = 1, imax
   29628   156025167 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29629   156025167 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29630   208033556 :                      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    52008389 :                   buffer2 = 0.0_dp
   29633    52008389 :                   imax = 3*1*3
   29634    52008389 :                   kmax = 1
   29635   520083890 :                   DO i = 1, imax
   29636   520083890 :                      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    52008389 :                   buffer1 = 0.0_dp
   29639    52008389 :                   imax = 3*1*3
   29640    52008389 :                   kmax = 1
   29641   520083890 :                   DO i = 1, imax
   29642   520083890 :                      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   104016778 :                   imax = 3*1*1
   29645   104016778 :                   kmax = 3
   29646             :                   i = 0
   29647   104016778 :                   DO i1 = 1, 1
   29648   156025167 :                   DO i2 = 1, 1
   29649   260041945 :                   DO i3 = 1, 3
   29650   156025167 :                      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   156025167 :                         + 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   156025167 :                         + 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   208033556 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   29660             :                   END DO
   29661             :                   END DO
   29662             :                   END DO
   29663    85006538 :                   s_offset_d1 = s_offset_d1 + 3
   29664             :                END DO
   29665    54601499 :                s_offset_c1 = s_offset_c1 + 1
   29666             :             END DO
   29667    37388095 :             s_offset_b1 = s_offset_b1 + 1
   29668             :          END DO
   29669    29049125 :          s_offset_a1 = s_offset_a1 + 3
   29670             :       END DO
   29671    13264380 :    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     2013014 :    SUBROUTINE contract_pssd(work, &
   29690             :                             nl_a, nl_b, nl_c, nl_d, &
   29691     2013014 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   29692     2013014 :                             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     2013014 :       s_offset_a1 = 0
   29709     4808354 :       DO ia = 1, nl_a
   29710             :          s_offset_b1 = 0
   29711     7469484 :          DO ib = 1, nl_b
   29712             :             s_offset_c1 = 0
   29713    12921207 :             DO ic = 1, nl_c
   29714             :                s_offset_d1 = 0
   29715    16866152 :                DO id = 1, nl_d
   29716     8619089 :                   buffer1 = 0.0_dp
   29717     8619089 :                   imax = 1*1*6
   29718     8619089 :                   kmax = 3
   29719    60333623 :                   DO i = 1, imax
   29720    51714534 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   29721    51714534 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   29722    60333623 :                      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     8619089 :                   buffer2 = 0.0_dp
   29725     8619089 :                   imax = 3*1*6
   29726     8619089 :                   kmax = 1
   29727   163762691 :                   DO i = 1, imax
   29728   163762691 :                      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     8619089 :                   buffer1 = 0.0_dp
   29731     8619089 :                   imax = 3*1*6
   29732     8619089 :                   kmax = 1
   29733   163762691 :                   DO i = 1, imax
   29734   163762691 :                      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    17238178 :                   imax = 3*1*1
   29737    17238178 :                   kmax = 6
   29738             :                   i = 0
   29739    17238178 :                   DO i1 = 1, 1
   29740    25857267 :                   DO i2 = 1, 1
   29741    43095445 :                   DO i3 = 1, 3
   29742    25857267 :                      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    25857267 :                         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    25857267 :                         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    25857267 :                         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    25857267 :                         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    25857267 :                         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    25857267 :                         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    25857267 :                         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    34476356 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   29767             :                   END DO
   29768             :                   END DO
   29769             :                   END DO
   29770    16866152 :                   s_offset_d1 = s_offset_d1 + 5
   29771             :                END DO
   29772    12921207 :                s_offset_c1 = s_offset_c1 + 1
   29773             :             END DO
   29774     7469484 :             s_offset_b1 = s_offset_b1 + 1
   29775             :          END DO
   29776     4808354 :          s_offset_a1 = s_offset_a1 + 3
   29777             :       END DO
   29778     2013014 :    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    24997541 :    SUBROUTINE contract_psps(work, &
   30095             :                             nl_a, nl_b, nl_c, nl_d, &
   30096    24997541 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30097    24997541 :                             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    24997541 :       s_offset_a1 = 0
   30114    54168917 :       DO ia = 1, nl_a
   30115             :          s_offset_b1 = 0
   30116    67403277 :          DO ib = 1, nl_b
   30117             :             s_offset_c1 = 0
   30118    93399505 :             DO ic = 1, nl_c
   30119             :                s_offset_d1 = 0
   30120   145210681 :                DO id = 1, nl_d
   30121    90043077 :                   buffer1 = 0.0_dp
   30122    90043077 :                   imax = 1*3*1
   30123    90043077 :                   kmax = 3
   30124   360172308 :                   DO i = 1, imax
   30125   270129231 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30126   270129231 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30127   360172308 :                      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    90043077 :                   buffer2 = 0.0_dp
   30130    90043077 :                   imax = 3*3*1
   30131    90043077 :                   kmax = 1
   30132   900430770 :                   DO i = 1, imax
   30133   900430770 :                      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    90043077 :                   buffer1 = 0.0_dp
   30136    90043077 :                   imax = 3*1*1
   30137    90043077 :                   kmax = 3
   30138   360172308 :                   DO i = 1, imax
   30139   270129231 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30140   270129231 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30141   360172308 :                      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   360172308 :                   imax = 3*1*3
   30144   360172308 :                   kmax = 1
   30145             :                   i = 0
   30146   360172308 :                   DO i1 = 1, 3
   30147   630301539 :                   DO i2 = 1, 1
   30148  1350646155 :                   DO i3 = 1, 3
   30149   810387693 :                      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  1080516924 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   30153             :                   END DO
   30154             :                   END DO
   30155             :                   END DO
   30156   145210681 :                   s_offset_d1 = s_offset_d1 + 1
   30157             :                END DO
   30158    93399505 :                s_offset_c1 = s_offset_c1 + 3
   30159             :             END DO
   30160    67403277 :             s_offset_b1 = s_offset_b1 + 1
   30161             :          END DO
   30162    54168917 :          s_offset_a1 = s_offset_a1 + 3
   30163             :       END DO
   30164    24997541 :    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    14011354 :    SUBROUTINE contract_pspp(work, &
   30183             :                             nl_a, nl_b, nl_c, nl_d, &
   30184    14011354 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30185    14011354 :                             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    14011354 :       s_offset_a1 = 0
   30202    31326175 :       DO ia = 1, nl_a
   30203             :          s_offset_b1 = 0
   30204    41737789 :          DO ib = 1, nl_b
   30205             :             s_offset_c1 = 0
   30206    62192274 :             DO ic = 1, nl_c
   30207             :                s_offset_d1 = 0
   30208   101093966 :                DO id = 1, nl_d
   30209    63324660 :                   buffer1 = 0.0_dp
   30210    63324660 :                   imax = 1*3*3
   30211    63324660 :                   kmax = 3
   30212   633246600 :                   DO i = 1, imax
   30213   569921940 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30214   569921940 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30215   633246600 :                      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    63324660 :                   buffer2 = 0.0_dp
   30218    63324660 :                   imax = 3*3*3
   30219    63324660 :                   kmax = 1
   30220  1773090480 :                   DO i = 1, imax
   30221  1773090480 :                      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    63324660 :                   buffer1 = 0.0_dp
   30224    63324660 :                   imax = 3*1*3
   30225    63324660 :                   kmax = 3
   30226   633246600 :                   DO i = 1, imax
   30227   569921940 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30228   569921940 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30229   633246600 :                      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   253298640 :                   imax = 3*1*3
   30232   253298640 :                   kmax = 3
   30233             :                   i = 0
   30234   253298640 :                   DO i1 = 1, 3
   30235   443272620 :                   DO i2 = 1, 1
   30236   949869900 :                   DO i3 = 1, 3
   30237   569921940 :                      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   569921940 :                         + 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   569921940 :                         + 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   759895920 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   30247             :                   END DO
   30248             :                   END DO
   30249             :                   END DO
   30250   101093966 :                   s_offset_d1 = s_offset_d1 + 3
   30251             :                END DO
   30252    62192274 :                s_offset_c1 = s_offset_c1 + 3
   30253             :             END DO
   30254    41737789 :             s_offset_b1 = s_offset_b1 + 1
   30255             :          END DO
   30256    31326175 :          s_offset_a1 = s_offset_a1 + 3
   30257             :       END DO
   30258    14011354 :    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     1394983 :    SUBROUTINE contract_pspd(work, &
   30277             :                             nl_a, nl_b, nl_c, nl_d, &
   30278     1394983 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30279     1394983 :                             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     1394983 :       s_offset_a1 = 0
   30296     3360250 :       DO ia = 1, nl_a
   30297             :          s_offset_b1 = 0
   30298     5296954 :          DO ib = 1, nl_b
   30299             :             s_offset_c1 = 0
   30300     8929490 :             DO ic = 1, nl_c
   30301             :                s_offset_d1 = 0
   30302    11375174 :                DO id = 1, nl_d
   30303     5777371 :                   buffer1 = 0.0_dp
   30304     5777371 :                   imax = 1*3*6
   30305     5777371 :                   kmax = 3
   30306   109770049 :                   DO i = 1, imax
   30307   103992678 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30308   103992678 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30309   109770049 :                      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     5777371 :                   buffer2 = 0.0_dp
   30312     5777371 :                   imax = 3*3*6
   30313     5777371 :                   kmax = 1
   30314   317755405 :                   DO i = 1, imax
   30315   317755405 :                      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     5777371 :                   buffer1 = 0.0_dp
   30318     5777371 :                   imax = 3*1*6
   30319     5777371 :                   kmax = 3
   30320   109770049 :                   DO i = 1, imax
   30321   103992678 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30322   103992678 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30323   109770049 :                      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    23109484 :                   imax = 3*1*3
   30326    23109484 :                   kmax = 6
   30327             :                   i = 0
   30328    23109484 :                   DO i1 = 1, 3
   30329    40441597 :                   DO i2 = 1, 1
   30330    86660565 :                   DO i3 = 1, 3
   30331    51996339 :                      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    51996339 :                         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    51996339 :                         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    51996339 :                         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    51996339 :                         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    51996339 :                         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    51996339 :                         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    51996339 :                         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    69328452 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   30356             :                   END DO
   30357             :                   END DO
   30358             :                   END DO
   30359    11375174 :                   s_offset_d1 = s_offset_d1 + 5
   30360             :                END DO
   30361     8929490 :                s_offset_c1 = s_offset_c1 + 3
   30362             :             END DO
   30363     5296954 :             s_offset_b1 = s_offset_b1 + 1
   30364             :          END DO
   30365     3360250 :          s_offset_a1 = s_offset_a1 + 3
   30366             :       END DO
   30367     1394983 :    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     2936706 :    SUBROUTINE contract_psds(work, &
   30688             :                             nl_a, nl_b, nl_c, nl_d, &
   30689     2936706 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30690     2936706 :                             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     2936706 :       s_offset_a1 = 0
   30707     7090095 :       DO ia = 1, nl_a
   30708             :          s_offset_b1 = 0
   30709    10981544 :          DO ib = 1, nl_b
   30710             :             s_offset_c1 = 0
   30711    13795363 :             DO ic = 1, nl_c
   30712             :                s_offset_d1 = 0
   30713    19363060 :                DO id = 1, nl_d
   30714    12395852 :                   buffer1 = 0.0_dp
   30715    12395852 :                   imax = 1*6*1
   30716    12395852 :                   kmax = 3
   30717    86770964 :                   DO i = 1, imax
   30718    74375112 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30719    74375112 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30720    86770964 :                      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    12395852 :                   buffer2 = 0.0_dp
   30723    12395852 :                   imax = 3*6*1
   30724    12395852 :                   kmax = 1
   30725   235521188 :                   DO i = 1, imax
   30726   235521188 :                      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    12395852 :                   buffer1 = 0.0_dp
   30729    12395852 :                   imax = 3*1*1
   30730    12395852 :                   kmax = 6
   30731    49583408 :                   DO i = 1, imax
   30732    37187556 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30733    37187556 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30734    37187556 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30735    37187556 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30736    37187556 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30737    37187556 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30738    37187556 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30739    49583408 :                      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    74375112 :                   imax = 3*1*5
   30742    74375112 :                   kmax = 1
   30743             :                   i = 0
   30744    74375112 :                   DO i1 = 1, 5
   30745   136354372 :                   DO i2 = 1, 1
   30746   309896300 :                   DO i3 = 1, 3
   30747   185937780 :                      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   247917040 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   30751             :                   END DO
   30752             :                   END DO
   30753             :                   END DO
   30754    19363060 :                   s_offset_d1 = s_offset_d1 + 1
   30755             :                END DO
   30756    13795363 :                s_offset_c1 = s_offset_c1 + 5
   30757             :             END DO
   30758    10981544 :             s_offset_b1 = s_offset_b1 + 1
   30759             :          END DO
   30760     7090095 :          s_offset_a1 = s_offset_a1 + 3
   30761             :       END DO
   30762     2936706 :    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     1457602 :    SUBROUTINE contract_psdp(work, &
   30781             :                             nl_a, nl_b, nl_c, nl_d, &
   30782     1457602 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30783     1457602 :                             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     1457602 :       s_offset_a1 = 0
   30800     3498736 :       DO ia = 1, nl_a
   30801             :          s_offset_b1 = 0
   30802     5441376 :          DO ib = 1, nl_b
   30803             :             s_offset_c1 = 0
   30804     6912241 :             DO ic = 1, nl_c
   30805             :                s_offset_d1 = 0
   30806     9230541 :                DO id = 1, nl_d
   30807     5718542 :                   buffer1 = 0.0_dp
   30808     5718542 :                   imax = 1*6*3
   30809     5718542 :                   kmax = 3
   30810   108652298 :                   DO i = 1, imax
   30811   102933756 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30812   102933756 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30813   108652298 :                      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     5718542 :                   buffer2 = 0.0_dp
   30816     5718542 :                   imax = 3*6*3
   30817     5718542 :                   kmax = 1
   30818   314519810 :                   DO i = 1, imax
   30819   314519810 :                      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     5718542 :                   buffer1 = 0.0_dp
   30822     5718542 :                   imax = 3*1*3
   30823     5718542 :                   kmax = 6
   30824    57185420 :                   DO i = 1, imax
   30825    51466878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30826    51466878 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30827    51466878 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30828    51466878 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30829    51466878 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30830    51466878 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30831    51466878 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30832    57185420 :                      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    34311252 :                   imax = 3*1*5
   30835    34311252 :                   kmax = 3
   30836             :                   i = 0
   30837    34311252 :                   DO i1 = 1, 5
   30838    62903962 :                   DO i2 = 1, 1
   30839   142963550 :                   DO i3 = 1, 3
   30840    85778130 :                      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    85778130 :                         + 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    85778130 :                         + 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   114370840 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   30850             :                   END DO
   30851             :                   END DO
   30852             :                   END DO
   30853     9230541 :                   s_offset_d1 = s_offset_d1 + 3
   30854             :                END DO
   30855     6912241 :                s_offset_c1 = s_offset_c1 + 5
   30856             :             END DO
   30857     5441376 :             s_offset_b1 = s_offset_b1 + 1
   30858             :          END DO
   30859     3498736 :          s_offset_a1 = s_offset_a1 + 3
   30860             :       END DO
   30861     1457602 :    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      512130 :    SUBROUTINE contract_psdd(work, &
   30880             :                             nl_a, nl_b, nl_c, nl_d, &
   30881      512130 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   30882      512130 :                             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      512130 :       s_offset_a1 = 0
   30899     1230547 :       DO ia = 1, nl_a
   30900             :          s_offset_b1 = 0
   30901     1959681 :          DO ib = 1, nl_b
   30902             :             s_offset_c1 = 0
   30903     2554330 :             DO ic = 1, nl_c
   30904             :                s_offset_d1 = 0
   30905     2733161 :                DO id = 1, nl_d
   30906     1420095 :                   buffer1 = 0.0_dp
   30907     1420095 :                   imax = 1*6*6
   30908     1420095 :                   kmax = 3
   30909    52543515 :                   DO i = 1, imax
   30910    51123420 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   30911    51123420 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   30912    52543515 :                      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     1420095 :                   buffer2 = 0.0_dp
   30915     1420095 :                   imax = 3*6*6
   30916     1420095 :                   kmax = 1
   30917   154790355 :                   DO i = 1, imax
   30918   154790355 :                      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     1420095 :                   buffer1 = 0.0_dp
   30921     1420095 :                   imax = 3*1*6
   30922     1420095 :                   kmax = 6
   30923    26981805 :                   DO i = 1, imax
   30924    25561710 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   30925    25561710 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   30926    25561710 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   30927    25561710 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   30928    25561710 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   30929    25561710 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   30930    25561710 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   30931    26981805 :                      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     8520570 :                   imax = 3*1*5
   30934     8520570 :                   kmax = 6
   30935             :                   i = 0
   30936     8520570 :                   DO i1 = 1, 5
   30937    15621045 :                   DO i2 = 1, 1
   30938    35502375 :                   DO i3 = 1, 3
   30939    21301425 :                      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    21301425 :                         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    21301425 :                         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    21301425 :                         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    21301425 :                         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    21301425 :                         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    21301425 :                         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    21301425 :                         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    28401900 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   30964             :                   END DO
   30965             :                   END DO
   30966             :                   END DO
   30967     2733161 :                   s_offset_d1 = s_offset_d1 + 5
   30968             :                END DO
   30969     2554330 :                s_offset_c1 = s_offset_c1 + 5
   30970             :             END DO
   30971     1959681 :             s_offset_b1 = s_offset_b1 + 1
   30972             :          END DO
   30973     1230547 :          s_offset_a1 = s_offset_a1 + 3
   30974             :       END DO
   30975      512130 :    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     6651082 :    SUBROUTINE contract_ppss(work, &
   32682             :                             nl_a, nl_b, nl_c, nl_d, &
   32683     6651082 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32684     6651082 :                             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     6651082 :       s_offset_a1 = 0
   32701    14511571 :       DO ia = 1, nl_a
   32702             :          s_offset_b1 = 0
   32703    17555184 :          DO ib = 1, nl_b
   32704             :             s_offset_c1 = 0
   32705    24356133 :             DO ic = 1, nl_c
   32706             :                s_offset_d1 = 0
   32707    39048208 :                DO id = 1, nl_d
   32708    24386770 :                   buffer1 = 0.0_dp
   32709    24386770 :                   imax = 3*1*1
   32710    24386770 :                   kmax = 3
   32711    97547080 :                   DO i = 1, imax
   32712    73160310 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32713    73160310 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32714    97547080 :                      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    24386770 :                   buffer2 = 0.0_dp
   32717    24386770 :                   imax = 3*1*1
   32718    24386770 :                   kmax = 3
   32719    97547080 :                   DO i = 1, imax
   32720    73160310 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32721    73160310 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32722    97547080 :                      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    24386770 :                   buffer1 = 0.0_dp
   32725    24386770 :                   imax = 3*3*1
   32726    24386770 :                   kmax = 1
   32727   243867700 :                   DO i = 1, imax
   32728   243867700 :                      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    48773540 :                   imax = 3*3*1
   32731    48773540 :                   kmax = 1
   32732             :                   i = 0
   32733    48773540 :                   DO i1 = 1, 1
   32734   121933850 :                   DO i2 = 1, 3
   32735   317028010 :                   DO i3 = 1, 3
   32736   219480930 :                      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   292641240 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   32740             :                   END DO
   32741             :                   END DO
   32742             :                   END DO
   32743    39048208 :                   s_offset_d1 = s_offset_d1 + 1
   32744             :                END DO
   32745    24356133 :                s_offset_c1 = s_offset_c1 + 1
   32746             :             END DO
   32747    17555184 :             s_offset_b1 = s_offset_b1 + 3
   32748             :          END DO
   32749    14511571 :          s_offset_a1 = s_offset_a1 + 3
   32750             :       END DO
   32751     6651082 :    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     7071174 :    SUBROUTINE contract_ppsp(work, &
   32770             :                             nl_a, nl_b, nl_c, nl_d, &
   32771     7071174 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32772     7071174 :                             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     7071174 :       s_offset_a1 = 0
   32789    16081494 :       DO ia = 1, nl_a
   32790             :          s_offset_b1 = 0
   32791    21518514 :          DO ib = 1, nl_b
   32792             :             s_offset_c1 = 0
   32793    32811444 :             DO ic = 1, nl_c
   32794             :                s_offset_d1 = 0
   32795    54993098 :                DO id = 1, nl_d
   32796    34689848 :                   buffer1 = 0.0_dp
   32797    34689848 :                   imax = 3*1*3
   32798    34689848 :                   kmax = 3
   32799   346898480 :                   DO i = 1, imax
   32800   312208632 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32801   312208632 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32802   346898480 :                      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    34689848 :                   buffer2 = 0.0_dp
   32805    34689848 :                   imax = 3*1*3
   32806    34689848 :                   kmax = 3
   32807   346898480 :                   DO i = 1, imax
   32808   312208632 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32809   312208632 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32810   346898480 :                      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    34689848 :                   buffer1 = 0.0_dp
   32813    34689848 :                   imax = 3*3*3
   32814    34689848 :                   kmax = 1
   32815   971315744 :                   DO i = 1, imax
   32816   971315744 :                      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    69379696 :                   imax = 3*3*1
   32819    69379696 :                   kmax = 3
   32820             :                   i = 0
   32821    69379696 :                   DO i1 = 1, 1
   32822   173449240 :                   DO i2 = 1, 3
   32823   450968024 :                   DO i3 = 1, 3
   32824   312208632 :                      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   312208632 :                         + 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   312208632 :                         + 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   416278176 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   32834             :                   END DO
   32835             :                   END DO
   32836             :                   END DO
   32837    54993098 :                   s_offset_d1 = s_offset_d1 + 3
   32838             :                END DO
   32839    32811444 :                s_offset_c1 = s_offset_c1 + 1
   32840             :             END DO
   32841    21518514 :             s_offset_b1 = s_offset_b1 + 3
   32842             :          END DO
   32843    16081494 :          s_offset_a1 = s_offset_a1 + 3
   32844             :       END DO
   32845     7071174 :    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      805641 :    SUBROUTINE contract_ppsd(work, &
   32864             :                             nl_a, nl_b, nl_c, nl_d, &
   32865      805641 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   32866      805641 :                             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      805641 :       s_offset_a1 = 0
   32883     1862436 :       DO ia = 1, nl_a
   32884             :          s_offset_b1 = 0
   32885     2488529 :          DO ib = 1, nl_b
   32886             :             s_offset_c1 = 0
   32887     3908631 :             DO ic = 1, nl_c
   32888             :                s_offset_d1 = 0
   32889     5105704 :                DO id = 1, nl_d
   32890     2628807 :                   buffer1 = 0.0_dp
   32891     2628807 :                   imax = 3*1*6
   32892     2628807 :                   kmax = 3
   32893    49947333 :                   DO i = 1, imax
   32894    47318526 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   32895    47318526 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   32896    49947333 :                      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     2628807 :                   buffer2 = 0.0_dp
   32899     2628807 :                   imax = 3*1*6
   32900     2628807 :                   kmax = 3
   32901    49947333 :                   DO i = 1, imax
   32902    47318526 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   32903    47318526 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   32904    49947333 :                      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     2628807 :                   buffer1 = 0.0_dp
   32907     2628807 :                   imax = 3*3*6
   32908     2628807 :                   kmax = 1
   32909   144584385 :                   DO i = 1, imax
   32910   144584385 :                      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     5257614 :                   imax = 3*3*1
   32913     5257614 :                   kmax = 6
   32914             :                   i = 0
   32915     5257614 :                   DO i1 = 1, 1
   32916    13144035 :                   DO i2 = 1, 3
   32917    34174491 :                   DO i3 = 1, 3
   32918    23659263 :                      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    23659263 :                         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    23659263 :                         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    23659263 :                         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    23659263 :                         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    23659263 :                         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    23659263 :                         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    23659263 :                         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    31545684 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   32943             :                   END DO
   32944             :                   END DO
   32945             :                   END DO
   32946     5105704 :                   s_offset_d1 = s_offset_d1 + 5
   32947             :                END DO
   32948     3908631 :                s_offset_c1 = s_offset_c1 + 1
   32949             :             END DO
   32950     2488529 :             s_offset_b1 = s_offset_b1 + 3
   32951             :          END DO
   32952     1862436 :          s_offset_a1 = s_offset_a1 + 3
   32953             :       END DO
   32954      805641 :    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     7269089 :    SUBROUTINE contract_ppps(work, &
   33275             :                             nl_a, nl_b, nl_c, nl_d, &
   33276     7269089 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33277     7269089 :                             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     7269089 :       s_offset_a1 = 0
   33294    16521106 :       DO ia = 1, nl_a
   33295             :          s_offset_b1 = 0
   33296    21986829 :          DO ib = 1, nl_b
   33297             :             s_offset_c1 = 0
   33298    32899225 :             DO ic = 1, nl_c
   33299             :                s_offset_d1 = 0
   33300    55493727 :                DO id = 1, nl_d
   33301    35329314 :                   buffer1 = 0.0_dp
   33302    35329314 :                   imax = 3*3*1
   33303    35329314 :                   kmax = 3
   33304   353293140 :                   DO i = 1, imax
   33305   317963826 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33306   317963826 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33307   353293140 :                      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    35329314 :                   buffer2 = 0.0_dp
   33310    35329314 :                   imax = 3*3*1
   33311    35329314 :                   kmax = 3
   33312   353293140 :                   DO i = 1, imax
   33313   317963826 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33314   317963826 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33315   353293140 :                      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    35329314 :                   buffer1 = 0.0_dp
   33318    35329314 :                   imax = 3*3*1
   33319    35329314 :                   kmax = 3
   33320   353293140 :                   DO i = 1, imax
   33321   317963826 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33322   317963826 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33323   353293140 :                      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   141317256 :                   imax = 3*3*3
   33326   141317256 :                   kmax = 1
   33327             :                   i = 0
   33328   141317256 :                   DO i1 = 1, 3
   33329   459281082 :                   DO i2 = 1, 3
   33330  1377843246 :                   DO i3 = 1, 3
   33331   953891478 :                      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  1271855304 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   33335             :                   END DO
   33336             :                   END DO
   33337             :                   END DO
   33338    55493727 :                   s_offset_d1 = s_offset_d1 + 1
   33339             :                END DO
   33340    32899225 :                s_offset_c1 = s_offset_c1 + 3
   33341             :             END DO
   33342    21986829 :             s_offset_b1 = s_offset_b1 + 3
   33343             :          END DO
   33344    16521106 :          s_offset_a1 = s_offset_a1 + 3
   33345             :       END DO
   33346     7269089 :    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     3639132 :    SUBROUTINE contract_pppp(work, &
   33365             :                             nl_a, nl_b, nl_c, nl_d, &
   33366     3639132 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33367     3639132 :                             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     3639132 :       s_offset_a1 = 0
   33384     8339464 :       DO ia = 1, nl_a
   33385             :          s_offset_b1 = 0
   33386    11199695 :          DO ib = 1, nl_b
   33387             :             s_offset_c1 = 0
   33388    16894044 :             DO ic = 1, nl_c
   33389             :                s_offset_d1 = 0
   33390    28371057 :                DO id = 1, nl_d
   33391    17976376 :                   buffer1 = 0.0_dp
   33392    17976376 :                   imax = 3*3*3
   33393    17976376 :                   kmax = 3
   33394   503338528 :                   DO i = 1, imax
   33395   485362152 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33396   485362152 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33397   503338528 :                      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    17976376 :                   buffer2 = 0.0_dp
   33400    17976376 :                   imax = 3*3*3
   33401    17976376 :                   kmax = 3
   33402   503338528 :                   DO i = 1, imax
   33403   485362152 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33404   485362152 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33405   503338528 :                      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    17976376 :                   buffer1 = 0.0_dp
   33408    17976376 :                   imax = 3*3*3
   33409    17976376 :                   kmax = 3
   33410   503338528 :                   DO i = 1, imax
   33411   485362152 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33412   485362152 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33413   503338528 :                      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    71905504 :                   imax = 3*3*3
   33416    71905504 :                   kmax = 3
   33417             :                   i = 0
   33418    71905504 :                   DO i1 = 1, 3
   33419   233692888 :                   DO i2 = 1, 3
   33420   701078664 :                   DO i3 = 1, 3
   33421   485362152 :                      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   485362152 :                         + 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   485362152 :                         + 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   647149536 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   33431             :                   END DO
   33432             :                   END DO
   33433             :                   END DO
   33434    28371057 :                   s_offset_d1 = s_offset_d1 + 3
   33435             :                END DO
   33436    16894044 :                s_offset_c1 = s_offset_c1 + 3
   33437             :             END DO
   33438    11199695 :             s_offset_b1 = s_offset_b1 + 3
   33439             :          END DO
   33440     8339464 :          s_offset_a1 = s_offset_a1 + 3
   33441             :       END DO
   33442     3639132 :    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      898458 :    SUBROUTINE contract_pppd(work, &
   33461             :                             nl_a, nl_b, nl_c, nl_d, &
   33462      898458 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33463      898458 :                             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      898458 :       s_offset_a1 = 0
   33480     2221723 :       DO ia = 1, nl_a
   33481             :          s_offset_b1 = 0
   33482     3393495 :          DO ib = 1, nl_b
   33483             :             s_offset_c1 = 0
   33484     5711524 :             DO ic = 1, nl_c
   33485             :                s_offset_d1 = 0
   33486     7356037 :                DO id = 1, nl_d
   33487     3714743 :                   buffer1 = 0.0_dp
   33488     3714743 :                   imax = 3*3*6
   33489     3714743 :                   kmax = 3
   33490   204310865 :                   DO i = 1, imax
   33491   200596122 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33492   200596122 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33493   204310865 :                      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     3714743 :                   buffer2 = 0.0_dp
   33496     3714743 :                   imax = 3*3*6
   33497     3714743 :                   kmax = 3
   33498   204310865 :                   DO i = 1, imax
   33499   200596122 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33500   200596122 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33501   204310865 :                      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     3714743 :                   buffer1 = 0.0_dp
   33504     3714743 :                   imax = 3*3*6
   33505     3714743 :                   kmax = 3
   33506   204310865 :                   DO i = 1, imax
   33507   200596122 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33508   200596122 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33509   204310865 :                      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    14858972 :                   imax = 3*3*3
   33512    14858972 :                   kmax = 6
   33513             :                   i = 0
   33514    14858972 :                   DO i1 = 1, 3
   33515    48291659 :                   DO i2 = 1, 3
   33516   144874977 :                   DO i3 = 1, 3
   33517   100298061 :                      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   100298061 :                         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   100298061 :                         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   100298061 :                         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   100298061 :                         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   100298061 :                         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   100298061 :                         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   100298061 :                         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   133730748 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   33542             :                   END DO
   33543             :                   END DO
   33544             :                   END DO
   33545     7356037 :                   s_offset_d1 = s_offset_d1 + 5
   33546             :                END DO
   33547     5711524 :                s_offset_c1 = s_offset_c1 + 3
   33548             :             END DO
   33549     3393495 :             s_offset_b1 = s_offset_b1 + 3
   33550             :          END DO
   33551     2221723 :          s_offset_a1 = s_offset_a1 + 3
   33552             :       END DO
   33553      898458 :    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      858853 :    SUBROUTINE contract_ppds(work, &
   33878             :                             nl_a, nl_b, nl_c, nl_d, &
   33879      858853 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33880      858853 :                             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      858853 :       s_offset_a1 = 0
   33897     1972047 :       DO ia = 1, nl_a
   33898             :          s_offset_b1 = 0
   33899     2596025 :          DO ib = 1, nl_b
   33900             :             s_offset_c1 = 0
   33901     3014313 :             DO ic = 1, nl_c
   33902             :                s_offset_d1 = 0
   33903     4105721 :                DO id = 1, nl_d
   33904     2574239 :                   buffer1 = 0.0_dp
   33905     2574239 :                   imax = 3*6*1
   33906     2574239 :                   kmax = 3
   33907    48910541 :                   DO i = 1, imax
   33908    46336302 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   33909    46336302 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   33910    48910541 :                      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     2574239 :                   buffer2 = 0.0_dp
   33913     2574239 :                   imax = 3*6*1
   33914     2574239 :                   kmax = 3
   33915    48910541 :                   DO i = 1, imax
   33916    46336302 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   33917    46336302 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   33918    48910541 :                      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     2574239 :                   buffer1 = 0.0_dp
   33921     2574239 :                   imax = 3*3*1
   33922     2574239 :                   kmax = 6
   33923    25742390 :                   DO i = 1, imax
   33924    23168151 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   33925    23168151 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   33926    23168151 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   33927    23168151 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   33928    23168151 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   33929    23168151 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   33930    23168151 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   33931    25742390 :                      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    15445434 :                   imax = 3*3*5
   33934    15445434 :                   kmax = 1
   33935             :                   i = 0
   33936    15445434 :                   DO i1 = 1, 5
   33937    54059019 :                   DO i2 = 1, 3
   33938   167325535 :                   DO i3 = 1, 3
   33939   115840755 :                      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   154454340 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   33943             :                   END DO
   33944             :                   END DO
   33945             :                   END DO
   33946     4105721 :                   s_offset_d1 = s_offset_d1 + 1
   33947             :                END DO
   33948     3014313 :                s_offset_c1 = s_offset_c1 + 5
   33949             :             END DO
   33950     2596025 :             s_offset_b1 = s_offset_b1 + 3
   33951             :          END DO
   33952     1972047 :          s_offset_a1 = s_offset_a1 + 3
   33953             :       END DO
   33954      858853 :    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      886851 :    SUBROUTINE contract_ppdp(work, &
   33973             :                             nl_a, nl_b, nl_c, nl_d, &
   33974      886851 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   33975      886851 :                             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      886851 :       s_offset_a1 = 0
   33992     2194642 :       DO ia = 1, nl_a
   33993             :          s_offset_b1 = 0
   33994     3362190 :          DO ib = 1, nl_b
   33995             :             s_offset_c1 = 0
   33996     4149293 :             DO ic = 1, nl_c
   33997             :                s_offset_d1 = 0
   33998     5732259 :                DO id = 1, nl_d
   33999     3637365 :                   buffer1 = 0.0_dp
   34000     3637365 :                   imax = 3*6*3
   34001     3637365 :                   kmax = 3
   34002   200055075 :                   DO i = 1, imax
   34003   196417710 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   34004   196417710 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   34005   200055075 :                      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     3637365 :                   buffer2 = 0.0_dp
   34008     3637365 :                   imax = 3*6*3
   34009     3637365 :                   kmax = 3
   34010   200055075 :                   DO i = 1, imax
   34011   196417710 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   34012   196417710 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   34013   200055075 :                      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     3637365 :                   buffer1 = 0.0_dp
   34016     3637365 :                   imax = 3*3*3
   34017     3637365 :                   kmax = 6
   34018   101846220 :                   DO i = 1, imax
   34019    98208855 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   34020    98208855 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   34021    98208855 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   34022    98208855 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   34023    98208855 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   34024    98208855 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   34025    98208855 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   34026   101846220 :                      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    21824190 :                   imax = 3*3*5
   34029    21824190 :                   kmax = 3
   34030             :                   i = 0
   34031    21824190 :                   DO i1 = 1, 5
   34032    76384665 :                   DO i2 = 1, 3
   34033   236428725 :                   DO i3 = 1, 3
   34034   163681425 :                      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   163681425 :                         + 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   163681425 :                         + 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   218241900 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   34044             :                   END DO
   34045             :                   END DO
   34046             :                   END DO
   34047     5732259 :                   s_offset_d1 = s_offset_d1 + 3
   34048             :                END DO
   34049     4149293 :                s_offset_c1 = s_offset_c1 + 5
   34050             :             END DO
   34051     3362190 :             s_offset_b1 = s_offset_b1 + 3
   34052             :          END DO
   34053     2194642 :          s_offset_a1 = s_offset_a1 + 3
   34054             :       END DO
   34055      886851 :    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      228932 :    SUBROUTINE contract_ppdd(work, &
   34074             :                             nl_a, nl_b, nl_c, nl_d, &
   34075      228932 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   34076      228932 :                             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      228932 :       s_offset_a1 = 0
   34093      529450 :       DO ia = 1, nl_a
   34094             :          s_offset_b1 = 0
   34095      705354 :          DO ib = 1, nl_b
   34096             :             s_offset_c1 = 0
   34097      837526 :             DO ic = 1, nl_c
   34098             :                s_offset_d1 = 0
   34099      910638 :                DO id = 1, nl_d
   34100      477948 :                   buffer1 = 0.0_dp
   34101      477948 :                   imax = 3*6*6
   34102      477948 :                   kmax = 3
   34103    52096332 :                   DO i = 1, imax
   34104    51618384 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   34105    51618384 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   34106    52096332 :                      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      477948 :                   buffer2 = 0.0_dp
   34109      477948 :                   imax = 3*6*6
   34110      477948 :                   kmax = 3
   34111    52096332 :                   DO i = 1, imax
   34112    51618384 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   34113    51618384 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   34114    52096332 :                      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      477948 :                   buffer1 = 0.0_dp
   34117      477948 :                   imax = 3*3*6
   34118      477948 :                   kmax = 6
   34119    26287140 :                   DO i = 1, imax
   34120    25809192 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   34121    25809192 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   34122    25809192 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   34123    25809192 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   34124    25809192 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   34125    25809192 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   34126    25809192 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   34127    26287140 :                      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     2867688 :                   imax = 3*3*5
   34130     2867688 :                   kmax = 6
   34131             :                   i = 0
   34132     2867688 :                   DO i1 = 1, 5
   34133    10036908 :                   DO i2 = 1, 3
   34134    31066620 :                   DO i3 = 1, 3
   34135    21507660 :                      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    21507660 :                         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    21507660 :                         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    21507660 :                         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    21507660 :                         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    21507660 :                         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    21507660 :                         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    21507660 :                         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    28676880 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   34160             :                   END DO
   34161             :                   END DO
   34162             :                   END DO
   34163      910638 :                   s_offset_d1 = s_offset_d1 + 5
   34164             :                END DO
   34165      837526 :                s_offset_c1 = s_offset_c1 + 5
   34166             :             END DO
   34167      705354 :             s_offset_b1 = s_offset_b1 + 3
   34168             :          END DO
   34169      529450 :          s_offset_a1 = s_offset_a1 + 3
   34170             :       END DO
   34171      228932 :    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     1357954 :    SUBROUTINE contract_pdss(work, &
   35902             :                             nl_a, nl_b, nl_c, nl_d, &
   35903     1357954 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   35904     1357954 :                             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     1357954 :       s_offset_a1 = 0
   35921     3161138 :       DO ia = 1, nl_a
   35922             :          s_offset_b1 = 0
   35923     3781851 :          DO ib = 1, nl_b
   35924             :             s_offset_c1 = 0
   35925     5239920 :             DO ic = 1, nl_c
   35926             :                s_offset_d1 = 0
   35927     9073903 :                DO id = 1, nl_d
   35928     5812650 :                   buffer1 = 0.0_dp
   35929     5812650 :                   imax = 6*1*1
   35930     5812650 :                   kmax = 3
   35931    40688550 :                   DO i = 1, imax
   35932    34875900 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   35933    34875900 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   35934    40688550 :                      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     5812650 :                   buffer2 = 0.0_dp
   35937     5812650 :                   imax = 3*1*1
   35938     5812650 :                   kmax = 6
   35939    23250600 :                   DO i = 1, imax
   35940    17437950 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   35941    17437950 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   35942    17437950 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   35943    17437950 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   35944    17437950 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   35945    17437950 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   35946    17437950 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   35947    23250600 :                      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     5812650 :                   buffer1 = 0.0_dp
   35950     5812650 :                   imax = 3*5*1
   35951     5812650 :                   kmax = 1
   35952    93002400 :                   DO i = 1, imax
   35953    93002400 :                      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    11625300 :                   imax = 3*5*1
   35956    11625300 :                   kmax = 1
   35957             :                   i = 0
   35958    11625300 :                   DO i1 = 1, 1
   35959    40688550 :                   DO i2 = 1, 5
   35960   122065650 :                   DO i3 = 1, 3
   35961    87189750 :                      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   116253000 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   35965             :                   END DO
   35966             :                   END DO
   35967             :                   END DO
   35968     9073903 :                   s_offset_d1 = s_offset_d1 + 1
   35969             :                END DO
   35970     5239920 :                s_offset_c1 = s_offset_c1 + 1
   35971             :             END DO
   35972     3781851 :             s_offset_b1 = s_offset_b1 + 5
   35973             :          END DO
   35974     3161138 :          s_offset_a1 = s_offset_a1 + 3
   35975             :       END DO
   35976     1357954 :    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      779500 :    SUBROUTINE contract_pdsp(work, &
   35995             :                             nl_a, nl_b, nl_c, nl_d, &
   35996      779500 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   35997      779500 :                             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      779500 :       s_offset_a1 = 0
   36014     1800257 :       DO ia = 1, nl_a
   36015             :          s_offset_b1 = 0
   36016     2185780 :          DO ib = 1, nl_b
   36017             :             s_offset_c1 = 0
   36018     3135666 :             DO ic = 1, nl_c
   36019             :                s_offset_d1 = 0
   36020     4785856 :                DO id = 1, nl_d
   36021     2815213 :                   buffer1 = 0.0_dp
   36022     2815213 :                   imax = 6*1*3
   36023     2815213 :                   kmax = 3
   36024    53489047 :                   DO i = 1, imax
   36025    50673834 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36026    50673834 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36027    53489047 :                      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     2815213 :                   buffer2 = 0.0_dp
   36030     2815213 :                   imax = 3*1*3
   36031     2815213 :                   kmax = 6
   36032    28152130 :                   DO i = 1, imax
   36033    25336917 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36034    25336917 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36035    25336917 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36036    25336917 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36037    25336917 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36038    25336917 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36039    25336917 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36040    28152130 :                      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     2815213 :                   buffer1 = 0.0_dp
   36043     2815213 :                   imax = 3*5*3
   36044     2815213 :                   kmax = 1
   36045   129499798 :                   DO i = 1, imax
   36046   129499798 :                      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     5630426 :                   imax = 3*5*1
   36049     5630426 :                   kmax = 3
   36050             :                   i = 0
   36051     5630426 :                   DO i1 = 1, 1
   36052    19706491 :                   DO i2 = 1, 5
   36053    59119473 :                   DO i3 = 1, 3
   36054    42228195 :                      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    42228195 :                         + 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    42228195 :                         + 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    56304260 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   36064             :                   END DO
   36065             :                   END DO
   36066             :                   END DO
   36067     4785856 :                   s_offset_d1 = s_offset_d1 + 3
   36068             :                END DO
   36069     3135666 :                s_offset_c1 = s_offset_c1 + 1
   36070             :             END DO
   36071     2185780 :             s_offset_b1 = s_offset_b1 + 5
   36072             :          END DO
   36073     1800257 :          s_offset_a1 = s_offset_a1 + 3
   36074             :       END DO
   36075      779500 :    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      413389 :    SUBROUTINE contract_pdsd(work, &
   36094             :                             nl_a, nl_b, nl_c, nl_d, &
   36095      413389 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36096      413389 :                             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      413389 :       s_offset_a1 = 0
   36113      960400 :       DO ia = 1, nl_a
   36114             :          s_offset_b1 = 0
   36115     1188109 :          DO ib = 1, nl_b
   36116             :             s_offset_c1 = 0
   36117     1733329 :             DO ic = 1, nl_c
   36118             :                s_offset_d1 = 0
   36119     2352059 :                DO id = 1, nl_d
   36120     1259828 :                   buffer1 = 0.0_dp
   36121     1259828 :                   imax = 6*1*6
   36122     1259828 :                   kmax = 3
   36123    46613636 :                   DO i = 1, imax
   36124    45353808 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36125    45353808 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36126    46613636 :                      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     1259828 :                   buffer2 = 0.0_dp
   36129     1259828 :                   imax = 3*1*6
   36130     1259828 :                   kmax = 6
   36131    23936732 :                   DO i = 1, imax
   36132    22676904 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36133    22676904 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36134    22676904 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36135    22676904 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36136    22676904 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36137    22676904 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36138    22676904 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36139    23936732 :                      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     1259828 :                   buffer1 = 0.0_dp
   36142     1259828 :                   imax = 3*5*6
   36143     1259828 :                   kmax = 1
   36144   114644348 :                   DO i = 1, imax
   36145   114644348 :                      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     2519656 :                   imax = 3*5*1
   36148     2519656 :                   kmax = 6
   36149             :                   i = 0
   36150     2519656 :                   DO i1 = 1, 1
   36151     8818796 :                   DO i2 = 1, 5
   36152    26456388 :                   DO i3 = 1, 3
   36153    18897420 :                      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    18897420 :                         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    18897420 :                         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    18897420 :                         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    18897420 :                         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    18897420 :                         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    18897420 :                         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    18897420 :                         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    25196560 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   36178             :                   END DO
   36179             :                   END DO
   36180             :                   END DO
   36181     2352059 :                   s_offset_d1 = s_offset_d1 + 5
   36182             :                END DO
   36183     1733329 :                s_offset_c1 = s_offset_c1 + 1
   36184             :             END DO
   36185     1188109 :             s_offset_b1 = s_offset_b1 + 5
   36186             :          END DO
   36187      960400 :          s_offset_a1 = s_offset_a1 + 3
   36188             :       END DO
   36189      413389 :    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      658762 :    SUBROUTINE contract_pdps(work, &
   36520             :                             nl_a, nl_b, nl_c, nl_d, &
   36521      658762 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36522      658762 :                             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      658762 :       s_offset_a1 = 0
   36539     1542099 :       DO ia = 1, nl_a
   36540             :          s_offset_b1 = 0
   36541     1877395 :          DO ib = 1, nl_b
   36542             :             s_offset_c1 = 0
   36543     2449571 :             DO ic = 1, nl_c
   36544             :                s_offset_d1 = 0
   36545     4055749 :                DO id = 1, nl_d
   36546     2600236 :                   buffer1 = 0.0_dp
   36547     2600236 :                   imax = 6*3*1
   36548     2600236 :                   kmax = 3
   36549    49404484 :                   DO i = 1, imax
   36550    46804248 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36551    46804248 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36552    49404484 :                      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     2600236 :                   buffer2 = 0.0_dp
   36555     2600236 :                   imax = 3*3*1
   36556     2600236 :                   kmax = 6
   36557    26002360 :                   DO i = 1, imax
   36558    23402124 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36559    23402124 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36560    23402124 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36561    23402124 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36562    23402124 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36563    23402124 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36564    23402124 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36565    26002360 :                      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     2600236 :                   buffer1 = 0.0_dp
   36568     2600236 :                   imax = 3*5*1
   36569     2600236 :                   kmax = 3
   36570    41603776 :                   DO i = 1, imax
   36571    39003540 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36572    39003540 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36573    41603776 :                      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    10400944 :                   imax = 3*5*3
   36576    10400944 :                   kmax = 1
   36577             :                   i = 0
   36578    10400944 :                   DO i1 = 1, 3
   36579    49404484 :                   DO i2 = 1, 5
   36580   163814868 :                   DO i3 = 1, 3
   36581   117010620 :                      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   156014160 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   36585             :                   END DO
   36586             :                   END DO
   36587             :                   END DO
   36588     4055749 :                   s_offset_d1 = s_offset_d1 + 1
   36589             :                END DO
   36590     2449571 :                s_offset_c1 = s_offset_c1 + 3
   36591             :             END DO
   36592     1877395 :             s_offset_b1 = s_offset_b1 + 5
   36593             :          END DO
   36594     1542099 :          s_offset_a1 = s_offset_a1 + 3
   36595             :       END DO
   36596      658762 :    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      838817 :    SUBROUTINE contract_pdpp(work, &
   36615             :                             nl_a, nl_b, nl_c, nl_d, &
   36616      838817 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36617      838817 :                             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      838817 :       s_offset_a1 = 0
   36634     2086140 :       DO ia = 1, nl_a
   36635             :          s_offset_b1 = 0
   36636     2591500 :          DO ib = 1, nl_b
   36637             :             s_offset_c1 = 0
   36638     3518083 :             DO ic = 1, nl_c
   36639             :                s_offset_d1 = 0
   36640     5887390 :                DO id = 1, nl_d
   36641     3713484 :                   buffer1 = 0.0_dp
   36642     3713484 :                   imax = 6*3*3
   36643     3713484 :                   kmax = 3
   36644   204241620 :                   DO i = 1, imax
   36645   200528136 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36646   200528136 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36647   204241620 :                      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     3713484 :                   buffer2 = 0.0_dp
   36650     3713484 :                   imax = 3*3*3
   36651     3713484 :                   kmax = 6
   36652   103977552 :                   DO i = 1, imax
   36653   100264068 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36654   100264068 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36655   100264068 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36656   100264068 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36657   100264068 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36658   100264068 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36659   100264068 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36660   103977552 :                      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     3713484 :                   buffer1 = 0.0_dp
   36663     3713484 :                   imax = 3*5*3
   36664     3713484 :                   kmax = 3
   36665   170820264 :                   DO i = 1, imax
   36666   167106780 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36667   167106780 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36668   170820264 :                      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    14853936 :                   imax = 3*5*3
   36671    14853936 :                   kmax = 3
   36672             :                   i = 0
   36673    14853936 :                   DO i1 = 1, 3
   36674    70556196 :                   DO i2 = 1, 5
   36675   233949492 :                   DO i3 = 1, 3
   36676   167106780 :                      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   167106780 :                         + 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   167106780 :                         + 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   222809040 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   36686             :                   END DO
   36687             :                   END DO
   36688             :                   END DO
   36689     5887390 :                   s_offset_d1 = s_offset_d1 + 3
   36690             :                END DO
   36691     3518083 :                s_offset_c1 = s_offset_c1 + 3
   36692             :             END DO
   36693     2591500 :             s_offset_b1 = s_offset_b1 + 5
   36694             :          END DO
   36695     2086140 :          s_offset_a1 = s_offset_a1 + 3
   36696             :       END DO
   36697      838817 :    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      265380 :    SUBROUTINE contract_pdpd(work, &
   36716             :                             nl_a, nl_b, nl_c, nl_d, &
   36717      265380 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   36718      265380 :                             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      265380 :       s_offset_a1 = 0
   36735      606532 :       DO ia = 1, nl_a
   36736             :          s_offset_b1 = 0
   36737      752670 :          DO ib = 1, nl_b
   36738             :             s_offset_c1 = 0
   36739      984543 :             DO ic = 1, nl_c
   36740             :                s_offset_d1 = 0
   36741     1231144 :                DO id = 1, nl_d
   36742      658119 :                   buffer1 = 0.0_dp
   36743      658119 :                   imax = 6*3*6
   36744      658119 :                   kmax = 3
   36745    71734971 :                   DO i = 1, imax
   36746    71076852 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   36747    71076852 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   36748    71734971 :                      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      658119 :                   buffer2 = 0.0_dp
   36751      658119 :                   imax = 3*3*6
   36752      658119 :                   kmax = 6
   36753    36196545 :                   DO i = 1, imax
   36754    35538426 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   36755    35538426 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   36756    35538426 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   36757    35538426 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   36758    35538426 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   36759    35538426 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   36760    35538426 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   36761    36196545 :                      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      658119 :                   buffer1 = 0.0_dp
   36764      658119 :                   imax = 3*5*6
   36765      658119 :                   kmax = 3
   36766    59888829 :                   DO i = 1, imax
   36767    59230710 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   36768    59230710 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   36769    59888829 :                      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     2632476 :                   imax = 3*5*3
   36772     2632476 :                   kmax = 6
   36773             :                   i = 0
   36774     2632476 :                   DO i1 = 1, 3
   36775    12504261 :                   DO i2 = 1, 5
   36776    41461497 :                   DO i3 = 1, 3
   36777    29615355 :                      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    29615355 :                         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    29615355 :                         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    29615355 :                         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    29615355 :                         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    29615355 :                         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    29615355 :                         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    29615355 :                         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    39487140 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   36802             :                   END DO
   36803             :                   END DO
   36804             :                   END DO
   36805     1231144 :                   s_offset_d1 = s_offset_d1 + 5
   36806             :                END DO
   36807      984543 :                s_offset_c1 = s_offset_c1 + 3
   36808             :             END DO
   36809      752670 :             s_offset_b1 = s_offset_b1 + 5
   36810             :          END DO
   36811      606532 :          s_offset_a1 = s_offset_a1 + 3
   36812             :       END DO
   36813      265380 :    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      282416 :    SUBROUTINE contract_pdds(work, &
   37148             :                             nl_a, nl_b, nl_c, nl_d, &
   37149      282416 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37150      282416 :                             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      282416 :       s_offset_a1 = 0
   37167      677633 :       DO ia = 1, nl_a
   37168             :          s_offset_b1 = 0
   37169      837701 :          DO ib = 1, nl_b
   37170             :             s_offset_c1 = 0
   37171      913238 :             DO ic = 1, nl_c
   37172             :                s_offset_d1 = 0
   37173     1295113 :                DO id = 1, nl_d
   37174      824359 :                   buffer1 = 0.0_dp
   37175      824359 :                   imax = 6*6*1
   37176      824359 :                   kmax = 3
   37177    30501283 :                   DO i = 1, imax
   37178    29676924 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37179    29676924 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37180    30501283 :                      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      824359 :                   buffer2 = 0.0_dp
   37183      824359 :                   imax = 3*6*1
   37184      824359 :                   kmax = 6
   37185    15662821 :                   DO i = 1, imax
   37186    14838462 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37187    14838462 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37188    14838462 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37189    14838462 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37190    14838462 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37191    14838462 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37192    14838462 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37193    15662821 :                      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      824359 :                   buffer1 = 0.0_dp
   37196      824359 :                   imax = 3*5*1
   37197      824359 :                   kmax = 6
   37198    13189744 :                   DO i = 1, imax
   37199    12365385 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37200    12365385 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37201    12365385 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37202    12365385 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37203    12365385 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37204    12365385 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37205    12365385 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37206    13189744 :                      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     4946154 :                   imax = 3*5*5
   37209     4946154 :                   kmax = 1
   37210             :                   i = 0
   37211     4946154 :                   DO i1 = 1, 5
   37212    25555129 :                   DO i2 = 1, 5
   37213    86557695 :                   DO i3 = 1, 3
   37214    61826925 :                      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    82435900 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   37218             :                   END DO
   37219             :                   END DO
   37220             :                   END DO
   37221     1295113 :                   s_offset_d1 = s_offset_d1 + 1
   37222             :                END DO
   37223      913238 :                s_offset_c1 = s_offset_c1 + 5
   37224             :             END DO
   37225      837701 :             s_offset_b1 = s_offset_b1 + 5
   37226             :          END DO
   37227      677633 :          s_offset_a1 = s_offset_a1 + 3
   37228             :       END DO
   37229      282416 :    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      184113 :    SUBROUTINE contract_pddp(work, &
   37248             :                             nl_a, nl_b, nl_c, nl_d, &
   37249      184113 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37250      184113 :                             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      184113 :       s_offset_a1 = 0
   37267      431194 :       DO ia = 1, nl_a
   37268             :          s_offset_b1 = 0
   37269      534882 :          DO ib = 1, nl_b
   37270             :             s_offset_c1 = 0
   37271      598751 :             DO ic = 1, nl_c
   37272             :                s_offset_d1 = 0
   37273      734066 :                DO id = 1, nl_d
   37274      423116 :                   buffer1 = 0.0_dp
   37275      423116 :                   imax = 6*6*3
   37276      423116 :                   kmax = 3
   37277    46119644 :                   DO i = 1, imax
   37278    45696528 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37279    45696528 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37280    46119644 :                      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      423116 :                   buffer2 = 0.0_dp
   37283      423116 :                   imax = 3*6*3
   37284      423116 :                   kmax = 6
   37285    23271380 :                   DO i = 1, imax
   37286    22848264 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37287    22848264 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37288    22848264 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37289    22848264 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37290    22848264 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37291    22848264 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37292    22848264 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37293    23271380 :                      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      423116 :                   buffer1 = 0.0_dp
   37296      423116 :                   imax = 3*5*3
   37297      423116 :                   kmax = 6
   37298    19463336 :                   DO i = 1, imax
   37299    19040220 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37300    19040220 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37301    19040220 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37302    19040220 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37303    19040220 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37304    19040220 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37305    19040220 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37306    19463336 :                      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     2538696 :                   imax = 3*5*5
   37309     2538696 :                   kmax = 3
   37310             :                   i = 0
   37311     2538696 :                   DO i1 = 1, 5
   37312    13116596 :                   DO i2 = 1, 5
   37313    44427180 :                   DO i3 = 1, 3
   37314    31733700 :                      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    31733700 :                         + 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    31733700 :                         + 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    42311600 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   37324             :                   END DO
   37325             :                   END DO
   37326             :                   END DO
   37327      734066 :                   s_offset_d1 = s_offset_d1 + 3
   37328             :                END DO
   37329      598751 :                s_offset_c1 = s_offset_c1 + 5
   37330             :             END DO
   37331      534882 :             s_offset_b1 = s_offset_b1 + 5
   37332             :          END DO
   37333      431194 :          s_offset_a1 = s_offset_a1 + 3
   37334             :       END DO
   37335      184113 :    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      125874 :    SUBROUTINE contract_pddd(work, &
   37354             :                             nl_a, nl_b, nl_c, nl_d, &
   37355      125874 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   37356      125874 :                             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      125874 :       s_offset_a1 = 0
   37373      290381 :       DO ia = 1, nl_a
   37374             :          s_offset_b1 = 0
   37375      364411 :          DO ib = 1, nl_b
   37376             :             s_offset_c1 = 0
   37377      418297 :             DO ic = 1, nl_c
   37378             :                s_offset_d1 = 0
   37379      481140 :                DO id = 1, nl_d
   37380      262747 :                   buffer1 = 0.0_dp
   37381      262747 :                   imax = 6*6*6
   37382      262747 :                   kmax = 3
   37383    57016099 :                   DO i = 1, imax
   37384    56753352 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   37385    56753352 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   37386    57016099 :                      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      262747 :                   buffer2 = 0.0_dp
   37389      262747 :                   imax = 3*6*6
   37390      262747 :                   kmax = 6
   37391    28639423 :                   DO i = 1, imax
   37392    28376676 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   37393    28376676 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   37394    28376676 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   37395    28376676 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   37396    28376676 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   37397    28376676 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   37398    28376676 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   37399    28639423 :                      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      262747 :                   buffer1 = 0.0_dp
   37402      262747 :                   imax = 3*5*6
   37403      262747 :                   kmax = 6
   37404    23909977 :                   DO i = 1, imax
   37405    23647230 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   37406    23647230 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   37407    23647230 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   37408    23647230 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   37409    23647230 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   37410    23647230 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   37411    23647230 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   37412    23909977 :                      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     1576482 :                   imax = 3*5*5
   37415     1576482 :                   kmax = 6
   37416             :                   i = 0
   37417     1576482 :                   DO i1 = 1, 5
   37418     8145157 :                   DO i2 = 1, 5
   37419    27588435 :                   DO i3 = 1, 3
   37420    19706025 :                      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    19706025 :                         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    19706025 :                         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    19706025 :                         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    19706025 :                         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    19706025 :                         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    19706025 :                         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    19706025 :                         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    26274700 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   37445             :                   END DO
   37446             :                   END DO
   37447             :                   END DO
   37448      481140 :                   s_offset_d1 = s_offset_d1 + 5
   37449             :                END DO
   37450      418297 :                s_offset_c1 = s_offset_c1 + 5
   37451             :             END DO
   37452      364411 :             s_offset_b1 = s_offset_b1 + 5
   37453             :          END DO
   37454      290381 :          s_offset_a1 = s_offset_a1 + 3
   37455             :       END DO
   37456      125874 :    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     3595449 :    SUBROUTINE contract_dsss(work, &
   46637             :                             nl_a, nl_b, nl_c, nl_d, &
   46638     3595449 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46639     3595449 :                             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     3595449 :       s_offset_a1 = 0
   46656     7301602 :       DO ia = 1, nl_a
   46657             :          s_offset_b1 = 0
   46658     9043194 :          DO ib = 1, nl_b
   46659             :             s_offset_c1 = 0
   46660    13786781 :             DO ic = 1, nl_c
   46661             :                s_offset_d1 = 0
   46662    23057075 :                DO id = 1, nl_d
   46663    14607335 :                   buffer1 = 0.0_dp
   46664    14607335 :                   imax = 1*1*1
   46665    14607335 :                   kmax = 6
   46666    29214670 :                   DO i = 1, imax
   46667    14607335 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46668    14607335 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46669    14607335 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46670    14607335 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46671    14607335 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46672    14607335 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46673    14607335 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46674    29214670 :                      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    14607335 :                   buffer2 = 0.0_dp
   46677    14607335 :                   imax = 5*1*1
   46678    14607335 :                   kmax = 1
   46679    87644010 :                   DO i = 1, imax
   46680    87644010 :                      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    14607335 :                   buffer1 = 0.0_dp
   46683    14607335 :                   imax = 5*1*1
   46684    14607335 :                   kmax = 1
   46685    87644010 :                   DO i = 1, imax
   46686    87644010 :                      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    29214670 :                   imax = 5*1*1
   46689    29214670 :                   kmax = 1
   46690             :                   i = 0
   46691    29214670 :                   DO i1 = 1, 1
   46692    43822005 :                   DO i2 = 1, 1
   46693   102251345 :                   DO i3 = 1, 5
   46694    73036675 :                      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    87644010 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   46698             :                   END DO
   46699             :                   END DO
   46700             :                   END DO
   46701    23057075 :                   s_offset_d1 = s_offset_d1 + 1
   46702             :                END DO
   46703    13786781 :                s_offset_c1 = s_offset_c1 + 1
   46704             :             END DO
   46705     9043194 :             s_offset_b1 = s_offset_b1 + 1
   46706             :          END DO
   46707     7301602 :          s_offset_a1 = s_offset_a1 + 5
   46708             :       END DO
   46709     3595449 :    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     2136148 :    SUBROUTINE contract_dssp(work, &
   46728             :                             nl_a, nl_b, nl_c, nl_d, &
   46729     2136148 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46730     2136148 :                             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     2136148 :       s_offset_a1 = 0
   46747     4361840 :       DO ia = 1, nl_a
   46748             :          s_offset_b1 = 0
   46749     5624584 :          DO ib = 1, nl_b
   46750             :             s_offset_c1 = 0
   46751     8984355 :             DO ic = 1, nl_c
   46752             :                s_offset_d1 = 0
   46753    14272886 :                DO id = 1, nl_d
   46754     8687423 :                   buffer1 = 0.0_dp
   46755     8687423 :                   imax = 1*1*3
   46756     8687423 :                   kmax = 6
   46757    34749692 :                   DO i = 1, imax
   46758    26062269 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46759    26062269 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46760    26062269 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46761    26062269 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46762    26062269 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46763    26062269 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46764    26062269 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46765    34749692 :                      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     8687423 :                   buffer2 = 0.0_dp
   46768     8687423 :                   imax = 5*1*3
   46769     8687423 :                   kmax = 1
   46770   138998768 :                   DO i = 1, imax
   46771   138998768 :                      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     8687423 :                   buffer1 = 0.0_dp
   46774     8687423 :                   imax = 5*1*3
   46775     8687423 :                   kmax = 1
   46776   138998768 :                   DO i = 1, imax
   46777   138998768 :                      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    17374846 :                   imax = 5*1*1
   46780    17374846 :                   kmax = 3
   46781             :                   i = 0
   46782    17374846 :                   DO i1 = 1, 1
   46783    26062269 :                   DO i2 = 1, 1
   46784    60811961 :                   DO i3 = 1, 5
   46785    43437115 :                      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    43437115 :                         + 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    43437115 :                         + 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    52124538 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   46795             :                   END DO
   46796             :                   END DO
   46797             :                   END DO
   46798    14272886 :                   s_offset_d1 = s_offset_d1 + 3
   46799             :                END DO
   46800     8984355 :                s_offset_c1 = s_offset_c1 + 1
   46801             :             END DO
   46802     5624584 :             s_offset_b1 = s_offset_b1 + 1
   46803             :          END DO
   46804     4361840 :          s_offset_a1 = s_offset_a1 + 5
   46805             :       END DO
   46806     2136148 :    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      586349 :    SUBROUTINE contract_dssd(work, &
   46825             :                             nl_a, nl_b, nl_c, nl_d, &
   46826      586349 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   46827      586349 :                             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      586349 :       s_offset_a1 = 0
   46844     1233579 :       DO ia = 1, nl_a
   46845             :          s_offset_b1 = 0
   46846     1705689 :          DO ib = 1, nl_b
   46847             :             s_offset_c1 = 0
   46848     2813376 :             DO ic = 1, nl_c
   46849             :                s_offset_d1 = 0
   46850     3763045 :                DO id = 1, nl_d
   46851     2008128 :                   buffer1 = 0.0_dp
   46852     2008128 :                   imax = 1*1*6
   46853     2008128 :                   kmax = 6
   46854    14056896 :                   DO i = 1, imax
   46855    12048768 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   46856    12048768 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   46857    12048768 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   46858    12048768 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   46859    12048768 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   46860    12048768 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   46861    12048768 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   46862    14056896 :                      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     2008128 :                   buffer2 = 0.0_dp
   46865     2008128 :                   imax = 5*1*6
   46866     2008128 :                   kmax = 1
   46867    62251968 :                   DO i = 1, imax
   46868    62251968 :                      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     2008128 :                   buffer1 = 0.0_dp
   46871     2008128 :                   imax = 5*1*6
   46872     2008128 :                   kmax = 1
   46873    62251968 :                   DO i = 1, imax
   46874    62251968 :                      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     4016256 :                   imax = 5*1*1
   46877     4016256 :                   kmax = 6
   46878             :                   i = 0
   46879     4016256 :                   DO i1 = 1, 1
   46880     6024384 :                   DO i2 = 1, 1
   46881    14056896 :                   DO i3 = 1, 5
   46882    10040640 :                      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    10040640 :                         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    10040640 :                         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    10040640 :                         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    10040640 :                         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    10040640 :                         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    10040640 :                         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    10040640 :                         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    12048768 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   46907             :                   END DO
   46908             :                   END DO
   46909             :                   END DO
   46910     3763045 :                   s_offset_d1 = s_offset_d1 + 5
   46911             :                END DO
   46912     2813376 :                s_offset_c1 = s_offset_c1 + 1
   46913             :             END DO
   46914     1705689 :             s_offset_b1 = s_offset_b1 + 1
   46915             :          END DO
   46916     1233579 :          s_offset_a1 = s_offset_a1 + 5
   46917             :       END DO
   46918      586349 :    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     2725429 :    SUBROUTINE contract_dsps(work, &
   47245             :                             nl_a, nl_b, nl_c, nl_d, &
   47246     2725429 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47247     2725429 :                             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     2725429 :       s_offset_a1 = 0
   47264     5528487 :       DO ia = 1, nl_a
   47265             :          s_offset_b1 = 0
   47266     7136115 :          DO ib = 1, nl_b
   47267             :             s_offset_c1 = 0
   47268    11185309 :             DO ic = 1, nl_c
   47269             :                s_offset_d1 = 0
   47270    19171874 :                DO id = 1, nl_d
   47271    12319622 :                   buffer1 = 0.0_dp
   47272    12319622 :                   imax = 1*3*1
   47273    12319622 :                   kmax = 6
   47274    49278488 :                   DO i = 1, imax
   47275    36958866 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47276    36958866 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47277    36958866 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47278    36958866 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47279    36958866 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47280    36958866 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47281    36958866 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47282    49278488 :                      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    12319622 :                   buffer2 = 0.0_dp
   47285    12319622 :                   imax = 5*3*1
   47286    12319622 :                   kmax = 1
   47287   197113952 :                   DO i = 1, imax
   47288   197113952 :                      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    12319622 :                   buffer1 = 0.0_dp
   47291    12319622 :                   imax = 5*1*1
   47292    12319622 :                   kmax = 3
   47293    73917732 :                   DO i = 1, imax
   47294    61598110 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47295    61598110 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47296    73917732 :                      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    49278488 :                   imax = 5*1*3
   47299    49278488 :                   kmax = 1
   47300             :                   i = 0
   47301    49278488 :                   DO i1 = 1, 3
   47302    86237354 :                   DO i2 = 1, 1
   47303   258712062 :                   DO i3 = 1, 5
   47304   184794330 :                      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   221753196 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   47308             :                   END DO
   47309             :                   END DO
   47310             :                   END DO
   47311    19171874 :                   s_offset_d1 = s_offset_d1 + 1
   47312             :                END DO
   47313    11185309 :                s_offset_c1 = s_offset_c1 + 3
   47314             :             END DO
   47315     7136115 :             s_offset_b1 = s_offset_b1 + 1
   47316             :          END DO
   47317     5528487 :          s_offset_a1 = s_offset_a1 + 5
   47318             :       END DO
   47319     2725429 :    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     1510422 :    SUBROUTINE contract_dspp(work, &
   47338             :                             nl_a, nl_b, nl_c, nl_d, &
   47339     1510422 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47340     1510422 :                             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     1510422 :       s_offset_a1 = 0
   47357     3086990 :       DO ia = 1, nl_a
   47358             :          s_offset_b1 = 0
   47359     4018761 :          DO ib = 1, nl_b
   47360             :             s_offset_c1 = 0
   47361     6144244 :             DO ic = 1, nl_c
   47362             :                s_offset_d1 = 0
   47363     9665808 :                DO id = 1, nl_d
   47364     5963757 :                   buffer1 = 0.0_dp
   47365     5963757 :                   imax = 1*3*3
   47366     5963757 :                   kmax = 6
   47367    59637570 :                   DO i = 1, imax
   47368    53673813 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47369    53673813 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47370    53673813 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47371    53673813 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47372    53673813 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47373    53673813 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47374    53673813 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47375    59637570 :                      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     5963757 :                   buffer2 = 0.0_dp
   47378     5963757 :                   imax = 5*3*3
   47379     5963757 :                   kmax = 1
   47380   274332822 :                   DO i = 1, imax
   47381   274332822 :                      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     5963757 :                   buffer1 = 0.0_dp
   47384     5963757 :                   imax = 5*1*3
   47385     5963757 :                   kmax = 3
   47386    95420112 :                   DO i = 1, imax
   47387    89456355 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47388    89456355 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47389    95420112 :                      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    23855028 :                   imax = 5*1*3
   47392    23855028 :                   kmax = 3
   47393             :                   i = 0
   47394    23855028 :                   DO i1 = 1, 3
   47395    41746299 :                   DO i2 = 1, 1
   47396   125238897 :                   DO i3 = 1, 5
   47397    89456355 :                      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    89456355 :                         + 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    89456355 :                         + 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   107347626 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   47407             :                   END DO
   47408             :                   END DO
   47409             :                   END DO
   47410     9665808 :                   s_offset_d1 = s_offset_d1 + 3
   47411             :                END DO
   47412     6144244 :                s_offset_c1 = s_offset_c1 + 3
   47413             :             END DO
   47414     4018761 :             s_offset_b1 = s_offset_b1 + 1
   47415             :          END DO
   47416     3086990 :          s_offset_a1 = s_offset_a1 + 5
   47417             :       END DO
   47418     1510422 :    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      517858 :    SUBROUTINE contract_dspd(work, &
   47437             :                             nl_a, nl_b, nl_c, nl_d, &
   47438      517858 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47439      517858 :                             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      517858 :       s_offset_a1 = 0
   47456     1082857 :       DO ia = 1, nl_a
   47457             :          s_offset_b1 = 0
   47458     1518547 :          DO ib = 1, nl_b
   47459             :             s_offset_c1 = 0
   47460     2367816 :             DO ic = 1, nl_c
   47461             :                s_offset_d1 = 0
   47462     2962279 :                DO id = 1, nl_d
   47463     1548011 :                   buffer1 = 0.0_dp
   47464     1548011 :                   imax = 1*3*6
   47465     1548011 :                   kmax = 6
   47466    29412209 :                   DO i = 1, imax
   47467    27864198 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47468    27864198 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47469    27864198 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47470    27864198 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47471    27864198 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47472    27864198 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47473    27864198 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47474    29412209 :                      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     1548011 :                   buffer2 = 0.0_dp
   47477     1548011 :                   imax = 5*3*6
   47478     1548011 :                   kmax = 1
   47479   140869001 :                   DO i = 1, imax
   47480   140869001 :                      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     1548011 :                   buffer1 = 0.0_dp
   47483     1548011 :                   imax = 5*1*6
   47484     1548011 :                   kmax = 3
   47485    47988341 :                   DO i = 1, imax
   47486    46440330 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47487    46440330 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47488    47988341 :                      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     6192044 :                   imax = 5*1*3
   47491     6192044 :                   kmax = 6
   47492             :                   i = 0
   47493     6192044 :                   DO i1 = 1, 3
   47494    10836077 :                   DO i2 = 1, 1
   47495    32508231 :                   DO i3 = 1, 5
   47496    23220165 :                      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    23220165 :                         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    23220165 :                         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    23220165 :                         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    23220165 :                         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    23220165 :                         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    23220165 :                         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    23220165 :                         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    27864198 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   47521             :                   END DO
   47522             :                   END DO
   47523             :                   END DO
   47524     2962279 :                   s_offset_d1 = s_offset_d1 + 5
   47525             :                END DO
   47526     2367816 :                s_offset_c1 = s_offset_c1 + 3
   47527             :             END DO
   47528     1518547 :             s_offset_b1 = s_offset_b1 + 1
   47529             :          END DO
   47530     1082857 :          s_offset_a1 = s_offset_a1 + 5
   47531             :       END DO
   47532      517858 :    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      725855 :    SUBROUTINE contract_dsds(work, &
   47863             :                             nl_a, nl_b, nl_c, nl_d, &
   47864      725855 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47865      725855 :                             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      725855 :       s_offset_a1 = 0
   47882     1497353 :       DO ia = 1, nl_a
   47883             :          s_offset_b1 = 0
   47884     1989099 :          DO ib = 1, nl_b
   47885             :             s_offset_c1 = 0
   47886     2533565 :             DO ic = 1, nl_c
   47887             :                s_offset_d1 = 0
   47888     3588328 :                DO id = 1, nl_d
   47889     2272364 :                   buffer1 = 0.0_dp
   47890     2272364 :                   imax = 1*6*1
   47891     2272364 :                   kmax = 6
   47892    15906548 :                   DO i = 1, imax
   47893    13634184 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47894    13634184 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47895    13634184 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47896    13634184 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47897    13634184 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47898    13634184 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47899    13634184 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47900    15906548 :                      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     2272364 :                   buffer2 = 0.0_dp
   47903     2272364 :                   imax = 5*6*1
   47904     2272364 :                   kmax = 1
   47905    70443284 :                   DO i = 1, imax
   47906    70443284 :                      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     2272364 :                   buffer1 = 0.0_dp
   47909     2272364 :                   imax = 5*1*1
   47910     2272364 :                   kmax = 6
   47911    13634184 :                   DO i = 1, imax
   47912    11361820 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   47913    11361820 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   47914    11361820 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   47915    11361820 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   47916    11361820 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   47917    11361820 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   47918    11361820 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   47919    13634184 :                      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    13634184 :                   imax = 5*1*5
   47922    13634184 :                   kmax = 1
   47923             :                   i = 0
   47924    13634184 :                   DO i1 = 1, 5
   47925    24996004 :                   DO i2 = 1, 1
   47926    79532740 :                   DO i3 = 1, 5
   47927    56809100 :                      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    68170920 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   47931             :                   END DO
   47932             :                   END DO
   47933             :                   END DO
   47934     3588328 :                   s_offset_d1 = s_offset_d1 + 1
   47935             :                END DO
   47936     2533565 :                s_offset_c1 = s_offset_c1 + 5
   47937             :             END DO
   47938     1989099 :             s_offset_b1 = s_offset_b1 + 1
   47939             :          END DO
   47940     1497353 :          s_offset_a1 = s_offset_a1 + 5
   47941             :       END DO
   47942      725855 :    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      510000 :    SUBROUTINE contract_dsdp(work, &
   47961             :                             nl_a, nl_b, nl_c, nl_d, &
   47962      510000 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   47963      510000 :                             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      510000 :       s_offset_a1 = 0
   47980     1058310 :       DO ia = 1, nl_a
   47981             :          s_offset_b1 = 0
   47982     1449149 :          DO ib = 1, nl_b
   47983             :             s_offset_c1 = 0
   47984     1882240 :             DO ic = 1, nl_c
   47985             :                s_offset_d1 = 0
   47986     2381846 :                DO id = 1, nl_d
   47987     1400445 :                   buffer1 = 0.0_dp
   47988     1400445 :                   imax = 1*6*3
   47989     1400445 :                   kmax = 6
   47990    26608455 :                   DO i = 1, imax
   47991    25208010 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   47992    25208010 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   47993    25208010 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   47994    25208010 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   47995    25208010 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   47996    25208010 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   47997    25208010 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   47998    26608455 :                      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     1400445 :                   buffer2 = 0.0_dp
   48001     1400445 :                   imax = 5*6*3
   48002     1400445 :                   kmax = 1
   48003   127440495 :                   DO i = 1, imax
   48004   127440495 :                      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     1400445 :                   buffer1 = 0.0_dp
   48007     1400445 :                   imax = 5*1*3
   48008     1400445 :                   kmax = 6
   48009    22407120 :                   DO i = 1, imax
   48010    21006675 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   48011    21006675 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   48012    21006675 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   48013    21006675 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   48014    21006675 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   48015    21006675 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   48016    21006675 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   48017    22407120 :                      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     8402670 :                   imax = 5*1*5
   48020     8402670 :                   kmax = 3
   48021             :                   i = 0
   48022     8402670 :                   DO i1 = 1, 5
   48023    15404895 :                   DO i2 = 1, 1
   48024    49015575 :                   DO i3 = 1, 5
   48025    35011125 :                      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    35011125 :                         + 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    35011125 :                         + 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    42013350 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   48035             :                   END DO
   48036             :                   END DO
   48037             :                   END DO
   48038     2381846 :                   s_offset_d1 = s_offset_d1 + 3
   48039             :                END DO
   48040     1882240 :                s_offset_c1 = s_offset_c1 + 5
   48041             :             END DO
   48042     1449149 :             s_offset_b1 = s_offset_b1 + 1
   48043             :          END DO
   48044     1058310 :          s_offset_a1 = s_offset_a1 + 5
   48045             :       END DO
   48046      510000 :    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      202338 :    SUBROUTINE contract_dsdd(work, &
   48065             :                             nl_a, nl_b, nl_c, nl_d, &
   48066      202338 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   48067      202338 :                             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      202338 :       s_offset_a1 = 0
   48084      434718 :       DO ia = 1, nl_a
   48085             :          s_offset_b1 = 0
   48086      626990 :          DO ib = 1, nl_b
   48087             :             s_offset_c1 = 0
   48088      847399 :             DO ic = 1, nl_c
   48089             :                s_offset_d1 = 0
   48090      997496 :                DO id = 1, nl_d
   48091      544707 :                   buffer1 = 0.0_dp
   48092      544707 :                   imax = 1*6*6
   48093      544707 :                   kmax = 6
   48094    20154159 :                   DO i = 1, imax
   48095    19609452 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   48096    19609452 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   48097    19609452 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   48098    19609452 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   48099    19609452 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   48100    19609452 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   48101    19609452 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   48102    20154159 :                      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      544707 :                   buffer2 = 0.0_dp
   48105      544707 :                   imax = 5*6*6
   48106      544707 :                   kmax = 1
   48107    98591967 :                   DO i = 1, imax
   48108    98591967 :                      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      544707 :                   buffer1 = 0.0_dp
   48111      544707 :                   imax = 5*1*6
   48112      544707 :                   kmax = 6
   48113    16885917 :                   DO i = 1, imax
   48114    16341210 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   48115    16341210 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   48116    16341210 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   48117    16341210 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   48118    16341210 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   48119    16341210 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   48120    16341210 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   48121    16885917 :                      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     3268242 :                   imax = 5*1*5
   48124     3268242 :                   kmax = 6
   48125             :                   i = 0
   48126     3268242 :                   DO i1 = 1, 5
   48127     5991777 :                   DO i2 = 1, 1
   48128    19064745 :                   DO i3 = 1, 5
   48129    13617675 :                      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    13617675 :                         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    13617675 :                         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    13617675 :                         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    13617675 :                         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    13617675 :                         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    13617675 :                         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    13617675 :                         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    16341210 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   48154             :                   END DO
   48155             :                   END DO
   48156             :                   END DO
   48157      997496 :                   s_offset_d1 = s_offset_d1 + 5
   48158             :                END DO
   48159      847399 :                s_offset_c1 = s_offset_c1 + 5
   48160             :             END DO
   48161      626990 :             s_offset_b1 = s_offset_b1 + 1
   48162             :          END DO
   48163      434718 :          s_offset_a1 = s_offset_a1 + 5
   48164             :       END DO
   48165      202338 :    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     1556954 :    SUBROUTINE contract_dpss(work, &
   49932             :                             nl_a, nl_b, nl_c, nl_d, &
   49933     1556954 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   49934     1556954 :                             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     1556954 :       s_offset_a1 = 0
   49951     3183035 :       DO ia = 1, nl_a
   49952             :          s_offset_b1 = 0
   49953     3635634 :          DO ib = 1, nl_b
   49954             :             s_offset_c1 = 0
   49955     5131701 :             DO ic = 1, nl_c
   49956             :                s_offset_d1 = 0
   49957     8434806 :                DO id = 1, nl_d
   49958     5312658 :                   buffer1 = 0.0_dp
   49959     5312658 :                   imax = 3*1*1
   49960     5312658 :                   kmax = 6
   49961    21250632 :                   DO i = 1, imax
   49962    15937974 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   49963    15937974 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   49964    15937974 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   49965    15937974 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   49966    15937974 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   49967    15937974 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   49968    15937974 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   49969    21250632 :                      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     5312658 :                   buffer2 = 0.0_dp
   49972     5312658 :                   imax = 5*1*1
   49973     5312658 :                   kmax = 3
   49974    31875948 :                   DO i = 1, imax
   49975    26563290 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   49976    26563290 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   49977    31875948 :                      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     5312658 :                   buffer1 = 0.0_dp
   49980     5312658 :                   imax = 5*3*1
   49981     5312658 :                   kmax = 1
   49982    85002528 :                   DO i = 1, imax
   49983    85002528 :                      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    10625316 :                   imax = 5*3*1
   49986    10625316 :                   kmax = 1
   49987             :                   i = 0
   49988    10625316 :                   DO i1 = 1, 1
   49989    26563290 :                   DO i2 = 1, 3
   49990   100940502 :                   DO i3 = 1, 5
   49991    79689870 :                      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    95627844 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   49995             :                   END DO
   49996             :                   END DO
   49997             :                   END DO
   49998     8434806 :                   s_offset_d1 = s_offset_d1 + 1
   49999             :                END DO
   50000     5131701 :                s_offset_c1 = s_offset_c1 + 1
   50001             :             END DO
   50002     3635634 :             s_offset_b1 = s_offset_b1 + 3
   50003             :          END DO
   50004     3183035 :          s_offset_a1 = s_offset_a1 + 5
   50005             :       END DO
   50006     1556954 :    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      797789 :    SUBROUTINE contract_dpsp(work, &
   50025             :                             nl_a, nl_b, nl_c, nl_d, &
   50026      797789 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50027      797789 :                             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      797789 :       s_offset_a1 = 0
   50044     1652564 :       DO ia = 1, nl_a
   50045             :          s_offset_b1 = 0
   50046     1900958 :          DO ib = 1, nl_b
   50047             :             s_offset_c1 = 0
   50048     2737783 :             DO ic = 1, nl_c
   50049             :                s_offset_d1 = 0
   50050     4211227 :                DO id = 1, nl_d
   50051     2519627 :                   buffer1 = 0.0_dp
   50052     2519627 :                   imax = 3*1*3
   50053     2519627 :                   kmax = 6
   50054    25196270 :                   DO i = 1, imax
   50055    22676643 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50056    22676643 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50057    22676643 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50058    22676643 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50059    22676643 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50060    22676643 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50061    22676643 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50062    25196270 :                      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     2519627 :                   buffer2 = 0.0_dp
   50065     2519627 :                   imax = 5*1*3
   50066     2519627 :                   kmax = 3
   50067    40314032 :                   DO i = 1, imax
   50068    37794405 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50069    37794405 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50070    40314032 :                      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     2519627 :                   buffer1 = 0.0_dp
   50073     2519627 :                   imax = 5*3*3
   50074     2519627 :                   kmax = 1
   50075   115902842 :                   DO i = 1, imax
   50076   115902842 :                      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     5039254 :                   imax = 5*3*1
   50079     5039254 :                   kmax = 3
   50080             :                   i = 0
   50081     5039254 :                   DO i1 = 1, 1
   50082    12598135 :                   DO i2 = 1, 3
   50083    47872913 :                   DO i3 = 1, 5
   50084    37794405 :                      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    37794405 :                         + 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    37794405 :                         + 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    45353286 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   50094             :                   END DO
   50095             :                   END DO
   50096             :                   END DO
   50097     4211227 :                   s_offset_d1 = s_offset_d1 + 3
   50098             :                END DO
   50099     2737783 :                s_offset_c1 = s_offset_c1 + 1
   50100             :             END DO
   50101     1900958 :             s_offset_b1 = s_offset_b1 + 3
   50102             :          END DO
   50103     1652564 :          s_offset_a1 = s_offset_a1 + 5
   50104             :       END DO
   50105      797789 :    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      369833 :    SUBROUTINE contract_dpsd(work, &
   50124             :                             nl_a, nl_b, nl_c, nl_d, &
   50125      369833 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50126      369833 :                             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      369833 :       s_offset_a1 = 0
   50143      779271 :       DO ia = 1, nl_a
   50144             :          s_offset_b1 = 0
   50145      923432 :          DO ib = 1, nl_b
   50146             :             s_offset_c1 = 0
   50147     1383319 :             DO ic = 1, nl_c
   50148             :                s_offset_d1 = 0
   50149     1838173 :                DO id = 1, nl_d
   50150      968848 :                   buffer1 = 0.0_dp
   50151      968848 :                   imax = 3*1*6
   50152      968848 :                   kmax = 6
   50153    18408112 :                   DO i = 1, imax
   50154    17439264 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50155    17439264 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50156    17439264 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50157    17439264 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50158    17439264 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50159    17439264 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50160    17439264 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50161    18408112 :                      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      968848 :                   buffer2 = 0.0_dp
   50164      968848 :                   imax = 5*1*6
   50165      968848 :                   kmax = 3
   50166    30034288 :                   DO i = 1, imax
   50167    29065440 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50168    29065440 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50169    30034288 :                      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      968848 :                   buffer1 = 0.0_dp
   50172      968848 :                   imax = 5*3*6
   50173      968848 :                   kmax = 1
   50174    88165168 :                   DO i = 1, imax
   50175    88165168 :                      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     1937696 :                   imax = 5*3*1
   50178     1937696 :                   kmax = 6
   50179             :                   i = 0
   50180     1937696 :                   DO i1 = 1, 1
   50181     4844240 :                   DO i2 = 1, 3
   50182    18408112 :                   DO i3 = 1, 5
   50183    14532720 :                      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    14532720 :                         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    14532720 :                         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    14532720 :                         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    14532720 :                         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    14532720 :                         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    14532720 :                         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    14532720 :                         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    17439264 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   50208             :                   END DO
   50209             :                   END DO
   50210             :                   END DO
   50211     1838173 :                   s_offset_d1 = s_offset_d1 + 5
   50212             :                END DO
   50213     1383319 :                s_offset_c1 = s_offset_c1 + 1
   50214             :             END DO
   50215      923432 :             s_offset_b1 = s_offset_b1 + 3
   50216             :          END DO
   50217      779271 :          s_offset_a1 = s_offset_a1 + 5
   50218             :       END DO
   50219      369833 :    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      815122 :    SUBROUTINE contract_dpps(work, &
   50550             :                             nl_a, nl_b, nl_c, nl_d, &
   50551      815122 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50552      815122 :                             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      815122 :       s_offset_a1 = 0
   50569     1678640 :       DO ia = 1, nl_a
   50570             :          s_offset_b1 = 0
   50571     1917707 :          DO ib = 1, nl_b
   50572             :             s_offset_c1 = 0
   50573     2569721 :             DO ic = 1, nl_c
   50574             :                s_offset_d1 = 0
   50575     4107691 :                DO id = 1, nl_d
   50576     2592159 :                   buffer1 = 0.0_dp
   50577     2592159 :                   imax = 3*3*1
   50578     2592159 :                   kmax = 6
   50579    25921590 :                   DO i = 1, imax
   50580    23329431 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50581    23329431 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50582    23329431 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50583    23329431 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50584    23329431 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50585    23329431 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50586    23329431 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50587    25921590 :                      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     2592159 :                   buffer2 = 0.0_dp
   50590     2592159 :                   imax = 5*3*1
   50591     2592159 :                   kmax = 3
   50592    41474544 :                   DO i = 1, imax
   50593    38882385 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50594    38882385 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50595    41474544 :                      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     2592159 :                   buffer1 = 0.0_dp
   50598     2592159 :                   imax = 5*3*1
   50599     2592159 :                   kmax = 3
   50600    41474544 :                   DO i = 1, imax
   50601    38882385 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50602    38882385 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50603    41474544 :                      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    10368636 :                   imax = 5*3*3
   50606    10368636 :                   kmax = 1
   50607             :                   i = 0
   50608    10368636 :                   DO i1 = 1, 3
   50609    33698067 :                   DO i2 = 1, 3
   50610   147753063 :                   DO i3 = 1, 5
   50611   116647155 :                      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   139976586 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   50615             :                   END DO
   50616             :                   END DO
   50617             :                   END DO
   50618     4107691 :                   s_offset_d1 = s_offset_d1 + 1
   50619             :                END DO
   50620     2569721 :                s_offset_c1 = s_offset_c1 + 3
   50621             :             END DO
   50622     1917707 :             s_offset_b1 = s_offset_b1 + 3
   50623             :          END DO
   50624     1678640 :          s_offset_a1 = s_offset_a1 + 5
   50625             :       END DO
   50626      815122 :    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      891851 :    SUBROUTINE contract_dppp(work, &
   50645             :                             nl_a, nl_b, nl_c, nl_d, &
   50646      891851 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50647      891851 :                             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      891851 :       s_offset_a1 = 0
   50664     1824932 :       DO ia = 1, nl_a
   50665             :          s_offset_b1 = 0
   50666     2244740 :          DO ib = 1, nl_b
   50667             :             s_offset_c1 = 0
   50668     3439192 :             DO ic = 1, nl_c
   50669             :                s_offset_d1 = 0
   50670     5809546 :                DO id = 1, nl_d
   50671     3682013 :                   buffer1 = 0.0_dp
   50672     3682013 :                   imax = 3*3*3
   50673     3682013 :                   kmax = 6
   50674   103096364 :                   DO i = 1, imax
   50675    99414351 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50676    99414351 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50677    99414351 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50678    99414351 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50679    99414351 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50680    99414351 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50681    99414351 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50682   103096364 :                      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     3682013 :                   buffer2 = 0.0_dp
   50685     3682013 :                   imax = 5*3*3
   50686     3682013 :                   kmax = 3
   50687   169372598 :                   DO i = 1, imax
   50688   165690585 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50689   165690585 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50690   169372598 :                      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     3682013 :                   buffer1 = 0.0_dp
   50693     3682013 :                   imax = 5*3*3
   50694     3682013 :                   kmax = 3
   50695   169372598 :                   DO i = 1, imax
   50696   165690585 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50697   165690585 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50698   169372598 :                      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    14728052 :                   imax = 5*3*3
   50701    14728052 :                   kmax = 3
   50702             :                   i = 0
   50703    14728052 :                   DO i1 = 1, 3
   50704    47866169 :                   DO i2 = 1, 3
   50705   209874741 :                   DO i3 = 1, 5
   50706   165690585 :                      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   165690585 :                         + 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   165690585 :                         + 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   198828702 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   50716             :                   END DO
   50717             :                   END DO
   50718             :                   END DO
   50719     5809546 :                   s_offset_d1 = s_offset_d1 + 3
   50720             :                END DO
   50721     3439192 :                s_offset_c1 = s_offset_c1 + 3
   50722             :             END DO
   50723     2244740 :             s_offset_b1 = s_offset_b1 + 3
   50724             :          END DO
   50725     1824932 :          s_offset_a1 = s_offset_a1 + 5
   50726             :       END DO
   50727      891851 :    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      246515 :    SUBROUTINE contract_dppd(work, &
   50746             :                             nl_a, nl_b, nl_c, nl_d, &
   50747      246515 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   50748      246515 :                             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      246515 :       s_offset_a1 = 0
   50765      524207 :       DO ia = 1, nl_a
   50766             :          s_offset_b1 = 0
   50767      611803 :          DO ib = 1, nl_b
   50768             :             s_offset_c1 = 0
   50769      806853 :             DO ic = 1, nl_c
   50770             :                s_offset_d1 = 0
   50771     1000214 :                DO id = 1, nl_d
   50772      527472 :                   buffer1 = 0.0_dp
   50773      527472 :                   imax = 3*3*6
   50774      527472 :                   kmax = 6
   50775    29010960 :                   DO i = 1, imax
   50776    28483488 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   50777    28483488 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   50778    28483488 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   50779    28483488 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   50780    28483488 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   50781    28483488 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   50782    28483488 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   50783    29010960 :                      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      527472 :                   buffer2 = 0.0_dp
   50786      527472 :                   imax = 5*3*6
   50787      527472 :                   kmax = 3
   50788    47999952 :                   DO i = 1, imax
   50789    47472480 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   50790    47472480 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   50791    47999952 :                      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      527472 :                   buffer1 = 0.0_dp
   50794      527472 :                   imax = 5*3*6
   50795      527472 :                   kmax = 3
   50796    47999952 :                   DO i = 1, imax
   50797    47472480 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   50798    47472480 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   50799    47999952 :                      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     2109888 :                   imax = 5*3*3
   50802     2109888 :                   kmax = 6
   50803             :                   i = 0
   50804     2109888 :                   DO i1 = 1, 3
   50805     6857136 :                   DO i2 = 1, 3
   50806    30065904 :                   DO i3 = 1, 5
   50807    23736240 :                      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    23736240 :                         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    23736240 :                         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    23736240 :                         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    23736240 :                         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    23736240 :                         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    23736240 :                         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    23736240 :                         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    28483488 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   50832             :                   END DO
   50833             :                   END DO
   50834             :                   END DO
   50835     1000214 :                   s_offset_d1 = s_offset_d1 + 5
   50836             :                END DO
   50837      806853 :                s_offset_c1 = s_offset_c1 + 3
   50838             :             END DO
   50839      611803 :             s_offset_b1 = s_offset_b1 + 3
   50840             :          END DO
   50841      524207 :          s_offset_a1 = s_offset_a1 + 5
   50842             :       END DO
   50843      246515 :    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      342142 :    SUBROUTINE contract_dpds(work, &
   51178             :                             nl_a, nl_b, nl_c, nl_d, &
   51179      342142 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51180      342142 :                             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      342142 :       s_offset_a1 = 0
   51197      711007 :       DO ia = 1, nl_a
   51198             :          s_offset_b1 = 0
   51199      842031 :          DO ib = 1, nl_b
   51200             :             s_offset_c1 = 0
   51201      981734 :             DO ic = 1, nl_c
   51202             :                s_offset_d1 = 0
   51203     1373967 :                DO id = 1, nl_d
   51204      865399 :                   buffer1 = 0.0_dp
   51205      865399 :                   imax = 3*6*1
   51206      865399 :                   kmax = 6
   51207    16442581 :                   DO i = 1, imax
   51208    15577182 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51209    15577182 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51210    15577182 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51211    15577182 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51212    15577182 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51213    15577182 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51214    15577182 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51215    16442581 :                      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      865399 :                   buffer2 = 0.0_dp
   51218      865399 :                   imax = 5*6*1
   51219      865399 :                   kmax = 3
   51220    26827369 :                   DO i = 1, imax
   51221    25961970 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51222    25961970 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51223    26827369 :                      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      865399 :                   buffer1 = 0.0_dp
   51226      865399 :                   imax = 5*3*1
   51227      865399 :                   kmax = 6
   51228    13846384 :                   DO i = 1, imax
   51229    12980985 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51230    12980985 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51231    12980985 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51232    12980985 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51233    12980985 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51234    12980985 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51235    12980985 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51236    13846384 :                      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     5192394 :                   imax = 5*3*5
   51239     5192394 :                   kmax = 1
   51240             :                   i = 0
   51241     5192394 :                   DO i1 = 1, 5
   51242    18173379 :                   DO i2 = 1, 3
   51243    82212905 :                   DO i3 = 1, 5
   51244    64904925 :                      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    77885910 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   51248             :                   END DO
   51249             :                   END DO
   51250             :                   END DO
   51251     1373967 :                   s_offset_d1 = s_offset_d1 + 1
   51252             :                END DO
   51253      981734 :                s_offset_c1 = s_offset_c1 + 5
   51254             :             END DO
   51255      842031 :             s_offset_b1 = s_offset_b1 + 3
   51256             :          END DO
   51257      711007 :          s_offset_a1 = s_offset_a1 + 5
   51258             :       END DO
   51259      342142 :    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      218730 :    SUBROUTINE contract_dpdp(work, &
   51278             :                             nl_a, nl_b, nl_c, nl_d, &
   51279      218730 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51280      218730 :                             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      218730 :       s_offset_a1 = 0
   51297      461104 :       DO ia = 1, nl_a
   51298             :          s_offset_b1 = 0
   51299      541161 :          DO ib = 1, nl_b
   51300             :             s_offset_c1 = 0
   51301      629232 :             DO ic = 1, nl_c
   51302             :                s_offset_d1 = 0
   51303      781527 :                DO id = 1, nl_d
   51304      451082 :                   buffer1 = 0.0_dp
   51305      451082 :                   imax = 3*6*3
   51306      451082 :                   kmax = 6
   51307    24809510 :                   DO i = 1, imax
   51308    24358428 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51309    24358428 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51310    24358428 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51311    24358428 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51312    24358428 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51313    24358428 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51314    24358428 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51315    24809510 :                      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      451082 :                   buffer2 = 0.0_dp
   51318      451082 :                   imax = 5*6*3
   51319      451082 :                   kmax = 3
   51320    41048462 :                   DO i = 1, imax
   51321    40597380 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51322    40597380 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51323    41048462 :                      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      451082 :                   buffer1 = 0.0_dp
   51326      451082 :                   imax = 5*3*3
   51327      451082 :                   kmax = 6
   51328    20749772 :                   DO i = 1, imax
   51329    20298690 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51330    20298690 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51331    20298690 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51332    20298690 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51333    20298690 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51334    20298690 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51335    20298690 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51336    20749772 :                      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     2706492 :                   imax = 5*3*5
   51339     2706492 :                   kmax = 3
   51340             :                   i = 0
   51341     2706492 :                   DO i1 = 1, 5
   51342     9472722 :                   DO i2 = 1, 3
   51343    42852790 :                   DO i3 = 1, 5
   51344    33831150 :                      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    33831150 :                         + 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    33831150 :                         + 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    40597380 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   51354             :                   END DO
   51355             :                   END DO
   51356             :                   END DO
   51357      781527 :                   s_offset_d1 = s_offset_d1 + 3
   51358             :                END DO
   51359      629232 :                s_offset_c1 = s_offset_c1 + 5
   51360             :             END DO
   51361      541161 :             s_offset_b1 = s_offset_b1 + 3
   51362             :          END DO
   51363      461104 :          s_offset_a1 = s_offset_a1 + 5
   51364             :       END DO
   51365      218730 :    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      129703 :    SUBROUTINE contract_dpdd(work, &
   51384             :                             nl_a, nl_b, nl_c, nl_d, &
   51385      129703 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   51386      129703 :                             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      129703 :       s_offset_a1 = 0
   51403      278533 :       DO ia = 1, nl_a
   51404             :          s_offset_b1 = 0
   51405      329977 :          DO ib = 1, nl_b
   51406             :             s_offset_c1 = 0
   51407      384999 :             DO ic = 1, nl_c
   51408             :                s_offset_d1 = 0
   51409      443965 :                DO id = 1, nl_d
   51410      240113 :                   buffer1 = 0.0_dp
   51411      240113 :                   imax = 3*6*6
   51412      240113 :                   kmax = 6
   51413    26172317 :                   DO i = 1, imax
   51414    25932204 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   51415    25932204 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   51416    25932204 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   51417    25932204 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   51418    25932204 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   51419    25932204 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   51420    25932204 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   51421    26172317 :                      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      240113 :                   buffer2 = 0.0_dp
   51424      240113 :                   imax = 5*6*6
   51425      240113 :                   kmax = 3
   51426    43460453 :                   DO i = 1, imax
   51427    43220340 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   51428    43220340 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   51429    43460453 :                      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      240113 :                   buffer1 = 0.0_dp
   51432      240113 :                   imax = 5*3*6
   51433      240113 :                   kmax = 6
   51434    21850283 :                   DO i = 1, imax
   51435    21610170 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   51436    21610170 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   51437    21610170 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   51438    21610170 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   51439    21610170 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   51440    21610170 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   51441    21610170 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   51442    21850283 :                      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     1440678 :                   imax = 5*3*5
   51445     1440678 :                   kmax = 6
   51446             :                   i = 0
   51447     1440678 :                   DO i1 = 1, 5
   51448     5042373 :                   DO i2 = 1, 3
   51449    22810735 :                   DO i3 = 1, 5
   51450    18008475 :                      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    18008475 :                         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    18008475 :                         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    18008475 :                         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    18008475 :                         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    18008475 :                         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    18008475 :                         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    18008475 :                         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    21610170 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   51475             :                   END DO
   51476             :                   END DO
   51477             :                   END DO
   51478      443965 :                   s_offset_d1 = s_offset_d1 + 5
   51479             :                END DO
   51480      384999 :                s_offset_c1 = s_offset_c1 + 5
   51481             :             END DO
   51482      329977 :             s_offset_b1 = s_offset_b1 + 3
   51483             :          END DO
   51484      278533 :          s_offset_a1 = s_offset_a1 + 5
   51485             :       END DO
   51486      129703 :    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      440021 :    SUBROUTINE contract_ddss(work, &
   53277             :                             nl_a, nl_b, nl_c, nl_d, &
   53278      440021 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53279      440021 :                             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      440021 :       s_offset_a1 = 0
   53296      939944 :       DO ia = 1, nl_a
   53297             :          s_offset_b1 = 0
   53298     1122469 :          DO ib = 1, nl_b
   53299             :             s_offset_c1 = 0
   53300     1629537 :             DO ic = 1, nl_c
   53301             :                s_offset_d1 = 0
   53302     2787446 :                DO id = 1, nl_d
   53303     1780455 :                   buffer1 = 0.0_dp
   53304     1780455 :                   imax = 6*1*1
   53305     1780455 :                   kmax = 6
   53306    12463185 :                   DO i = 1, imax
   53307    10682730 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53308    10682730 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53309    10682730 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53310    10682730 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53311    10682730 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53312    10682730 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53313    10682730 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53314    12463185 :                      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     1780455 :                   buffer2 = 0.0_dp
   53317     1780455 :                   imax = 5*1*1
   53318     1780455 :                   kmax = 6
   53319    10682730 :                   DO i = 1, imax
   53320     8902275 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53321     8902275 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53322     8902275 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53323     8902275 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53324     8902275 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53325     8902275 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53326     8902275 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53327    10682730 :                      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     1780455 :                   buffer1 = 0.0_dp
   53330     1780455 :                   imax = 5*5*1
   53331     1780455 :                   kmax = 1
   53332    46291830 :                   DO i = 1, imax
   53333    46291830 :                      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     3560910 :                   imax = 5*5*1
   53336     3560910 :                   kmax = 1
   53337             :                   i = 0
   53338     3560910 :                   DO i1 = 1, 1
   53339    12463185 :                   DO i2 = 1, 5
   53340    55194105 :                   DO i3 = 1, 5
   53341    44511375 :                      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    53413650 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   53345             :                   END DO
   53346             :                   END DO
   53347             :                   END DO
   53348     2787446 :                   s_offset_d1 = s_offset_d1 + 1
   53349             :                END DO
   53350     1629537 :                s_offset_c1 = s_offset_c1 + 1
   53351             :             END DO
   53352     1122469 :             s_offset_b1 = s_offset_b1 + 5
   53353             :          END DO
   53354      939944 :          s_offset_a1 = s_offset_a1 + 5
   53355             :       END DO
   53356      440021 :    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      401176 :    SUBROUTINE contract_ddsp(work, &
   53375             :                             nl_a, nl_b, nl_c, nl_d, &
   53376      401176 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53377      401176 :                             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      401176 :       s_offset_a1 = 0
   53394      850138 :       DO ia = 1, nl_a
   53395             :          s_offset_b1 = 0
   53396      997214 :          DO ib = 1, nl_b
   53397             :             s_offset_c1 = 0
   53398     1448927 :             DO ic = 1, nl_c
   53399             :                s_offset_d1 = 0
   53400     2066988 :                DO id = 1, nl_d
   53401     1166313 :                   buffer1 = 0.0_dp
   53402     1166313 :                   imax = 6*1*3
   53403     1166313 :                   kmax = 6
   53404    22159947 :                   DO i = 1, imax
   53405    20993634 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53406    20993634 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53407    20993634 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53408    20993634 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53409    20993634 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53410    20993634 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53411    20993634 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53412    22159947 :                      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     1166313 :                   buffer2 = 0.0_dp
   53415     1166313 :                   imax = 5*1*3
   53416     1166313 :                   kmax = 6
   53417    18661008 :                   DO i = 1, imax
   53418    17494695 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53419    17494695 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53420    17494695 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53421    17494695 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53422    17494695 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53423    17494695 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53424    17494695 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53425    18661008 :                      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     1166313 :                   buffer1 = 0.0_dp
   53428     1166313 :                   imax = 5*5*3
   53429     1166313 :                   kmax = 1
   53430    88639788 :                   DO i = 1, imax
   53431    88639788 :                      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     2332626 :                   imax = 5*5*1
   53434     2332626 :                   kmax = 3
   53435             :                   i = 0
   53436     2332626 :                   DO i1 = 1, 1
   53437     8164191 :                   DO i2 = 1, 5
   53438    36155703 :                   DO i3 = 1, 5
   53439    29157825 :                      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    29157825 :                         + 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    29157825 :                         + 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    34989390 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   53449             :                   END DO
   53450             :                   END DO
   53451             :                   END DO
   53452     2066988 :                   s_offset_d1 = s_offset_d1 + 3
   53453             :                END DO
   53454     1448927 :                s_offset_c1 = s_offset_c1 + 1
   53455             :             END DO
   53456      997214 :             s_offset_b1 = s_offset_b1 + 5
   53457             :          END DO
   53458      850138 :          s_offset_a1 = s_offset_a1 + 5
   53459             :       END DO
   53460      401176 :    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      193894 :    SUBROUTINE contract_ddsd(work, &
   53479             :                             nl_a, nl_b, nl_c, nl_d, &
   53480      193894 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53481      193894 :                             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      193894 :       s_offset_a1 = 0
   53498      421875 :       DO ia = 1, nl_a
   53499             :          s_offset_b1 = 0
   53500      527532 :          DO ib = 1, nl_b
   53501             :             s_offset_c1 = 0
   53502      794231 :             DO ic = 1, nl_c
   53503             :                s_offset_d1 = 0
   53504     1111882 :                DO id = 1, nl_d
   53505      617202 :                   buffer1 = 0.0_dp
   53506      617202 :                   imax = 6*1*6
   53507      617202 :                   kmax = 6
   53508    22836474 :                   DO i = 1, imax
   53509    22219272 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53510    22219272 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53511    22219272 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53512    22219272 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53513    22219272 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53514    22219272 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53515    22219272 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53516    22836474 :                      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      617202 :                   buffer2 = 0.0_dp
   53519      617202 :                   imax = 5*1*6
   53520      617202 :                   kmax = 6
   53521    19133262 :                   DO i = 1, imax
   53522    18516060 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53523    18516060 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53524    18516060 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53525    18516060 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53526    18516060 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53527    18516060 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53528    18516060 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53529    19133262 :                      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      617202 :                   buffer1 = 0.0_dp
   53532      617202 :                   imax = 5*5*6
   53533      617202 :                   kmax = 1
   53534    93197502 :                   DO i = 1, imax
   53535    93197502 :                      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     1234404 :                   imax = 5*5*1
   53538     1234404 :                   kmax = 6
   53539             :                   i = 0
   53540     1234404 :                   DO i1 = 1, 1
   53541     4320414 :                   DO i2 = 1, 5
   53542    19133262 :                   DO i3 = 1, 5
   53543    15430050 :                      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    15430050 :                         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    15430050 :                         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    15430050 :                         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    15430050 :                         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    15430050 :                         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    15430050 :                         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    15430050 :                         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    18516060 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   53568             :                   END DO
   53569             :                   END DO
   53570             :                   END DO
   53571     1111882 :                   s_offset_d1 = s_offset_d1 + 5
   53572             :                END DO
   53573      794231 :                s_offset_c1 = s_offset_c1 + 1
   53574             :             END DO
   53575      527532 :             s_offset_b1 = s_offset_b1 + 5
   53576             :          END DO
   53577      421875 :          s_offset_a1 = s_offset_a1 + 5
   53578             :       END DO
   53579      193894 :    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      361970 :    SUBROUTINE contract_ddps(work, &
   53920             :                             nl_a, nl_b, nl_c, nl_d, &
   53921      361970 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   53922      361970 :                             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      361970 :       s_offset_a1 = 0
   53939      764840 :       DO ia = 1, nl_a
   53940             :          s_offset_b1 = 0
   53941      891579 :          DO ib = 1, nl_b
   53942             :             s_offset_c1 = 0
   53943     1148387 :             DO ic = 1, nl_c
   53944             :                s_offset_d1 = 0
   53945     1813762 :                DO id = 1, nl_d
   53946     1154084 :                   buffer1 = 0.0_dp
   53947     1154084 :                   imax = 6*3*1
   53948     1154084 :                   kmax = 6
   53949    21927596 :                   DO i = 1, imax
   53950    20773512 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   53951    20773512 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   53952    20773512 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   53953    20773512 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   53954    20773512 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   53955    20773512 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   53956    20773512 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   53957    21927596 :                      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     1154084 :                   buffer2 = 0.0_dp
   53960     1154084 :                   imax = 5*3*1
   53961     1154084 :                   kmax = 6
   53962    18465344 :                   DO i = 1, imax
   53963    17311260 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   53964    17311260 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   53965    17311260 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   53966    17311260 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   53967    17311260 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   53968    17311260 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   53969    17311260 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   53970    18465344 :                      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     1154084 :                   buffer1 = 0.0_dp
   53973     1154084 :                   imax = 5*5*1
   53974     1154084 :                   kmax = 3
   53975    30006184 :                   DO i = 1, imax
   53976    28852100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   53977    28852100 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   53978    30006184 :                      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     4616336 :                   imax = 5*5*3
   53981     4616336 :                   kmax = 1
   53982             :                   i = 0
   53983     4616336 :                   DO i1 = 1, 3
   53984    21927596 :                   DO i2 = 1, 5
   53985   107329812 :                   DO i3 = 1, 5
   53986    86556300 :                      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   103867560 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   53990             :                   END DO
   53991             :                   END DO
   53992             :                   END DO
   53993     1813762 :                   s_offset_d1 = s_offset_d1 + 1
   53994             :                END DO
   53995     1148387 :                s_offset_c1 = s_offset_c1 + 3
   53996             :             END DO
   53997      891579 :             s_offset_b1 = s_offset_b1 + 5
   53998             :          END DO
   53999      764840 :          s_offset_a1 = s_offset_a1 + 5
   54000             :       END DO
   54001      361970 :    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      254497 :    SUBROUTINE contract_ddpp(work, &
   54020             :                             nl_a, nl_b, nl_c, nl_d, &
   54021      254497 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54022      254497 :                             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      254497 :       s_offset_a1 = 0
   54039      543897 :       DO ia = 1, nl_a
   54040             :          s_offset_b1 = 0
   54041      652973 :          DO ib = 1, nl_b
   54042             :             s_offset_c1 = 0
   54043      841804 :             DO ic = 1, nl_c
   54044             :                s_offset_d1 = 0
   54045     1098865 :                DO id = 1, nl_d
   54046      620634 :                   buffer1 = 0.0_dp
   54047      620634 :                   imax = 6*3*3
   54048      620634 :                   kmax = 6
   54049    34134870 :                   DO i = 1, imax
   54050    33514236 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54051    33514236 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54052    33514236 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54053    33514236 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54054    33514236 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54055    33514236 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54056    33514236 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54057    34134870 :                      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      620634 :                   buffer2 = 0.0_dp
   54060      620634 :                   imax = 5*3*3
   54061      620634 :                   kmax = 6
   54062    28549164 :                   DO i = 1, imax
   54063    27928530 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54064    27928530 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54065    27928530 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54066    27928530 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54067    27928530 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54068    27928530 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54069    27928530 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54070    28549164 :                      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      620634 :                   buffer1 = 0.0_dp
   54073      620634 :                   imax = 5*5*3
   54074      620634 :                   kmax = 3
   54075    47168184 :                   DO i = 1, imax
   54076    46547550 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54077    46547550 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54078    47168184 :                      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     2482536 :                   imax = 5*5*3
   54081     2482536 :                   kmax = 3
   54082             :                   i = 0
   54083     2482536 :                   DO i1 = 1, 3
   54084    11792046 :                   DO i2 = 1, 5
   54085    57718962 :                   DO i3 = 1, 5
   54086    46547550 :                      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    46547550 :                         + 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    46547550 :                         + 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    55857060 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   54096             :                   END DO
   54097             :                   END DO
   54098             :                   END DO
   54099     1098865 :                   s_offset_d1 = s_offset_d1 + 3
   54100             :                END DO
   54101      841804 :                s_offset_c1 = s_offset_c1 + 3
   54102             :             END DO
   54103      652973 :             s_offset_b1 = s_offset_b1 + 5
   54104             :          END DO
   54105      543897 :          s_offset_a1 = s_offset_a1 + 5
   54106             :       END DO
   54107      254497 :    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      164784 :    SUBROUTINE contract_ddpd(work, &
   54126             :                             nl_a, nl_b, nl_c, nl_d, &
   54127      164784 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54128      164784 :                             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      164784 :       s_offset_a1 = 0
   54145      355742 :       DO ia = 1, nl_a
   54146             :          s_offset_b1 = 0
   54147      438797 :          DO ib = 1, nl_b
   54148             :             s_offset_c1 = 0
   54149      570196 :             DO ic = 1, nl_c
   54150             :                s_offset_d1 = 0
   54151      711257 :                DO id = 1, nl_d
   54152      388900 :                   buffer1 = 0.0_dp
   54153      388900 :                   imax = 6*3*6
   54154      388900 :                   kmax = 6
   54155    42390100 :                   DO i = 1, imax
   54156    42001200 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54157    42001200 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54158    42001200 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54159    42001200 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54160    42001200 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54161    42001200 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54162    42001200 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54163    42390100 :                      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      388900 :                   buffer2 = 0.0_dp
   54166      388900 :                   imax = 5*3*6
   54167      388900 :                   kmax = 6
   54168    35389900 :                   DO i = 1, imax
   54169    35001000 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54170    35001000 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54171    35001000 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54172    35001000 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54173    35001000 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54174    35001000 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54175    35001000 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54176    35389900 :                      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      388900 :                   buffer1 = 0.0_dp
   54179      388900 :                   imax = 5*5*6
   54180      388900 :                   kmax = 3
   54181    58723900 :                   DO i = 1, imax
   54182    58335000 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54183    58335000 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54184    58723900 :                      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     1555600 :                   imax = 5*5*3
   54187     1555600 :                   kmax = 6
   54188             :                   i = 0
   54189     1555600 :                   DO i1 = 1, 3
   54190     7389100 :                   DO i2 = 1, 5
   54191    36167700 :                   DO i3 = 1, 5
   54192    29167500 :                      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    29167500 :                         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    29167500 :                         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    29167500 :                         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    29167500 :                         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    29167500 :                         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    29167500 :                         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    29167500 :                         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    35001000 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   54217             :                   END DO
   54218             :                   END DO
   54219             :                   END DO
   54220      711257 :                   s_offset_d1 = s_offset_d1 + 5
   54221             :                END DO
   54222      570196 :                s_offset_c1 = s_offset_c1 + 3
   54223             :             END DO
   54224      438797 :             s_offset_b1 = s_offset_b1 + 5
   54225             :          END DO
   54226      355742 :          s_offset_a1 = s_offset_a1 + 5
   54227             :       END DO
   54228      164784 :    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      124031 :    SUBROUTINE contract_ddds(work, &
   54573             :                             nl_a, nl_b, nl_c, nl_d, &
   54574      124031 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54575      124031 :                             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      124031 :       s_offset_a1 = 0
   54592      268865 :       DO ia = 1, nl_a
   54593             :          s_offset_b1 = 0
   54594      333856 :          DO ib = 1, nl_b
   54595             :             s_offset_c1 = 0
   54596      405560 :             DO ic = 1, nl_c
   54597             :                s_offset_d1 = 0
   54598      599809 :                DO id = 1, nl_d
   54599      383271 :                   buffer1 = 0.0_dp
   54600      383271 :                   imax = 6*6*1
   54601      383271 :                   kmax = 6
   54602    14181027 :                   DO i = 1, imax
   54603    13797756 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54604    13797756 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54605    13797756 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54606    13797756 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54607    13797756 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54608    13797756 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54609    13797756 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54610    14181027 :                      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      383271 :                   buffer2 = 0.0_dp
   54613      383271 :                   imax = 5*6*1
   54614      383271 :                   kmax = 6
   54615    11881401 :                   DO i = 1, imax
   54616    11498130 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54617    11498130 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54618    11498130 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54619    11498130 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54620    11498130 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54621    11498130 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54622    11498130 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54623    11881401 :                      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      383271 :                   buffer1 = 0.0_dp
   54626      383271 :                   imax = 5*5*1
   54627      383271 :                   kmax = 6
   54628     9965046 :                   DO i = 1, imax
   54629     9581775 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54630     9581775 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54631     9581775 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54632     9581775 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54633     9581775 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54634     9581775 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54635     9581775 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54636     9965046 :                      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     2299626 :                   imax = 5*5*5
   54639     2299626 :                   kmax = 1
   54640             :                   i = 0
   54641     2299626 :                   DO i1 = 1, 5
   54642    11881401 :                   DO i2 = 1, 5
   54643    59407005 :                   DO i3 = 1, 5
   54644    47908875 :                      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    57490650 :                         + buffer1(1 + (i - 1)*kmax)*sphi_d(1, 1 + s_offset_d1)
   54648             :                   END DO
   54649             :                   END DO
   54650             :                   END DO
   54651      599809 :                   s_offset_d1 = s_offset_d1 + 1
   54652             :                END DO
   54653      405560 :                s_offset_c1 = s_offset_c1 + 5
   54654             :             END DO
   54655      333856 :             s_offset_b1 = s_offset_b1 + 5
   54656             :          END DO
   54657      268865 :          s_offset_a1 = s_offset_a1 + 5
   54658             :       END DO
   54659      124031 :    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      118155 :    SUBROUTINE contract_dddp(work, &
   54678             :                             nl_a, nl_b, nl_c, nl_d, &
   54679      118155 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54680      118155 :                             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      118155 :       s_offset_a1 = 0
   54697      253574 :       DO ia = 1, nl_a
   54698             :          s_offset_b1 = 0
   54699      307631 :          DO ib = 1, nl_b
   54700             :             s_offset_c1 = 0
   54701      365459 :             DO ic = 1, nl_c
   54702             :                s_offset_d1 = 0
   54703      427395 :                DO id = 1, nl_d
   54704      234148 :                   buffer1 = 0.0_dp
   54705      234148 :                   imax = 6*6*3
   54706      234148 :                   kmax = 6
   54707    25522132 :                   DO i = 1, imax
   54708    25287984 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54709    25287984 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54710    25287984 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54711    25287984 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54712    25287984 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54713    25287984 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54714    25287984 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54715    25522132 :                      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      234148 :                   buffer2 = 0.0_dp
   54718      234148 :                   imax = 5*6*3
   54719      234148 :                   kmax = 6
   54720    21307468 :                   DO i = 1, imax
   54721    21073320 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54722    21073320 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54723    21073320 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54724    21073320 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54725    21073320 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54726    21073320 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54727    21073320 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54728    21307468 :                      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      234148 :                   buffer1 = 0.0_dp
   54731      234148 :                   imax = 5*5*3
   54732      234148 :                   kmax = 6
   54733    17795248 :                   DO i = 1, imax
   54734    17561100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54735    17561100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54736    17561100 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54737    17561100 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54738    17561100 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54739    17561100 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54740    17561100 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54741    17795248 :                      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     1404888 :                   imax = 5*5*5
   54744     1404888 :                   kmax = 3
   54745             :                   i = 0
   54746     1404888 :                   DO i1 = 1, 5
   54747     7258588 :                   DO i2 = 1, 5
   54748    36292940 :                   DO i3 = 1, 5
   54749    29268500 :                      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    29268500 :                         + 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    29268500 :                         + 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    35122200 :                         + buffer1(3 + (i - 1)*kmax)*sphi_d(3, 2 + s_offset_d1)
   54759             :                   END DO
   54760             :                   END DO
   54761             :                   END DO
   54762      427395 :                   s_offset_d1 = s_offset_d1 + 3
   54763             :                END DO
   54764      365459 :                s_offset_c1 = s_offset_c1 + 5
   54765             :             END DO
   54766      307631 :             s_offset_b1 = s_offset_b1 + 5
   54767             :          END DO
   54768      253574 :          s_offset_a1 = s_offset_a1 + 5
   54769             :       END DO
   54770      118155 :    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       81603 :    SUBROUTINE contract_dddd(work, &
   54789             :                             nl_a, nl_b, nl_c, nl_d, &
   54790       81603 :                             sphi_a, sphi_b, sphi_c, sphi_d, &
   54791       81603 :                             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       81603 :       s_offset_a1 = 0
   54808      178669 :       DO ia = 1, nl_a
   54809             :          s_offset_b1 = 0
   54810      227810 :          DO ib = 1, nl_b
   54811             :             s_offset_c1 = 0
   54812      280746 :             DO ic = 1, nl_c
   54813             :                s_offset_d1 = 0
   54814      343064 :                DO id = 1, nl_d
   54815      193062 :                   buffer1 = 0.0_dp
   54816      193062 :                   imax = 6*6*6
   54817      193062 :                   kmax = 6
   54818    41894454 :                   DO i = 1, imax
   54819    41701392 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 3 + s_offset_a1)
   54820    41701392 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(1 + (i - 1)*kmax)*sphi_a(1, 5 + s_offset_a1)
   54821    41701392 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + work(2 + (i - 1)*kmax)*sphi_a(2, 1 + s_offset_a1)
   54822    41701392 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + work(3 + (i - 1)*kmax)*sphi_a(3, 4 + s_offset_a1)
   54823    41701392 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 3 + s_offset_a1)
   54824    41701392 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + work(4 + (i - 1)*kmax)*sphi_a(4, 5 + s_offset_a1)
   54825    41701392 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + work(5 + (i - 1)*kmax)*sphi_a(5, 2 + s_offset_a1)
   54826    41894454 :                      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      193062 :                   buffer2 = 0.0_dp
   54829      193062 :                   imax = 5*6*6
   54830      193062 :                   kmax = 6
   54831    34944222 :                   DO i = 1, imax
   54832    34751160 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 3 + s_offset_b1)
   54833    34751160 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(1 + (i - 1)*kmax)*sphi_b(1, 5 + s_offset_b1)
   54834    34751160 :                      buffer2(i + imax*(1 - 1)) = buffer2(i + imax*(1 - 1)) + buffer1(2 + (i - 1)*kmax)*sphi_b(2, 1 + s_offset_b1)
   54835    34751160 :                      buffer2(i + imax*(4 - 1)) = buffer2(i + imax*(4 - 1)) + buffer1(3 + (i - 1)*kmax)*sphi_b(3, 4 + s_offset_b1)
   54836    34751160 :                      buffer2(i + imax*(3 - 1)) = buffer2(i + imax*(3 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 3 + s_offset_b1)
   54837    34751160 :                      buffer2(i + imax*(5 - 1)) = buffer2(i + imax*(5 - 1)) + buffer1(4 + (i - 1)*kmax)*sphi_b(4, 5 + s_offset_b1)
   54838    34751160 :                      buffer2(i + imax*(2 - 1)) = buffer2(i + imax*(2 - 1)) + buffer1(5 + (i - 1)*kmax)*sphi_b(5, 2 + s_offset_b1)
   54839    34944222 :                      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      193062 :                   buffer1 = 0.0_dp
   54842      193062 :                   imax = 5*5*6
   54843      193062 :                   kmax = 6
   54844    29152362 :                   DO i = 1, imax
   54845    28959300 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 3 + s_offset_c1)
   54846    28959300 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(1 + (i - 1)*kmax)*sphi_c(1, 5 + s_offset_c1)
   54847    28959300 :                      buffer1(i + imax*(1 - 1)) = buffer1(i + imax*(1 - 1)) + buffer2(2 + (i - 1)*kmax)*sphi_c(2, 1 + s_offset_c1)
   54848    28959300 :                      buffer1(i + imax*(4 - 1)) = buffer1(i + imax*(4 - 1)) + buffer2(3 + (i - 1)*kmax)*sphi_c(3, 4 + s_offset_c1)
   54849    28959300 :                      buffer1(i + imax*(3 - 1)) = buffer1(i + imax*(3 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 3 + s_offset_c1)
   54850    28959300 :                      buffer1(i + imax*(5 - 1)) = buffer1(i + imax*(5 - 1)) + buffer2(4 + (i - 1)*kmax)*sphi_c(4, 5 + s_offset_c1)
   54851    28959300 :                      buffer1(i + imax*(2 - 1)) = buffer1(i + imax*(2 - 1)) + buffer2(5 + (i - 1)*kmax)*sphi_c(5, 2 + s_offset_c1)
   54852    29152362 :                      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     1158372 :                   imax = 5*5*5
   54855     1158372 :                   kmax = 6
   54856             :                   i = 0
   54857     1158372 :                   DO i1 = 1, 5
   54858     5984922 :                   DO i2 = 1, 5
   54859    29924610 :                   DO i3 = 1, 5
   54860    24132750 :                      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    24132750 :                         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    24132750 :                         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    24132750 :                         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    24132750 :                         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    24132750 :                         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    24132750 :                         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    24132750 :                         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    28959300 :                         buffer1(6 + (i - 1)*kmax)*sphi_d(6, 3 + s_offset_d1)
   54885             :                   END DO
   54886             :                   END DO
   54887             :                   END DO
   54888      343064 :                   s_offset_d1 = s_offset_d1 + 5
   54889             :                END DO
   54890      280746 :                s_offset_c1 = s_offset_c1 + 5
   54891             :             END DO
   54892      227810 :             s_offset_b1 = s_offset_b1 + 5
   54893             :          END DO
   54894      178669 :          s_offset_a1 = s_offset_a1 + 5
   54895             :       END DO
   54896       81603 :    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 1.15