LCOV - code coverage report
Current view: top level - src/aobasis - ai_coulomb.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 95.5 % 578 552
Test Date: 2025-12-04 06:27:48 Functions: 100.0 % 3 3

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2025 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Calculation of Coulomb integrals over Cartesian Gaussian-type functions
      10              : !>      (electron repulsion integrals, ERIs).
      11              : !> \par Literature
      12              : !>      S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986)
      13              : !> \par History
      14              : !>      none
      15              : !> \par Parameters
      16              : !>       - ax,ay,az    : Angular momentum index numbers of orbital a.
      17              : !>       - bx,by,bz    : Angular momentum index numbers of orbital b.
      18              : !>       - cx,cy,cz    : Angular momentum index numbers of orbital c.
      19              : !>       - coset       : Cartesian orbital set pointer.
      20              : !>       - dab         : Distance between the atomic centers a and b.
      21              : !>       - dac         : Distance between the atomic centers a and c.
      22              : !>       - dbc         : Distance between the atomic centers b and c.
      23              : !>       - gccc        : Prefactor of the primitive Gaussian function c.
      24              : !>       - l{a,b,c}    : Angular momentum quantum number of shell a, b or c.
      25              : !>       - l{a,b,c}_max: Maximum angular momentum quantum number of shell a, b or c.
      26              : !>       - l{a,b,c}_min: Minimum angular momentum quantum number of shell a, b or c.
      27              : !>       - ncoset      : Number of orbitals in a Cartesian orbital set.
      28              : !>       - npgf{a,b}   : Degree of contraction of shell a or b.
      29              : !>       - rab         : Distance vector between the atomic centers a and b.
      30              : !>       - rab2        : Square of the distance between the atomic centers a and b.
      31              : !>       - rac         : Distance vector between the atomic centers a and c.
      32              : !>       - rac2        : Square of the distance between the atomic centers a and c.
      33              : !>       - rbc         : Distance vector between the atomic centers b and c.
      34              : !>       - rbc2        : Square of the distance between the atomic centers b and c.
      35              : !>       - rpgf{a,b,c} : Radius of the primitive Gaussian-type function a, b or c.
      36              : !>       - zet{a,b,c}  : Exponents of the Gaussian-type functions a, b or c.
      37              : !>       - zetp        : Reciprocal of the sum of the exponents of orbital a and b.
      38              : !>       - zetw        : Reciprocal of the sum of the exponents of orbital a, b and c.
      39              : !> \author Matthias Krack (22.08.2000)
      40              : ! **************************************************************************************************
      41              : MODULE ai_coulomb
      42              : 
      43              :    USE gamma,                           ONLY: fgamma => fgamma_0
      44              :    USE kinds,                           ONLY: dp
      45              :    USE mathconstants,                   ONLY: pi
      46              :    USE orbital_pointers,                ONLY: coset,&
      47              :                                               ncoset
      48              : #include "../base/base_uses.f90"
      49              : 
      50              :    IMPLICIT NONE
      51              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_coulomb'
      52              :    PRIVATE
      53              : 
      54              :    ! *** Public subroutines ***
      55              : 
      56              :    PUBLIC :: coulomb2, coulomb2_new, coulomb3
      57              : 
      58              : CONTAINS
      59              : 
      60              : ! **************************************************************************************************
      61              : !> \brief   Calculation of the primitive two-center Coulomb integrals over
      62              : !>          Cartesian Gaussian-type functions.
      63              : !> \param la_max ...
      64              : !> \param npgfa ...
      65              : !> \param zeta ...
      66              : !> \param rpgfa ...
      67              : !> \param la_min ...
      68              : !> \param lc_max ...
      69              : !> \param npgfc ...
      70              : !> \param zetc ...
      71              : !> \param rpgfc ...
      72              : !> \param lc_min ...
      73              : !> \param rac ...
      74              : !> \param rac2 ...
      75              : !> \param vac ...
      76              : !> \param v ...
      77              : !> \param f ...
      78              : !> \param maxder ...
      79              : !> \param vac_plus ...
      80              : !> \date    05.12.2000
      81              : !> \author  Matthias Krack
      82              : !> \version 1.0
      83              : ! **************************************************************************************************
      84          300 :    SUBROUTINE coulomb2(la_max, npgfa, zeta, rpgfa, la_min, lc_max, npgfc, zetc, rpgfc, lc_min, &
      85          450 :                        rac, rac2, vac, v, f, maxder, vac_plus)
      86              :       INTEGER, INTENT(IN)                                :: la_max, npgfa
      87              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zeta, rpgfa
      88              :       INTEGER, INTENT(IN)                                :: la_min, lc_max, npgfc
      89              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zetc, rpgfc
      90              :       INTEGER, INTENT(IN)                                :: lc_min
      91              :       REAL(KIND=dp), DIMENSION(3), INTENT(IN)            :: rac
      92              :       REAL(KIND=dp), INTENT(IN)                          :: rac2
      93              :       REAL(KIND=dp), DIMENSION(:, :), INTENT(INOUT)      :: vac
      94              :       REAL(KIND=dp), DIMENSION(:, :, :)                  :: v
      95              :       REAL(KIND=dp), DIMENSION(0:)                       :: f
      96              :       INTEGER, INTENT(IN), OPTIONAL                      :: maxder
      97              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL           :: vac_plus
      98              : 
      99              :       INTEGER                                            :: ax, ay, az, coc, cocx, cocy, cocz, cx, &
     100              :                                                             cy, cz, i, ipgf, j, jpgf, la, lc, &
     101              :                                                             maxder_local, n, na, nap, nc, nmax
     102              :       REAL(KIND=dp)                                      :: dac, f0, f1, f2, f3, f4, f5, f6, fcx, &
     103              :                                                             fcy, fcz, rho, t, zetp, zetq, zetw
     104              :       REAL(KIND=dp), DIMENSION(3)                        :: raw, rcw
     105              : 
     106      5148738 :       v = 0.0_dp
     107              : 
     108          150 :       maxder_local = 0
     109          150 :       IF (PRESENT(maxder)) THEN
     110            0 :          maxder_local = maxder
     111            0 :          vac_plus = 0.0_dp
     112              :       END IF
     113              : 
     114          150 :       nmax = la_max + lc_max + 1
     115              : 
     116              :       ! *** Calculate the distance of the centers a and c ***
     117              : 
     118          150 :       dac = SQRT(rac2)
     119              : 
     120              :       ! *** Loop over all pairs of primitive Gaussian-type functions ***
     121              : 
     122          150 :       na = 0
     123          150 :       nap = 0
     124              : 
     125          750 :       DO ipgf = 1, npgfa
     126              : 
     127          600 :          nc = 0
     128              : 
     129         3000 :          DO jpgf = 1, npgfc
     130              : 
     131              :             ! *** Screening ***
     132              : 
     133         2400 :             IF (rpgfa(ipgf) + rpgfc(jpgf) < dac) THEN
     134            0 :                DO j = nc + ncoset(lc_min - 1) + 1, nc + ncoset(lc_max)
     135            0 :                   DO i = na + ncoset(la_min - 1) + 1, na + ncoset(la_max - maxder_local)
     136            0 :                      vac(i, j) = 0.0_dp
     137              :                   END DO
     138              :                END DO
     139            0 :                nc = nc + ncoset(lc_max)
     140            0 :                CYCLE
     141              :             END IF
     142              : 
     143              :             ! *** Calculate some prefactors ***
     144              : 
     145         2400 :             zetp = 1.0_dp/zeta(ipgf)
     146         2400 :             zetq = 1.0_dp/zetc(jpgf)
     147         2400 :             zetw = 1.0_dp/(zeta(ipgf) + zetc(jpgf))
     148              : 
     149         2400 :             rho = zeta(ipgf)*zetc(jpgf)*zetw
     150              : 
     151         2400 :             f0 = 2.0_dp*SQRT(pi**5*zetw)*zetp*zetq
     152              : 
     153              :             ! *** Calculate the incomplete Gamma function ***
     154              : 
     155         2400 :             t = rho*rac2
     156              : 
     157         2400 :             CALL fgamma(nmax - 1, t, f)
     158              : 
     159              :             ! *** Calculate the basic two-center Coulomb integrals [s||s]{n} ***
     160              : 
     161         8096 :             DO n = 1, nmax
     162         8096 :                v(1, 1, n) = f0*f(n - 1)
     163              :             END DO
     164              : 
     165              :             ! *** Vertical recurrence steps: [s||s] -> [s||c] ***
     166              : 
     167         2400 :             IF (lc_max > 0) THEN
     168              : 
     169          800 :                f1 = 0.5_dp*zetq
     170          800 :                f2 = -rho*zetq
     171              : 
     172         3200 :                rcw(:) = -zeta(ipgf)*zetw*rac(:)
     173              : 
     174              :                ! *** [s||p]{n} = (Wi - Ci)*[s||s]{n+1}  (i = x,y,z) ***
     175              : 
     176         4096 :                DO n = 1, nmax - 1
     177         3296 :                   v(1, 2, n) = rcw(1)*v(1, 1, n + 1)
     178         3296 :                   v(1, 3, n) = rcw(2)*v(1, 1, n + 1)
     179         4096 :                   v(1, 4, n) = rcw(3)*v(1, 1, n + 1)
     180              :                END DO
     181              : 
     182              :                ! ** [s||c]{n} = (Wi - Ci)*[s||c-1i]{n+1} +     ***
     183              :                ! **             f1*Ni(c-1i)*(   [s||c-2i]{n} + ***
     184              :                ! **                          f2*[s||c-2i]{n+1} ***
     185              : 
     186         1648 :                DO lc = 2, lc_max
     187              : 
     188         6592 :                   DO n = 1, nmax - lc
     189              : 
     190              :                      ! **** Increase the angular momentum component z of c ***
     191              : 
     192              :                      v(1, coset(0, 0, lc), n) = &
     193              :                         rcw(3)*v(1, coset(0, 0, lc - 1), n + 1) + &
     194              :                         f1*REAL(lc - 1, dp)*(v(1, coset(0, 0, lc - 2), n) + &
     195         4944 :                                              f2*v(1, coset(0, 0, lc - 2), n + 1))
     196              : 
     197              :                      ! *** Increase the angular momentum component y of c ***
     198              : 
     199         4944 :                      cz = lc - 1
     200         4944 :                      v(1, coset(0, 1, cz), n) = rcw(2)*v(1, coset(0, 0, cz), n + 1)
     201              : 
     202        15136 :                      DO cy = 2, lc
     203        10192 :                         cz = lc - cy
     204              :                         v(1, coset(0, cy, cz), n) = &
     205              :                            rcw(2)*v(1, coset(0, cy - 1, cz), n + 1) + &
     206              :                            f1*REAL(cy - 1, dp)*(v(1, coset(0, cy - 2, cz), n) + &
     207        15136 :                                                 f2*v(1, coset(0, cy - 2, cz), n + 1))
     208              :                      END DO
     209              : 
     210              :                      ! *** Increase the angular momentum component x of c ***
     211              : 
     212        20080 :                      DO cy = 0, lc - 1
     213        15136 :                         cz = lc - 1 - cy
     214        20080 :                         v(1, coset(1, cy, cz), n) = rcw(1)*v(1, coset(0, cy, cz), n + 1)
     215              :                      END DO
     216              : 
     217        15984 :                      DO cx = 2, lc
     218        10192 :                         f6 = f1*REAL(cx - 1, dp)
     219        34096 :                         DO cy = 0, lc - cx
     220        18960 :                            cz = lc - cx - cy
     221              :                            v(1, coset(cx, cy, cz), n) = &
     222              :                               rcw(1)*v(1, coset(cx - 1, cy, cz), n + 1) + &
     223              :                               f6*(v(1, coset(cx - 2, cy, cz), n) + &
     224        29152 :                                   f2*v(1, coset(cx - 2, cy, cz), n + 1))
     225              :                         END DO
     226              :                      END DO
     227              : 
     228              :                   END DO
     229              : 
     230              :                END DO
     231              : 
     232              :             END IF
     233              : 
     234              :             ! *** Vertical recurrence steps: [s||c] -> [a||c] ***
     235              : 
     236         2400 :             IF (la_max > 0) THEN
     237              : 
     238          800 :                f3 = 0.5_dp*zetp
     239          800 :                f4 = -rho*zetp
     240          800 :                f5 = 0.5_dp*zetw
     241              : 
     242         3200 :                raw(:) = zetc(jpgf)*zetw*rac(:)
     243              : 
     244              :                ! *** [p||s]{n} = (Wi - Ai)*[s||s]{n+1}  (i = x,y,z) ***
     245              : 
     246         4096 :                DO n = 1, nmax - 1
     247         3296 :                   v(2, 1, n) = raw(1)*v(1, 1, n + 1)
     248         3296 :                   v(3, 1, n) = raw(2)*v(1, 1, n + 1)
     249         4096 :                   v(4, 1, n) = raw(3)*v(1, 1, n + 1)
     250              :                END DO
     251              : 
     252              :                ! *** [a||s]{n} = (Wi - Ai)*[a-1i||s]{n+1} +      ***
     253              :                ! ***             f3*Ni(a-1i)*(   [a-2i||s]{n} +  ***
     254              :                ! ***                          f4*[a-2i||s]{n+1}) ***
     255              : 
     256         1648 :                DO la = 2, la_max
     257              : 
     258         6592 :                   DO n = 1, nmax - la
     259              : 
     260              :                      ! *** Increase the angular momentum component z of a ***
     261              : 
     262              :                      v(coset(0, 0, la), 1, n) = &
     263              :                         raw(3)*v(coset(0, 0, la - 1), 1, n + 1) + &
     264              :                         f3*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), 1, n) + &
     265         4944 :                                              f4*v(coset(0, 0, la - 2), 1, n + 1))
     266              : 
     267              :                      ! *** Increase the angular momentum component y of a ***
     268              : 
     269         4944 :                      az = la - 1
     270         4944 :                      v(coset(0, 1, az), 1, n) = raw(2)*v(coset(0, 0, az), 1, n + 1)
     271              : 
     272        15136 :                      DO ay = 2, la
     273        10192 :                         az = la - ay
     274              :                         v(coset(0, ay, az), 1, n) = &
     275              :                            raw(2)*v(coset(0, ay - 1, az), 1, n + 1) + &
     276              :                            f3*REAL(ay - 1, dp)*(v(coset(0, ay - 2, az), 1, n) + &
     277        15136 :                                                 f4*v(coset(0, ay - 2, az), 1, n + 1))
     278              :                      END DO
     279              : 
     280              :                      ! *** Increase the angular momentum component x of a ***
     281              : 
     282        20080 :                      DO ay = 0, la - 1
     283        15136 :                         az = la - 1 - ay
     284        20080 :                         v(coset(1, ay, az), 1, n) = raw(1)*v(coset(0, ay, az), 1, n + 1)
     285              :                      END DO
     286              : 
     287        15984 :                      DO ax = 2, la
     288        10192 :                         f6 = f3*REAL(ax - 1, dp)
     289        34096 :                         DO ay = 0, la - ax
     290        18960 :                            az = la - ax - ay
     291              :                            v(coset(ax, ay, az), 1, n) = &
     292              :                               raw(1)*v(coset(ax - 1, ay, az), 1, n + 1) + &
     293              :                               f6*(v(coset(ax - 2, ay, az), 1, n) + &
     294        29152 :                                   f4*v(coset(ax - 2, ay, az), 1, n + 1))
     295              :                         END DO
     296              :                      END DO
     297              : 
     298              :                   END DO
     299              : 
     300              :                END DO
     301              : 
     302         2448 :                DO lc = 1, lc_max
     303              : 
     304         7392 :                   DO cx = 0, lc
     305        17792 :                      DO cy = 0, lc - cx
     306        11200 :                         cz = lc - cx - cy
     307              : 
     308        11200 :                         coc = coset(cx, cy, cz)
     309        11200 :                         cocx = coset(MAX(0, cx - 1), cy, cz)
     310        11200 :                         cocy = coset(cx, MAX(0, cy - 1), cz)
     311        11200 :                         cocz = coset(cx, cy, MAX(0, cz - 1))
     312              : 
     313        11200 :                         fcx = f5*REAL(cx, dp)
     314        11200 :                         fcy = f5*REAL(cy, dp)
     315        11200 :                         fcz = f5*REAL(cz, dp)
     316              : 
     317              :                         ! *** [p||c]{n} = (Wi - Ai)*[s||c]{n+1} + ***
     318              :                         ! ***             f5*Ni(c)*[s||c-1i]{n+1} ***
     319              : 
     320        64064 :                         DO n = 1, nmax - 1 - lc
     321        52864 :                            v(2, coc, n) = raw(1)*v(1, coc, n + 1) + fcx*v(1, cocx, n + 1)
     322        52864 :                            v(3, coc, n) = raw(2)*v(1, coc, n + 1) + fcy*v(1, cocy, n + 1)
     323        64064 :                            v(4, coc, n) = raw(3)*v(1, coc, n + 1) + fcz*v(1, cocz, n + 1)
     324              :                         END DO
     325              : 
     326              :                         ! *** [a||c]{n} = (Wi - Ai)*[a-1i||c]{n+1} +        ***
     327              :                         ! ***             f3*Ni(a-1i)*(   [a-2i||c]{n} +    ***
     328              :                         ! ***                          f4*[a-2i||c]{n+1}) + ***
     329              :                         ! ***             f5*Ni(c)*[a-1i||c-1i]{n+1}        ***
     330              : 
     331        48224 :                         DO la = 2, la_max
     332              : 
     333       157136 :                            DO n = 1, nmax - la - lc
     334              : 
     335              :                               ! *** Increase the angular momentum component z of a ***
     336              : 
     337              :                               v(coset(0, 0, la), coc, n) = &
     338              :                                  raw(3)*v(coset(0, 0, la - 1), coc, n + 1) + &
     339              :                                  f3*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), coc, n) + &
     340              :                                                       f4*v(coset(0, 0, la - 2), coc, n + 1)) + &
     341       113856 :                                  fcz*v(coset(0, 0, la - 1), cocz, n + 1)
     342              : 
     343              :                               ! *** Increase the angular momentum component y of a ***
     344              : 
     345       113856 :                               az = la - 1
     346              :                               v(coset(0, 1, az), coc, n) = &
     347              :                                  raw(2)*v(coset(0, 0, az), coc, n + 1) + &
     348       113856 :                                  fcy*v(coset(0, 0, az), cocy, n + 1)
     349              : 
     350       366944 :                               DO ay = 2, la
     351       253088 :                                  az = la - ay
     352              :                                  v(coset(0, ay, az), coc, n) = &
     353              :                                     raw(2)*v(coset(0, ay - 1, az), coc, n + 1) + &
     354              :                                     f3*REAL(ay - 1, dp)*(v(coset(0, ay - 2, az), coc, n) + &
     355              :                                                          f4*v(coset(0, ay - 2, az), coc, n + 1)) + &
     356       366944 :                                     fcy*v(coset(0, ay - 1, az), cocy, n + 1)
     357              :                               END DO
     358              : 
     359              :                               ! *** Increase the angular momentum component x of a ***
     360              : 
     361       480800 :                               DO ay = 0, la - 1
     362       366944 :                                  az = la - 1 - ay
     363              :                                  v(coset(1, ay, az), coc, n) = &
     364              :                                     raw(1)*v(coset(0, ay, az), coc, n + 1) + &
     365       480800 :                                     fcx*v(coset(0, ay, az), cocx, n + 1)
     366              :                               END DO
     367              : 
     368       399024 :                               DO ax = 2, la
     369       253088 :                                  f6 = f3*REAL(ax - 1, dp)
     370       858784 :                                  DO ay = 0, la - ax
     371       491840 :                                     az = la - ax - ay
     372              :                                     v(coset(ax, ay, az), coc, n) = &
     373              :                                        raw(1)*v(coset(ax - 1, ay, az), coc, n + 1) + &
     374              :                                        f6*(v(coset(ax - 2, ay, az), coc, n) + &
     375              :                                            f4*v(coset(ax - 2, ay, az), coc, n + 1)) + &
     376       744928 :                                        fcx*v(coset(ax - 1, ay, az), cocx, n + 1)
     377              :                                  END DO
     378              :                               END DO
     379              : 
     380              :                            END DO
     381              : 
     382              :                         END DO
     383              : 
     384              :                      END DO
     385              :                   END DO
     386              : 
     387              :                END DO
     388              : 
     389              :             END IF
     390              : 
     391         9744 :             DO j = ncoset(lc_min - 1) + 1, ncoset(lc_max)
     392        84480 :                DO i = ncoset(la_min - 1) + 1, ncoset(la_max - maxder_local)
     393        82080 :                   vac(na + i, nc + j) = v(i, j, 1)
     394              :                END DO
     395              :             END DO
     396              : 
     397         2400 :             IF (PRESENT(maxder)) THEN
     398            0 :                DO j = ncoset(lc_min - 1) + 1, ncoset(lc_max)
     399            0 :                   DO i = 1, ncoset(la_max)
     400            0 :                      vac_plus(nap + i, nc + j) = v(i, j, 1)
     401              :                   END DO
     402              :                END DO
     403              :             END IF
     404              : 
     405         3000 :             nc = nc + ncoset(lc_max)
     406              : 
     407              :          END DO
     408              : 
     409          600 :          na = na + ncoset(la_max - maxder_local)
     410          750 :          nap = nap + ncoset(la_max)
     411              : 
     412              :       END DO
     413              : 
     414          150 :    END SUBROUTINE coulomb2
     415              : ! **************************************************************************************************
     416              : !> \brief   Calculation of the primitive two-center Coulomb integrals over
     417              : !>          Cartesian Gaussian-type functions. Same as coulomb2 treats derivative
     418              : !>          different (now vac_plus is symmetric)
     419              : !> \param la_max ...
     420              : !> \param npgfa ...
     421              : !> \param zeta ...
     422              : !> \param la_min ...
     423              : !> \param lc_max ...
     424              : !> \param npgfc ...
     425              : !> \param zetc ...
     426              : !> \param lc_min ...
     427              : !> \param rac ...
     428              : !> \param rac2 ...
     429              : !> \param vac ...
     430              : !> \param v ...
     431              : !> \param f ...
     432              : !> \param maxder ...
     433              : !> \param vac_plus ...
     434              : !> \date    6.02.2008
     435              : !> \author  CJM
     436              : !> \version 1.0
     437              : ! **************************************************************************************************
     438              : 
     439        76321 :    SUBROUTINE coulomb2_new(la_max, npgfa, zeta, la_min, lc_max, npgfc, zetc, lc_min, &
     440       152642 :                            rac, rac2, vac, v, f, maxder, vac_plus)
     441              :       INTEGER, INTENT(IN)                                :: la_max, npgfa
     442              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zeta
     443              :       INTEGER, INTENT(IN)                                :: la_min, lc_max, npgfc
     444              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zetc
     445              :       INTEGER, INTENT(IN)                                :: lc_min
     446              :       REAL(KIND=dp), DIMENSION(3), INTENT(IN)            :: rac
     447              :       REAL(KIND=dp), INTENT(IN)                          :: rac2
     448              :       REAL(KIND=dp), DIMENSION(:, :), INTENT(INOUT)      :: vac
     449              :       REAL(KIND=dp), DIMENSION(:, :, :)                  :: v
     450              :       REAL(KIND=dp), DIMENSION(0:)                       :: f
     451              :       INTEGER, INTENT(IN), OPTIONAL                      :: maxder
     452              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL           :: vac_plus
     453              : 
     454              :       INTEGER                                            :: ax, ay, az, coc, cocx, cocy, cocz, cx, &
     455              :                                                             cy, cz, i, ipgf, j, jpgf, la, lc, &
     456              :                                                             maxder_local, n, na, nap, nc, ncp, nmax
     457              :       REAL(KIND=dp)                                      :: dac, f0, f1, f2, f3, f4, f5, f6, fcx, &
     458              :                                                             fcy, fcz, rho, t, zetp, zetq, zetw
     459              :       REAL(KIND=dp), DIMENSION(3)                        :: raw, rcw
     460              : 
     461     11846610 :       v = 0.0_dp
     462              : 
     463        76321 :       maxder_local = 0
     464        76321 :       IF (PRESENT(maxder)) THEN
     465            0 :          maxder_local = maxder
     466            0 :          vac_plus = 0.0_dp
     467              :       END IF
     468              : 
     469        76321 :       nmax = la_max + lc_max + 1
     470              : 
     471              :       ! *** Calculate the distance of the centers a and c ***
     472              : 
     473        76321 :       dac = SQRT(rac2)
     474              : 
     475              :       ! *** Loop over all pairs of primitive Gaussian-type functions ***
     476              : 
     477        76321 :       na = 0
     478        76321 :       nap = 0
     479              : 
     480       152642 :       DO ipgf = 1, npgfa
     481              : 
     482        76321 :          nc = 0
     483        76321 :          ncp = 0
     484              : 
     485       152642 :          DO jpgf = 1, npgfc
     486              : 
     487              :             ! *** Calculate some prefactors ***
     488              : 
     489        76321 :             zetp = 1.0_dp/zeta(ipgf)
     490        76321 :             zetq = 1.0_dp/zetc(jpgf)
     491        76321 :             zetw = 1.0_dp/(zeta(ipgf) + zetc(jpgf))
     492              : 
     493        76321 :             rho = zeta(ipgf)*zetc(jpgf)*zetw
     494              : 
     495        76321 :             f0 = 2.0_dp*SQRT(pi**5*zetw)*zetp*zetq
     496              : 
     497              :             ! *** Calculate the incomplete Gamma function ***
     498              : 
     499        76321 :             t = rho*rac2
     500              : 
     501        76321 :             CALL fgamma(nmax - 1, t, f)
     502              : 
     503              :             ! *** Calculate the basic two-center Coulomb integrals [s||s]{n} ***
     504              : 
     505       297452 :             DO n = 1, nmax
     506       297452 :                v(1, 1, n) = f0*f(n - 1)
     507              :             END DO
     508              : 
     509              :             ! *** Vertical recurrence steps: [s||s] -> [s||c] ***
     510              : 
     511        76321 :             IF (lc_max > 0) THEN
     512              : 
     513        45440 :                f1 = 0.5_dp*zetq
     514        45440 :                f2 = -rho*zetq
     515              : 
     516       181760 :                rcw(:) = -zeta(ipgf)*zetw*rac(:)
     517              : 
     518              :                ! *** [s||p]{n} = (Wi - Ci)*[s||s]{n+1}  (i = x,y,z) ***
     519              : 
     520       161483 :                DO n = 1, nmax - 1
     521       116043 :                   v(1, 2, n) = rcw(1)*v(1, 1, n + 1)
     522       116043 :                   v(1, 3, n) = rcw(2)*v(1, 1, n + 1)
     523       161483 :                   v(1, 4, n) = rcw(3)*v(1, 1, n + 1)
     524              :                END DO
     525              : 
     526              :                ! ** [s||c]{n} = (Wi - Ci)*[s||c-1i]{n+1} +     ***
     527              :                ! **             f1*Ni(c-1i)*(   [s||c-2i]{n} + ***
     528              :                ! **                          f2*[s||c-2i]{n+1} ***
     529              : 
     530        73633 :                DO lc = 2, lc_max
     531              : 
     532       134373 :                   DO n = 1, nmax - lc
     533              : 
     534              :                      ! **** Increase the angular momentum component z of c ***
     535              : 
     536              :                      v(1, coset(0, 0, lc), n) = &
     537              :                         rcw(3)*v(1, coset(0, 0, lc - 1), n + 1) + &
     538              :                         f1*REAL(lc - 1, dp)*(v(1, coset(0, 0, lc - 2), n) + &
     539        60740 :                                              f2*v(1, coset(0, 0, lc - 2), n + 1))
     540              : 
     541              :                      ! *** Increase the angular momentum component y of c ***
     542              : 
     543        60740 :                      cz = lc - 1
     544        60740 :                      v(1, coset(0, 1, cz), n) = rcw(2)*v(1, coset(0, 0, cz), n + 1)
     545              : 
     546       133454 :                      DO cy = 2, lc
     547        72714 :                         cz = lc - cy
     548              :                         v(1, coset(0, cy, cz), n) = &
     549              :                            rcw(2)*v(1, coset(0, cy - 1, cz), n + 1) + &
     550              :                            f1*REAL(cy - 1, dp)*(v(1, coset(0, cy - 2, cz), n) + &
     551       133454 :                                                 f2*v(1, coset(0, cy - 2, cz), n + 1))
     552              :                      END DO
     553              : 
     554              :                      ! *** Increase the angular momentum component x of c ***
     555              : 
     556       194194 :                      DO cy = 0, lc - 1
     557       133454 :                         cz = lc - 1 - cy
     558       194194 :                         v(1, coset(1, cy, cz), n) = rcw(1)*v(1, coset(0, cy, cz), n + 1)
     559              :                      END DO
     560              : 
     561       161647 :                      DO cx = 2, lc
     562        72714 :                         f6 = f1*REAL(cx - 1, dp)
     563       218142 :                         DO cy = 0, lc - cx
     564        84688 :                            cz = lc - cx - cy
     565              :                            v(1, coset(cx, cy, cz), n) = &
     566              :                               rcw(1)*v(1, coset(cx - 1, cy, cz), n + 1) + &
     567              :                               f6*(v(1, coset(cx - 2, cy, cz), n) + &
     568       157402 :                                   f2*v(1, coset(cx - 2, cy, cz), n + 1))
     569              :                         END DO
     570              :                      END DO
     571              : 
     572              :                   END DO
     573              : 
     574              :                END DO
     575              : 
     576              :             END IF
     577              : 
     578              :             ! *** Vertical recurrence steps: [s||c] -> [a||c] ***
     579              : 
     580        76321 :             IF (la_max > 0) THEN
     581              : 
     582        44786 :                f3 = 0.5_dp*zetp
     583        44786 :                f4 = -rho*zetp
     584        44786 :                f5 = 0.5_dp*zetw
     585              : 
     586       179144 :                raw(:) = zetc(jpgf)*zetw*rac(:)
     587              : 
     588              :                ! *** [p||s]{n} = (Wi - Ai)*[s||s]{n+1}  (i = x,y,z) ***
     589              : 
     590       159206 :                DO n = 1, nmax - 1
     591       114420 :                   v(2, 1, n) = raw(1)*v(1, 1, n + 1)
     592       114420 :                   v(3, 1, n) = raw(2)*v(1, 1, n + 1)
     593       159206 :                   v(4, 1, n) = raw(3)*v(1, 1, n + 1)
     594              :                END DO
     595              : 
     596              :                ! *** [a||s]{n} = (Wi - Ai)*[a-1i||s]{n+1} +      ***
     597              :                ! ***             f3*Ni(a-1i)*(   [a-2i||s]{n} +  ***
     598              :                ! ***                          f4*[a-2i||s]{n+1}) ***
     599              : 
     600        71177 :                DO la = 2, la_max
     601              : 
     602       128391 :                   DO n = 1, nmax - la
     603              : 
     604              :                      ! *** Increase the angular momentum component z of a ***
     605              : 
     606              :                      v(coset(0, 0, la), 1, n) = &
     607              :                         raw(3)*v(coset(0, 0, la - 1), 1, n + 1) + &
     608              :                         f3*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), 1, n) + &
     609        57214 :                                              f4*v(coset(0, 0, la - 2), 1, n + 1))
     610              : 
     611              :                      ! *** Increase the angular momentum component y of a ***
     612              : 
     613        57214 :                      az = la - 1
     614        57214 :                      v(coset(0, 1, az), 1, n) = raw(2)*v(coset(0, 0, az), 1, n + 1)
     615              : 
     616       124844 :                      DO ay = 2, la
     617        67630 :                         az = la - ay
     618              :                         v(coset(0, ay, az), 1, n) = &
     619              :                            raw(2)*v(coset(0, ay - 1, az), 1, n + 1) + &
     620              :                            f3*REAL(ay - 1, dp)*(v(coset(0, ay - 2, az), 1, n) + &
     621       124844 :                                                 f4*v(coset(0, ay - 2, az), 1, n + 1))
     622              :                      END DO
     623              : 
     624              :                      ! *** Increase the angular momentum component x of a ***
     625              : 
     626       182058 :                      DO ay = 0, la - 1
     627       124844 :                         az = la - 1 - ay
     628       182058 :                         v(coset(1, ay, az), 1, n) = raw(1)*v(coset(0, ay, az), 1, n + 1)
     629              :                      END DO
     630              : 
     631       151235 :                      DO ax = 2, la
     632        67630 :                         f6 = f3*REAL(ax - 1, dp)
     633       202890 :                         DO ay = 0, la - ax
     634        78046 :                            az = la - ax - ay
     635              :                            v(coset(ax, ay, az), 1, n) = &
     636              :                               raw(1)*v(coset(ax - 1, ay, az), 1, n + 1) + &
     637              :                               f6*(v(coset(ax - 2, ay, az), 1, n) + &
     638       145676 :                                   f4*v(coset(ax - 2, ay, az), 1, n + 1))
     639              :                         END DO
     640              :                      END DO
     641              : 
     642              :                   END DO
     643              : 
     644              :                END DO
     645              : 
     646        88029 :                DO lc = 1, lc_max
     647              : 
     648       194719 :                   DO cx = 0, lc
     649       343910 :                      DO cy = 0, lc - cx
     650       193977 :                         cz = lc - cx - cy
     651              : 
     652       193977 :                         coc = coset(cx, cy, cz)
     653       193977 :                         cocx = coset(MAX(0, cx - 1), cy, cz)
     654       193977 :                         cocy = coset(cx, MAX(0, cy - 1), cz)
     655       193977 :                         cocz = coset(cx, cy, MAX(0, cz - 1))
     656              : 
     657       193977 :                         fcx = f5*REAL(cx, dp)
     658       193977 :                         fcy = f5*REAL(cy, dp)
     659       193977 :                         fcz = f5*REAL(cz, dp)
     660              : 
     661              :                         ! *** [p||c]{n} = (Wi - Ai)*[s||c]{n+1} + ***
     662              :                         ! ***             f5*Ni(c)*[s||c-1i]{n+1} ***
     663              : 
     664       574135 :                         DO n = 1, nmax - 1 - lc
     665       380158 :                            v(2, coc, n) = raw(1)*v(1, coc, n + 1) + fcx*v(1, cocx, n + 1)
     666       380158 :                            v(3, coc, n) = raw(2)*v(1, coc, n + 1) + fcy*v(1, cocy, n + 1)
     667       574135 :                            v(4, coc, n) = raw(3)*v(1, coc, n + 1) + fcz*v(1, cocz, n + 1)
     668              :                         END DO
     669              : 
     670              :                         ! *** [a||c]{n} = (Wi - Ai)*[a-1i||c]{n+1} +        ***
     671              :                         ! ***             f3*Ni(a-1i)*(   [a-2i||c]{n} +    ***
     672              :                         ! ***                          f4*[a-2i||c]{n+1}) + ***
     673              :                         ! ***             f5*Ni(c)*[a-1i||c-1i]{n+1}        ***
     674              : 
     675       415328 :                         DO la = 2, la_max
     676              : 
     677       488735 :                            DO n = 1, nmax - la - lc
     678              : 
     679              :                               ! *** Increase the angular momentum component z of a ***
     680              : 
     681              :                               v(coset(0, 0, la), coc, n) = &
     682              :                                  raw(3)*v(coset(0, 0, la - 1), coc, n + 1) + &
     683              :                                  f3*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), coc, n) + &
     684              :                                                       f4*v(coset(0, 0, la - 2), coc, n + 1)) + &
     685       180097 :                                  fcz*v(coset(0, 0, la - 1), cocz, n + 1)
     686              : 
     687              :                               ! *** Increase the angular momentum component y of a ***
     688              : 
     689       180097 :                               az = la - 1
     690              :                               v(coset(0, 1, az), coc, n) = &
     691              :                                  raw(2)*v(coset(0, 0, az), coc, n + 1) + &
     692       180097 :                                  fcy*v(coset(0, 0, az), cocy, n + 1)
     693              : 
     694       391808 :                               DO ay = 2, la
     695       211711 :                                  az = la - ay
     696              :                                  v(coset(0, ay, az), coc, n) = &
     697              :                                     raw(2)*v(coset(0, ay - 1, az), coc, n + 1) + &
     698              :                                     f3*REAL(ay - 1, dp)*(v(coset(0, ay - 2, az), coc, n) + &
     699              :                                                          f4*v(coset(0, ay - 2, az), coc, n + 1)) + &
     700       391808 :                                     fcy*v(coset(0, ay - 1, az), cocy, n + 1)
     701              :                               END DO
     702              : 
     703              :                               ! *** Increase the angular momentum component x of a ***
     704              : 
     705       571905 :                               DO ay = 0, la - 1
     706       391808 :                                  az = la - 1 - ay
     707              :                                  v(coset(1, ay, az), coc, n) = &
     708              :                                     raw(1)*v(coset(0, ay, az), coc, n + 1) + &
     709       571905 :                                     fcx*v(coset(0, ay, az), cocx, n + 1)
     710              :                               END DO
     711              : 
     712       506469 :                               DO ax = 2, la
     713       211711 :                                  f6 = f3*REAL(ax - 1, dp)
     714       635133 :                                  DO ay = 0, la - ax
     715       243325 :                                     az = la - ax - ay
     716              :                                     v(coset(ax, ay, az), coc, n) = &
     717              :                                        raw(1)*v(coset(ax - 1, ay, az), coc, n + 1) + &
     718              :                                        f6*(v(coset(ax - 2, ay, az), coc, n) + &
     719              :                                            f4*v(coset(ax - 2, ay, az), coc, n + 1)) + &
     720       455036 :                                        fcx*v(coset(ax - 1, ay, az), cocx, n + 1)
     721              :                                  END DO
     722              :                               END DO
     723              : 
     724              :                            END DO
     725              : 
     726              :                         END DO
     727              : 
     728              :                      END DO
     729              :                   END DO
     730              : 
     731              :                END DO
     732              : 
     733              :             END IF
     734              : 
     735       334278 :             DO j = ncoset(lc_min - 1) + 1, ncoset(lc_max - maxder_local)
     736      1181429 :                DO i = ncoset(la_min - 1) + 1, ncoset(la_max - maxder_local)
     737      1105108 :                   vac(na + i, nc + j) = v(i, j, 1)
     738              :                END DO
     739              :             END DO
     740              : 
     741        76321 :             IF (PRESENT(maxder)) THEN
     742            0 :                DO j = 1, ncoset(lc_max)
     743            0 :                   DO i = 1, ncoset(la_max)
     744            0 :                      vac_plus(nap + i, ncp + j) = v(i, j, 1)
     745              :                   END DO
     746              :                END DO
     747              :             END IF
     748              : 
     749        76321 :             nc = nc + ncoset(lc_max - maxder_local)
     750       152642 :             ncp = ncp + ncoset(lc_max)
     751              : 
     752              :          END DO
     753              : 
     754        76321 :          na = na + ncoset(la_max - maxder_local)
     755       152642 :          nap = nap + ncoset(la_max)
     756              : 
     757              :       END DO
     758              : 
     759        76321 :    END SUBROUTINE coulomb2_new
     760              : 
     761              : ! **************************************************************************************************
     762              : !> \brief   Calculation of the primitive three-center Coulomb integrals over
     763              : !>          Cartesian Gaussian-type functions (electron repulsion integrals,
     764              : !>          ERIs).
     765              : !> \param la_max ...
     766              : !> \param npgfa ...
     767              : !> \param zeta ...
     768              : !> \param rpgfa ...
     769              : !> \param la_min ...
     770              : !> \param lb_max ...
     771              : !> \param npgfb ...
     772              : !> \param zetb ...
     773              : !> \param rpgfb ...
     774              : !> \param lb_min ...
     775              : !> \param lc_max ...
     776              : !> \param zetc ...
     777              : !> \param rpgfc ...
     778              : !> \param lc_min ...
     779              : !> \param gccc ...
     780              : !> \param rab ...
     781              : !> \param rab2 ...
     782              : !> \param rac ...
     783              : !> \param rac2 ...
     784              : !> \param rbc2 ...
     785              : !> \param vabc ...
     786              : !> \param int_abc ...
     787              : !> \param v ...
     788              : !> \param f ...
     789              : !> \param maxder ...
     790              : !> \param vabc_plus ...
     791              : !> \date    06.11.2000
     792              : !> \author  Matthias Krack
     793              : !> \version 1.0
     794              : ! **************************************************************************************************
     795        49950 :    SUBROUTINE coulomb3(la_max, npgfa, zeta, rpgfa, la_min, lb_max, npgfb, zetb, rpgfb, lb_min, &
     796        99900 :                        lc_max, zetc, rpgfc, lc_min, gccc, rab, rab2, rac, rac2, rbc2, vabc, int_abc, &
     797       149850 :                        v, f, maxder, vabc_plus)
     798              :       INTEGER, INTENT(IN)                                :: la_max, npgfa
     799              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zeta, rpgfa
     800              :       INTEGER, INTENT(IN)                                :: la_min, lb_max, npgfb
     801              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: zetb, rpgfb
     802              :       INTEGER, INTENT(IN)                                :: lb_min, lc_max
     803              :       REAL(KIND=dp), INTENT(IN)                          :: zetc, rpgfc
     804              :       INTEGER, INTENT(IN)                                :: lc_min
     805              :       REAL(KIND=dp), DIMENSION(:), INTENT(IN)            :: gccc
     806              :       REAL(KIND=dp), DIMENSION(3), INTENT(IN)            :: rab
     807              :       REAL(KIND=dp), INTENT(IN)                          :: rab2
     808              :       REAL(KIND=dp), DIMENSION(3), INTENT(IN)            :: rac
     809              :       REAL(KIND=dp), INTENT(IN)                          :: rac2, rbc2
     810              :       REAL(KIND=dp), DIMENSION(:, :), INTENT(INOUT)      :: vabc
     811              :       REAL(KIND=dp), DIMENSION(:, :, :), INTENT(OUT)     :: int_abc
     812              :       REAL(KIND=dp), DIMENSION(:, :, :, :)               :: v
     813              :       REAL(KIND=dp), DIMENSION(0:)                       :: f
     814              :       INTEGER, INTENT(IN), OPTIONAL                      :: maxder
     815              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL           :: vabc_plus
     816              : 
     817              :       INTEGER                                            :: ax, ay, az, bx, by, bz, coc, cocx, cocy, &
     818              :                                                             cocz, cx, cy, cz, i, ipgf, j, jpgf, k, &
     819              :                                                             kk, la, la_start, lb, lc, &
     820              :                                                             maxder_local, n, na, nap, nb, nmax
     821              :       REAL(KIND=dp)                                      :: dab, dac, dbc, f0, f1, f2, f3, f4, f5, &
     822              :                                                             f6, f7, fcx, fcy, fcz, fx, fy, fz, t, &
     823              :                                                             zetp, zetq, zetw
     824              :       REAL(KIND=dp), DIMENSION(3)                        :: rap, rbp, rcp, rcw, rpw
     825              : 
     826     41531340 :       v = 0.0_dp
     827              : 
     828        49950 :       maxder_local = 0
     829        49950 :       IF (PRESENT(maxder)) THEN
     830            0 :          maxder_local = maxder
     831              :       END IF
     832              : 
     833        49950 :       nmax = la_max + lb_max + lc_max + 1
     834              : 
     835              :       ! *** Calculate the distances of the centers a, b and c ***
     836              : 
     837        49950 :       dab = SQRT(rab2)
     838        49950 :       dac = SQRT(rac2)
     839        49950 :       dbc = SQRT(rbc2)
     840              : 
     841              :       ! *** Initialize integrals array
     842      5069505 :       int_abc = 0.0_dp
     843              : 
     844              :       ! *** Loop over all pairs of primitive Gaussian-type functions ***
     845              : 
     846        49950 :       na = 0
     847        49950 :       nap = 0
     848              : 
     849       130644 :       DO ipgf = 1, npgfa
     850              : 
     851              :          ! *** Screening ***
     852        80694 :          IF (rpgfa(ipgf) + rpgfc < dac) THEN
     853            0 :             na = na + ncoset(la_max - maxder_local)
     854            0 :             nap = nap + ncoset(la_max)
     855            0 :             CYCLE
     856              :          END IF
     857              : 
     858        80694 :          nb = 0
     859              : 
     860       212148 :          DO jpgf = 1, npgfb
     861              : 
     862              :             ! *** Screening ***
     863              :             IF ( &
     864       131454 :                (rpgfb(jpgf) + rpgfc < dbc) .OR. &
     865              :                (rpgfa(ipgf) + rpgfb(jpgf) < dab)) THEN
     866            0 :                nb = nb + ncoset(lb_max)
     867            0 :                CYCLE
     868              :             END IF
     869              : 
     870              :             ! *** Calculate some prefactors ***
     871              : 
     872       131454 :             zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
     873       131454 :             zetq = 1.0_dp/zetc
     874       131454 :             zetw = 1.0_dp/(zeta(ipgf) + zetb(jpgf) + zetc)
     875              : 
     876       131454 :             f0 = 2.0_dp*SQRT(pi**5*zetw)*zetp*zetq
     877       131454 :             f1 = zetb(jpgf)*zetp
     878       131454 :             f2 = 0.5_dp*zetp
     879       131454 :             f4 = -zetc*zetw
     880              : 
     881       131454 :             f0 = f0*EXP(-zeta(ipgf)*f1*rab2)
     882              : 
     883       525816 :             rap(:) = f1*rab(:)
     884       525816 :             rcp(:) = rap(:) - rac(:)
     885       525816 :             rpw(:) = f4*rcp(:)
     886              : 
     887              :             ! *** Calculate the incomplete Gamma function ***
     888              : 
     889       131454 :             t = -f4*(rcp(1)*rcp(1) + rcp(2)*rcp(2) + rcp(3)*rcp(3))/zetp
     890              : 
     891       131454 :             CALL fgamma(nmax - 1, t, f)
     892              : 
     893              :             ! *** Calculate the basic three-center Coulomb integrals [ss||s]{n} ***
     894              : 
     895       536208 :             DO n = 1, nmax
     896       536208 :                v(1, 1, 1, n) = f0*f(n - 1)
     897              :             END DO
     898              : 
     899              :             ! *** Recurrence steps: [ss||s] -> [as||s] ***
     900              : 
     901       131454 :             IF (la_max > 0) THEN
     902              : 
     903              :                ! *** Vertical recurrence steps: [ss||s] -> [as||s] ***
     904              : 
     905              :                ! *** [ps||s]{n} = (Pi - Ai)*[ss||s]{n} +              ***
     906              :                ! ***              (Wi - Pi)*[ss||s]{n+1}  (i = x,y,z) ***
     907              : 
     908       232060 :                DO n = 1, nmax - 1
     909       170896 :                   v(2, 1, 1, n) = rap(1)*v(1, 1, 1, n) + rpw(1)*v(1, 1, 1, n + 1)
     910       170896 :                   v(3, 1, 1, n) = rap(2)*v(1, 1, 1, n) + rpw(2)*v(1, 1, 1, n + 1)
     911       232060 :                   v(4, 1, 1, n) = rap(3)*v(1, 1, 1, n) + rpw(3)*v(1, 1, 1, n + 1)
     912              :                END DO
     913              : 
     914              :                ! *** [as||s]{n} = (Pi - Ai)*[(a-1i)s||s]{n} +        ***
     915              :                ! ***              (Wi - Pi)*[(a-1i)s||s]{n+1} +      ***
     916              :                ! ***              f2*Ni(a-1i)*(   [(a-2i)s||s]{n} +  ***
     917              :                ! ***                           f4*[(a-2i)s||s]{n+1}) ***
     918              : 
     919        70464 :                DO la = 2, la_max
     920              : 
     921        95662 :                   DO n = 1, nmax - la
     922              : 
     923              :                      ! *** Increase the angular momentum component z of a ***
     924              : 
     925              :                      v(coset(0, 0, la), 1, 1, n) = &
     926              :                         rap(3)*v(coset(0, 0, la - 1), 1, 1, n) + &
     927              :                         rpw(3)*v(coset(0, 0, la - 1), 1, 1, n + 1) + &
     928              :                         f2*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), 1, 1, n) + &
     929        25198 :                                              f4*v(coset(0, 0, la - 2), 1, 1, n + 1))
     930              : 
     931              :                      ! *** Increase the angular momentum component y of a ***
     932              : 
     933        25198 :                      az = la - 1
     934              :                      v(coset(0, 1, az), 1, 1, n) = &
     935              :                         rap(2)*v(coset(0, 0, az), 1, 1, n) + &
     936        25198 :                         rpw(2)*v(coset(0, 0, az), 1, 1, n + 1)
     937              : 
     938        50396 :                      DO ay = 2, la
     939        25198 :                         az = la - ay
     940              :                         v(coset(0, ay, az), 1, 1, n) = &
     941              :                            rap(2)*v(coset(0, ay - 1, az), 1, 1, n) + &
     942              :                            rpw(2)*v(coset(0, ay - 1, az), 1, 1, n + 1) + &
     943              :                            f2*REAL(ay - 1, dp)*(v(coset(0, ay - 2, az), 1, 1, n) + &
     944        50396 :                                                 f4*v(coset(0, ay - 2, az), 1, 1, n + 1))
     945              :                      END DO
     946              : 
     947              :                      ! *** Increase the angular momentum component x of a ***
     948              : 
     949        75594 :                      DO ay = 0, la - 1
     950        50396 :                         az = la - 1 - ay
     951              :                         v(coset(1, ay, az), 1, 1, n) = &
     952              :                            rap(1)*v(coset(0, ay, az), 1, 1, n) + &
     953        75594 :                            rpw(1)*v(coset(0, ay, az), 1, 1, n + 1)
     954              :                      END DO
     955              : 
     956        59696 :                      DO ax = 2, la
     957        25198 :                         f3 = f2*REAL(ax - 1, dp)
     958        75594 :                         DO ay = 0, la - ax
     959        25198 :                            az = la - ax - ay
     960              :                            v(coset(ax, ay, az), 1, 1, n) = &
     961              :                               rap(1)*v(coset(ax - 1, ay, az), 1, 1, n) + &
     962              :                               rpw(1)*v(coset(ax - 1, ay, az), 1, 1, n + 1) + &
     963              :                               f3*(v(coset(ax - 2, ay, az), 1, 1, n) + &
     964        50396 :                                   f4*v(coset(ax - 2, ay, az), 1, 1, n + 1))
     965              :                         END DO
     966              :                      END DO
     967              : 
     968              :                   END DO
     969              : 
     970              :                END DO
     971              : 
     972              :                ! *** Recurrence steps: [as||s] -> [ab||s] ***
     973              : 
     974        61164 :                IF (lb_max > 0) THEN
     975              : 
     976              :                   ! *** Horizontal recurrence steps ***
     977              : 
     978       134568 :                   rbp(:) = rap(:) - rab(:)
     979              : 
     980              :                   ! *** [ap||s]{n} = [(a+1i)s||s]{n} - (Bi - Ai)*[as||s]{n} ***
     981              : 
     982        33642 :                   la_start = MAX(0, la_min - 1)
     983              : 
     984        67284 :                   DO la = la_start, la_max - 1
     985       173888 :                      DO n = 1, nmax - la - 1
     986       264608 :                         DO ax = 0, la
     987       373086 :                            DO ay = 0, la - ax
     988       142120 :                               az = la - ax - ay
     989              :                               v(coset(ax, ay, az), 2, 1, n) = &
     990              :                                  v(coset(ax + 1, ay, az), 1, 1, n) - &
     991       142120 :                                  rab(1)*v(coset(ax, ay, az), 1, 1, n)
     992              :                               v(coset(ax, ay, az), 3, 1, n) = &
     993              :                                  v(coset(ax, ay + 1, az), 1, 1, n) - &
     994       142120 :                                  rab(2)*v(coset(ax, ay, az), 1, 1, n)
     995              :                               v(coset(ax, ay, az), 4, 1, n) = &
     996              :                                  v(coset(ax, ay, az + 1), 1, 1, n) - &
     997       266482 :                                  rab(3)*v(coset(ax, ay, az), 1, 1, n)
     998              :                            END DO
     999              :                         END DO
    1000              :                      END DO
    1001              :                   END DO
    1002              : 
    1003              :                   ! *** Vertical recurrence step ***
    1004              : 
    1005              :                   ! *** [ap||s]{n} = (Pi - Bi)*[as||s]{n} +          ***
    1006              :                   ! ***              (Wi - Pi)*[as||s]{n+1} +        ***
    1007              :                   ! ***              f2*Ni(a)*(   [(a-1i)s||s]{n} +  ***
    1008              :                   ! ***                        f4*[(a-1i)s||s]{n+1}) ***
    1009              : 
    1010       106604 :                   DO n = 1, nmax - la_max - 1
    1011       264706 :                      DO ax = 0, la_max
    1012       158102 :                         fx = f2*REAL(ax, dp)
    1013       486484 :                         DO ay = 0, la_max - ax
    1014       255420 :                            fy = f2*REAL(ay, dp)
    1015       255420 :                            az = la_max - ax - ay
    1016       255420 :                            fz = f2*REAL(az, dp)
    1017              : 
    1018       255420 :                            IF (ax == 0) THEN
    1019              :                               v(coset(ax, ay, az), 2, 1, n) = &
    1020              :                                  rbp(1)*v(coset(ax, ay, az), 1, 1, n) + &
    1021       158102 :                                  rpw(1)*v(coset(ax, ay, az), 1, 1, n + 1)
    1022              :                            ELSE
    1023              :                               v(coset(ax, ay, az), 2, 1, n) = &
    1024              :                                  rbp(1)*v(coset(ax, ay, az), 1, 1, n) + &
    1025              :                                  rpw(1)*v(coset(ax, ay, az), 1, 1, n + 1) + &
    1026              :                                  fx*(v(coset(ax - 1, ay, az), 1, 1, n) + &
    1027        97318 :                                      f4*v(coset(ax - 1, ay, az), 1, 1, n + 1))
    1028              :                            END IF
    1029              : 
    1030       255420 :                            IF (ay == 0) THEN
    1031              :                               v(coset(ax, ay, az), 3, 1, n) = &
    1032              :                                  rbp(2)*v(coset(ax, ay, az), 1, 1, n) + &
    1033       158102 :                                  rpw(2)*v(coset(ax, ay, az), 1, 1, n + 1)
    1034              :                            ELSE
    1035              :                               v(coset(ax, ay, az), 3, 1, n) = &
    1036              :                                  rbp(2)*v(coset(ax, ay, az), 1, 1, n) + &
    1037              :                                  rpw(2)*v(coset(ax, ay, az), 1, 1, n + 1) + &
    1038              :                                  fy*(v(coset(ax, ay - 1, az), 1, 1, n) + &
    1039        97318 :                                      f4*v(coset(ax, ay - 1, az), 1, 1, n + 1))
    1040              :                            END IF
    1041              : 
    1042       413522 :                            IF (az == 0) THEN
    1043              :                               v(coset(ax, ay, az), 4, 1, n) = &
    1044              :                                  rbp(3)*v(coset(ax, ay, az), 1, 1, n) + &
    1045       158102 :                                  rpw(3)*v(coset(ax, ay, az), 1, 1, n + 1)
    1046              :                            ELSE
    1047              :                               v(coset(ax, ay, az), 4, 1, n) = &
    1048              :                                  rbp(3)*v(coset(ax, ay, az), 1, 1, n) + &
    1049              :                                  rpw(3)*v(coset(ax, ay, az), 1, 1, n + 1) + &
    1050              :                                  fz*(v(coset(ax, ay, az - 1), 1, 1, n) + &
    1051        97318 :                                      f4*v(coset(ax, ay, az - 1), 1, 1, n + 1))
    1052              :                            END IF
    1053              : 
    1054              :                         END DO
    1055              :                      END DO
    1056              :                   END DO
    1057              : 
    1058              :                   ! *** Recurrence steps: [ap||s] -> [ab||s] ***
    1059              : 
    1060        39270 :                   DO lb = 2, lb_max
    1061              : 
    1062              :                      ! *** Horizontal recurrence steps ***
    1063              : 
    1064              :                      ! *** [ab||s]{n} = [(a+1i)(b-1i)||s]{n} -    ***
    1065              :                      ! ***              (Bi - Ai)*[a(b-1i)||s]{n} ***
    1066              : 
    1067        11256 :                      la_start = MAX(0, la_min - 1)
    1068              : 
    1069        11256 :                      DO la = la_start, la_max - 1
    1070        28152 :                         DO n = 1, nmax - la - lb
    1071        42446 :                            DO ax = 0, la
    1072        59766 :                               DO ay = 0, la - ax
    1073        22948 :                                  az = la - ax - ay
    1074              : 
    1075              :                                  ! *** Shift of angular momentum component z from a to b ***
    1076              : 
    1077              :                                  v(coset(ax, ay, az), coset(0, 0, lb), 1, n) = &
    1078              :                                     v(coset(ax, ay, az + 1), coset(0, 0, lb - 1), 1, n) - &
    1079        22948 :                                     rab(3)*v(coset(ax, ay, az), coset(0, 0, lb - 1), 1, n)
    1080              : 
    1081              :                                  ! *** Shift of angular momentum component y from a to b ***
    1082              : 
    1083        68844 :                                  DO by = 1, lb
    1084        45896 :                                     bz = lb - by
    1085              :                                     v(coset(ax, ay, az), coset(0, by, bz), 1, n) = &
    1086              :                                        v(coset(ax, ay + 1, az), coset(0, by - 1, bz), 1, n) - &
    1087        68844 :                                        rab(2)*v(coset(ax, ay, az), coset(0, by - 1, bz), 1, n)
    1088              :                                  END DO
    1089              : 
    1090              :                                  ! *** Shift of angular momentum component x from a to b ***
    1091              : 
    1092        88766 :                                  DO bx = 1, lb
    1093       137688 :                                     DO by = 0, lb - bx
    1094        68844 :                                        bz = lb - bx - by
    1095              :                                        v(coset(ax, ay, az), coset(bx, by, bz), 1, n) = &
    1096              :                                           v(coset(ax + 1, ay, az), coset(bx - 1, by, bz), 1, n) - &
    1097       114740 :                                           rab(1)*v(coset(ax, ay, az), coset(bx - 1, by, bz), 1, n)
    1098              :                                     END DO
    1099              :                                  END DO
    1100              : 
    1101              :                               END DO
    1102              :                            END DO
    1103              :                         END DO
    1104              :                      END DO
    1105              : 
    1106              :                      ! *** Vertical recurrence step ***
    1107              : 
    1108              :                      ! *** [ab||s]{n} = (Pi - Bi)*[a(b-1i)||s]{n} +          ***
    1109              :                      ! ***              (Wi - Pi)*[a(b-1i)||s]{n+1} +        ***
    1110              :                      ! ***              f2*Ni(a)*(   [(a-1i)(b-1i)||s]{n} +  ***
    1111              :                      ! ***                        f4*[(a-1i)(b-1i)||s]{n+1}) ***
    1112              :                      ! ***              f2*Ni(b-1i)*(   [a(b-2i)||s]{n} +    ***
    1113              :                      ! ***                           f4*[a(b-2i)||s]{n+1})   ***
    1114              : 
    1115        50538 :                      DO n = 1, nmax - la_max - lb
    1116        41450 :                         DO ax = 0, la_max
    1117        24554 :                            fx = f2*REAL(ax, dp)
    1118        75680 :                            DO ay = 0, la_max - ax
    1119        39858 :                               fy = f2*REAL(ay, dp)
    1120        39858 :                               az = la_max - ax - ay
    1121        39858 :                               fz = f2*REAL(az, dp)
    1122              : 
    1123              :                               ! *** Shift of angular momentum component z from a to b ***
    1124              : 
    1125        39858 :                               f3 = f2*REAL(lb - 1, dp)
    1126              : 
    1127        39858 :                               IF (az == 0) THEN
    1128              :                                  v(coset(ax, ay, az), coset(0, 0, lb), 1, n) = &
    1129              :                                     rbp(3)*v(coset(ax, ay, az), coset(0, 0, lb - 1), 1, n) + &
    1130              :                                     rpw(3)*v(coset(ax, ay, az), coset(0, 0, lb - 1), 1, n + 1) + &
    1131              :                                     f3*(v(coset(ax, ay, az), coset(0, 0, lb - 2), 1, n) + &
    1132        24554 :                                         f4*v(coset(ax, ay, az), coset(0, 0, lb - 2), 1, n + 1))
    1133              :                               ELSE
    1134              :                                  v(coset(ax, ay, az), coset(0, 0, lb), 1, n) = &
    1135              :                                     rbp(3)*v(coset(ax, ay, az), coset(0, 0, lb - 1), 1, n) + &
    1136              :                                     rpw(3)*v(coset(ax, ay, az), coset(0, 0, lb - 1), 1, n + 1) + &
    1137              :                                     fz*(v(coset(ax, ay, az - 1), coset(0, 0, lb - 1), 1, n) + &
    1138              :                                         f4*v(coset(ax, ay, az - 1), coset(0, 0, lb - 1), 1, n + 1)) + &
    1139              :                                     f3*(v(coset(ax, ay, az), coset(0, 0, lb - 2), 1, n) + &
    1140        15304 :                                         f4*v(coset(ax, ay, az), coset(0, 0, lb - 2), 1, n + 1))
    1141              :                               END IF
    1142              : 
    1143              :                               ! *** Shift of angular momentum component y from a to b ***
    1144              : 
    1145        39858 :                               IF (ay == 0) THEN
    1146        24554 :                                  bz = lb - 1
    1147              :                                  v(coset(ax, ay, az), coset(0, 1, bz), 1, n) = &
    1148              :                                     rbp(2)*v(coset(ax, ay, az), coset(0, 0, bz), 1, n) + &
    1149        24554 :                                     rpw(2)*v(coset(ax, ay, az), coset(0, 0, bz), 1, n + 1)
    1150        49108 :                                  DO by = 2, lb
    1151        24554 :                                     bz = lb - by
    1152        24554 :                                     f3 = f2*REAL(by - 1, dp)
    1153              :                                     v(coset(ax, ay, az), coset(0, by, bz), 1, n) = &
    1154              :                                        rbp(2)*v(coset(ax, ay, az), coset(0, by - 1, bz), 1, n) + &
    1155              :                                        rpw(2)*v(coset(ax, ay, az), coset(0, by - 1, bz), 1, n + 1) + &
    1156              :                                        f3*(v(coset(ax, ay, az), coset(0, by - 2, bz), 1, n) + &
    1157        49108 :                                            f4*v(coset(ax, ay, az), coset(0, by - 2, bz), 1, n + 1))
    1158              :                                  END DO
    1159              :                               ELSE
    1160        15304 :                                  bz = lb - 1
    1161              :                                  v(coset(ax, ay, az), coset(0, 1, bz), 1, n) = &
    1162              :                                     rbp(2)*v(coset(ax, ay, az), coset(0, 0, bz), 1, n) + &
    1163              :                                     rpw(2)*v(coset(ax, ay, az), coset(0, 0, bz), 1, n + 1) + &
    1164              :                                     fy*(v(coset(ax, ay - 1, az), coset(0, 0, bz), 1, n) + &
    1165        15304 :                                         f4*v(coset(ax, ay - 1, az), coset(0, 0, bz), 1, n + 1))
    1166        30608 :                                  DO by = 2, lb
    1167        15304 :                                     bz = lb - by
    1168        15304 :                                     f3 = f2*REAL(by - 1, dp)
    1169              :                                     v(coset(ax, ay, az), coset(0, by, bz), 1, n) = &
    1170              :                                        rbp(2)*v(coset(ax, ay, az), coset(0, by - 1, bz), 1, n) + &
    1171              :                                        rpw(2)*v(coset(ax, ay, az), coset(0, by - 1, bz), 1, n + 1) + &
    1172              :                                        fy*(v(coset(ax, ay - 1, az), coset(0, by - 1, bz), 1, n) + &
    1173              :                                            f4*v(coset(ax, ay - 1, az), &
    1174              :                                                 coset(0, by - 1, bz), 1, n + 1)) + &
    1175              :                                        f3*(v(coset(ax, ay, az), coset(0, by - 2, bz), 1, n) + &
    1176        30608 :                                            f4*v(coset(ax, ay, az), coset(0, by - 2, bz), 1, n + 1))
    1177              :                                  END DO
    1178              :                               END IF
    1179              : 
    1180              :                               ! *** Shift of angular momentum component x from a to b ***
    1181              : 
    1182        64412 :                               IF (ax == 0) THEN
    1183        73662 :                                  DO by = 0, lb - 1
    1184        49108 :                                     bz = lb - 1 - by
    1185              :                                     v(coset(ax, ay, az), coset(1, by, bz), 1, n) = &
    1186              :                                        rbp(1)*v(coset(ax, ay, az), coset(0, by, bz), 1, n) + &
    1187        73662 :                                        rpw(1)*v(coset(ax, ay, az), coset(0, by, bz), 1, n + 1)
    1188              :                                  END DO
    1189        49108 :                                  DO bx = 2, lb
    1190        24554 :                                     f3 = f2*REAL(bx - 1, dp)
    1191        73662 :                                     DO by = 0, lb - bx
    1192        24554 :                                        bz = lb - bx - by
    1193              :                                        v(coset(ax, ay, az), coset(bx, by, bz), 1, n) = &
    1194              :                                           rbp(1)*v(coset(ax, ay, az), coset(bx - 1, by, bz), 1, n) + &
    1195              :                                           rpw(1)*v(coset(ax, ay, az), &
    1196              :                                                    coset(bx - 1, by, bz), 1, n + 1) + &
    1197              :                                           f3*(v(coset(ax, ay, az), coset(bx - 2, by, bz), 1, n) + &
    1198        49108 :                                               f4*v(coset(ax, ay, az), coset(bx - 2, by, bz), 1, n + 1))
    1199              :                                     END DO
    1200              :                                  END DO
    1201              :                               ELSE
    1202        45912 :                                  DO by = 0, lb - 1
    1203        30608 :                                     bz = lb - 1 - by
    1204              :                                     v(coset(ax, ay, az), coset(1, by, bz), 1, n) = &
    1205              :                                        rbp(1)*v(coset(ax, ay, az), coset(0, by, bz), 1, n) + &
    1206              :                                        rpw(1)*v(coset(ax, ay, az), coset(0, by, bz), 1, n + 1) + &
    1207              :                                        fx*(v(coset(ax - 1, ay, az), coset(0, by, bz), 1, n) + &
    1208        45912 :                                            f4*v(coset(ax - 1, ay, az), coset(0, by, bz), 1, n + 1))
    1209              :                                  END DO
    1210        30608 :                                  DO bx = 2, lb
    1211        15304 :                                     f3 = f2*REAL(bx - 1, dp)
    1212        45912 :                                     DO by = 0, lb - bx
    1213        15304 :                                        bz = lb - bx - by
    1214              :                                        v(coset(ax, ay, az), coset(bx, by, bz), 1, n) = &
    1215              :                                           rbp(1)*v(coset(ax, ay, az), coset(bx - 1, by, bz), 1, n) + &
    1216              :                                           rpw(1)*v(coset(ax, ay, az), &
    1217              :                                                    coset(bx - 1, by, bz), 1, n + 1) + &
    1218              :                                           fx*(v(coset(ax - 1, ay, az), &
    1219              :                                                 coset(bx - 1, by, bz), 1, n) + &
    1220              :                                               f4*v(coset(ax - 1, ay, az), &
    1221              :                                                    coset(bx - 1, by, bz), 1, n + 1)) + &
    1222              :                                           f3*(v(coset(ax, ay, az), coset(bx - 2, by, bz), 1, n) + &
    1223        30608 :                                               f4*v(coset(ax, ay, az), coset(bx - 2, by, bz), 1, n + 1))
    1224              :                                     END DO
    1225              :                                  END DO
    1226              :                               END IF
    1227              : 
    1228              :                            END DO
    1229              :                         END DO
    1230              :                      END DO
    1231              : 
    1232              :                   END DO
    1233              : 
    1234              :                END IF
    1235              : 
    1236              :             ELSE
    1237              : 
    1238        70290 :                IF (lb_max > 0) THEN
    1239              : 
    1240              :                   ! *** Vertical recurrence steps: [ss||s] -> [sb||s] ***
    1241              : 
    1242       113928 :                   rbp(:) = rap(:) - rab(:)
    1243              : 
    1244              :                   ! *** [sp||s]{n} = (Pi - Bi)*[ss||s]{n} + ***
    1245              :                   ! ***              (Wi - Pi)*[ss||s]{n+1} ***
    1246              : 
    1247        89346 :                   DO n = 1, nmax - 1
    1248        60864 :                      v(1, 2, 1, n) = rbp(1)*v(1, 1, 1, n) + rpw(1)*v(1, 1, 1, n + 1)
    1249        60864 :                      v(1, 3, 1, n) = rbp(2)*v(1, 1, 1, n) + rpw(2)*v(1, 1, 1, n + 1)
    1250        89346 :                      v(1, 4, 1, n) = rbp(3)*v(1, 1, 1, n) + rpw(3)*v(1, 1, 1, n + 1)
    1251              :                   END DO
    1252              : 
    1253              :                   ! *** [sb||s]{n} = (Pi - Bi)*[s(b-1i)||s]{n} +        ***
    1254              :                   ! ***              (Wi - Pi)*[s(b-1i)||s]{n+1} +      ***
    1255              :                   ! ***              f2*Ni(b-1i)*(   [s(b-2i)||s]{n} +  ***
    1256              :                   ! ***                           f4*[s(b-2i)||s]{n+1}) ***
    1257              : 
    1258        32394 :                   DO lb = 2, lb_max
    1259              : 
    1260        40226 :                      DO n = 1, nmax - lb
    1261              : 
    1262              :                         ! *** Increase the angular momentum component z of b ***
    1263              : 
    1264              :                         v(1, coset(0, 0, lb), 1, n) = &
    1265              :                            rbp(3)*v(1, coset(0, 0, lb - 1), 1, n) + &
    1266              :                            rpw(3)*v(1, coset(0, 0, lb - 1), 1, n + 1) + &
    1267              :                            f2*REAL(lb - 1, dp)*(v(1, coset(0, 0, lb - 2), 1, n) + &
    1268         7832 :                                                 f4*v(1, coset(0, 0, lb - 2), 1, n + 1))
    1269              : 
    1270              :                         ! *** Increase the angular momentum component y of b ***
    1271              : 
    1272         7832 :                         bz = lb - 1
    1273              :                         v(1, coset(0, 1, bz), 1, n) = &
    1274              :                            rbp(2)*v(1, coset(0, 0, bz), 1, n) + &
    1275         7832 :                            rpw(2)*v(1, coset(0, 0, bz), 1, n + 1)
    1276              : 
    1277        15664 :                         DO by = 2, lb
    1278         7832 :                            bz = lb - by
    1279              :                            v(1, coset(0, by, bz), 1, n) = &
    1280              :                               rbp(2)*v(1, coset(0, by - 1, bz), 1, n) + &
    1281              :                               rpw(2)*v(1, coset(0, by - 1, bz), 1, n + 1) + &
    1282              :                               f2*REAL(by - 1, dp)*(v(1, coset(0, by - 2, bz), 1, n) + &
    1283        15664 :                                                    f4*v(1, coset(0, by - 2, bz), 1, n + 1))
    1284              :                         END DO
    1285              : 
    1286              :                         ! *** Increase the angular momentum component x of b ***
    1287              : 
    1288        23496 :                         DO by = 0, lb - 1
    1289        15664 :                            bz = lb - 1 - by
    1290              :                            v(1, coset(1, by, bz), 1, n) = &
    1291              :                               rbp(1)*v(1, coset(0, by, bz), 1, n) + &
    1292        23496 :                               rpw(1)*v(1, coset(0, by, bz), 1, n + 1)
    1293              :                         END DO
    1294              : 
    1295        19576 :                         DO bx = 2, lb
    1296         7832 :                            f3 = f2*REAL(bx - 1, dp)
    1297        23496 :                            DO by = 0, lb - bx
    1298         7832 :                               bz = lb - bx - by
    1299              :                               v(1, coset(bx, by, bz), 1, n) = &
    1300              :                                  rbp(1)*v(1, coset(bx - 1, by, bz), 1, n) + &
    1301              :                                  rpw(1)*v(1, coset(bx - 1, by, bz), 1, n + 1) + &
    1302              :                                  f3*(v(1, coset(bx - 2, by, bz), 1, n) + &
    1303        15664 :                                      f4*v(1, coset(bx - 2, by, bz), 1, n + 1))
    1304              :                            END DO
    1305              :                         END DO
    1306              : 
    1307              :                      END DO
    1308              : 
    1309              :                   END DO
    1310              : 
    1311              :                END IF
    1312              : 
    1313              :             END IF
    1314              : 
    1315              :             ! *** Recurrence steps: [ab||s] -> [ab||c] ***
    1316              : 
    1317       131454 :             IF (lc_max > 0) THEN
    1318              : 
    1319              :                ! *** Vertical recurrence steps: [ss||s] -> [ss||c] ***
    1320              : 
    1321        78876 :                f5 = -zetw/zetp
    1322        78876 :                f6 = 0.5_dp*zetw
    1323        78876 :                f7 = 0.5_dp*zetq
    1324              : 
    1325       315504 :                rcw(:) = rcp(:) + rpw(:)
    1326              : 
    1327              :                ! *** [ss||p]{n} = (Wi - Ci)*[ss||s]{n+1}  (i = x,y,z) ***
    1328              : 
    1329       295422 :                DO n = 1, nmax - 1
    1330       216546 :                   v(1, 1, 2, n) = rcw(1)*v(1, 1, 1, n + 1)
    1331       216546 :                   v(1, 1, 3, n) = rcw(2)*v(1, 1, 1, n + 1)
    1332       295422 :                   v(1, 1, 4, n) = rcw(3)*v(1, 1, 1, n + 1)
    1333              :                END DO
    1334              : 
    1335              :                ! *** [ss||c]{n} = (Wi - Ci)*[ss||c-1i]{n+1} + ***
    1336              :                ! ***              f7*Ni(c-1i)*[ss||c-2i]{n} + ***
    1337              :                ! ***              f5*[ss||c-2i]{n+1}          ***
    1338              : 
    1339       131172 :                DO lc = 2, lc_max
    1340              : 
    1341       253179 :                   DO n = 1, nmax - lc
    1342              : 
    1343              :                      ! *** Increase the angular momentum component z of c ***
    1344              : 
    1345              :                      v(1, 1, coset(0, 0, lc), n) = &
    1346              :                         rcw(3)*v(1, 1, coset(0, 0, lc - 1), n + 1) + &
    1347              :                         f7*REAL(lc - 1, dp)*(v(1, 1, coset(0, 0, lc - 2), n) + &
    1348       122007 :                                              f5*v(1, 1, coset(0, 0, lc - 2), n + 1))
    1349              : 
    1350              :                      ! *** Increase the angular momentum component y of c ***
    1351              : 
    1352       122007 :                      cz = lc - 1
    1353       122007 :                      v(1, 1, coset(0, 1, cz), n) = rcw(2)*v(1, 1, coset(0, 0, cz), n + 1)
    1354              : 
    1355       270969 :                      DO cy = 2, lc
    1356       148962 :                         cz = lc - cy
    1357              :                         v(1, 1, coset(0, cy, cz), n) = &
    1358              :                            rcw(2)*v(1, 1, coset(0, cy - 1, cz), n + 1) + &
    1359              :                            f7*REAL(cy - 1, dp)*(v(1, 1, coset(0, cy - 2, cz), n) + &
    1360       270969 :                                                 f5*v(1, 1, coset(0, cy - 2, cz), n + 1))
    1361              :                      END DO
    1362              : 
    1363              :                      ! *** Increase the angular momentum component x of c ***
    1364              : 
    1365       392976 :                      DO cy = 0, lc - 1
    1366       270969 :                         cz = lc - 1 - cy
    1367       392976 :                         v(1, 1, coset(1, cy, cz), n) = rcw(1)*v(1, 1, coset(0, cy, cz), n + 1)
    1368              :                      END DO
    1369              : 
    1370       323265 :                      DO cx = 2, lc
    1371       446886 :                         DO cy = 0, lc - cx
    1372       175917 :                            cz = lc - cx - cy
    1373              :                            v(1, 1, coset(cx, cy, cz), n) = &
    1374              :                               rcw(1)*v(1, 1, coset(cx - 1, cy, cz), n + 1) + &
    1375              :                               f7*REAL(cx - 1, dp)*(v(1, 1, coset(cx - 2, cy, cz), n) + &
    1376       324879 :                                                    f5*v(1, 1, coset(cx - 2, cy, cz), n + 1))
    1377              :                         END DO
    1378              :                      END DO
    1379              : 
    1380              :                   END DO
    1381              : 
    1382              :                END DO
    1383              : 
    1384              :                ! *** Recurrence steps: [ss||c] -> [ab||c] ***
    1385              : 
    1386       210048 :                DO lc = 1, lc_max
    1387              : 
    1388       537579 :                   DO cx = 0, lc
    1389      1060671 :                      DO cy = 0, lc - cx
    1390       601968 :                         cz = lc - cx - cy
    1391              : 
    1392       601968 :                         coc = coset(cx, cy, cz)
    1393       601968 :                         cocx = coset(MAX(0, cx - 1), cy, cz)
    1394       601968 :                         cocy = coset(cx, MAX(0, cy - 1), cz)
    1395       601968 :                         cocz = coset(cx, cy, MAX(0, cz - 1))
    1396              : 
    1397       601968 :                         fcx = f6*REAL(cx, dp)
    1398       601968 :                         fcy = f6*REAL(cy, dp)
    1399       601968 :                         fcz = f6*REAL(cz, dp)
    1400              : 
    1401              :                         ! *** Recurrence steps: [ss||c] -> [as||c] ***
    1402              : 
    1403       929499 :                         IF (la_max > 0) THEN
    1404              : 
    1405              :                            ! *** Vertical recurrence steps: [ss||c] -> [as||c] ***
    1406              : 
    1407              :                            ! *** [ps||c]{n} = (Pi - Ai)*[ss||c]{n} +                ***
    1408              :                            ! ***              (Wi - Pi)*[ss||c]{n+1} +              ***
    1409              :                            ! ***              f6*Ni(c)*[ss||c-1i]{n+1}  (i = x,y,z) ***
    1410              : 
    1411       895234 :                            DO n = 1, nmax - 1 - lc
    1412              :                               v(2, 1, coc, n) = rap(1)*v(1, 1, coc, n) + &
    1413              :                                                 rpw(1)*v(1, 1, coc, n + 1) + &
    1414       614216 :                                                 fcx*v(1, 1, cocx, n + 1)
    1415              :                               v(3, 1, coc, n) = rap(2)*v(1, 1, coc, n) + &
    1416              :                                                 rpw(2)*v(1, 1, coc, n + 1) + &
    1417       614216 :                                                 fcy*v(1, 1, cocy, n + 1)
    1418              :                               v(4, 1, coc, n) = rap(3)*v(1, 1, coc, n) + &
    1419              :                                                 rpw(3)*v(1, 1, coc, n + 1) + &
    1420       895234 :                                                 fcz*v(1, 1, cocz, n + 1)
    1421              :                            END DO
    1422              : 
    1423              :                            ! *** [as||c]{n} = (Pi - Ai)*[(a-1i)s||c]{n} +          ***
    1424              :                            ! ***              (Wi - Pi)*[(a-1i)s||c]{n+1} +        ***
    1425              :                            ! ***              f2*Ni(a-1i)*(   [(a-2i)s||c]{n} +    ***
    1426              :                            ! ***                           f4*[(a-2i)s||c]{n+1}) + ***
    1427              :                            ! ***              f6*Ni(c)*[(a-1i)s||c-1i]{n+1}        ***
    1428              : 
    1429       323824 :                            DO la = 2, la_max
    1430              : 
    1431       413694 :                               DO n = 1, nmax - la - lc
    1432              : 
    1433              :                                  ! *** Increase the angular momentum component z of a ***
    1434              : 
    1435              :                                  v(coset(0, 0, la), 1, coc, n) = &
    1436              :                                     rap(3)*v(coset(0, 0, la - 1), 1, coc, n) + &
    1437              :                                     rpw(3)*v(coset(0, 0, la - 1), 1, coc, n + 1) + &
    1438              :                                     f2*REAL(la - 1, dp)*(v(coset(0, 0, la - 2), 1, coc, n) + &
    1439              :                                                          f4*v(coset(0, 0, la - 2), 1, coc, n + 1)) + &
    1440        89870 :                                     fcz*v(coset(0, 0, la - 1), 1, cocz, n + 1)
    1441              : 
    1442              :                                  ! *** Increase the angular momentum component y of a ***
    1443              : 
    1444        89870 :                                  az = la - 1
    1445              :                                  v(coset(0, 1, az), 1, coc, n) = &
    1446              :                                     rap(2)*v(coset(0, 0, az), 1, coc, n) + &
    1447              :                                     rpw(2)*v(coset(0, 0, az), 1, coc, n + 1) + &
    1448        89870 :                                     fcy*v(coset(0, 0, az), 1, cocy, n + 1)
    1449              : 
    1450       179740 :                                  DO ay = 2, la
    1451        89870 :                                     f3 = f2*REAL(ay - 1, dp)
    1452        89870 :                                     az = la - ay
    1453              :                                     v(coset(0, ay, az), 1, coc, n) = &
    1454              :                                        rap(2)*v(coset(0, ay - 1, az), 1, coc, n) + &
    1455              :                                        rpw(2)*v(coset(0, ay - 1, az), 1, coc, n + 1) + &
    1456              :                                        f3*(v(coset(0, ay - 2, az), 1, coc, n) + &
    1457              :                                            f4*v(coset(0, ay - 2, az), 1, coc, n + 1)) + &
    1458       179740 :                                        fcy*v(coset(0, ay - 1, az), 1, cocy, n + 1)
    1459              :                                  END DO
    1460              : 
    1461              :                                  ! *** Increase the angular momentum component x of a ***
    1462              : 
    1463       269610 :                                  DO ay = 0, la - 1
    1464       179740 :                                     az = la - 1 - ay
    1465              :                                     v(coset(1, ay, az), 1, coc, n) = &
    1466              :                                        rap(1)*v(coset(0, ay, az), 1, coc, n) + &
    1467              :                                        rpw(1)*v(coset(0, ay, az), 1, coc, n + 1) + &
    1468       269610 :                                        fcx*v(coset(0, ay, az), 1, cocx, n + 1)
    1469              :                                  END DO
    1470              : 
    1471       222546 :                                  DO ax = 2, la
    1472        89870 :                                     f3 = f2*REAL(ax - 1, dp)
    1473       269610 :                                     DO ay = 0, la - ax
    1474        89870 :                                        az = la - ax - ay
    1475              :                                        v(coset(ax, ay, az), 1, coc, n) = &
    1476              :                                           rap(1)*v(coset(ax - 1, ay, az), 1, coc, n) + &
    1477              :                                           rpw(1)*v(coset(ax - 1, ay, az), 1, coc, n + 1) + &
    1478              :                                           f3*(v(coset(ax - 2, ay, az), 1, coc, n) + &
    1479              :                                               f4*v(coset(ax - 2, ay, az), 1, coc, n + 1)) + &
    1480       179740 :                                           fcx*v(coset(ax - 1, ay, az), 1, cocx, n + 1)
    1481              :                                     END DO
    1482              :                                  END DO
    1483              : 
    1484              :                               END DO
    1485              : 
    1486              :                            END DO
    1487              : 
    1488              :                            ! *** Recurrence steps: [as||c] -> [ab||c] ***
    1489              : 
    1490       281018 :                            IF (lb_max > 0) THEN
    1491              : 
    1492              :                               ! *** Horizontal recurrence steps ***
    1493              : 
    1494              :                               ! *** [ap||c]{n} = [(a+1i)s||c]{n} - (Bi - Ai)*[as||c]{n} ***
    1495              : 
    1496       154828 :                               la_start = MAX(0, la_min - 1)
    1497              : 
    1498       309656 :                               DO la = la_start, la_max - 1
    1499       705652 :                                  DO n = 1, nmax - la - 1 - lc
    1500      1012882 :                                     DO ax = 0, la
    1501      1386174 :                                        DO ay = 0, la - ax
    1502       528120 :                                           az = la - ax - ay
    1503              :                                           v(coset(ax, ay, az), 2, coc, n) = &
    1504              :                                              v(coset(ax + 1, ay, az), 1, coc, n) - &
    1505       528120 :                                              rab(1)*v(coset(ax, ay, az), 1, coc, n)
    1506              :                                           v(coset(ax, ay, az), 3, coc, n) = &
    1507              :                                              v(coset(ax, ay + 1, az), 1, coc, n) - &
    1508       528120 :                                              rab(2)*v(coset(ax, ay, az), 1, coc, n)
    1509              :                                           v(coset(ax, ay, az), 4, coc, n) = &
    1510              :                                              v(coset(ax, ay, az + 1), 1, coc, n) - &
    1511       990178 :                                              rab(3)*v(coset(ax, ay, az), 1, coc, n)
    1512              :                                        END DO
    1513              :                                     END DO
    1514              :                                  END DO
    1515              :                               END DO
    1516              : 
    1517              :                               ! *** Vertical recurrence step ***
    1518              : 
    1519              :                               ! *** [ap||c]{n} = (Pi - Bi)*[as||c]{n} +            ***
    1520              :                               ! ***              (Wi - Pi)*[as||c]{n+1} +          ***
    1521              :                               ! ***              f2*Ni(a)*(   [(a-1i)s||c]{n} +    ***
    1522              :                               ! ***                        f4*[(a-1i)s||c]{n+1}) + ***
    1523              :                               ! ***              f6*Ni(c)*[(as||c-1i]{n+1})        ***
    1524              : 
    1525       395996 :                               DO n = 1, nmax - la_max - 1 - lc
    1526       918700 :                                  DO ax = 0, la_max
    1527       522704 :                                     fx = f2*REAL(ax, dp)
    1528      1608480 :                                     DO ay = 0, la_max - ax
    1529       844608 :                                        fy = f2*REAL(ay, dp)
    1530       844608 :                                        az = la_max - ax - ay
    1531       844608 :                                        fz = f2*REAL(az, dp)
    1532              : 
    1533       844608 :                                        IF (ax == 0) THEN
    1534              :                                           v(coset(ax, ay, az), 2, coc, n) = &
    1535              :                                              rbp(1)*v(coset(ax, ay, az), 1, coc, n) + &
    1536              :                                              rpw(1)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1537       522704 :                                              fcx*v(coset(ax, ay, az), 1, cocx, n + 1)
    1538              :                                        ELSE
    1539              :                                           v(coset(ax, ay, az), 2, coc, n) = &
    1540              :                                              rbp(1)*v(coset(ax, ay, az), 1, coc, n) + &
    1541              :                                              rpw(1)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1542              :                                              fx*(v(coset(ax - 1, ay, az), 1, coc, n) + &
    1543              :                                                  f4*v(coset(ax - 1, ay, az), 1, coc, n + 1)) + &
    1544       321904 :                                              fcx*v(coset(ax, ay, az), 1, cocx, n + 1)
    1545              :                                        END IF
    1546              : 
    1547       844608 :                                        IF (ay == 0) THEN
    1548              :                                           v(coset(ax, ay, az), 3, coc, n) = &
    1549              :                                              rbp(2)*v(coset(ax, ay, az), 1, coc, n) + &
    1550              :                                              rpw(2)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1551       522704 :                                              fcy*v(coset(ax, ay, az), 1, cocy, n + 1)
    1552              :                                        ELSE
    1553              :                                           v(coset(ax, ay, az), 3, coc, n) = &
    1554              :                                              rbp(2)*v(coset(ax, ay, az), 1, coc, n) + &
    1555              :                                              rpw(2)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1556              :                                              fy*(v(coset(ax, ay - 1, az), 1, coc, n) + &
    1557              :                                                  f4*v(coset(ax, ay - 1, az), 1, coc, n + 1)) + &
    1558       321904 :                                              fcy*v(coset(ax, ay, az), 1, cocy, n + 1)
    1559              :                                        END IF
    1560              : 
    1561      1367312 :                                        IF (az == 0) THEN
    1562              :                                           v(coset(ax, ay, az), 4, coc, n) = &
    1563              :                                              rbp(3)*v(coset(ax, ay, az), 1, coc, n) + &
    1564              :                                              rpw(3)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1565       522704 :                                              fcz*v(coset(ax, ay, az), 1, cocz, n + 1)
    1566              :                                        ELSE
    1567              :                                           v(coset(ax, ay, az), 4, coc, n) = &
    1568              :                                              rbp(3)*v(coset(ax, ay, az), 1, coc, n) + &
    1569              :                                              rpw(3)*v(coset(ax, ay, az), 1, coc, n + 1) + &
    1570              :                                              fz*(v(coset(ax, ay, az - 1), 1, coc, n) + &
    1571              :                                                  f4*v(coset(ax, ay, az - 1), 1, coc, n + 1)) + &
    1572       321904 :                                              fcz*v(coset(ax, ay, az), 1, cocz, n + 1)
    1573              :                                        END IF
    1574              : 
    1575              :                                     END DO
    1576              :                                  END DO
    1577              :                               END DO
    1578              : 
    1579              :                               ! *** Recurrence steps: [ap||c] -> [ab||c] ***
    1580              : 
    1581       180748 :                               DO lb = 2, lb_max
    1582              : 
    1583              :                                  ! *** Horizontal recurrence steps ***
    1584              : 
    1585              :                                  ! *** [ab||c]{n} = [(a+1i)(b-1i)||c]{n} -    ***
    1586              :                                  ! ***              (Bi - Ai)*[a(b-1i)||c]{n} ***
    1587              : 
    1588        51840 :                                  la_start = MAX(0, la_min - 1)
    1589              : 
    1590        51840 :                                  DO la = la_start, la_max - 1
    1591       113796 :                                     DO n = 1, nmax - la - lb - lc
    1592       160928 :                                        DO ax = 0, la
    1593       219156 :                                           DO ay = 0, la - ax
    1594        84148 :                                              az = la - ax - ay
    1595              : 
    1596              :                                              ! *** Shift of angular momentum component z ***
    1597              : 
    1598              :                                              v(coset(ax, ay, az), coset(0, 0, lb), coc, n) = &
    1599              :                                                 v(coset(ax, ay, az + 1), &
    1600              :                                                   coset(0, 0, lb - 1), coc, n) - &
    1601              :                                                 rab(3)*v(coset(ax, ay, az), &
    1602        84148 :                                                          coset(0, 0, lb - 1), coc, n)
    1603              : 
    1604              :                                              ! *** Shift of angular momentum component y ***
    1605              : 
    1606       252444 :                                              DO by = 1, lb
    1607       168296 :                                                 bz = lb - by
    1608              :                                                 v(coset(ax, ay, az), coset(0, by, bz), coc, n) = &
    1609              :                                                    v(coset(ax, ay + 1, az), &
    1610              :                                                      coset(0, by - 1, bz), coc, n) - &
    1611              :                                                    rab(2)*v(coset(ax, ay, az), &
    1612       252444 :                                                             coset(0, by - 1, bz), coc, n)
    1613              :                                              END DO
    1614              : 
    1615              :                                              ! *** Shift of angular momentum component x ***
    1616              : 
    1617       325496 :                                              DO bx = 1, lb
    1618       504888 :                                                 DO by = 0, lb - bx
    1619       252444 :                                                    bz = lb - bx - by
    1620              :                                                    v(coset(ax, ay, az), coset(bx, by, bz), coc, n) = &
    1621              :                                                       v(coset(ax + 1, ay, az), &
    1622              :                                                         coset(bx - 1, by, bz), coc, n) - &
    1623              :                                                       rab(1)*v(coset(ax, ay, az), &
    1624       420740 :                                                                coset(bx - 1, by, bz), coc, n)
    1625              :                                                 END DO
    1626              :                                              END DO
    1627              : 
    1628              :                                           END DO
    1629              :                                        END DO
    1630              :                                     END DO
    1631              :                                  END DO
    1632              : 
    1633              :                                  ! *** Vertical recurrence step ***
    1634              : 
    1635              :                                  ! *** [ab||c]{n} = (Pi - Bi)*[a(b-1i)||c]{n} +          ***
    1636              :                                  ! ***              (Wi - Pi)*[a(b-1i)||c]{n+1} +        ***
    1637              :                                  ! ***              f2*Ni(a)*(   [(a-1i)(b-1i)||c]{n} +  ***
    1638              :                                  ! ***                        f4*[(a-1i)(b-1i)||c]{n+1}) ***
    1639              :                                  ! ***              f2*Ni(b-1i)*(   [a(b-2i)||c]{n} +    ***
    1640              :                                  ! ***                           f4*[a(b-2i)||c]{n+1}) + ***
    1641              :                                  ! ***              f6*Ni(c)*[a(b-1i)||c-1i]{n+1})       ***
    1642              : 
    1643       216784 :                                  DO n = 1, nmax - la_max - lb - lc
    1644       140482 :                                     DO ax = 0, la_max
    1645        78526 :                                        fx = f2*REAL(ax, dp)
    1646       242032 :                                        DO ay = 0, la_max - ax
    1647       127470 :                                           fy = f2*REAL(ay, dp)
    1648       127470 :                                           az = la_max - ax - ay
    1649       127470 :                                           fz = f2*REAL(az, dp)
    1650              : 
    1651              :                                           ! *** Shift of angular momentum component z from a to b ***
    1652              : 
    1653       127470 :                                           f3 = f2*REAL(lb - 1, dp)
    1654              : 
    1655       127470 :                                           IF (az == 0) THEN
    1656              :                                              v(coset(ax, ay, az), coset(0, 0, lb), coc, n) = &
    1657              :                                                 rbp(3)*v(coset(ax, ay, az), &
    1658              :                                                          coset(0, 0, lb - 1), coc, n) + &
    1659              :                                                 rpw(3)*v(coset(ax, ay, az), &
    1660              :                                                          coset(0, 0, lb - 1), coc, n + 1) + &
    1661              :                                                 f3*(v(coset(ax, ay, az), &
    1662              :                                                       coset(0, 0, lb - 2), coc, n) + &
    1663              :                                                     f4*v(coset(ax, ay, az), &
    1664              :                                                          coset(0, 0, lb - 2), coc, n + 1)) + &
    1665              :                                                 fcz*v(coset(ax, ay, az), &
    1666        78526 :                                                       coset(0, 0, lb - 1), cocz, n + 1)
    1667              :                                           ELSE
    1668              :                                              v(coset(ax, ay, az), coset(0, 0, lb), coc, n) = &
    1669              :                                                 rbp(3)*v(coset(ax, ay, az), &
    1670              :                                                          coset(0, 0, lb - 1), coc, n) + &
    1671              :                                                 rpw(3)*v(coset(ax, ay, az), &
    1672              :                                                          coset(0, 0, lb - 1), coc, n + 1) + &
    1673              :                                                 fz*(v(coset(ax, ay, az - 1), &
    1674              :                                                       coset(0, 0, lb - 1), coc, n) + &
    1675              :                                                     f4*v(coset(ax, ay, az - 1), &
    1676              :                                                          coset(0, 0, lb - 1), coc, n + 1)) + &
    1677              :                                                 f3*(v(coset(ax, ay, az), &
    1678              :                                                       coset(0, 0, lb - 2), coc, n) + &
    1679              :                                                     f4*v(coset(ax, ay, az), &
    1680              :                                                          coset(0, 0, lb - 2), coc, n + 1)) + &
    1681              :                                                 fcz*v(coset(ax, ay, az), &
    1682        48944 :                                                       coset(0, 0, lb - 1), cocz, n + 1)
    1683              :                                           END IF
    1684              : 
    1685              :                                           ! *** Shift of angular momentum component y from a to b ***
    1686              : 
    1687       127470 :                                           IF (ay == 0) THEN
    1688        78526 :                                              bz = lb - 1
    1689              :                                              v(coset(ax, ay, az), coset(0, 1, bz), coc, n) = &
    1690              :                                                 rbp(2)*v(coset(ax, ay, az), &
    1691              :                                                          coset(0, 0, bz), coc, n) + &
    1692              :                                                 rpw(2)*v(coset(ax, ay, az), &
    1693              :                                                          coset(0, 0, bz), coc, n + 1) + &
    1694              :                                                 fcy*v(coset(ax, ay, az), &
    1695        78526 :                                                       coset(0, 0, bz), cocy, n + 1)
    1696       157052 :                                              DO by = 2, lb
    1697        78526 :                                                 bz = lb - by
    1698        78526 :                                                 f3 = f2*REAL(by - 1, dp)
    1699              :                                                 v(coset(ax, ay, az), coset(0, by, bz), coc, n) = &
    1700              :                                                    rbp(2)*v(coset(ax, ay, az), &
    1701              :                                                             coset(0, by - 1, bz), coc, n) + &
    1702              :                                                    rpw(2)*v(coset(ax, ay, az), &
    1703              :                                                             coset(0, by - 1, bz), coc, n + 1) + &
    1704              :                                                    f3*(v(coset(ax, ay, az), &
    1705              :                                                          coset(0, by - 2, bz), coc, n) + &
    1706              :                                                        f4*v(coset(ax, ay, az), &
    1707              :                                                             coset(0, by - 2, bz), coc, n + 1)) + &
    1708              :                                                    fcy*v(coset(ax, ay, az), &
    1709       157052 :                                                          coset(0, by - 1, bz), cocy, n + 1)
    1710              :                                              END DO
    1711              :                                           ELSE
    1712        48944 :                                              bz = lb - 1
    1713              :                                              v(coset(ax, ay, az), coset(0, 1, bz), coc, n) = &
    1714              :                                                 rbp(2)*v(coset(ax, ay, az), &
    1715              :                                                          coset(0, 0, bz), coc, n) + &
    1716              :                                                 rpw(2)*v(coset(ax, ay, az), &
    1717              :                                                          coset(0, 0, bz), coc, n + 1) + &
    1718              :                                                 fy*(v(coset(ax, ay - 1, az), &
    1719              :                                                       coset(0, 0, bz), coc, n) + &
    1720              :                                                     f4*v(coset(ax, ay - 1, az), &
    1721              :                                                          coset(0, 0, bz), coc, n + 1)) + &
    1722              :                                                 fcy*v(coset(ax, ay, az), &
    1723        48944 :                                                       coset(0, 0, bz), cocy, n + 1)
    1724        97888 :                                              DO by = 2, lb
    1725        48944 :                                                 bz = lb - by
    1726        48944 :                                                 f3 = f2*REAL(by - 1, dp)
    1727              :                                                 v(coset(ax, ay, az), coset(0, by, bz), coc, n) = &
    1728              :                                                    rbp(2)*v(coset(ax, ay, az), &
    1729              :                                                             coset(0, by - 1, bz), coc, n) + &
    1730              :                                                    rpw(2)*v(coset(ax, ay, az), &
    1731              :                                                             coset(0, by - 1, bz), coc, n + 1) + &
    1732              :                                                    fy*(v(coset(ax, ay - 1, az), &
    1733              :                                                          coset(0, by - 1, bz), coc, n) + &
    1734              :                                                        f4*v(coset(ax, ay - 1, az), &
    1735              :                                                             coset(0, by - 1, bz), coc, n + 1)) + &
    1736              :                                                    f3*(v(coset(ax, ay, az), &
    1737              :                                                          coset(0, by - 2, bz), coc, n) + &
    1738              :                                                        f4*v(coset(ax, ay, az), &
    1739              :                                                             coset(0, by - 2, bz), coc, n + 1)) + &
    1740              :                                                    fcy*v(coset(ax, ay, az), &
    1741        97888 :                                                          coset(0, by - 1, bz), cocy, n + 1)
    1742              :                                              END DO
    1743              :                                           END IF
    1744              : 
    1745              :                                           ! *** Shift of angular momentum component x from a to b ***
    1746              : 
    1747       205996 :                                           IF (ax == 0) THEN
    1748       235578 :                                              DO by = 0, lb - 1
    1749       157052 :                                                 bz = lb - 1 - by
    1750              :                                                 v(coset(ax, ay, az), coset(1, by, bz), coc, n) = &
    1751              :                                                    rbp(1)*v(coset(ax, ay, az), &
    1752              :                                                             coset(0, by, bz), coc, n) + &
    1753              :                                                    rpw(1)*v(coset(ax, ay, az), &
    1754              :                                                             coset(0, by, bz), coc, n + 1) + &
    1755              :                                                    fcx*v(coset(ax, ay, az), &
    1756       235578 :                                                          coset(0, by, bz), cocx, n + 1)
    1757              :                                              END DO
    1758       157052 :                                              DO bx = 2, lb
    1759        78526 :                                                 f3 = f2*REAL(bx - 1, dp)
    1760       235578 :                                                 DO by = 0, lb - bx
    1761        78526 :                                                    bz = lb - bx - by
    1762              :                                                    v(coset(ax, ay, az), coset(bx, by, bz), coc, n) = &
    1763              :                                                       rbp(1)*v(coset(ax, ay, az), &
    1764              :                                                                coset(bx - 1, by, bz), coc, n) + &
    1765              :                                                       rpw(1)*v(coset(ax, ay, az), &
    1766              :                                                                coset(bx - 1, by, bz), coc, n + 1) + &
    1767              :                                                       f3*(v(coset(ax, ay, az), &
    1768              :                                                             coset(bx - 2, by, bz), coc, n) + &
    1769              :                                                           f4*v(coset(ax, ay, az), &
    1770              :                                                                coset(bx - 2, by, bz), coc, n + 1)) + &
    1771              :                                                       fcx*v(coset(ax, ay, az), &
    1772       157052 :                                                             coset(bx - 1, by, bz), cocx, n + 1)
    1773              :                                                 END DO
    1774              :                                              END DO
    1775              :                                           ELSE
    1776       146832 :                                              DO by = 0, lb - 1
    1777        97888 :                                                 bz = lb - 1 - by
    1778              :                                                 v(coset(ax, ay, az), coset(1, by, bz), coc, n) = &
    1779              :                                                    rbp(1)*v(coset(ax, ay, az), &
    1780              :                                                             coset(0, by, bz), coc, n) + &
    1781              :                                                    rpw(1)*v(coset(ax, ay, az), &
    1782              :                                                             coset(0, by, bz), coc, n + 1) + &
    1783              :                                                    fx*(v(coset(ax - 1, ay, az), &
    1784              :                                                          coset(0, by, bz), coc, n) + &
    1785              :                                                        f4*v(coset(ax - 1, ay, az), &
    1786              :                                                             coset(0, by, bz), coc, n + 1)) + &
    1787              :                                                    fcx*v(coset(ax, ay, az), &
    1788       146832 :                                                          coset(0, by, bz), cocx, n + 1)
    1789              :                                              END DO
    1790        97888 :                                              DO bx = 2, lb
    1791        48944 :                                                 f3 = f2*REAL(bx - 1, dp)
    1792       146832 :                                                 DO by = 0, lb - bx
    1793        48944 :                                                    bz = lb - bx - by
    1794              :                                                    v(coset(ax, ay, az), coset(bx, by, bz), coc, n) = &
    1795              :                                                       rbp(1)*v(coset(ax, ay, az), &
    1796              :                                                                coset(bx - 1, by, bz), coc, n) + &
    1797              :                                                       rpw(1)*v(coset(ax, ay, az), &
    1798              :                                                                coset(bx - 1, by, bz), coc, n + 1) + &
    1799              :                                                       fx*(v(coset(ax - 1, ay, az), &
    1800              :                                                             coset(bx - 1, by, bz), coc, n) + &
    1801              :                                                           f4*v(coset(ax - 1, ay, az), &
    1802              :                                                                coset(bx - 1, by, bz), coc, n + 1)) + &
    1803              :                                                       f3*(v(coset(ax, ay, az), &
    1804              :                                                             coset(bx - 2, by, bz), coc, n) + &
    1805              :                                                           f4*v(coset(ax, ay, az), &
    1806              :                                                                coset(bx - 2, by, bz), coc, n + 1)) + &
    1807              :                                                       fcx*v(coset(ax, ay, az), &
    1808        97888 :                                                             coset(bx - 1, by, bz), cocx, n + 1)
    1809              :                                                 END DO
    1810              :                                              END DO
    1811              :                                           END IF
    1812              : 
    1813              :                                        END DO
    1814              :                                     END DO
    1815              :                                  END DO
    1816              : 
    1817              :                               END DO
    1818              :                            END IF
    1819              : 
    1820              :                         ELSE
    1821              : 
    1822       320950 :                            IF (lb_max > 0) THEN
    1823              : 
    1824              :                               ! *** Vertical recurrence steps: [ss||c] -> [sb||c] ***
    1825              : 
    1826              :                               ! *** [sp||c]{n} = (Pi - Bi)*[ss||c]{n} +    ***
    1827              :                               ! ***              (Wi - Pi)*[ss||c]{n+1} +  ***
    1828              :                               ! ***              f6*Ni(c)**[ss||c-1i]{n+1} ***
    1829              : 
    1830       330340 :                               DO n = 1, nmax - 1 - lc
    1831              :                                  v(1, 2, coc, n) = rbp(1)*v(1, 1, coc, n) + &
    1832              :                                                    rpw(1)*v(1, 1, coc, n + 1) + &
    1833       199630 :                                                    fcx*v(1, 1, cocx, n + 1)
    1834              :                                  v(1, 3, coc, n) = rbp(2)*v(1, 1, coc, n) + &
    1835              :                                                    rpw(2)*v(1, 1, coc, n + 1) + &
    1836       199630 :                                                    fcy*v(1, 1, cocy, n + 1)
    1837              :                                  v(1, 4, coc, n) = rbp(3)*v(1, 1, coc, n) + &
    1838              :                                                    rpw(3)*v(1, 1, coc, n + 1) + &
    1839       330340 :                                                    fcz*v(1, 1, cocz, n + 1)
    1840              :                               END DO
    1841              : 
    1842              :                               ! *** [sb||c]{n} = (Pi - Bi)*[s(b-1i)||c]{n} +          ***
    1843              :                               ! ***              (Wi - Pi)*[s(b-1i)||c]{n+1} +        ***
    1844              :                               ! ***              f2*Ni(b-1i)*(   [s(b-2i)||c]{n} +    ***
    1845              :                               ! ***                           f4*[s(b-2i)||c]{n+1}) + ***
    1846              :                               ! ***              f6*Ni(c)**[s(b-1i)||c-1i]{n+1}       ***
    1847              : 
    1848       148726 :                               DO lb = 2, lb_max
    1849              : 
    1850       173774 :                                  DO n = 1, nmax - lb - lc
    1851              : 
    1852              :                                     ! *** Increase the angular momentum component z of b ***
    1853              : 
    1854              :                                     v(1, coset(0, 0, lb), coc, n) = &
    1855              :                                        rbp(3)*v(1, coset(0, 0, lb - 1), coc, n) + &
    1856              :                                        rpw(3)*v(1, coset(0, 0, lb - 1), coc, n + 1) + &
    1857              :                                        f2*REAL(lb - 1, dp)*(v(1, coset(0, 0, lb - 2), coc, n) + &
    1858              :                                                             f4*v(1, coset(0, 0, lb - 2), coc, n + 1)) + &
    1859        25048 :                                        fcz*v(1, coset(0, 0, lb - 1), cocz, n + 1)
    1860              : 
    1861              :                                     ! *** Increase the angular momentum component y of b ***
    1862              : 
    1863        25048 :                                     bz = lb - 1
    1864              :                                     v(1, coset(0, 1, bz), coc, n) = &
    1865              :                                        rbp(2)*v(1, coset(0, 0, bz), coc, n) + &
    1866              :                                        rpw(2)*v(1, coset(0, 0, bz), coc, n + 1) + &
    1867        25048 :                                        fcy*v(1, coset(0, 0, bz), cocy, n + 1)
    1868              : 
    1869        50096 :                                     DO by = 2, lb
    1870        25048 :                                        f3 = f2*REAL(by - 1, dp)
    1871        25048 :                                        bz = lb - by
    1872              :                                        v(1, coset(0, by, bz), coc, n) = &
    1873              :                                           rbp(2)*v(1, coset(0, by - 1, bz), coc, n) + &
    1874              :                                           rpw(2)*v(1, coset(0, by - 1, bz), coc, n + 1) + &
    1875              :                                           f3*(v(1, coset(0, by - 2, bz), coc, n) + &
    1876              :                                               f4*v(1, coset(0, by - 2, bz), coc, n + 1)) + &
    1877        50096 :                                           fcy*v(1, coset(0, by - 1, bz), cocy, n + 1)
    1878              :                                     END DO
    1879              : 
    1880              :                                     ! *** Increase the angular momentum component x of b ***
    1881              : 
    1882        75144 :                                     DO by = 0, lb - 1
    1883        50096 :                                        bz = lb - 1 - by
    1884              :                                        v(1, coset(1, by, bz), coc, n) = &
    1885              :                                           rbp(1)*v(1, coset(0, by, bz), coc, n) + &
    1886              :                                           rpw(1)*v(1, coset(0, by, bz), coc, n + 1) + &
    1887        75144 :                                           fcx*v(1, coset(0, by, bz), cocx, n + 1)
    1888              :                                     END DO
    1889              : 
    1890        68112 :                                     DO bx = 2, lb
    1891        25048 :                                        f3 = f2*REAL(bx - 1, dp)
    1892        75144 :                                        DO by = 0, lb - bx
    1893        25048 :                                           bz = lb - bx - by
    1894              :                                           v(1, coset(bx, by, bz), coc, n) = &
    1895              :                                              rbp(1)*v(1, coset(bx - 1, by, bz), coc, n) + &
    1896              :                                              rpw(1)*v(1, coset(bx - 1, by, bz), coc, n + 1) + &
    1897              :                                              f3*(v(1, coset(bx - 2, by, bz), coc, n) + &
    1898              :                                                  f4*v(1, coset(bx - 2, by, bz), coc, n + 1)) + &
    1899        50096 :                                              fcx*v(1, coset(bx - 1, by, bz), cocx, n + 1)
    1900              :                                        END DO
    1901              :                                     END DO
    1902              : 
    1903              :                                  END DO
    1904              : 
    1905              :                               END DO
    1906              : 
    1907              :                            END IF
    1908              : 
    1909              :                         END IF
    1910              : 
    1911              :                      END DO
    1912              :                   END DO
    1913              : 
    1914              :                END DO
    1915              : 
    1916              :             END IF
    1917              : 
    1918              :             ! *** Add the contribution of the current pair ***
    1919              :             ! *** of primitive Gaussian-type functions     ***
    1920              : 
    1921       590439 :             DO k = ncoset(lc_min - 1) + 1, ncoset(lc_max)
    1922       458985 :                kk = k - ncoset(lc_min - 1)
    1923      1706094 :                DO j = ncoset(lb_min - 1) + 1, ncoset(lb_max)
    1924      4486269 :                   DO i = ncoset(la_min - 1) + 1, ncoset(la_max - maxder_local)
    1925      2911629 :                      vabc(na + i, nb + j) = vabc(na + i, nb + j) + gccc(kk)*v(i, j, k, 1)
    1926      4027284 :                      int_abc(na + i, nb + j, kk) = v(i, j, k, 1)
    1927              :                   END DO
    1928              :                END DO
    1929              :             END DO
    1930              : 
    1931       131454 :             IF (PRESENT(maxder)) THEN
    1932            0 :                DO k = ncoset(lc_min - 1) + 1, ncoset(lc_max)
    1933            0 :                   kk = k - ncoset(lc_min - 1)
    1934            0 :                   DO j = 1, ncoset(lb_max)
    1935            0 :                      DO i = 1, ncoset(la_max)
    1936            0 :                         vabc_plus(nap + i, nb + j) = vabc_plus(nap + i, nb + j) + gccc(kk)*v(i, j, k, 1)
    1937              :                      END DO
    1938              :                   END DO
    1939              :                END DO
    1940              :             END IF
    1941              : 
    1942       212148 :             nb = nb + ncoset(lb_max)
    1943              : 
    1944              :          END DO
    1945              : 
    1946        80694 :          na = na + ncoset(la_max - maxder_local)
    1947       130644 :          nap = nap + ncoset(la_max)
    1948              : 
    1949              :       END DO
    1950              : 
    1951        49950 :    END SUBROUTINE coulomb3
    1952              : 
    1953              : END MODULE ai_coulomb
        

Generated by: LCOV version 2.0-1