LCOV - code coverage report
Current view: top level - src/aobasis - ai_eri_debug.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 0.0 % 59 0
Test Date: 2025-12-04 06:27:48 Functions: 0.0 % 2 0

            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              : !> \author J. Hutter (07.2009)
      16              : ! **************************************************************************************************
      17              : MODULE ai_eri_debug
      18              : 
      19              :    USE gamma,                           ONLY: fgamma_ref
      20              :    USE kinds,                           ONLY: dp
      21              :    USE mathconstants,                   ONLY: pi
      22              : #include "../base/base_uses.f90"
      23              : 
      24              :    IMPLICIT NONE
      25              : 
      26              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_eri_debug'
      27              : 
      28              :    INTEGER, PARAMETER            :: lmax = 5
      29              : 
      30              :    REAL(dp)                      :: xa, xb, xc, xd
      31              :    REAL(dp), DIMENSION(3)        :: A, B, C, D
      32              :    REAL(dp), DIMENSION(3)        :: P, Q, W
      33              :    REAL(dp)                      :: xsi, eta, rho, T
      34              : 
      35              :    REAL(dp), DIMENSION(0:4*lmax) :: fm, I0M
      36              : 
      37              :    PRIVATE
      38              : 
      39              : CONTAINS
      40              : 
      41              : ! **************************************************************************************************
      42              : !> \brief   Calculation of the primitive two-center Coulomb integrals over
      43              : !>          Cartesian Gaussian-type functions.
      44              : !> \param ya ...
      45              : !> \param yb ...
      46              : !> \param yc ...
      47              : !> \param yd ...
      48              : !> \param rA ...
      49              : !> \param rB ...
      50              : !> \param rC ...
      51              : !> \param rD ...
      52              : !> \date    07.2009
      53              : !> \author  J. Hutter
      54              : !> \version 1.0
      55              : ! **************************************************************************************************
      56            0 :    SUBROUTINE init_os(ya, yb, yc, yd, rA, rB, rC, rD)
      57              :       REAL(dp)                                           :: ya, yb, yc, yd
      58              :       REAL(dp), DIMENSION(3)                             :: rA, rB, rC, rD
      59              : 
      60              :       REAL(dp)                                           :: eab, ecd, kab, kcd
      61              : 
      62            0 :       xa = ya
      63            0 :       xb = yb
      64            0 :       xc = yc
      65            0 :       xd = yd
      66            0 :       A = rA
      67            0 :       B = rB
      68            0 :       C = rC
      69            0 :       D = rD
      70              : 
      71            0 :       xsi = xa + xb
      72            0 :       eta = xc + xd
      73              : 
      74            0 :       P = (xa*A + xb*B)/xsi
      75            0 :       Q = (xc*C + xd*D)/eta
      76            0 :       W = (xsi*P + eta*Q)/(xsi + eta)
      77              : 
      78            0 :       rho = xsi*eta/(xsi + eta)
      79              : 
      80            0 :       T = rho*SUM((P - Q)**2)
      81              : 
      82            0 :       fm = fgamma_ref(4*lmax, T)
      83              : 
      84            0 :       eab = -xa*xb/xsi*SUM((A - B)**2)
      85            0 :       kab = SQRT(2._dp)*pi**1.25_dp/xsi*EXP(eab)
      86              : 
      87            0 :       ecd = -xc*xd/eta*SUM((C - D)**2)
      88            0 :       kcd = SQRT(2._dp)*pi**1.25_dp/eta*EXP(ecd)
      89              : 
      90            0 :       I0M = kab*kcd/SQRT(xsi + eta)*fm
      91              : 
      92            0 :    END SUBROUTINE init_os
      93              : 
      94              : ! **************************************************************************************************
      95              : 
      96              : ! **************************************************************************************************
      97              : !> \brief ...
      98              : !> \param an ...
      99              : !> \param bn ...
     100              : !> \param cn ...
     101              : !> \param dn ...
     102              : !> \param mi ...
     103              : !> \return ...
     104              : ! **************************************************************************************************
     105            0 :    RECURSIVE FUNCTION os(an, bn, cn, dn, mi) RESULT(IABCD)
     106              :       INTEGER, DIMENSION(3)                              :: an, bn, cn, dn
     107              :       INTEGER, OPTIONAL                                  :: mi
     108              :       REAL(dp)                                           :: IABCD
     109              : 
     110              :       INTEGER, DIMENSION(3), PARAMETER                   :: i1 = [1, 0, 0], i2 = [0, 1, 0], &
     111              :                                                             i3 = [0, 0, 1]
     112              : 
     113              :       INTEGER                                            :: m
     114              : 
     115            0 :       m = 0
     116            0 :       IF (PRESENT(mi)) m = mi
     117              : 
     118            0 :       IABCD = 0._dp
     119            0 :       IF (ANY(an < 0)) RETURN
     120            0 :       IF (ANY(bn < 0)) RETURN
     121            0 :       IF (ANY(cn < 0)) RETURN
     122            0 :       IF (ANY(dn < 0)) RETURN
     123              : 
     124            0 :       IF (SUM(an + bn + cn + dn) == 0) THEN
     125            0 :          IABCD = I0M(m)
     126            0 :          RETURN
     127              :       END IF
     128              : 
     129            0 :       IF (dn(1) > 0) THEN
     130            0 :          IABCD = os(an, bn, cn + i1, dn - i1) - (D(1) - C(1))*os(an, bn, cn, dn - i1)
     131            0 :       ELSEIF (dn(2) > 0) THEN
     132            0 :          IABCD = os(an, bn, cn + i2, dn - i2) - (D(2) - C(2))*os(an, bn, cn, dn - i2)
     133            0 :       ELSEIF (dn(3) > 0) THEN
     134            0 :          IABCD = os(an, bn, cn + i3, dn - i3) - (D(3) - C(3))*os(an, bn, cn, dn - i3)
     135              :       ELSE
     136            0 :          IF (bn(1) > 0) THEN
     137            0 :             IABCD = os(an + i1, bn - i1, cn, dn) - (B(1) - A(1))*os(an, bn - i1, cn, dn)
     138            0 :          ELSEIF (bn(2) > 0) THEN
     139            0 :             IABCD = os(an + i2, bn - i2, cn, dn) - (B(2) - A(2))*os(an, bn - i2, cn, dn)
     140            0 :          ELSEIF (bn(3) > 0) THEN
     141            0 :             IABCD = os(an + i3, bn - i3, cn, dn) - (B(3) - A(3))*os(an, bn - i3, cn, dn)
     142              :          ELSE
     143            0 :             IF (cn(1) > 0) THEN
     144              :                IABCD = ((Q(1) - C(1)) + xsi/eta*(P(1) - A(1)))*os(an, bn, cn - i1, dn) + &
     145              :                        0.5_dp*an(1)/eta*os(an - i1, bn, cn - i1, dn) + &
     146              :                        0.5_dp*(cn(1) - 1)/eta*os(an, bn, cn - i1 - i1, dn) - &
     147            0 :                        xsi/eta*os(an + i1, bn, cn - i1, dn)
     148            0 :             ELSEIF (cn(2) > 0) THEN
     149              :                IABCD = ((Q(2) - C(2)) + xsi/eta*(P(2) - A(2)))*os(an, bn, cn - i2, dn) + &
     150              :                        0.5_dp*an(2)/eta*os(an - i2, bn, cn - i2, dn) + &
     151              :                        0.5_dp*(cn(2) - 1)/eta*os(an, bn, cn - i2 - i2, dn) - &
     152            0 :                        xsi/eta*os(an + i2, bn, cn - i2, dn)
     153            0 :             ELSEIF (cn(3) > 0) THEN
     154              :                IABCD = ((Q(3) - C(3)) + xsi/eta*(P(3) - A(3)))*os(an, bn, cn - i3, dn) + &
     155              :                        0.5_dp*an(3)/eta*os(an - i3, bn, cn - i3, dn) + &
     156              :                        0.5_dp*(cn(3) - 1)/eta*os(an, bn, cn - i3 - i3, dn) - &
     157            0 :                        xsi/eta*os(an + i3, bn, cn - i3, dn)
     158              :             ELSE
     159            0 :                IF (an(1) > 0) THEN
     160              :                   IABCD = (P(1) - A(1))*os(an - i1, bn, cn, dn, m) + &
     161              :                           (W(1) - P(1))*os(an - i1, bn, cn, dn, m + 1) + &
     162              :                           0.5_dp*(an(1) - 1)/xsi*os(an - i1 - i1, bn, cn, dn, m) - &
     163            0 :                           0.5_dp*(an(1) - 1)/xsi*rho/xsi*os(an - i1 - i1, bn, cn, dn, m + 1)
     164            0 :                ELSEIF (an(2) > 0) THEN
     165              :                   IABCD = (P(2) - A(2))*os(an - i2, bn, cn, dn, m) + &
     166              :                           (W(2) - P(2))*os(an - i2, bn, cn, dn, m + 1) + &
     167              :                           0.5_dp*(an(2) - 1)/xsi*os(an - i2 - i2, bn, cn, dn, m) - &
     168            0 :                           0.5_dp*(an(2) - 1)/xsi*rho/xsi*os(an - i2 - i2, bn, cn, dn, m + 1)
     169            0 :                ELSEIF (an(3) > 0) THEN
     170              :                   IABCD = (P(3) - A(3))*os(an - i3, bn, cn, dn, m) + &
     171              :                           (W(3) - P(3))*os(an - i3, bn, cn, dn, m + 1) + &
     172              :                           0.5_dp*(an(3) - 1)/xsi*os(an - i3 - i3, bn, cn, dn, m) - &
     173            0 :                           0.5_dp*(an(3) - 1)/xsi*rho/xsi*os(an - i3 - i3, bn, cn, dn, m + 1)
     174              :                ELSE
     175            0 :                   CPABORT("I(0000)")
     176              :                END IF
     177              :             END IF
     178              :          END IF
     179              :       END IF
     180              : 
     181              :    END FUNCTION os
     182              : 
     183              : ! **************************************************************************************************
     184              : 
     185              : END MODULE ai_eri_debug
        

Generated by: LCOV version 2.0-1