LCOV - code coverage report
Current view: top level - src - libint_wrapper.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:b310db4) Lines: 98.5 % 203 200
Test Date: 2026-10-23 01:10:43 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     96382482 :    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     96382482 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
      92     96382482 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
      93     96382482 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
      94              : 
      95     96382482 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
      96     96382482 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
      97     96382482 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
      98              : 
      99     96382482 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     100     96382482 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     101     96382482 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     102              : 
     103     96382482 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     104     96382482 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     105     96382482 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     106              : 
     107     96382482 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     108     96382482 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     109     96382482 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     110              : 
     111     96382482 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     112     96382482 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     113     96382482 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     114              : 
     115     96382482 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     116     96382482 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     117     96382482 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     118     96382482 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     119     96382482 :       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    370948356 :          IF (${m_max}$ <= m_max) THEN
     124              :             libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_${m_max}$ (1) &
     125    274565874 :                = F(${m_max}$+1)
     126              :          END IF
     127              : 
     128              : #endif
     129              :       #:endfor
     130              : 
     131              : #else
     132              :       MARK_USED(libint)
     133              :       MARK_USED(A)
     134              :       MARK_USED(B)
     135              :       MARK_USED(C)
     136              :       MARK_USED(D)
     137              :       MARK_USED(P)
     138              :       MARK_USED(Q)
     139              :       MARK_USED(W)
     140              :       MARK_USED(ZetaInv)
     141              :       MARK_USED(EtaInv)
     142              :       MARK_USED(ZetapEtaInv)
     143              :       MARK_USED(Rho)
     144              :       MARK_USED(m_max)
     145              :       MARK_USED(F)
     146              : 
     147              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     148              : #endif
     149              : 
     150     96382482 :    END SUBROUTINE cp_libint_set_params_eri_screen
     151              : 
     152    112113864 :    SUBROUTINE cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, &
     153    112113864 :                                              ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
     154              :       TYPE(cp_libint_t)                       :: libint
     155              :       REAL(KIND=dp), INTENT(IN), DIMENSION(3) :: A, B, C, D, P, Q, W
     156              :       REAL(KIND=dp), INTENT(IN)               :: zeta_A, zeta_B, zeta_C, zeta_D, ZetaInv, EtaInv, ZetapEtaInv, Rho
     157              : 
     158              :       INTEGER, INTENT(IN)                     :: m_max
     159              :       REAL(KIND=dp), DIMENSION(:)             :: F
     160              : 
     161              : #if(__LIBINT)
     162              :       REAL(KIND=dp)                           :: gammap, gammaq, gammapq, rhop, rhoq
     163    112113864 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     164    112113864 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     165    112113864 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     166              : 
     167    112113864 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     168    112113864 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     169    112113864 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     170              : 
     171    112113864 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     172    112113864 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     173    112113864 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     174              : 
     175    112113864 :       libint%prv(1)%PB_x(1) = P(1) - B(1)
     176    112113864 :       libint%prv(1)%PB_y(1) = P(2) - B(2)
     177    112113864 :       libint%prv(1)%PB_z(1) = P(3) - B(3)
     178              : 
     179    112113864 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     180    112113864 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     181    112113864 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     182              : 
     183    112113864 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     184    112113864 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     185    112113864 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     186              : 
     187    112113864 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     188    112113864 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     189    112113864 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     190              : 
     191    112113864 :       libint%prv(1)%two_alpha0_bra(1) = 2.0_dp*Zeta_A
     192    112113864 :       libint%prv(1)%two_alpha0_ket(1) = 2.0_dp*Zeta_B
     193    112113864 :       libint%prv(1)%two_alpha1_ket(1) = 2.0_dp*Zeta_D
     194              : 
     195    112113864 :       gammap = Zeta_A + Zeta_B
     196    112113864 :       gammaq = Zeta_C + Zeta_D
     197    112113864 :       gammapq = gammap*gammaq/(gammap + gammaq)
     198    112113864 :       libint%prv(1)%alpha1_rho_over_zeta2(1) = Zeta_A*gammapq/(gammap*gammap)
     199    112113864 :       libint%prv(1)%alpha2_rho_over_zeta2(1) = Zeta_B*gammapq/(gammap*gammap)
     200    112113864 :       libint%prv(1)%alpha4_rho_over_eta2(1) = Zeta_D*gammapq/(gammaq*gammaq)
     201    112113864 :       libint%prv(1)%alpha1_over_zetapluseta(1) = Zeta_A/(gammap + gammaq)
     202    112113864 :       libint%prv(1)%alpha2_over_zetapluseta(1) = Zeta_B/(gammap + gammaq)
     203    112113864 :       libint%prv(1)%alpha4_over_zetapluseta(1) = Zeta_D/(gammap + gammaq)
     204              : 
     205    112113864 :       rhop = Zeta_A*Zeta_B/gammap
     206    112113864 :       rhoq = Zeta_C*Zeta_D/gammaq
     207    112113864 :       libint%prv(1)%rho12_over_alpha1(1) = rhop/Zeta_A
     208              : 
     209    112113864 :       libint%prv(1)%rho34_over_alpha3(1) = rhoq/Zeta_C
     210              : 
     211    112113864 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     212    112113864 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     213    112113864 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     214    112113864 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     215    112113864 :       libint%prv(1)%roe(1) = Rho*EtaInv
     216              : 
     217              :       #:for m_max in range(0, 4*libint_max_am_supported)
     218              : #if 4*LIBINT2_MAX_AM_eri > ${m_max}$ - 1
     219    499225848 :          IF (${m_max}$ <= m_max) THEN
     220              :             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
     221    387111984 :                = F(${m_max}$+1)
     222              :          END IF
     223              : #endif
     224              :       #:endfor
     225              : 
     226              : #else
     227              :       MARK_USED(libint)
     228              :       MARK_USED(A)
     229              :       MARK_USED(B)
     230              :       MARK_USED(C)
     231              :       MARK_USED(D)
     232              :       MARK_USED(P)
     233              :       MARK_USED(Q)
     234              :       MARK_USED(W)
     235              :       MARK_USED(zeta_A)
     236              :       MARK_USED(zeta_B)
     237              :       MARK_USED(zeta_C)
     238              :       MARK_USED(zeta_D)
     239              :       MARK_USED(ZetaInv)
     240              :       MARK_USED(EtaInv)
     241              :       MARK_USED(ZetapEtaInv)
     242              :       MARK_USED(Rho)
     243              :       MARK_USED(m_max)
     244              :       MARK_USED(F)
     245              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     246              : #endif
     247              : 
     248    112113864 :    END SUBROUTINE cp_libint_set_params_eri_deriv
     249              : 
     250    437372434 :    SUBROUTINE cp_libint_set_params_eri(libint, A, B, C, D, ZetaInv, EtaInv, ZetapEtaInv, Rho, P, Q, W, m_max, F)
     251              :       TYPE(cp_libint_t)                       :: libint
     252              :       REAL(KIND=dp), INTENT(IN), DIMENSION(3) :: A, B, C, D, P, Q, W
     253              :       REAL(KIND=dp), INTENT(IN)               :: ZetaInv, EtaInv, ZetapEtaInv, Rho
     254              :       REAL(KIND=dp), DIMENSION(:)             :: F
     255              : 
     256              :       INTEGER, INTENT(IN)                     :: m_max
     257              : 
     258              : #if(__LIBINT)
     259    437372434 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     260    437372434 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     261    437372434 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     262              : 
     263    437372434 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     264    437372434 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     265    437372434 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     266              : 
     267    437372434 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     268    437372434 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     269    437372434 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     270              : 
     271    437372434 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     272    437372434 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     273    437372434 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     274              : 
     275    437372434 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     276    437372434 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     277    437372434 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     278              : 
     279    437372434 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     280    437372434 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     281    437372434 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     282              : 
     283    437372434 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     284    437372434 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     285    437372434 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     286    437372434 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     287    437372434 :       libint%prv(1)%roe(1) = Rho*EtaInv
     288              : 
     289              :       #:for m_max in range(0, 4*libint_max_am_supported)
     290              : #if 4*LIBINT2_MAX_AM_eri > ${m_max}$ - 1
     291              : 
     292   1758739449 :          IF (${m_max}$ <= m_max) THEN
     293              :             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
     294   1321367015 :                = F(${m_max}$+1)
     295              :          END IF
     296              : #endif
     297              :       #:endfor
     298              : 
     299              : #else
     300              :       MARK_USED(libint)
     301              :       MARK_USED(A)
     302              :       MARK_USED(B)
     303              :       MARK_USED(C)
     304              :       MARK_USED(D)
     305              :       MARK_USED(P)
     306              :       MARK_USED(Q)
     307              :       MARK_USED(W)
     308              :       MARK_USED(ZetaInv)
     309              :       MARK_USED(EtaInv)
     310              :       MARK_USED(ZetapEtaInv)
     311              :       MARK_USED(Rho)
     312              :       MARK_USED(m_max)
     313              :       MARK_USED(F)
     314              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     315              : #endif
     316              : 
     317    437372434 :    END SUBROUTINE cp_libint_set_params_eri
     318              : ! **************************************************************************************************
     319              : !> \brief ...
     320              : !> \param n_d ...
     321              : !> \param n_c ...
     322              : !> \param n_b ...
     323              : !> \param n_a ...
     324              : !> \param lib ...
     325              : !> \param p_work ...
     326              : !> \param a_mysize ...
     327              : ! **************************************************************************************************
     328    449431714 :    SUBROUTINE cp_libint_get_eris(n_d, n_c, n_b, n_a, lib, p_work, a_mysize)
     329              :       INTEGER, INTENT(IN)                                :: n_d, n_c, n_b, n_a
     330              :       TYPE(cp_libint_t)                                  :: lib
     331              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     332              :       INTEGER                                            :: a_mysize(1)
     333              : 
     334              : #if(__LIBINT)
     335              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     336              : 
     337    449431714 :       CALL C_F_PROCPOINTER(libint2_build_eri(n_d, n_c, n_b, n_a), pbuild)
     338    449431714 :       CALL pbuild(lib%prv)
     339              : 
     340    898863428 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     341              : #else
     342              :       MARK_USED(n_d)
     343              :       MARK_USED(n_c)
     344              :       MARK_USED(n_b)
     345              :       MARK_USED(n_a)
     346              :       MARK_USED(lib)
     347              :       MARK_USED(p_work)
     348              :       MARK_USED(a_mysize)
     349              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     350              : #endif
     351              : 
     352    449431714 :    END SUBROUTINE cp_libint_get_eris
     353              : 
     354              : ! **************************************************************************************************
     355              : !> \brief ...
     356              : !> \param n_c ...
     357              : !> \param n_b ...
     358              : !> \param n_a ...
     359              : !> \param lib ...
     360              : !> \param p_work ...
     361              : !> \param a_mysize ...
     362              : ! **************************************************************************************************
     363     57418450 :    SUBROUTINE cp_libint_get_3eris(n_c, n_b, n_a, lib, p_work, a_mysize)
     364              :       INTEGER, INTENT(IN)                                :: n_c, n_b, n_a
     365              :       TYPE(cp_libint_t)                                  :: lib
     366              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     367              :       INTEGER                                            :: a_mysize(1)
     368              : 
     369              : #if(__LIBINT)
     370              :       CHARACTER(LEN=160)                                 :: error_msg
     371              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     372              :       TYPE(C_FUNPTR)                                     :: build_funptr
     373              : 
     374     57418450 :       build_funptr = libint2_build_3eri(n_c, n_b, n_a)
     375     57418450 :       IF (.NOT. C_ASSOCIATED(build_funptr)) THEN
     376              :          error_msg = "LIBINT has no 3-center ERI kernel for (lc,lb,la)=("// &
     377              :                      TRIM(cp_to_string(n_c))//","//TRIM(cp_to_string(n_b))//","// &
     378            0 :                      TRIM(cp_to_string(n_a))//")"
     379            0 :          CALL cp_abort(__LOCATION__, TRIM(error_msg))
     380              :       END IF
     381     57418450 :       CALL C_F_PROCPOINTER(build_funptr, pbuild)
     382     57418450 :       CALL pbuild(lib%prv)
     383              : 
     384    114836900 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     385              : #else
     386              :       MARK_USED(n_c)
     387              :       MARK_USED(n_b)
     388              :       MARK_USED(n_a)
     389              :       MARK_USED(lib)
     390              :       MARK_USED(p_work)
     391              :       MARK_USED(a_mysize)
     392              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     393              : #endif
     394              : 
     395     57418450 :    END SUBROUTINE cp_libint_get_3eris
     396              : 
     397              : ! **************************************************************************************************
     398              : !> \brief ...
     399              : !> \param n_c ...
     400              : !> \param n_b ...
     401              : !> \param n_a ...
     402              : !> \param lib ...
     403              : !> \param p_work ...
     404              : !> \param a_mysize ...
     405              : ! **************************************************************************************************
     406      4737818 :    SUBROUTINE cp_libint_get_3eri_derivs(n_c, n_b, n_a, lib, p_work, a_mysize)
     407              :       INTEGER, INTENT(IN)                                :: n_c, n_b, n_a
     408              :       TYPE(cp_libint_t)                                  :: lib
     409              :       INTEGER                                            :: a_mysize(1)
     410              :       REAL(dp), DIMENSION(:, :), POINTER                    :: p_work
     411              : 
     412              : #if(__LIBINT)
     413      4737818 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     414              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     415              :       INTEGER :: i
     416              : 
     417      4737818 :       CALL C_F_PROCPOINTER(libint2_build_3eri1(n_c, n_b, n_a), pbuild)
     418      4737818 :       CALL pbuild(lib%prv)
     419              : 
     420     14213454 :       ALLOCATE (p_work(a_mysize(1), 9))
     421              : 
     422              :       !Derivatives 1-3 can be obtained using translational invariance
     423     33164726 :       DO i = 4, 9
     424     28426908 :          NULLIFY (p_work_tmp)
     425     56853816 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     426    486208562 :          p_work(:, i) = p_work_tmp
     427              :       END DO
     428              : #else
     429              :       MARK_USED(n_c)
     430              :       MARK_USED(n_b)
     431              :       MARK_USED(n_a)
     432              :       MARK_USED(lib)
     433              :       MARK_USED(p_work)
     434              :       MARK_USED(a_mysize)
     435              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     436              : #endif
     437              : 
     438      4737818 :    END SUBROUTINE cp_libint_get_3eri_derivs
     439              : 
     440              : ! **************************************************************************************************
     441              : !> \brief ...
     442              : !> \param n_c ...
     443              : !> \param n_b ...
     444              : !> \param n_a ...
     445              : !> \param lib ...
     446              : !> \param p_work ...
     447              : !> \param a_mysize ...
     448              : ! **************************************************************************************************
     449      6168147 :    SUBROUTINE cp_libint_get_2eri_derivs(n_b, n_a, lib, p_work, a_mysize)
     450              :       INTEGER, INTENT(IN)                                :: n_b, n_a
     451              :       TYPE(cp_libint_t)                                  :: lib
     452              :       INTEGER                                            :: a_mysize(1)
     453              :       REAL(dp), DIMENSION(:, :), POINTER                 :: p_work
     454              : 
     455              : #if(__LIBINT)
     456      6168147 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     457              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     458              :       INTEGER :: i
     459              : 
     460      6168147 :       CALL C_F_PROCPOINTER(libint2_build_2eri1(n_b, n_a), pbuild)
     461      6168147 :       CALL pbuild(lib%prv)
     462              : 
     463     18504441 :       ALLOCATE (p_work(a_mysize(1), 6))
     464              : 
     465              :       !Derivatives 1-3 can be obtained using translational invariance
     466     24672588 :       DO i = 4, 6
     467     18504441 :          NULLIFY (p_work_tmp)
     468     37008882 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     469    321700437 :          p_work(:, i) = p_work_tmp
     470              :       END DO
     471              : #else
     472              :       MARK_USED(n_b)
     473              :       MARK_USED(n_a)
     474              :       MARK_USED(lib)
     475              :       MARK_USED(p_work)
     476              :       MARK_USED(a_mysize)
     477              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     478              : #endif
     479              : 
     480      6168147 :    END SUBROUTINE cp_libint_get_2eri_derivs
     481              : 
     482              : ! **************************************************************************************************
     483              : !> \brief ...
     484              : !> \param n_c ...
     485              : !> \param n_b ...
     486              : !> \param n_a ...
     487              : !> \param lib ...
     488              : !> \param p_work ...
     489              : !> \param a_mysize ...
     490              : ! **************************************************************************************************
     491     10694811 :    SUBROUTINE cp_libint_get_2eris(n_b, n_a, lib, p_work, a_mysize)
     492              :       INTEGER, INTENT(IN)                                :: n_b, n_a
     493              :       TYPE(cp_libint_t)                                  :: lib
     494              :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     495              :       INTEGER                                            :: a_mysize(1)
     496              : 
     497              : #if(__LIBINT)
     498              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     499              : 
     500     10694811 :       CALL C_F_PROCPOINTER(libint2_build_2eri(n_b, n_a), pbuild)
     501     10694811 :       CALL pbuild(lib%prv)
     502              : 
     503     21389622 :       CALL C_F_POINTER(lib%prv(1)%targets(1), p_work, SHAPE=a_mysize)
     504              : #else
     505              :       MARK_USED(n_b)
     506              :       MARK_USED(n_a)
     507              :       MARK_USED(lib)
     508              :       MARK_USED(p_work)
     509              :       MARK_USED(a_mysize)
     510              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     511              : #endif
     512              : 
     513     10694811 :    END SUBROUTINE cp_libint_get_2eris
     514              : 
     515              : ! **************************************************************************************************
     516              : !> \brief ...
     517              : !> \param n_d ...
     518              : !> \param n_c ...
     519              : !> \param n_b ...
     520              : !> \param n_a ...
     521              : !> \param lib ...
     522              : !> \param work_forces ...
     523              : !> \param a_mysize ...
     524              : ! **************************************************************************************************
     525    106196092 :    SUBROUTINE cp_libint_get_derivs(n_d, n_c, n_b, n_a, lib, work_forces, a_mysize)
     526              :       INTEGER, INTENT(IN)                                :: n_d, n_c, n_b, n_a
     527              :       TYPE(cp_libint_t)                                  :: lib
     528              :       REAL(dp), DIMENSION(nco(n_a)*nco(n_b)*nco(n_c)*nco &
     529              :                           (n_d), 12)                                      :: work_forces
     530              :       INTEGER                                            :: a_mysize(1)
     531              : 
     532              : #if(__LIBINT)
     533    106196092 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     534              : 
     535              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     536              :       INTEGER                                            :: i, k
     537              : #endif
     538              : 
     539              : #if(__LIBINT)
     540    106196092 :       CALL C_F_PROCPOINTER(libint2_build_eri1(n_d, n_c, n_b, n_a), pbuild)
     541    106196092 :       CALL pbuild(lib%prv)
     542              : 
     543   1380549196 :       DO k = 1, 12
     544   1274353104 :          IF (k == 4 .OR. k == 5 .OR. k == 6) CYCLE
     545   1911529656 :          CALL C_F_POINTER(lib%prv(1)%targets(k), p_work, SHAPE=a_mysize)
     546  11505776920 :          DO i = 1, a_mysize(1)
     547  11718169104 :             work_forces(i, k) = p_work(i)
     548              :          END DO
     549              :       END DO
     550              :       ! Libint omits the canonical second-center derivatives; recover them by translation invariance.
     551    424784368 :       DO k = 4, 6
     552   3906056368 :          DO i = 1, a_mysize(1)
     553              :             work_forces(i, k) = -1.0_dp*(work_forces(i, k - 3) + &
     554   3799860276 :                                          work_forces(i, k + 3) + work_forces(i, k + 6))
     555              :          END DO
     556              :       END DO
     557              : #else
     558              :       MARK_USED(n_d)
     559              :       MARK_USED(n_c)
     560              :       MARK_USED(n_b)
     561              :       MARK_USED(n_a)
     562              :       MARK_USED(lib)
     563              :       MARK_USED(work_forces)
     564              :       MARK_USED(a_mysize)
     565              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     566              : #endif
     567              : 
     568    106196092 :    END SUBROUTINE cp_libint_get_derivs
     569              : 
     570     36375756 :    FUNCTION get_ssss_f_val(lib)
     571              :       TYPE(cp_libint_t) :: lib
     572              :       REAL(KIND=dp) :: get_ssss_f_val
     573              : 
     574     36375756 :       get_ssss_f_val = 0
     575              : 
     576              : #if(__LIBINT)
     577     36375756 :       get_ssss_f_val = lib%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0(1)
     578              : #else
     579              :       MARK_USED(lib)
     580              :       get_ssss_f_val = 0.0_dp
     581              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     582              : #endif
     583              : 
     584     36375756 :    END FUNCTION get_ssss_f_val
     585              : 
     586         1612 :    SUBROUTINE cp_libint_init_eri(lib, max_am)
     587              :       TYPE(cp_libint_t)               :: lib
     588              :       INTEGER                         :: max_am
     589              : #if(__LIBINT)
     590         1612 :       CALL libint2_init_eri(lib%prv, max_am, C_NULL_PTR)
     591              : #else
     592              :       MARK_USED(lib)
     593              :       MARK_USED(max_am)
     594              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     595              : #endif
     596         1612 :    END SUBROUTINE cp_libint_init_eri
     597              : 
     598        28030 :    SUBROUTINE cp_libint_set_contrdepth(lib, contrdepth)
     599              :       TYPE(cp_libint_t) :: lib
     600              :       INTEGER           :: contrdepth
     601              : #if(__LIBINT)
     602              : #if LIBINT_CONTRACTED_INTS
     603        28030 :       lib%prv(1)%contrdepth = contrdepth
     604              : #else
     605              :       MARK_USED(lib)
     606              :       MARK_USED(contrdepth)
     607              : #endif
     608              : #else
     609              :       MARK_USED(lib)
     610              :       MARK_USED(contrdepth)
     611              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     612              : #endif
     613              : 
     614        28030 :    END SUBROUTINE cp_libint_set_contrdepth
     615              : 
     616         1612 :    SUBROUTINE cp_libint_init_eri1(lib, max_am)
     617              :       TYPE(cp_libint_t)               :: lib
     618              :       INTEGER                         :: max_am
     619              : #if(__LIBINT)
     620         1612 :       CALL libint2_init_eri1(lib%prv, max_am, C_NULL_PTR)
     621              : #else
     622              :       MARK_USED(lib)
     623              :       MARK_USED(max_am)
     624              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     625              : #endif
     626         1612 :    END SUBROUTINE cp_libint_init_eri1
     627              : 
     628        21902 :    SUBROUTINE cp_libint_init_3eri(lib, max_am)
     629              :       TYPE(cp_libint_t)               :: lib
     630              :       INTEGER                         :: max_am
     631              : #if(__LIBINT)
     632        21902 :       CALL libint2_init_3eri(lib%prv, max_am, C_NULL_PTR)
     633              : #else
     634              :       MARK_USED(lib)
     635              :       MARK_USED(max_am)
     636              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     637              : #endif
     638        21902 :    END SUBROUTINE cp_libint_init_3eri
     639              : 
     640          598 :    SUBROUTINE cp_libint_init_3eri1(lib, max_am)
     641              :       TYPE(cp_libint_t)               :: lib
     642              :       INTEGER                         :: max_am
     643              : #if(__LIBINT)
     644          598 :       CALL libint2_init_3eri1(lib%prv, max_am, C_NULL_PTR)
     645              : #else
     646              :       MARK_USED(lib)
     647              :       MARK_USED(max_am)
     648              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     649              : #endif
     650          598 :    END SUBROUTINE cp_libint_init_3eri1
     651              : 
     652          404 :    SUBROUTINE cp_libint_init_2eri1(lib, max_am)
     653              :       TYPE(cp_libint_t)               :: lib
     654              :       INTEGER                         :: max_am
     655              : #if(__LIBINT)
     656          404 :       CALL libint2_init_2eri1(lib%prv, max_am, C_NULL_PTR)
     657              : #else
     658              :       MARK_USED(lib)
     659              :       MARK_USED(max_am)
     660              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     661              : #endif
     662          404 :    END SUBROUTINE cp_libint_init_2eri1
     663              : 
     664         1902 :    SUBROUTINE cp_libint_init_2eri(lib, max_am)
     665              :       TYPE(cp_libint_t)               :: lib
     666              :       INTEGER                         :: max_am
     667              : #if(__LIBINT)
     668         1902 :       CALL libint2_init_2eri(lib%prv, max_am, C_NULL_PTR)
     669              : #else
     670              :       MARK_USED(lib)
     671              :       MARK_USED(max_am)
     672              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     673              : #endif
     674         1902 :    END SUBROUTINE cp_libint_init_2eri
     675              : 
     676         1612 :    SUBROUTINE cp_libint_cleanup_eri(lib)
     677              :       TYPE(cp_libint_t)               :: lib
     678              : #if(__LIBINT)
     679         1612 :       CALL libint2_cleanup_eri(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         1612 :    END SUBROUTINE cp_libint_cleanup_eri
     685              : 
     686         1612 :    SUBROUTINE cp_libint_cleanup_eri1(lib)
     687              :       TYPE(cp_libint_t)               :: lib
     688              : #if(__LIBINT)
     689         1612 :       CALL libint2_cleanup_eri1(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         1612 :    END SUBROUTINE cp_libint_cleanup_eri1
     695              : 
     696        21902 :    SUBROUTINE cp_libint_cleanup_3eri(lib)
     697              :       TYPE(cp_libint_t)               :: lib
     698              : #if(__LIBINT)
     699        21902 :       CALL libint2_cleanup_3eri(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        21902 :    END SUBROUTINE cp_libint_cleanup_3eri
     705              : 
     706          598 :    SUBROUTINE cp_libint_cleanup_3eri1(lib)
     707              :       TYPE(cp_libint_t)               :: lib
     708              : #if(__LIBINT)
     709          598 :       CALL libint2_cleanup_3eri1(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          598 :    END SUBROUTINE cp_libint_cleanup_3eri1
     715              : 
     716          404 :    SUBROUTINE cp_libint_cleanup_2eri1(lib)
     717              :       TYPE(cp_libint_t)               :: lib
     718              : #if(__LIBINT)
     719          404 :       CALL libint2_cleanup_2eri1(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          404 :    END SUBROUTINE cp_libint_cleanup_2eri1
     725              : 
     726         1902 :    SUBROUTINE cp_libint_cleanup_2eri(lib)
     727              :       TYPE(cp_libint_t)               :: lib
     728              : #if(__LIBINT)
     729         1902 :       CALL libint2_cleanup_2eri(lib%prv)
     730              : #else
     731              :       MARK_USED(lib)
     732              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     733              : #endif
     734         1902 :    END SUBROUTINE cp_libint_cleanup_2eri
     735              : 
     736         3417 :    SUBROUTINE cp_libint_static_init()
     737              : #if(__LIBINT)
     738         3417 :       CALL libint2_static_init()
     739              : #else
     740              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     741              : #endif
     742         3417 :    END SUBROUTINE cp_libint_static_init
     743              : 
     744         3426 :    SUBROUTINE cp_libint_static_cleanup()
     745              : #if(__LIBINT)
     746         3426 :       CALL libint2_static_cleanup()
     747              : #else
     748              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     749              : #endif
     750         3426 :    END SUBROUTINE cp_libint_static_cleanup
     751              : 
     752            0 : END MODULE libint_wrapper
        

Generated by: LCOV version 2.0-1