LCOV - code coverage report
Current view: top level - src - libint_wrapper.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 98.5 % 200 197
Test Date: 2026-07-25 06:35:44 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     90113412 :    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     90113412 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
      92     90113412 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
      93     90113412 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
      94              : 
      95     90113412 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
      96     90113412 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
      97     90113412 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
      98              : 
      99     90113412 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     100     90113412 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     101     90113412 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     102              : 
     103     90113412 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     104     90113412 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     105     90113412 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     106              : 
     107     90113412 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     108     90113412 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     109     90113412 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     110              : 
     111     90113412 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     112     90113412 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     113     90113412 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     114              : 
     115     90113412 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     116     90113412 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     117     90113412 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     118     90113412 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     119     90113412 :       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    348328800 :          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    258215388 :                = 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     90113412 :    END SUBROUTINE cp_libint_set_params_eri_screen
     151              : 
     152    111417683 :    SUBROUTINE cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, &
     153    111417683 :                                              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    111417683 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     164    111417683 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     165    111417683 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     166              : 
     167    111417683 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     168    111417683 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     169    111417683 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     170              : 
     171    111417683 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     172    111417683 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     173    111417683 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     174              : 
     175    111417683 :       libint%prv(1)%PB_x(1) = P(1) - B(1)
     176    111417683 :       libint%prv(1)%PB_y(1) = P(2) - B(2)
     177    111417683 :       libint%prv(1)%PB_z(1) = P(3) - B(3)
     178              : 
     179    111417683 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     180    111417683 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     181    111417683 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     182              : 
     183    111417683 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     184    111417683 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     185    111417683 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     186              : 
     187    111417683 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     188    111417683 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     189    111417683 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     190              : 
     191    111417683 :       libint%prv(1)%two_alpha0_bra(1) = 2.0_dp*Zeta_A
     192    111417683 :       libint%prv(1)%two_alpha0_ket(1) = 2.0_dp*Zeta_B
     193    111417683 :       libint%prv(1)%two_alpha1_ket(1) = 2.0_dp*Zeta_D
     194              : 
     195    111417683 :       gammap = Zeta_A + Zeta_B
     196    111417683 :       gammaq = Zeta_C + Zeta_D
     197    111417683 :       gammapq = gammap*gammaq/(gammap + gammaq)
     198    111417683 :       libint%prv(1)%alpha1_rho_over_zeta2(1) = Zeta_A*gammapq/(gammap*gammap)
     199    111417683 :       libint%prv(1)%alpha2_rho_over_zeta2(1) = Zeta_B*gammapq/(gammap*gammap)
     200    111417683 :       libint%prv(1)%alpha4_rho_over_eta2(1) = Zeta_D*gammapq/(gammaq*gammaq)
     201    111417683 :       libint%prv(1)%alpha1_over_zetapluseta(1) = Zeta_A/(gammap + gammaq)
     202    111417683 :       libint%prv(1)%alpha2_over_zetapluseta(1) = Zeta_B/(gammap + gammaq)
     203    111417683 :       libint%prv(1)%alpha4_over_zetapluseta(1) = Zeta_D/(gammap + gammaq)
     204              : 
     205    111417683 :       rhop = Zeta_A*Zeta_B/gammap
     206    111417683 :       rhoq = Zeta_C*Zeta_D/gammaq
     207    111417683 :       libint%prv(1)%rho12_over_alpha1(1) = rhop/Zeta_A
     208              : 
     209    111417683 :       libint%prv(1)%rho34_over_alpha3(1) = rhoq/Zeta_C
     210              : 
     211    111417683 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     212    111417683 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     213    111417683 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     214    111417683 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     215    111417683 :       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    496143596 :          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    384725913 :                = 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    111417683 :    END SUBROUTINE cp_libint_set_params_eri_deriv
     249              : 
     250    532522011 :    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    532522011 :       libint%prv(1)%AB_x(1) = A(1) - B(1)
     260    532522011 :       libint%prv(1)%AB_y(1) = A(2) - B(2)
     261    532522011 :       libint%prv(1)%AB_z(1) = A(3) - B(3)
     262              : 
     263    532522011 :       libint%prv(1)%CD_x(1) = C(1) - D(1)
     264    532522011 :       libint%prv(1)%CD_y(1) = C(2) - D(2)
     265    532522011 :       libint%prv(1)%CD_z(1) = C(3) - D(3)
     266              : 
     267    532522011 :       libint%prv(1)%PA_x(1) = P(1) - A(1)
     268    532522011 :       libint%prv(1)%PA_y(1) = P(2) - A(2)
     269    532522011 :       libint%prv(1)%PA_z(1) = P(3) - A(3)
     270              : 
     271    532522011 :       libint%prv(1)%QC_x(1) = Q(1) - C(1)
     272    532522011 :       libint%prv(1)%QC_y(1) = Q(2) - C(2)
     273    532522011 :       libint%prv(1)%QC_z(1) = Q(3) - C(3)
     274              : 
     275    532522011 :       libint%prv(1)%WP_x(1) = W(1) - P(1)
     276    532522011 :       libint%prv(1)%WP_y(1) = W(2) - P(2)
     277    532522011 :       libint%prv(1)%WP_z(1) = W(3) - P(3)
     278              : 
     279    532522011 :       libint%prv(1)%WQ_x(1) = W(1) - Q(1)
     280    532522011 :       libint%prv(1)%WQ_y(1) = W(2) - Q(2)
     281    532522011 :       libint%prv(1)%WQ_z(1) = W(3) - Q(3)
     282              : 
     283    532522011 :       libint%prv(1)%oo2z(1) = 0.5_dp*ZetaInv
     284    532522011 :       libint%prv(1)%oo2e(1) = 0.5_dp*EtaInv
     285    532522011 :       libint%prv(1)%oo2ze(1) = 0.5_dp*ZetapEtaInv
     286    532522011 :       libint%prv(1)%roz(1) = Rho*ZetaInv
     287    532522011 :       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   1886302549 :          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   1353780538 :                = 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    532522011 :    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    443122419 :    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    443122419 :       CALL C_F_PROCPOINTER(libint2_build_eri(n_d, n_c, n_b, n_a), pbuild)
     338    443122419 :       CALL pbuild(lib%prv)
     339              : 
     340    886244838 :       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    443122419 :    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     29519249 :    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     29519249 :       build_funptr = libint2_build_3eri(n_c, n_b, n_a)
     375     29519249 :       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     29519249 :       CALL C_F_PROCPOINTER(build_funptr, pbuild)
     382     29519249 :       CALL pbuild(lib%prv)
     383              : 
     384     59038498 :       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     29519249 :    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     10524550 :    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     10524550 :       CALL C_F_PROCPOINTER(libint2_build_2eri(n_b, n_a), pbuild)
     501     10524550 :       CALL pbuild(lib%prv)
     502              : 
     503     21049100 :       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     10524550 :    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    105499911 :    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    105499911 :       REAL(dp), DIMENSION(:), POINTER                    :: p_work
     534              : 
     535              :       PROCEDURE(libint2_build), POINTER                  :: pbuild
     536              :       INTEGER                                            :: i, k
     537              : #endif
     538              : 
     539              : #if(__LIBINT)
     540    105499911 :       CALL C_F_PROCPOINTER(libint2_build_eri1(n_d, n_c, n_b, n_a), pbuild)
     541    105499911 :       CALL pbuild(lib%prv)
     542              : 
     543   1371498843 :       DO k = 1, 12
     544   1265998932 :          IF (k == 4 .OR. k == 5 .OR. k == 6) CYCLE
     545   1898998398 :          CALL C_F_POINTER(lib%prv(1)%targets(k), p_work, SHAPE=a_mysize)
     546  11432908875 :          DO i = 1, a_mysize(1)
     547  11643908697 :             work_forces(i, k) = p_work(i)
     548              :          END DO
     549              :       END DO
     550              : #else
     551              :       MARK_USED(n_d)
     552              :       MARK_USED(n_c)
     553              :       MARK_USED(n_b)
     554              :       MARK_USED(n_a)
     555              :       MARK_USED(lib)
     556              :       MARK_USED(work_forces)
     557              :       MARK_USED(a_mysize)
     558              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     559              : #endif
     560              : 
     561    105499911 :    END SUBROUTINE cp_libint_get_derivs
     562              : 
     563     33517254 :    FUNCTION get_ssss_f_val(lib)
     564              :       TYPE(cp_libint_t) :: lib
     565              :       REAL(KIND=dp) :: get_ssss_f_val
     566              : 
     567     33517254 :       get_ssss_f_val = 0
     568              : 
     569              : #if(__LIBINT)
     570     33517254 :       get_ssss_f_val = lib%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0(1)
     571              : #else
     572              :       MARK_USED(lib)
     573              :       get_ssss_f_val = 0.0_dp
     574              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     575              : #endif
     576              : 
     577     33517254 :    END FUNCTION get_ssss_f_val
     578              : 
     579         1488 :    SUBROUTINE cp_libint_init_eri(lib, max_am)
     580              :       TYPE(cp_libint_t)               :: lib
     581              :       INTEGER                         :: max_am
     582              : #if(__LIBINT)
     583         1488 :       CALL libint2_init_eri(lib%prv, max_am, C_NULL_PTR)
     584              : #else
     585              :       MARK_USED(lib)
     586              :       MARK_USED(max_am)
     587              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     588              : #endif
     589         1488 :    END SUBROUTINE cp_libint_init_eri
     590              : 
     591        20364 :    SUBROUTINE cp_libint_set_contrdepth(lib, contrdepth)
     592              :       TYPE(cp_libint_t) :: lib
     593              :       INTEGER           :: contrdepth
     594              : #if(__LIBINT)
     595              : #if LIBINT_CONTRACTED_INTS
     596        20364 :       lib%prv(1)%contrdepth = contrdepth
     597              : #else
     598              :       MARK_USED(lib)
     599              :       MARK_USED(contrdepth)
     600              : #endif
     601              : #else
     602              :       MARK_USED(lib)
     603              :       MARK_USED(contrdepth)
     604              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     605              : #endif
     606              : 
     607        20364 :    END SUBROUTINE cp_libint_set_contrdepth
     608              : 
     609         1488 :    SUBROUTINE cp_libint_init_eri1(lib, max_am)
     610              :       TYPE(cp_libint_t)               :: lib
     611              :       INTEGER                         :: max_am
     612              : #if(__LIBINT)
     613         1488 :       CALL libint2_init_eri1(lib%prv, max_am, C_NULL_PTR)
     614              : #else
     615              :       MARK_USED(lib)
     616              :       MARK_USED(max_am)
     617              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     618              : #endif
     619         1488 :    END SUBROUTINE cp_libint_init_eri1
     620              : 
     621        15268 :    SUBROUTINE cp_libint_init_3eri(lib, max_am)
     622              :       TYPE(cp_libint_t)               :: lib
     623              :       INTEGER                         :: max_am
     624              : #if(__LIBINT)
     625        15268 :       CALL libint2_init_3eri(lib%prv, max_am, C_NULL_PTR)
     626              : #else
     627              :       MARK_USED(lib)
     628              :       MARK_USED(max_am)
     629              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     630              : #endif
     631        15268 :    END SUBROUTINE cp_libint_init_3eri
     632              : 
     633          598 :    SUBROUTINE cp_libint_init_3eri1(lib, max_am)
     634              :       TYPE(cp_libint_t)               :: lib
     635              :       INTEGER                         :: max_am
     636              : #if(__LIBINT)
     637          598 :       CALL libint2_init_3eri1(lib%prv, max_am, C_NULL_PTR)
     638              : #else
     639              :       MARK_USED(lib)
     640              :       MARK_USED(max_am)
     641              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     642              : #endif
     643          598 :    END SUBROUTINE cp_libint_init_3eri1
     644              : 
     645          404 :    SUBROUTINE cp_libint_init_2eri1(lib, max_am)
     646              :       TYPE(cp_libint_t)               :: lib
     647              :       INTEGER                         :: max_am
     648              : #if(__LIBINT)
     649          404 :       CALL libint2_init_2eri1(lib%prv, max_am, C_NULL_PTR)
     650              : #else
     651              :       MARK_USED(lib)
     652              :       MARK_USED(max_am)
     653              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     654              : #endif
     655          404 :    END SUBROUTINE cp_libint_init_2eri1
     656              : 
     657         1118 :    SUBROUTINE cp_libint_init_2eri(lib, max_am)
     658              :       TYPE(cp_libint_t)               :: lib
     659              :       INTEGER                         :: max_am
     660              : #if(__LIBINT)
     661         1118 :       CALL libint2_init_2eri(lib%prv, max_am, C_NULL_PTR)
     662              : #else
     663              :       MARK_USED(lib)
     664              :       MARK_USED(max_am)
     665              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     666              : #endif
     667         1118 :    END SUBROUTINE cp_libint_init_2eri
     668              : 
     669         1488 :    SUBROUTINE cp_libint_cleanup_eri(lib)
     670              :       TYPE(cp_libint_t)               :: lib
     671              : #if(__LIBINT)
     672         1488 :       CALL libint2_cleanup_eri(lib%prv)
     673              : #else
     674              :       MARK_USED(lib)
     675              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     676              : #endif
     677         1488 :    END SUBROUTINE cp_libint_cleanup_eri
     678              : 
     679         1488 :    SUBROUTINE cp_libint_cleanup_eri1(lib)
     680              :       TYPE(cp_libint_t)               :: lib
     681              : #if(__LIBINT)
     682         1488 :       CALL libint2_cleanup_eri1(lib%prv)
     683              : #else
     684              :       MARK_USED(lib)
     685              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     686              : #endif
     687         1488 :    END SUBROUTINE cp_libint_cleanup_eri1
     688              : 
     689        15268 :    SUBROUTINE cp_libint_cleanup_3eri(lib)
     690              :       TYPE(cp_libint_t)               :: lib
     691              : #if(__LIBINT)
     692        15268 :       CALL libint2_cleanup_3eri(lib%prv)
     693              : #else
     694              :       MARK_USED(lib)
     695              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     696              : #endif
     697        15268 :    END SUBROUTINE cp_libint_cleanup_3eri
     698              : 
     699          598 :    SUBROUTINE cp_libint_cleanup_3eri1(lib)
     700              :       TYPE(cp_libint_t)               :: lib
     701              : #if(__LIBINT)
     702          598 :       CALL libint2_cleanup_3eri1(lib%prv)
     703              : #else
     704              :       MARK_USED(lib)
     705              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     706              : #endif
     707          598 :    END SUBROUTINE cp_libint_cleanup_3eri1
     708              : 
     709          404 :    SUBROUTINE cp_libint_cleanup_2eri1(lib)
     710              :       TYPE(cp_libint_t)               :: lib
     711              : #if(__LIBINT)
     712          404 :       CALL libint2_cleanup_2eri1(lib%prv)
     713              : #else
     714              :       MARK_USED(lib)
     715              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     716              : #endif
     717          404 :    END SUBROUTINE cp_libint_cleanup_2eri1
     718              : 
     719         1118 :    SUBROUTINE cp_libint_cleanup_2eri(lib)
     720              :       TYPE(cp_libint_t)               :: lib
     721              : #if(__LIBINT)
     722         1118 :       CALL libint2_cleanup_2eri(lib%prv)
     723              : #else
     724              :       MARK_USED(lib)
     725              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     726              : #endif
     727         1118 :    END SUBROUTINE cp_libint_cleanup_2eri
     728              : 
     729         1878 :    SUBROUTINE cp_libint_static_init()
     730              : #if(__LIBINT)
     731         1878 :       CALL libint2_static_init()
     732              : #else
     733              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     734              : #endif
     735         1878 :    END SUBROUTINE cp_libint_static_init
     736              : 
     737         1888 :    SUBROUTINE cp_libint_static_cleanup()
     738              : #if(__LIBINT)
     739         1888 :       CALL libint2_static_cleanup()
     740              : #else
     741              :       CPABORT("This CP2K executable has not been linked against the required library libint.")
     742              : #endif
     743         1888 :    END SUBROUTINE cp_libint_static_cleanup
     744              : 
     745            0 : END MODULE libint_wrapper
        

Generated by: LCOV version 2.0-1