LCOV - code coverage report
Current view: top level - src - libint_wrapper.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:9843133) Lines: 195 196 99.5 %
Date: 2024-05-10 06:53:45 Functions: 25 26 96.2 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 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
      78             : 
      79             : CONTAINS
      80             : 
      81    82215414 :    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    82215414 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
      90    82215414 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
      91    82215414 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
      92             : 
      93    82215414 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
      94    82215414 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
      95    82215414 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
      96             : 
      97    82215414 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
      98    82215414 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
      99    82215414 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     100             : 
     101    82215414 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     102    82215414 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     103    82215414 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     104             : 
     105    82215414 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     106    82215414 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     107    82215414 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     108             : 
     109    82215414 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     110    82215414 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     111    82215414 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     112             : 
     113    82215414 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     114    82215414 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     115    82215414 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     116    82215414 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     117    82215414 :       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   317150100 :          IF (${m_max}$ .LE. m_max) &
     122             :             libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_${m_max}$ (1) &
     123   234934686 :             = 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    82215414 :    END SUBROUTINE
     148             : 
     149    99141939 :    SUBROUTINE cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, &
     150    99141939 :                                              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    99141939 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     161    99141939 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     162    99141939 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     163             : 
     164    99141939 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     165    99141939 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     166    99141939 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     167             : 
     168    99141939 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     169    99141939 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     170    99141939 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     171             : 
     172    99141939 :       libint%prv(1)%PB_x(1) = P(1) - B(1)
     173    99141939 :       libint%prv(1)%PB_y(1) = P(2) - B(2)
     174    99141939 :       libint%prv(1)%PB_z(1) = P(3) - B(3)
     175             : 
     176    99141939 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     177    99141939 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     178    99141939 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     179             : 
     180    99141939 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     181    99141939 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     182    99141939 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     183             : 
     184    99141939 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     185    99141939 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     186    99141939 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     187             : 
     188    99141939 :       libint%prv(1)%two_alpha0_bra(1) = 2.0_dp*Zeta_A
     189    99141939 :       libint%prv(1)%two_alpha0_ket(1) = 2.0_dp*Zeta_B
     190    99141939 :       libint%prv(1)%two_alpha1_ket(1) = 2.0_dp*Zeta_D
     191             : 
     192    99141939 :       gammap = Zeta_A + Zeta_B
     193    99141939 :       gammaq = Zeta_C + Zeta_D
     194    99141939 :       gammapq = gammap*gammaq/(gammap + gammaq)
     195    99141939 :       libint%prv(1)%alpha1_rho_over_zeta2(1) = Zeta_A*gammapq/(gammap*gammap)
     196    99141939 :       libint%prv(1)%alpha2_rho_over_zeta2(1) = Zeta_B*gammapq/(gammap*gammap)
     197    99141939 :       libint%prv(1)%alpha4_rho_over_eta2(1) = Zeta_D*gammapq/(gammaq*gammaq)
     198    99141939 :       libint%prv(1)%alpha1_over_zetapluseta(1) = Zeta_A/(gammap + gammaq)
     199    99141939 :       libint%prv(1)%alpha2_over_zetapluseta(1) = Zeta_B/(gammap + gammaq)
     200    99141939 :       libint%prv(1)%alpha4_over_zetapluseta(1) = Zeta_D/(gammap + gammaq)
     201             : 
     202    99141939 :       rhop = Zeta_A*Zeta_B/gammap
     203    99141939 :       rhoq = Zeta_C*Zeta_D/gammaq
     204    99141939 :       libint%prv(1)%rho12_over_alpha1(1) = rhop/Zeta_A
     205             : 
     206    99141939 :       libint%prv(1)%rho34_over_alpha3(1) = rhoq/Zeta_C
     207             : 
     208    99141939 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     209    99141939 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     210    99141939 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     211    99141939 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     212    99141939 :       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   440540219 :          IF (${m_max}$ .LE. 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   341398280 :             = 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    99141939 :    END SUBROUTINE
     245             : 
     246   345538115 :    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   345538115 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     256   345538115 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     257   345538115 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     258             : 
     259   345538115 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     260   345538115 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     261   345538115 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     262             : 
     263   345538115 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     264   345538115 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     265   345538115 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     266             : 
     267   345538115 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     268   345538115 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     269   345538115 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     270             : 
     271   345538115 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     272   345538115 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     273   345538115 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     274             : 
     275   345538115 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     276   345538115 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     277   345538115 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     278             : 
     279   345538115 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     280   345538115 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     281   345538115 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     282   345538115 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     283   345538115 :       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  1265367575 :          IF (${m_max}$ .LE. 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   919829460 :             = 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   345538115 :    END SUBROUTINE
     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   303960154 :    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   303960154 :       CALL C_F_PROCPOINTER(libint2_build_eri(n_d, n_c, n_b, n_a), pbuild)
     333   303960154 :       CALL pbuild(lib%prv)
     334             : 
     335   607920308 :       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   303960154 :    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    31933937 :    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    31933937 :       CALL C_F_PROCPOINTER(libint2_build_3eri(n_c, n_b, n_a), pbuild)
     368    31933937 :       CALL pbuild(lib%prv)
     369             : 
     370    63867874 :       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    31933937 :    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     4701531 :    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     4701531 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     400             :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     401             :       INTEGER :: i
     402             : 
     403     4701531 :       CALL C_F_PROCPOINTER(libint2_build_3eri1(n_c, n_b, n_a), pbuild)
     404     4701531 :       CALL pbuild(lib%prv)
     405             : 
     406    14104593 :       ALLOCATE (p_work(a_mysize(1), 9))
     407             : 
     408             :       !Derivatives 1-3 can be obtained using translational invariance
     409    32910717 :       DO i = 4, 9
     410    28209186 :          NULLIFY (p_work_tmp)
     411    56418372 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     412   481334859 :          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     4701531 :    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     6157531 :    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     6157531 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work_tmp
     443             :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     444             :       INTEGER :: i
     445             : 
     446     6157531 :       CALL C_F_PROCPOINTER(libint2_build_2eri1(n_b, n_a), pbuild)
     447     6157531 :       CALL pbuild(lib%prv)
     448             : 
     449    18472593 :       ALLOCATE (p_work(a_mysize(1), 6))
     450             : 
     451             :       !Derivatives 1-3 can be obtained using translational invariance
     452    24630124 :       DO i = 4, 6
     453    18472593 :          NULLIFY (p_work_tmp)
     454    36945186 :          CALL C_F_POINTER(lib%prv(1)%targets(i), p_work_tmp, SHAPE=a_mysize)
     455   321283693 :          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     6157531 :    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    10318870 :    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    10318870 :       CALL C_F_PROCPOINTER(libint2_build_2eri(n_b, n_a), pbuild)
     487    10318870 :       CALL pbuild(lib%prv)
     488             : 
     489    20637740 :       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    10318870 :    END SUBROUTINE
     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    93281825 :    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    93281825 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     520             : 
     521             :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     522             :       INTEGER                                            :: i, k
     523             : #endif
     524             : 
     525             : #if(__LIBINT)
     526    93281825 :       CALL C_F_PROCPOINTER(libint2_build_eri1(n_d, n_c, n_b, n_a), pbuild)
     527    93281825 :       CALL pbuild(lib%prv)
     528             : 
     529  1212663725 :       DO k = 1, 12
     530  1119381900 :          IF (k == 4 .OR. k == 5 .OR. k == 6) CYCLE
     531  1679072850 :          CALL C_F_POINTER(lib%prv(1)%targets(k), p_work, SHAPE=a_mysize)
     532  9936779231 :          DO i = 1, a_mysize(1)
     533 10123342881 :             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    93281825 :    END SUBROUTINE cp_libint_get_derivs
     548             : 
     549    30819948 :    FUNCTION get_ssss_f_val(lib)
     550             :       TYPE(cp_libint_t) :: lib
     551             :       REAL(KIND=dp) :: get_ssss_f_val
     552             : 
     553    30819948 :       get_ssss_f_val = 0
     554             : 
     555             : #if(__LIBINT)
     556    30819948 :       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    30819948 :    END FUNCTION
     564             : 
     565        1320 :    SUBROUTINE cp_libint_init_eri(lib, max_am)
     566             :       TYPE(cp_libint_t)               :: lib
     567             :       INTEGER                         :: max_am
     568             : #if(__LIBINT)
     569        1320 :       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        1320 :    END SUBROUTINE
     576             : 
     577        6190 :    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        6190 :       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        6190 :    END SUBROUTINE
     594             : 
     595        1320 :    SUBROUTINE cp_libint_init_eri1(lib, max_am)
     596             :       TYPE(cp_libint_t)               :: lib
     597             :       INTEGER                         :: max_am
     598             : #if(__LIBINT)
     599        1320 :       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        1320 :    END SUBROUTINE
     606             : 
     607        1646 :    SUBROUTINE cp_libint_init_3eri(lib, max_am)
     608             :       TYPE(cp_libint_t)               :: lib
     609             :       INTEGER                         :: max_am
     610             : #if(__LIBINT)
     611        1646 :       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        1646 :    END SUBROUTINE
     618             : 
     619         578 :    SUBROUTINE cp_libint_init_3eri1(lib, max_am)
     620             :       TYPE(cp_libint_t)               :: lib
     621             :       INTEGER                         :: max_am
     622             : #if(__LIBINT)
     623         578 :       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         578 :    END SUBROUTINE
     630             : 
     631         384 :    SUBROUTINE cp_libint_init_2eri1(lib, max_am)
     632             :       TYPE(cp_libint_t)               :: lib
     633             :       INTEGER                         :: max_am
     634             : #if(__LIBINT)
     635         384 :       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         384 :    END SUBROUTINE
     642             : 
     643         942 :    SUBROUTINE cp_libint_init_2eri(lib, max_am)
     644             :       TYPE(cp_libint_t)               :: lib
     645             :       INTEGER                         :: max_am
     646             : #if(__LIBINT)
     647         942 :       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         942 :    END SUBROUTINE
     654             : 
     655        1320 :    SUBROUTINE cp_libint_cleanup_eri(lib)
     656             :       TYPE(cp_libint_t)               :: lib
     657             : #if(__LIBINT)
     658        1320 :       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        1320 :    END SUBROUTINE
     664             : 
     665        1320 :    SUBROUTINE cp_libint_cleanup_eri1(lib)
     666             :       TYPE(cp_libint_t)               :: lib
     667             : #if(__LIBINT)
     668        1320 :       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        1320 :    END SUBROUTINE
     674             : 
     675        1646 :    SUBROUTINE cp_libint_cleanup_3eri(lib)
     676             :       TYPE(cp_libint_t)               :: lib
     677             : #if(__LIBINT)
     678        1646 :       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        1646 :    END SUBROUTINE
     684             : 
     685         578 :    SUBROUTINE cp_libint_cleanup_3eri1(lib)
     686             :       TYPE(cp_libint_t)               :: lib
     687             : #if(__LIBINT)
     688         578 :       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         578 :    END SUBROUTINE
     694             : 
     695         384 :    SUBROUTINE cp_libint_cleanup_2eri1(lib)
     696             :       TYPE(cp_libint_t)               :: lib
     697             : #if(__LIBINT)
     698         384 :       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         384 :    END SUBROUTINE
     704             : 
     705         942 :    SUBROUTINE cp_libint_cleanup_2eri(lib)
     706             :       TYPE(cp_libint_t)               :: lib
     707             : #if(__LIBINT)
     708         942 :       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         942 :    END SUBROUTINE
     714             : 
     715        1642 :    SUBROUTINE cp_libint_static_init()
     716             : #if(__LIBINT)
     717        1642 :       CALL libint2_static_init()
     718             : #else
     719             :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     720             : #endif
     721        1642 :    END SUBROUTINE
     722             : 
     723        1650 :    SUBROUTINE cp_libint_static_cleanup()
     724             : #if(__LIBINT)
     725        1650 :       CALL libint2_static_cleanup()
     726             : #else
     727             :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     728             : #endif
     729        1650 :    END SUBROUTINE
     730             : 
     731           0 : END MODULE libint_wrapper

Generated by: LCOV version 1.15