LCOV - code coverage report
Current view: top level - src - libint_wrapper.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:cccd2f3) Lines: 98.5 % 200 197
Test Date: 2026-05-06 07:07:47 Functions: 96.2 % 26 25

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

Generated by: LCOV version 2.0-1