LCOV - code coverage report
Current view: top level - src - libint_wrapper.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 99.5 % 196 195
Test Date: 2025-12-04 06:27:48 Functions: 96.2 % 26 25

            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 Interface to the Libint-Library or a c++ wrapper.
      10              : !> \par History
      11              : !>      11.2007 created [Manuel Guidon]
      12              : !>      10.2009 refactored [Manuel Guidon]
      13              : !> \author Manuel Guidon
      14              : ! **************************************************************************************************
      15              : MODULE libint_wrapper
      16              : 
      17              : #if(__LIBINT)
      18              : #include <libint2/libint2_params.h>
      19              : #include <libint2/config.h>
      20              : #endif
      21              : 
      22              : ! maximum angular momentum to be supported in CP2K-LIBINT interface
      23              :    #:set libint_max_am_supported = 8
      24              : 
      25              :    USE ISO_C_BINDING, ONLY: C_F_POINTER, &
      26              :                             C_F_PROCPOINTER, &
      27              :                             C_NULL_PTR, &
      28              :                             C_FUNPTR
      29              :    USE kinds, ONLY: dp
      30              : #if(__LIBINT)
      31              :    USE libint_f, ONLY: &
      32              :       libint2_build, libint2_build_eri, libint2_build_eri1, libint2_cleanup_eri, &
      33              :       libint2_cleanup_eri1, libint2_init_eri, libint2_init_eri1, libint2_static_cleanup, &
      34              :       libint2_static_init, libint_t, libint2_max_am_eri, libint2_init_3eri, libint2_cleanup_3eri, &
      35              :       libint2_init_2eri, libint2_cleanup_2eri, &
      36              :       libint2_build_2eri, libint2_build_3eri, libint2_build_3eri1, libint2_cleanup_3eri1, libint2_init_3eri1, &
      37              :       libint2_build_2eri1, libint2_cleanup_2eri1, libint2_init_2eri1
      38              : #endif
      39              :    USE orbital_pointers, ONLY: nco
      40              : #include "./base/base_uses.f90"
      41              : 
      42              :    IMPLICIT NONE
      43              :    PRIVATE
      44              :    PUBLIC :: cp_libint_t, prim_data_f_size, build_eri_size, build_deriv1_eri_size, &
      45              :              libint_max_am, libderiv_max_am1, cp_libint_get_eris, cp_libint_get_derivs, &
      46              :              cp_libint_init_eri, cp_libint_init_eri1, cp_libint_cleanup_eri, &
      47              :              cp_libint_cleanup_eri1, cp_libint_static_init, cp_libint_static_cleanup, &
      48              :              get_ssss_f_val, cp_libint_set_contrdepth, cp_libint_set_params_eri_screen, &
      49              :              cp_libint_set_params_eri, cp_libint_set_params_eri_deriv, &
      50              :              cp_libint_init_3eri, cp_libint_cleanup_3eri, cp_libint_get_3eris, &
      51              :              cp_libint_init_2eri, cp_libint_cleanup_2eri, cp_libint_get_2eris, &
      52              :              cp_libint_get_3eri_derivs, cp_libint_init_3eri1, cp_libint_cleanup_3eri1, &
      53              :              cp_libint_get_2eri_derivs, cp_libint_init_2eri1, cp_libint_cleanup_2eri1
      54              : 
      55              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'libint_wrapper'
      56              : 
      57              : #if(__LIBINT)
      58              :    INTEGER, PARAMETER :: libint_max_am = libint2_max_am_eri
      59              : #else
      60              :    INTEGER, PARAMETER :: libint_max_am = 0
      61              : #endif
      62              : 
      63              :    INTEGER, PARAMETER :: libderiv_max_am1 = libint_max_am
      64              :    INTEGER, PARAMETER :: prim_data_f_size = 4*(libint_max_am) + 1
      65              :    INTEGER, PARAMETER :: libint_vrr_classes_size = 2*(libint_max_am) + 1
      66              :    INTEGER, PARAMETER :: libint_dvrr_classes_size = 2*(libderiv_max_am1) + 1
      67              :    INTEGER, PARAMETER :: build_eri_size = libint_max_am
      68              :    INTEGER, PARAMETER :: build_deriv1_eri_size = libderiv_max_am1
      69              : 
      70              :    TYPE :: cp_libint_t
      71              :       PRIVATE
      72              : #if(__LIBINT)
      73              :       TYPE(libint_t), DIMENSION(1) :: prv
      74              : #else
      75              :       INTEGER :: unused = -1
      76              : #endif
      77              :    END TYPE cp_libint_t
      78              : 
      79              : CONTAINS
      80              : 
      81     83698296 :    SUBROUTINE cp_libint_set_params_eri_screen(libint, A, B, C, D, P, Q, W, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
      82              :       TYPE(cp_libint_t)                       :: libint
      83              :       REAL(KIND=dp), INTENT(IN), DIMENSION(3) :: A, B, C, D, P, Q, W
      84              :       REAL(KIND=dp), INTENT(IN)               :: ZetaInv, EtaInv, ZetapEtaInv, Rho
      85              :       INTEGER, INTENT(IN)                     :: m_max
      86              :       REAL(KIND=dp), DIMENSION(:)             :: F
      87              : 
      88              : #if(__LIBINT)
      89     83698296 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
      90     83698296 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
      91     83698296 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
      92              : 
      93     83698296 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
      94     83698296 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
      95     83698296 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
      96              : 
      97     83698296 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
      98     83698296 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
      99     83698296 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     100              : 
     101     83698296 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     102     83698296 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     103     83698296 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     104              : 
     105     83698296 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     106     83698296 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     107     83698296 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     108              : 
     109     83698296 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     110     83698296 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     111     83698296 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     112              : 
     113     83698296 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     114     83698296 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     115     83698296 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     116     83698296 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     117     83698296 :       libint%prv(1)%roe(1) = Rho*EtaInv
     118              : 
     119              :       #:for m_max in range(0, 4*libint_max_am_supported)
     120              : #if 4*LIBINT2_MAX_AM_eri > ${m_max}$ - 1
     121    323189496 :          IF (${m_max}$ <= m_max) &
     122              :             libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_${m_max}$ (1) &
     123    239491200 :             = F(${m_max}$+1)
     124              : 
     125              : #endif
     126              :       #:endfor
     127              : 
     128              : #else
     129              :       MARK_USED(libint)
     130              :       MARK_USED(A)
     131              :       MARK_USED(B)
     132              :       MARK_USED(C)
     133              :       MARK_USED(D)
     134              :       MARK_USED(P)
     135              :       MARK_USED(Q)
     136              :       MARK_USED(W)
     137              :       MARK_USED(ZetaInv)
     138              :       MARK_USED(EtaInv)
     139              :       MARK_USED(ZetapEtaInv)
     140              :       MARK_USED(Rho)
     141              :       MARK_USED(m_max)
     142              :       MARK_USED(F)
     143              : 
     144              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     145              : #endif
     146              : 
     147     83698296 :    END SUBROUTINE cp_libint_set_params_eri_screen
     148              : 
     149    105093079 :    SUBROUTINE cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, &
     150    105093079 :                                              ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
     151              :       TYPE(cp_libint_t)                       :: libint
     152              :       REAL(KIND=dp), INTENT(IN), DIMENSION(3) :: A, B, C, D, P, Q, W
     153              :       REAL(KIND=dp), INTENT(IN)               :: zeta_A, zeta_B, zeta_C, zeta_D, ZetaInv, EtaInv, ZetapEtaInv, Rho
     154              : 
     155              :       INTEGER, INTENT(IN)                     :: m_max
     156              :       REAL(KIND=dp), DIMENSION(:)             :: F
     157              : 
     158              : #if(__LIBINT)
     159              :       REAL(KIND=dp)                           :: gammap, gammaq, gammapq, rhop, rhoq
     160    105093079 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     161    105093079 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     162    105093079 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     163              : 
     164    105093079 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     165    105093079 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     166    105093079 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     167              : 
     168    105093079 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     169    105093079 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     170    105093079 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     171              : 
     172    105093079 :       libint%prv(1)%PB_x(1) = P(1) - B(1)
     173    105093079 :       libint%prv(1)%PB_y(1) = P(2) - B(2)
     174    105093079 :       libint%prv(1)%PB_z(1) = P(3) - B(3)
     175              : 
     176    105093079 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     177    105093079 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     178    105093079 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     179              : 
     180    105093079 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     181    105093079 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     182    105093079 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     183              : 
     184    105093079 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     185    105093079 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     186    105093079 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     187              : 
     188    105093079 :       libint%prv(1)%two_alpha0_bra(1) = 2.0_dp*Zeta_A
     189    105093079 :       libint%prv(1)%two_alpha0_ket(1) = 2.0_dp*Zeta_B
     190    105093079 :       libint%prv(1)%two_alpha1_ket(1) = 2.0_dp*Zeta_D
     191              : 
     192    105093079 :       gammap = Zeta_A + Zeta_B
     193    105093079 :       gammaq = Zeta_C + Zeta_D
     194    105093079 :       gammapq = gammap*gammaq/(gammap + gammaq)
     195    105093079 :       libint%prv(1)%alpha1_rho_over_zeta2(1) = Zeta_A*gammapq/(gammap*gammap)
     196    105093079 :       libint%prv(1)%alpha2_rho_over_zeta2(1) = Zeta_B*gammapq/(gammap*gammap)
     197    105093079 :       libint%prv(1)%alpha4_rho_over_eta2(1) = Zeta_D*gammapq/(gammaq*gammaq)
     198    105093079 :       libint%prv(1)%alpha1_over_zetapluseta(1) = Zeta_A/(gammap + gammaq)
     199    105093079 :       libint%prv(1)%alpha2_over_zetapluseta(1) = Zeta_B/(gammap + gammaq)
     200    105093079 :       libint%prv(1)%alpha4_over_zetapluseta(1) = Zeta_D/(gammap + gammaq)
     201              : 
     202    105093079 :       rhop = Zeta_A*Zeta_B/gammap
     203    105093079 :       rhoq = Zeta_C*Zeta_D/gammaq
     204    105093079 :       libint%prv(1)%rho12_over_alpha1(1) = rhop/Zeta_A
     205              : 
     206    105093079 :       libint%prv(1)%rho34_over_alpha3(1) = rhoq/Zeta_C
     207              : 
     208    105093079 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     209    105093079 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     210    105093079 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     211    105093079 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     212    105093079 :       libint%prv(1)%roe(1) = Rho*EtaInv
     213              : 
     214              :       #:for m_max in range(0, 4*libint_max_am_supported)
     215              : #if 4*LIBINT2_MAX_AM_eri > ${m_max}$ - 1
     216    468504696 :          IF (${m_max}$ <= m_max) &
     217              :             libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_${m_max}$ (1) & ! ERROR: __LIBINT_MAX_AM is too large
     218    363411617 :             = F(${m_max}$+1)
     219              : #endif
     220              :       #:endfor
     221              : 
     222              : #else
     223              :       MARK_USED(libint)
     224              :       MARK_USED(A)
     225              :       MARK_USED(B)
     226              :       MARK_USED(C)
     227              :       MARK_USED(D)
     228              :       MARK_USED(P)
     229              :       MARK_USED(Q)
     230              :       MARK_USED(W)
     231              :       MARK_USED(zeta_A)
     232              :       MARK_USED(zeta_B)
     233              :       MARK_USED(zeta_C)
     234              :       MARK_USED(zeta_D)
     235              :       MARK_USED(ZetaInv)
     236              :       MARK_USED(EtaInv)
     237              :       MARK_USED(ZetapEtaInv)
     238              :       MARK_USED(Rho)
     239              :       MARK_USED(m_max)
     240              :       MARK_USED(F)
     241              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     242              : #endif
     243              : 
     244    105093079 :    END SUBROUTINE cp_libint_set_params_eri_deriv
     245              : 
     246    494017009 :    SUBROUTINE cp_libint_set_params_eri(libint, A, B, C, D, ZetaInv, EtaInv, ZetapEtaInv, Rho, P, Q, W, m_max, F)
     247              :       TYPE(cp_libint_t)                       :: libint
     248              :       REAL(KIND=dp), INTENT(IN), DIMENSION(3) :: A, B, C, D, P, Q, W
     249              :       REAL(KIND=dp), INTENT(IN)               :: ZetaInv, EtaInv, ZetapEtaInv, Rho
     250              :       REAL(KIND=dp), DIMENSION(:)             :: F
     251              : 
     252              :       INTEGER, INTENT(IN)                     :: m_max
     253              : 
     254              : #if(__LIBINT)
     255    494017009 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     256    494017009 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     257    494017009 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     258              : 
     259    494017009 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     260    494017009 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     261    494017009 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     262              : 
     263    494017009 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     264    494017009 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     265    494017009 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     266              : 
     267    494017009 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     268    494017009 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     269    494017009 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     270              : 
     271    494017009 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     272    494017009 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     273    494017009 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     274              : 
     275    494017009 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     276    494017009 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     277    494017009 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     278              : 
     279    494017009 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     280    494017009 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     281    494017009 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     282    494017009 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     283    494017009 :       libint%prv(1)%roe(1) = Rho*EtaInv
     284              : 
     285              :       #:for m_max in range(0, 4*libint_max_am_supported)
     286              : #if 4*LIBINT2_MAX_AM_eri > ${m_max}$ - 1
     287              : 
     288   1771752445 :          IF (${m_max}$ <= m_max) &
     289              :             libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_${m_max}$ (1) & ! ERROR: __LIBINT_MAX_AM is too large
     290   1277735436 :             = F(${m_max}$+1)
     291              : #endif
     292              :       #:endfor
     293              : 
     294              : #else
     295              :       MARK_USED(libint)
     296              :       MARK_USED(A)
     297              :       MARK_USED(B)
     298              :       MARK_USED(C)
     299              :       MARK_USED(D)
     300              :       MARK_USED(P)
     301              :       MARK_USED(Q)
     302              :       MARK_USED(W)
     303              :       MARK_USED(ZetaInv)
     304              :       MARK_USED(EtaInv)
     305              :       MARK_USED(ZetapEtaInv)
     306              :       MARK_USED(Rho)
     307              :       MARK_USED(m_max)
     308              :       MARK_USED(F)
     309              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     310              : #endif
     311              : 
     312    494017009 :    END SUBROUTINE cp_libint_set_params_eri
     313              : ! **************************************************************************************************
     314              : !> \brief ...
     315              : !> \param n_d ...
     316              : !> \param n_c ...
     317              : !> \param n_b ...
     318              : !> \param n_a ...
     319              : !> \param lib ...
     320              : !> \param p_work ...
     321              : !> \param a_mysize ...
     322              : ! **************************************************************************************************
     323    416632869 :    SUBROUTINE cp_libint_get_eris(n_d, n_c, n_b, n_a, lib, p_work, a_mysize)
     324              :       INTEGER, INTENT(IN)                                :: n_d, n_c, n_b, n_a
     325              :       TYPE(cp_libint_t)                                  :: lib
     326              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     327              :       INTEGER                                            :: a_mysize(1)
     328              : 
     329              : #if(__LIBINT)
     330              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     331              : 
     332    416632869 :       CALL C_F_PROCPOINTER(libint2_build_eri(n_d, n_c, n_b, n_a), pbuild)
     333    416632869 :       CALL pbuild(lib%prv)
     334              : 
     335    833265738 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     336              : #else
     337              :       MARK_USED(n_d)
     338              :       MARK_USED(n_c)
     339              :       MARK_USED(n_b)
     340              :       MARK_USED(n_a)
     341              :       MARK_USED(lib)
     342              :       MARK_USED(p_work)
     343              :       MARK_USED(a_mysize)
     344              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     345              : #endif
     346              : 
     347    416632869 :    END SUBROUTINE cp_libint_get_eris
     348              : 
     349              : ! **************************************************************************************************
     350              : !> \brief ...
     351              : !> \param n_c ...
     352              : !> \param n_b ...
     353              : !> \param n_a ...
     354              : !> \param lib ...
     355              : !> \param p_work ...
     356              : !> \param a_mysize ...
     357              : ! **************************************************************************************************
     358     28845850 :    SUBROUTINE cp_libint_get_3eris(n_c, n_b, n_a, lib, p_work, a_mysize)
     359              :       INTEGER, INTENT(IN)                                :: n_c, n_b, n_a
     360              :       TYPE(cp_libint_t)                                  :: lib
     361              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     362              :       INTEGER                                            :: a_mysize(1)
     363              : 
     364              : #if(__LIBINT)
     365              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     366              : 
     367     28845850 :       CALL C_F_PROCPOINTER(libint2_build_3eri(n_c, n_b, n_a), pbuild)
     368     28845850 :       CALL pbuild(lib%prv)
     369              : 
     370     57691700 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     371              : #else
     372              :       MARK_USED(n_c)
     373              :       MARK_USED(n_b)
     374              :       MARK_USED(n_a)
     375              :       MARK_USED(lib)
     376              :       MARK_USED(p_work)
     377              :       MARK_USED(a_mysize)
     378              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     379              : #endif
     380              : 
     381     28845850 :    END SUBROUTINE cp_libint_get_3eris
     382              : 
     383              : ! **************************************************************************************************
     384              : !> \brief ...
     385              : !> \param n_c ...
     386              : !> \param n_b ...
     387              : !> \param n_a ...
     388              : !> \param lib ...
     389              : !> \param p_work ...
     390              : !> \param a_mysize ...
     391              : ! **************************************************************************************************
     392      4721421 :    SUBROUTINE cp_libint_get_3eri_derivs(n_c, n_b, n_a, lib, p_work, a_mysize)
     393              :       INTEGER, INTENT(IN)                                :: n_c, n_b, n_a
     394              :       TYPE(cp_libint_t)                                  :: lib
     395              :       INTEGER                                            :: a_mysize(1)
     396              :       REAL(dp), DIMENSION(:, :), POINTER                    :: p_work
     397              : 
     398              : #if(__LIBINT)
     399      4721421 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     400              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     401              :       INTEGER :: i
     402              : 
     403      4721421 :       CALL C_F_PROCPOINTER(libint2_build_3eri1(n_c, n_b, n_a), pbuild)
     404      4721421 :       CALL pbuild(lib%prv)
     405              : 
     406     14164263 :       ALLOCATE (p_work(a_mysize(1), 9))
     407              : 
     408              :       !Derivatives 1-3 can be obtained using translational invariance
     409     33049947 :       DO i = 4, 9
     410     28328526 :          NULLIFY (p_work_tmp)
     411     56657052 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     412    485139465 :          p_work(:, i) = p_work_tmp
     413              :       END DO
     414              : #else
     415              :       MARK_USED(n_c)
     416              :       MARK_USED(n_b)
     417              :       MARK_USED(n_a)
     418              :       MARK_USED(lib)
     419              :       MARK_USED(p_work)
     420              :       MARK_USED(a_mysize)
     421              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     422              : #endif
     423              : 
     424      4721421 :    END SUBROUTINE cp_libint_get_3eri_derivs
     425              : 
     426              : ! **************************************************************************************************
     427              : !> \brief ...
     428              : !> \param n_c ...
     429              : !> \param n_b ...
     430              : !> \param n_a ...
     431              : !> \param lib ...
     432              : !> \param p_work ...
     433              : !> \param a_mysize ...
     434              : ! **************************************************************************************************
     435      6163063 :    SUBROUTINE cp_libint_get_2eri_derivs(n_b, n_a, lib, p_work, a_mysize)
     436              :       INTEGER, INTENT(IN)                                :: n_b, n_a
     437              :       TYPE(cp_libint_t)                                  :: lib
     438              :       INTEGER                                            :: a_mysize(1)
     439              :       REAL(dp), DIMENSION(:, :), POINTER                 :: p_work
     440              : 
     441              : #if(__LIBINT)
     442      6163063 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     443              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     444              :       INTEGER :: i
     445              : 
     446      6163063 :       CALL C_F_PROCPOINTER(libint2_build_2eri1(n_b, n_a), pbuild)
     447      6163063 :       CALL pbuild(lib%prv)
     448              : 
     449     18489189 :       ALLOCATE (p_work(a_mysize(1), 6))
     450              : 
     451              :       !Derivatives 1-3 can be obtained using translational invariance
     452     24652252 :       DO i = 4, 6
     453     18489189 :          NULLIFY (p_work_tmp)
     454     36978378 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     455    321520249 :          p_work(:, i) = p_work_tmp
     456              :       END DO
     457              : #else
     458              :       MARK_USED(n_b)
     459              :       MARK_USED(n_a)
     460              :       MARK_USED(lib)
     461              :       MARK_USED(p_work)
     462              :       MARK_USED(a_mysize)
     463              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     464              : #endif
     465              : 
     466      6163063 :    END SUBROUTINE cp_libint_get_2eri_derivs
     467              : 
     468              : ! **************************************************************************************************
     469              : !> \brief ...
     470              : !> \param n_c ...
     471              : !> \param n_b ...
     472              : !> \param n_a ...
     473              : !> \param lib ...
     474              : !> \param p_work ...
     475              : !> \param a_mysize ...
     476              : ! **************************************************************************************************
     477     10500163 :    SUBROUTINE cp_libint_get_2eris(n_b, n_a, lib, p_work, a_mysize)
     478              :       INTEGER, INTENT(IN)                                :: n_b, n_a
     479              :       TYPE(cp_libint_t)                                  :: lib
     480              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     481              :       INTEGER                                            :: a_mysize(1)
     482              : 
     483              : #if(__LIBINT)
     484              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     485              : 
     486     10500163 :       CALL C_F_PROCPOINTER(libint2_build_2eri(n_b, n_a), pbuild)
     487     10500163 :       CALL pbuild(lib%prv)
     488              : 
     489     21000326 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     490              : #else
     491              :       MARK_USED(n_b)
     492              :       MARK_USED(n_a)
     493              :       MARK_USED(lib)
     494              :       MARK_USED(p_work)
     495              :       MARK_USED(a_mysize)
     496              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     497              : #endif
     498              : 
     499     10500163 :    END SUBROUTINE cp_libint_get_2eris
     500              : 
     501              : ! **************************************************************************************************
     502              : !> \brief ...
     503              : !> \param n_d ...
     504              : !> \param n_c ...
     505              : !> \param n_b ...
     506              : !> \param n_a ...
     507              : !> \param lib ...
     508              : !> \param work_forces ...
     509              : !> \param a_mysize ...
     510              : ! **************************************************************************************************
     511     99205823 :    SUBROUTINE cp_libint_get_derivs(n_d, n_c, n_b, n_a, lib, work_forces, a_mysize)
     512              :       INTEGER, INTENT(IN)                                :: n_d, n_c, n_b, n_a
     513              :       TYPE(cp_libint_t)                                  :: lib
     514              :       REAL(dp), DIMENSION(nco(n_a)*nco(n_b)*nco(n_c)*nco &
     515              :                           (n_d), 12)                                      :: work_forces
     516              :       INTEGER                                            :: a_mysize(1)
     517              : 
     518              : #if(__LIBINT)
     519     99205823 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     520              : 
     521              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     522              :       INTEGER                                            :: i, k
     523              : #endif
     524              : 
     525              : #if(__LIBINT)
     526     99205823 :       CALL C_F_PROCPOINTER(libint2_build_eri1(n_d, n_c, n_b, n_a), pbuild)
     527     99205823 :       CALL pbuild(lib%prv)
     528              : 
     529   1289675699 :       DO k = 1, 12
     530   1190469876 :          IF (k == 4 .OR. k == 5 .OR. k == 6) CYCLE
     531   1785704814 :          CALL C_F_POINTER(lib%prv(1)%targets(k), p_work, SHAPE=a_mysize)
     532  10741612565 :          DO i = 1, a_mysize(1)
     533  10940024211 :             work_forces(i, k) = p_work(i)
     534              :          END DO
     535              :       END DO
     536              : #else
     537              :       MARK_USED(n_d)
     538              :       MARK_USED(n_c)
     539              :       MARK_USED(n_b)
     540              :       MARK_USED(n_a)
     541              :       MARK_USED(lib)
     542              :       MARK_USED(work_forces)
     543              :       MARK_USED(a_mysize)
     544              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     545              : #endif
     546              : 
     547     99205823 :    END SUBROUTINE cp_libint_get_derivs
     548              : 
     549     31216272 :    FUNCTION get_ssss_f_val(lib)
     550              :       TYPE(cp_libint_t) :: lib
     551              :       REAL(KIND=dp) :: get_ssss_f_val
     552              : 
     553     31216272 :       get_ssss_f_val = 0
     554              : 
     555              : #if(__LIBINT)
     556     31216272 :       get_ssss_f_val = lib%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0(1)
     557              : #else
     558              :       MARK_USED(lib)
     559              :       get_ssss_f_val = 0.0_dp
     560              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     561              : #endif
     562              : 
     563     31216272 :    END FUNCTION get_ssss_f_val
     564              : 
     565         1352 :    SUBROUTINE cp_libint_init_eri(lib, max_am)
     566              :       TYPE(cp_libint_t)               :: lib
     567              :       INTEGER                         :: max_am
     568              : #if(__LIBINT)
     569         1352 :       CALL libint2_init_eri(lib%prv, max_am, C_NULL_PTR)
     570              : #else
     571              :       MARK_USED(lib)
     572              :       MARK_USED(max_am)
     573              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     574              : #endif
     575         1352 :    END SUBROUTINE cp_libint_init_eri
     576              : 
     577        10661 :    SUBROUTINE cp_libint_set_contrdepth(lib, contrdepth)
     578              :       TYPE(cp_libint_t) :: lib
     579              :       INTEGER           :: contrdepth
     580              : #if(__LIBINT)
     581              : #if LIBINT_CONTRACTED_INTS
     582        10661 :       lib%prv(1)%contrdepth = contrdepth
     583              : #else
     584              :       MARK_USED(lib)
     585              :       MARK_USED(contrdepth)
     586              : #endif
     587              : #else
     588              :       MARK_USED(lib)
     589              :       MARK_USED(contrdepth)
     590              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     591              : #endif
     592              : 
     593        10661 :    END SUBROUTINE cp_libint_set_contrdepth
     594              : 
     595         1352 :    SUBROUTINE cp_libint_init_eri1(lib, max_am)
     596              :       TYPE(cp_libint_t)               :: lib
     597              :       INTEGER                         :: max_am
     598              : #if(__LIBINT)
     599         1352 :       CALL libint2_init_eri1(lib%prv, max_am, C_NULL_PTR)
     600              : #else
     601              :       MARK_USED(lib)
     602              :       MARK_USED(max_am)
     603              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     604              : #endif
     605         1352 :    END SUBROUTINE cp_libint_init_eri1
     606              : 
     607         6039 :    SUBROUTINE cp_libint_init_3eri(lib, max_am)
     608              :       TYPE(cp_libint_t)               :: lib
     609              :       INTEGER                         :: max_am
     610              : #if(__LIBINT)
     611         6039 :       CALL libint2_init_3eri(lib%prv, max_am, C_NULL_PTR)
     612              : #else
     613              :       MARK_USED(lib)
     614              :       MARK_USED(max_am)
     615              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     616              : #endif
     617         6039 :    END SUBROUTINE cp_libint_init_3eri
     618              : 
     619          590 :    SUBROUTINE cp_libint_init_3eri1(lib, max_am)
     620              :       TYPE(cp_libint_t)               :: lib
     621              :       INTEGER                         :: max_am
     622              : #if(__LIBINT)
     623          590 :       CALL libint2_init_3eri1(lib%prv, max_am, C_NULL_PTR)
     624              : #else
     625              :       MARK_USED(lib)
     626              :       MARK_USED(max_am)
     627              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     628              : #endif
     629          590 :    END SUBROUTINE cp_libint_init_3eri1
     630              : 
     631          396 :    SUBROUTINE cp_libint_init_2eri1(lib, max_am)
     632              :       TYPE(cp_libint_t)               :: lib
     633              :       INTEGER                         :: max_am
     634              : #if(__LIBINT)
     635          396 :       CALL libint2_init_2eri1(lib%prv, max_am, C_NULL_PTR)
     636              : #else
     637              :       MARK_USED(lib)
     638              :       MARK_USED(max_am)
     639              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     640              : #endif
     641          396 :    END SUBROUTINE cp_libint_init_2eri1
     642              : 
     643          932 :    SUBROUTINE cp_libint_init_2eri(lib, max_am)
     644              :       TYPE(cp_libint_t)               :: lib
     645              :       INTEGER                         :: max_am
     646              : #if(__LIBINT)
     647          932 :       CALL libint2_init_2eri(lib%prv, max_am, C_NULL_PTR)
     648              : #else
     649              :       MARK_USED(lib)
     650              :       MARK_USED(max_am)
     651              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     652              : #endif
     653          932 :    END SUBROUTINE cp_libint_init_2eri
     654              : 
     655         1352 :    SUBROUTINE cp_libint_cleanup_eri(lib)
     656              :       TYPE(cp_libint_t)               :: lib
     657              : #if(__LIBINT)
     658         1352 :       CALL libint2_cleanup_eri(lib%prv)
     659              : #else
     660              :       MARK_USED(lib)
     661              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     662              : #endif
     663         1352 :    END SUBROUTINE cp_libint_cleanup_eri
     664              : 
     665         1352 :    SUBROUTINE cp_libint_cleanup_eri1(lib)
     666              :       TYPE(cp_libint_t)               :: lib
     667              : #if(__LIBINT)
     668         1352 :       CALL libint2_cleanup_eri1(lib%prv)
     669              : #else
     670              :       MARK_USED(lib)
     671              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     672              : #endif
     673         1352 :    END SUBROUTINE cp_libint_cleanup_eri1
     674              : 
     675         6039 :    SUBROUTINE cp_libint_cleanup_3eri(lib)
     676              :       TYPE(cp_libint_t)               :: lib
     677              : #if(__LIBINT)
     678         6039 :       CALL libint2_cleanup_3eri(lib%prv)
     679              : #else
     680              :       MARK_USED(lib)
     681              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     682              : #endif
     683         6039 :    END SUBROUTINE cp_libint_cleanup_3eri
     684              : 
     685          590 :    SUBROUTINE cp_libint_cleanup_3eri1(lib)
     686              :       TYPE(cp_libint_t)               :: lib
     687              : #if(__LIBINT)
     688          590 :       CALL libint2_cleanup_3eri1(lib%prv)
     689              : #else
     690              :       MARK_USED(lib)
     691              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     692              : #endif
     693          590 :    END SUBROUTINE cp_libint_cleanup_3eri1
     694              : 
     695          396 :    SUBROUTINE cp_libint_cleanup_2eri1(lib)
     696              :       TYPE(cp_libint_t)               :: lib
     697              : #if(__LIBINT)
     698          396 :       CALL libint2_cleanup_2eri1(lib%prv)
     699              : #else
     700              :       MARK_USED(lib)
     701              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     702              : #endif
     703          396 :    END SUBROUTINE cp_libint_cleanup_2eri1
     704              : 
     705          932 :    SUBROUTINE cp_libint_cleanup_2eri(lib)
     706              :       TYPE(cp_libint_t)               :: lib
     707              : #if(__LIBINT)
     708          932 :       CALL libint2_cleanup_2eri(lib%prv)
     709              : #else
     710              :       MARK_USED(lib)
     711              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     712              : #endif
     713          932 :    END SUBROUTINE cp_libint_cleanup_2eri
     714              : 
     715         1706 :    SUBROUTINE cp_libint_static_init()
     716              : #if(__LIBINT)
     717         1706 :       CALL libint2_static_init()
     718              : #else
     719              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     720              : #endif
     721         1706 :    END SUBROUTINE cp_libint_static_init
     722              : 
     723         1714 :    SUBROUTINE cp_libint_static_cleanup()
     724              : #if(__LIBINT)
     725         1714 :       CALL libint2_static_cleanup()
     726              : #else
     727              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     728              : #endif
     729         1714 :    END SUBROUTINE cp_libint_static_cleanup
     730              : 
     731            0 : END MODULE libint_wrapper
        

Generated by: LCOV version 2.0-1