(git:34ef472)
libint_wrapper.F
Go to the documentation of this file.
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 ! **************************************************************************************************
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 
24  USE iso_c_binding, ONLY: c_f_pointer, &
25  c_f_procpointer, &
26  c_null_ptr, &
27  c_funptr
28  USE kinds, ONLY: dp
29 #if(__LIBINT)
30  USE libint_f, ONLY: &
31  libint2_build, libint2_build_eri, libint2_build_eri1, libint2_cleanup_eri, &
32  libint2_cleanup_eri1, libint2_init_eri, libint2_init_eri1, libint2_static_cleanup, &
33  libint2_static_init, libint_t, libint2_max_am_eri, libint2_init_3eri, libint2_cleanup_3eri, &
34  libint2_init_2eri, libint2_cleanup_2eri, &
35  libint2_build_2eri, libint2_build_3eri, libint2_build_3eri1, libint2_cleanup_3eri1, libint2_init_3eri1, &
36  libint2_build_2eri1, libint2_cleanup_2eri1, libint2_init_2eri1
37 #endif
38  USE orbital_pointers, ONLY: nco
39 #include "./base/base_uses.f90"
40 
41  IMPLICIT NONE
42  PRIVATE
43  PUBLIC :: cp_libint_t, prim_data_f_size, build_eri_size, build_deriv1_eri_size, &
53 
54  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'libint_wrapper'
55 
56 #if(__LIBINT)
57  INTEGER, PARAMETER :: libint_max_am = libint2_max_am_eri
58 #else
59  INTEGER, PARAMETER :: libint_max_am = 0
60 #endif
61 
62  INTEGER, PARAMETER :: libderiv_max_am1 = libint_max_am
63  INTEGER, PARAMETER :: prim_data_f_size = 4*(libint_max_am) + 1
64  INTEGER, PARAMETER :: libint_vrr_classes_size = 2*(libint_max_am) + 1
65  INTEGER, PARAMETER :: libint_dvrr_classes_size = 2*(libderiv_max_am1) + 1
66  INTEGER, PARAMETER :: build_eri_size = libint_max_am
67  INTEGER, PARAMETER :: build_deriv1_eri_size = libderiv_max_am1
68 
69  TYPE :: cp_libint_t
70  PRIVATE
71 #if(__LIBINT)
72  TYPE(libint_t), DIMENSION(1) :: prv
73 #else
74  INTEGER :: unused = -1
75 #endif
76  END TYPE
77 
78 CONTAINS
79 
80  SUBROUTINE cp_libint_set_params_eri_screen(libint, A, B, C, D, P, Q, W, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
81  TYPE(cp_libint_t) :: libint
82  REAL(kind=dp), INTENT(IN), DIMENSION(3) :: a, b, c, d, p, q, w
83  REAL(kind=dp), INTENT(IN) :: zetainv, etainv, zetapetainv, rho
84  INTEGER, INTENT(IN) :: m_max
85  REAL(kind=dp), DIMENSION(:) :: f
86 
87 #if(__LIBINT)
88  libint%prv(1)%AB_x(1) = a(1) - b(1)
89  libint%prv(1)%AB_y(1) = a(2) - b(2)
90  libint%prv(1)%AB_z(1) = a(3) - b(3)
91 
92  libint%prv(1)%CD_x(1) = c(1) - d(1)
93  libint%prv(1)%CD_y(1) = c(2) - d(2)
94  libint%prv(1)%CD_z(1) = c(3) - d(3)
95 
96  libint%prv(1)%PA_x(1) = p(1) - a(1)
97  libint%prv(1)%PA_y(1) = p(2) - a(2)
98  libint%prv(1)%PA_z(1) = p(3) - a(3)
99 
100  libint%prv(1)%QC_x(1) = q(1) - c(1)
101  libint%prv(1)%QC_y(1) = q(2) - c(2)
102  libint%prv(1)%QC_z(1) = q(3) - c(3)
103 
104  libint%prv(1)%WP_x(1) = w(1) - p(1)
105  libint%prv(1)%WP_y(1) = w(2) - p(2)
106  libint%prv(1)%WP_z(1) = w(3) - p(3)
107 
108  libint%prv(1)%WQ_x(1) = w(1) - q(1)
109  libint%prv(1)%WQ_y(1) = w(2) - q(2)
110  libint%prv(1)%WQ_z(1) = w(3) - q(3)
111 
112  libint%prv(1)%oo2z(1) = 0.5_dp*zetainv
113  libint%prv(1)%oo2e(1) = 0.5_dp*etainv
114  libint%prv(1)%oo2ze(1) = 0.5_dp*zetapetainv
115  libint%prv(1)%roz(1) = rho*zetainv
116  libint%prv(1)%roe(1) = rho*etainv
117 
118 #if 4*LIBINT2_MAX_AM_eri > 0 - 1
119  IF (0 .LE. m_max) &
120  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0 (1) &
121  = f(0+1)
122 
123 #endif
124 #if 4*LIBINT2_MAX_AM_eri > 1 - 1
125  IF (1 .LE. m_max) &
126  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_1 (1) &
127  = f(1+1)
128 
129 #endif
130 #if 4*LIBINT2_MAX_AM_eri > 2 - 1
131  IF (2 .LE. m_max) &
132  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_2 (1) &
133  = f(2+1)
134 
135 #endif
136 #if 4*LIBINT2_MAX_AM_eri > 3 - 1
137  IF (3 .LE. m_max) &
138  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_3 (1) &
139  = f(3+1)
140 
141 #endif
142 #if 4*LIBINT2_MAX_AM_eri > 4 - 1
143  IF (4 .LE. m_max) &
144  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_4 (1) &
145  = f(4+1)
146 
147 #endif
148 #if 4*LIBINT2_MAX_AM_eri > 5 - 1
149  IF (5 .LE. m_max) &
150  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_5 (1) &
151  = f(5+1)
152 
153 #endif
154 #if 4*LIBINT2_MAX_AM_eri > 6 - 1
155  IF (6 .LE. m_max) &
156  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_6 (1) &
157  = f(6+1)
158 
159 #endif
160 #if 4*LIBINT2_MAX_AM_eri > 7 - 1
161  IF (7 .LE. m_max) &
162  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_7 (1) &
163  = f(7+1)
164 
165 #endif
166 #if 4*LIBINT2_MAX_AM_eri > 8 - 1
167  IF (8 .LE. m_max) &
168  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_8 (1) &
169  = f(8+1)
170 
171 #endif
172 #if 4*LIBINT2_MAX_AM_eri > 9 - 1
173  IF (9 .LE. m_max) &
174  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_9 (1) &
175  = f(9+1)
176 
177 #endif
178 #if 4*LIBINT2_MAX_AM_eri > 10 - 1
179  IF (10 .LE. m_max) &
180  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_10 (1) &
181  = f(10+1)
182 
183 #endif
184 #if 4*LIBINT2_MAX_AM_eri > 11 - 1
185  IF (11 .LE. m_max) &
186  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_11 (1) &
187  = f(11+1)
188 
189 #endif
190 #if 4*LIBINT2_MAX_AM_eri > 12 - 1
191  IF (12 .LE. m_max) &
192  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_12 (1) &
193  = f(12+1)
194 
195 #endif
196 #if 4*LIBINT2_MAX_AM_eri > 13 - 1
197  IF (13 .LE. m_max) &
198  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_13 (1) &
199  = f(13+1)
200 
201 #endif
202 #if 4*LIBINT2_MAX_AM_eri > 14 - 1
203  IF (14 .LE. m_max) &
204  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_14 (1) &
205  = f(14+1)
206 
207 #endif
208 #if 4*LIBINT2_MAX_AM_eri > 15 - 1
209  IF (15 .LE. m_max) &
210  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_15 (1) &
211  = f(15+1)
212 
213 #endif
214 #if 4*LIBINT2_MAX_AM_eri > 16 - 1
215  IF (16 .LE. m_max) &
216  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_16 (1) &
217  = f(16+1)
218 
219 #endif
220 #if 4*LIBINT2_MAX_AM_eri > 17 - 1
221  IF (17 .LE. m_max) &
222  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_17 (1) &
223  = f(17+1)
224 
225 #endif
226 #if 4*LIBINT2_MAX_AM_eri > 18 - 1
227  IF (18 .LE. m_max) &
228  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_18 (1) &
229  = f(18+1)
230 
231 #endif
232 #if 4*LIBINT2_MAX_AM_eri > 19 - 1
233  IF (19 .LE. m_max) &
234  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_19 (1) &
235  = f(19+1)
236 
237 #endif
238 #if 4*LIBINT2_MAX_AM_eri > 20 - 1
239  IF (20 .LE. m_max) &
240  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_20 (1) &
241  = f(20+1)
242 
243 #endif
244 #if 4*LIBINT2_MAX_AM_eri > 21 - 1
245  IF (21 .LE. m_max) &
246  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_21 (1) &
247  = f(21+1)
248 
249 #endif
250 #if 4*LIBINT2_MAX_AM_eri > 22 - 1
251  IF (22 .LE. m_max) &
252  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_22 (1) &
253  = f(22+1)
254 
255 #endif
256 #if 4*LIBINT2_MAX_AM_eri > 23 - 1
257  IF (23 .LE. m_max) &
258  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_23 (1) &
259  = f(23+1)
260 
261 #endif
262 #if 4*LIBINT2_MAX_AM_eri > 24 - 1
263  IF (24 .LE. m_max) &
264  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_24 (1) &
265  = f(24+1)
266 
267 #endif
268 #if 4*LIBINT2_MAX_AM_eri > 25 - 1
269  IF (25 .LE. m_max) &
270  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_25 (1) &
271  = f(25+1)
272 
273 #endif
274 #if 4*LIBINT2_MAX_AM_eri > 26 - 1
275  IF (26 .LE. m_max) &
276  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_26 (1) &
277  = f(26+1)
278 
279 #endif
280 #if 4*LIBINT2_MAX_AM_eri > 27 - 1
281  IF (27 .LE. m_max) &
282  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_27 (1) &
283  = f(27+1)
284 
285 #endif
286 #if 4*LIBINT2_MAX_AM_eri > 28 - 1
287  IF (28 .LE. m_max) &
288  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_28 (1) &
289  = f(28+1)
290 
291 #endif
292 #if 4*LIBINT2_MAX_AM_eri > 29 - 1
293  IF (29 .LE. m_max) &
294  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_29 (1) &
295  = f(29+1)
296 
297 #endif
298 #if 4*LIBINT2_MAX_AM_eri > 30 - 1
299  IF (30 .LE. m_max) &
300  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_30 (1) &
301  = f(30+1)
302 
303 #endif
304 #if 4*LIBINT2_MAX_AM_eri > 31 - 1
305  IF (31 .LE. m_max) &
306  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_31 (1) &
307  = f(31+1)
308 
309 #endif
310 
311 #else
312  mark_used(libint)
313  mark_used(a)
314  mark_used(b)
315  mark_used(c)
316  mark_used(d)
317  mark_used(p)
318  mark_used(q)
319  mark_used(w)
320  mark_used(zetainv)
321  mark_used(etainv)
322  mark_used(zetapetainv)
323  mark_used(rho)
324  mark_used(m_max)
325  mark_used(f)
326 
327  cpabort("This CP2K executable has not been linked against the required library libint.")
328 #endif
329 
330  END SUBROUTINE
331 
332  SUBROUTINE cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, &
333  ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
334  TYPE(cp_libint_t) :: libint
335  REAL(kind=dp), INTENT(IN), DIMENSION(3) :: a, b, c, d, p, q, w
336  REAL(kind=dp), INTENT(IN) :: zeta_a, zeta_b, zeta_c, zeta_d, zetainv, etainv, zetapetainv, rho
337 
338  INTEGER, INTENT(IN) :: m_max
339  REAL(kind=dp), DIMENSION(:) :: f
340 
341 #if(__LIBINT)
342  REAL(kind=dp) :: gammap, gammaq, gammapq, rhop, rhoq
343  libint%prv(1)%AB_x(1) = a(1) - b(1)
344  libint%prv(1)%AB_y(1) = a(2) - b(2)
345  libint%prv(1)%AB_z(1) = a(3) - b(3)
346 
347  libint%prv(1)%CD_x(1) = c(1) - d(1)
348  libint%prv(1)%CD_y(1) = c(2) - d(2)
349  libint%prv(1)%CD_z(1) = c(3) - d(3)
350 
351  libint%prv(1)%PA_x(1) = p(1) - a(1)
352  libint%prv(1)%PA_y(1) = p(2) - a(2)
353  libint%prv(1)%PA_z(1) = p(3) - a(3)
354 
355  libint%prv(1)%PB_x(1) = p(1) - b(1)
356  libint%prv(1)%PB_y(1) = p(2) - b(2)
357  libint%prv(1)%PB_z(1) = p(3) - b(3)
358 
359  libint%prv(1)%QC_x(1) = q(1) - c(1)
360  libint%prv(1)%QC_y(1) = q(2) - c(2)
361  libint%prv(1)%QC_z(1) = q(3) - c(3)
362 
363  libint%prv(1)%WP_x(1) = w(1) - p(1)
364  libint%prv(1)%WP_y(1) = w(2) - p(2)
365  libint%prv(1)%WP_z(1) = w(3) - p(3)
366 
367  libint%prv(1)%WQ_x(1) = w(1) - q(1)
368  libint%prv(1)%WQ_y(1) = w(2) - q(2)
369  libint%prv(1)%WQ_z(1) = w(3) - q(3)
370 
371  libint%prv(1)%two_alpha0_bra(1) = 2.0_dp*zeta_a
372  libint%prv(1)%two_alpha0_ket(1) = 2.0_dp*zeta_b
373  libint%prv(1)%two_alpha1_ket(1) = 2.0_dp*zeta_d
374 
375  gammap = zeta_a + zeta_b
376  gammaq = zeta_c + zeta_d
377  gammapq = gammap*gammaq/(gammap + gammaq)
378  libint%prv(1)%alpha1_rho_over_zeta2(1) = zeta_a*gammapq/(gammap*gammap)
379  libint%prv(1)%alpha2_rho_over_zeta2(1) = zeta_b*gammapq/(gammap*gammap)
380  libint%prv(1)%alpha4_rho_over_eta2(1) = zeta_d*gammapq/(gammaq*gammaq)
381  libint%prv(1)%alpha1_over_zetapluseta(1) = zeta_a/(gammap + gammaq)
382  libint%prv(1)%alpha2_over_zetapluseta(1) = zeta_b/(gammap + gammaq)
383  libint%prv(1)%alpha4_over_zetapluseta(1) = zeta_d/(gammap + gammaq)
384 
385  rhop = zeta_a*zeta_b/gammap
386  rhoq = zeta_c*zeta_d/gammaq
387  libint%prv(1)%rho12_over_alpha1(1) = rhop/zeta_a
388 
389  libint%prv(1)%rho34_over_alpha3(1) = rhoq/zeta_c
390 
391  libint%prv(1)%oo2z(1) = 0.5_dp*zetainv
392  libint%prv(1)%oo2e(1) = 0.5_dp*etainv
393  libint%prv(1)%oo2ze(1) = 0.5_dp*zetapetainv
394  libint%prv(1)%roz(1) = rho*zetainv
395  libint%prv(1)%roe(1) = rho*etainv
396 
397 #if 4*LIBINT2_MAX_AM_eri > 0 - 1
398  IF (0 .LE. m_max) &
399  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0 (1) & ! ERROR: __LIBINT_MAX_AM is too large
400  = f(0+1)
401 #endif
402 #if 4*LIBINT2_MAX_AM_eri > 1 - 1
403  IF (1 .LE. m_max) &
404  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_1 (1) & ! ERROR: __LIBINT_MAX_AM is too large
405  = f(1+1)
406 #endif
407 #if 4*LIBINT2_MAX_AM_eri > 2 - 1
408  IF (2 .LE. m_max) &
409  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_2 (1) & ! ERROR: __LIBINT_MAX_AM is too large
410  = f(2+1)
411 #endif
412 #if 4*LIBINT2_MAX_AM_eri > 3 - 1
413  IF (3 .LE. m_max) &
414  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_3 (1) & ! ERROR: __LIBINT_MAX_AM is too large
415  = f(3+1)
416 #endif
417 #if 4*LIBINT2_MAX_AM_eri > 4 - 1
418  IF (4 .LE. m_max) &
419  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_4 (1) & ! ERROR: __LIBINT_MAX_AM is too large
420  = f(4+1)
421 #endif
422 #if 4*LIBINT2_MAX_AM_eri > 5 - 1
423  IF (5 .LE. m_max) &
424  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_5 (1) & ! ERROR: __LIBINT_MAX_AM is too large
425  = f(5+1)
426 #endif
427 #if 4*LIBINT2_MAX_AM_eri > 6 - 1
428  IF (6 .LE. m_max) &
429  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_6 (1) & ! ERROR: __LIBINT_MAX_AM is too large
430  = f(6+1)
431 #endif
432 #if 4*LIBINT2_MAX_AM_eri > 7 - 1
433  IF (7 .LE. m_max) &
434  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_7 (1) & ! ERROR: __LIBINT_MAX_AM is too large
435  = f(7+1)
436 #endif
437 #if 4*LIBINT2_MAX_AM_eri > 8 - 1
438  IF (8 .LE. m_max) &
439  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_8 (1) & ! ERROR: __LIBINT_MAX_AM is too large
440  = f(8+1)
441 #endif
442 #if 4*LIBINT2_MAX_AM_eri > 9 - 1
443  IF (9 .LE. m_max) &
444  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_9 (1) & ! ERROR: __LIBINT_MAX_AM is too large
445  = f(9+1)
446 #endif
447 #if 4*LIBINT2_MAX_AM_eri > 10 - 1
448  IF (10 .LE. m_max) &
449  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_10 (1) & ! ERROR: __LIBINT_MAX_AM is too large
450  = f(10+1)
451 #endif
452 #if 4*LIBINT2_MAX_AM_eri > 11 - 1
453  IF (11 .LE. m_max) &
454  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_11 (1) & ! ERROR: __LIBINT_MAX_AM is too large
455  = f(11+1)
456 #endif
457 #if 4*LIBINT2_MAX_AM_eri > 12 - 1
458  IF (12 .LE. m_max) &
459  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_12 (1) & ! ERROR: __LIBINT_MAX_AM is too large
460  = f(12+1)
461 #endif
462 #if 4*LIBINT2_MAX_AM_eri > 13 - 1
463  IF (13 .LE. m_max) &
464  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_13 (1) & ! ERROR: __LIBINT_MAX_AM is too large
465  = f(13+1)
466 #endif
467 #if 4*LIBINT2_MAX_AM_eri > 14 - 1
468  IF (14 .LE. m_max) &
469  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_14 (1) & ! ERROR: __LIBINT_MAX_AM is too large
470  = f(14+1)
471 #endif
472 #if 4*LIBINT2_MAX_AM_eri > 15 - 1
473  IF (15 .LE. m_max) &
474  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_15 (1) & ! ERROR: __LIBINT_MAX_AM is too large
475  = f(15+1)
476 #endif
477 #if 4*LIBINT2_MAX_AM_eri > 16 - 1
478  IF (16 .LE. m_max) &
479  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_16 (1) & ! ERROR: __LIBINT_MAX_AM is too large
480  = f(16+1)
481 #endif
482 #if 4*LIBINT2_MAX_AM_eri > 17 - 1
483  IF (17 .LE. m_max) &
484  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_17 (1) & ! ERROR: __LIBINT_MAX_AM is too large
485  = f(17+1)
486 #endif
487 #if 4*LIBINT2_MAX_AM_eri > 18 - 1
488  IF (18 .LE. m_max) &
489  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_18 (1) & ! ERROR: __LIBINT_MAX_AM is too large
490  = f(18+1)
491 #endif
492 #if 4*LIBINT2_MAX_AM_eri > 19 - 1
493  IF (19 .LE. m_max) &
494  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_19 (1) & ! ERROR: __LIBINT_MAX_AM is too large
495  = f(19+1)
496 #endif
497 #if 4*LIBINT2_MAX_AM_eri > 20 - 1
498  IF (20 .LE. m_max) &
499  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_20 (1) & ! ERROR: __LIBINT_MAX_AM is too large
500  = f(20+1)
501 #endif
502 #if 4*LIBINT2_MAX_AM_eri > 21 - 1
503  IF (21 .LE. m_max) &
504  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_21 (1) & ! ERROR: __LIBINT_MAX_AM is too large
505  = f(21+1)
506 #endif
507 #if 4*LIBINT2_MAX_AM_eri > 22 - 1
508  IF (22 .LE. m_max) &
509  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_22 (1) & ! ERROR: __LIBINT_MAX_AM is too large
510  = f(22+1)
511 #endif
512 #if 4*LIBINT2_MAX_AM_eri > 23 - 1
513  IF (23 .LE. m_max) &
514  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_23 (1) & ! ERROR: __LIBINT_MAX_AM is too large
515  = f(23+1)
516 #endif
517 #if 4*LIBINT2_MAX_AM_eri > 24 - 1
518  IF (24 .LE. m_max) &
519  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_24 (1) & ! ERROR: __LIBINT_MAX_AM is too large
520  = f(24+1)
521 #endif
522 #if 4*LIBINT2_MAX_AM_eri > 25 - 1
523  IF (25 .LE. m_max) &
524  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_25 (1) & ! ERROR: __LIBINT_MAX_AM is too large
525  = f(25+1)
526 #endif
527 #if 4*LIBINT2_MAX_AM_eri > 26 - 1
528  IF (26 .LE. m_max) &
529  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_26 (1) & ! ERROR: __LIBINT_MAX_AM is too large
530  = f(26+1)
531 #endif
532 #if 4*LIBINT2_MAX_AM_eri > 27 - 1
533  IF (27 .LE. m_max) &
534  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_27 (1) & ! ERROR: __LIBINT_MAX_AM is too large
535  = f(27+1)
536 #endif
537 #if 4*LIBINT2_MAX_AM_eri > 28 - 1
538  IF (28 .LE. m_max) &
539  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_28 (1) & ! ERROR: __LIBINT_MAX_AM is too large
540  = f(28+1)
541 #endif
542 #if 4*LIBINT2_MAX_AM_eri > 29 - 1
543  IF (29 .LE. m_max) &
544  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_29 (1) & ! ERROR: __LIBINT_MAX_AM is too large
545  = f(29+1)
546 #endif
547 #if 4*LIBINT2_MAX_AM_eri > 30 - 1
548  IF (30 .LE. m_max) &
549  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_30 (1) & ! ERROR: __LIBINT_MAX_AM is too large
550  = f(30+1)
551 #endif
552 #if 4*LIBINT2_MAX_AM_eri > 31 - 1
553  IF (31 .LE. m_max) &
554  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_31 (1) & ! ERROR: __LIBINT_MAX_AM is too large
555  = f(31+1)
556 #endif
557 
558 #else
559  mark_used(libint)
560  mark_used(a)
561  mark_used(b)
562  mark_used(c)
563  mark_used(d)
564  mark_used(p)
565  mark_used(q)
566  mark_used(w)
567  mark_used(zeta_a)
568  mark_used(zeta_b)
569  mark_used(zeta_c)
570  mark_used(zeta_d)
571  mark_used(zetainv)
572  mark_used(etainv)
573  mark_used(zetapetainv)
574  mark_used(rho)
575  mark_used(m_max)
576  mark_used(f)
577  cpabort("This CP2K executable has not been linked against the required library libint.")
578 #endif
579 
580  END SUBROUTINE
581 
582  SUBROUTINE cp_libint_set_params_eri(libint, A, B, C, D, ZetaInv, EtaInv, ZetapEtaInv, Rho, P, Q, W, m_max, F)
583  TYPE(cp_libint_t) :: libint
584  REAL(kind=dp), INTENT(IN), DIMENSION(3) :: a, b, c, d, p, q, w
585  REAL(kind=dp), INTENT(IN) :: zetainv, etainv, zetapetainv, rho
586  REAL(kind=dp), DIMENSION(:) :: f
587 
588  INTEGER, INTENT(IN) :: m_max
589 
590 #if(__LIBINT)
591  libint%prv(1)%AB_x(1) = a(1) - b(1)
592  libint%prv(1)%AB_y(1) = a(2) - b(2)
593  libint%prv(1)%AB_z(1) = a(3) - b(3)
594 
595  libint%prv(1)%CD_x(1) = c(1) - d(1)
596  libint%prv(1)%CD_y(1) = c(2) - d(2)
597  libint%prv(1)%CD_z(1) = c(3) - d(3)
598 
599  libint%prv(1)%PA_x(1) = p(1) - a(1)
600  libint%prv(1)%PA_y(1) = p(2) - a(2)
601  libint%prv(1)%PA_z(1) = p(3) - a(3)
602 
603  libint%prv(1)%QC_x(1) = q(1) - c(1)
604  libint%prv(1)%QC_y(1) = q(2) - c(2)
605  libint%prv(1)%QC_z(1) = q(3) - c(3)
606 
607  libint%prv(1)%WP_x(1) = w(1) - p(1)
608  libint%prv(1)%WP_y(1) = w(2) - p(2)
609  libint%prv(1)%WP_z(1) = w(3) - p(3)
610 
611  libint%prv(1)%WQ_x(1) = w(1) - q(1)
612  libint%prv(1)%WQ_y(1) = w(2) - q(2)
613  libint%prv(1)%WQ_z(1) = w(3) - q(3)
614 
615  libint%prv(1)%oo2z(1) = 0.5_dp*zetainv
616  libint%prv(1)%oo2e(1) = 0.5_dp*etainv
617  libint%prv(1)%oo2ze(1) = 0.5_dp*zetapetainv
618  libint%prv(1)%roz(1) = rho*zetainv
619  libint%prv(1)%roe(1) = rho*etainv
620 
621 #if 4*LIBINT2_MAX_AM_eri > 0 - 1
622 
623  IF (0 .LE. m_max) &
624  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0 (1) & ! ERROR: __LIBINT_MAX_AM is too large
625  = f(0+1)
626 #endif
627 #if 4*LIBINT2_MAX_AM_eri > 1 - 1
628 
629  IF (1 .LE. m_max) &
630  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_1 (1) & ! ERROR: __LIBINT_MAX_AM is too large
631  = f(1+1)
632 #endif
633 #if 4*LIBINT2_MAX_AM_eri > 2 - 1
634 
635  IF (2 .LE. m_max) &
636  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_2 (1) & ! ERROR: __LIBINT_MAX_AM is too large
637  = f(2+1)
638 #endif
639 #if 4*LIBINT2_MAX_AM_eri > 3 - 1
640 
641  IF (3 .LE. m_max) &
642  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_3 (1) & ! ERROR: __LIBINT_MAX_AM is too large
643  = f(3+1)
644 #endif
645 #if 4*LIBINT2_MAX_AM_eri > 4 - 1
646 
647  IF (4 .LE. m_max) &
648  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_4 (1) & ! ERROR: __LIBINT_MAX_AM is too large
649  = f(4+1)
650 #endif
651 #if 4*LIBINT2_MAX_AM_eri > 5 - 1
652 
653  IF (5 .LE. m_max) &
654  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_5 (1) & ! ERROR: __LIBINT_MAX_AM is too large
655  = f(5+1)
656 #endif
657 #if 4*LIBINT2_MAX_AM_eri > 6 - 1
658 
659  IF (6 .LE. m_max) &
660  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_6 (1) & ! ERROR: __LIBINT_MAX_AM is too large
661  = f(6+1)
662 #endif
663 #if 4*LIBINT2_MAX_AM_eri > 7 - 1
664 
665  IF (7 .LE. m_max) &
666  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_7 (1) & ! ERROR: __LIBINT_MAX_AM is too large
667  = f(7+1)
668 #endif
669 #if 4*LIBINT2_MAX_AM_eri > 8 - 1
670 
671  IF (8 .LE. m_max) &
672  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_8 (1) & ! ERROR: __LIBINT_MAX_AM is too large
673  = f(8+1)
674 #endif
675 #if 4*LIBINT2_MAX_AM_eri > 9 - 1
676 
677  IF (9 .LE. m_max) &
678  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_9 (1) & ! ERROR: __LIBINT_MAX_AM is too large
679  = f(9+1)
680 #endif
681 #if 4*LIBINT2_MAX_AM_eri > 10 - 1
682 
683  IF (10 .LE. m_max) &
684  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_10 (1) & ! ERROR: __LIBINT_MAX_AM is too large
685  = f(10+1)
686 #endif
687 #if 4*LIBINT2_MAX_AM_eri > 11 - 1
688 
689  IF (11 .LE. m_max) &
690  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_11 (1) & ! ERROR: __LIBINT_MAX_AM is too large
691  = f(11+1)
692 #endif
693 #if 4*LIBINT2_MAX_AM_eri > 12 - 1
694 
695  IF (12 .LE. m_max) &
696  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_12 (1) & ! ERROR: __LIBINT_MAX_AM is too large
697  = f(12+1)
698 #endif
699 #if 4*LIBINT2_MAX_AM_eri > 13 - 1
700 
701  IF (13 .LE. m_max) &
702  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_13 (1) & ! ERROR: __LIBINT_MAX_AM is too large
703  = f(13+1)
704 #endif
705 #if 4*LIBINT2_MAX_AM_eri > 14 - 1
706 
707  IF (14 .LE. m_max) &
708  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_14 (1) & ! ERROR: __LIBINT_MAX_AM is too large
709  = f(14+1)
710 #endif
711 #if 4*LIBINT2_MAX_AM_eri > 15 - 1
712 
713  IF (15 .LE. m_max) &
714  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_15 (1) & ! ERROR: __LIBINT_MAX_AM is too large
715  = f(15+1)
716 #endif
717 #if 4*LIBINT2_MAX_AM_eri > 16 - 1
718 
719  IF (16 .LE. m_max) &
720  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_16 (1) & ! ERROR: __LIBINT_MAX_AM is too large
721  = f(16+1)
722 #endif
723 #if 4*LIBINT2_MAX_AM_eri > 17 - 1
724 
725  IF (17 .LE. m_max) &
726  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_17 (1) & ! ERROR: __LIBINT_MAX_AM is too large
727  = f(17+1)
728 #endif
729 #if 4*LIBINT2_MAX_AM_eri > 18 - 1
730 
731  IF (18 .LE. m_max) &
732  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_18 (1) & ! ERROR: __LIBINT_MAX_AM is too large
733  = f(18+1)
734 #endif
735 #if 4*LIBINT2_MAX_AM_eri > 19 - 1
736 
737  IF (19 .LE. m_max) &
738  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_19 (1) & ! ERROR: __LIBINT_MAX_AM is too large
739  = f(19+1)
740 #endif
741 #if 4*LIBINT2_MAX_AM_eri > 20 - 1
742 
743  IF (20 .LE. m_max) &
744  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_20 (1) & ! ERROR: __LIBINT_MAX_AM is too large
745  = f(20+1)
746 #endif
747 #if 4*LIBINT2_MAX_AM_eri > 21 - 1
748 
749  IF (21 .LE. m_max) &
750  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_21 (1) & ! ERROR: __LIBINT_MAX_AM is too large
751  = f(21+1)
752 #endif
753 #if 4*LIBINT2_MAX_AM_eri > 22 - 1
754 
755  IF (22 .LE. m_max) &
756  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_22 (1) & ! ERROR: __LIBINT_MAX_AM is too large
757  = f(22+1)
758 #endif
759 #if 4*LIBINT2_MAX_AM_eri > 23 - 1
760 
761  IF (23 .LE. m_max) &
762  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_23 (1) & ! ERROR: __LIBINT_MAX_AM is too large
763  = f(23+1)
764 #endif
765 #if 4*LIBINT2_MAX_AM_eri > 24 - 1
766 
767  IF (24 .LE. m_max) &
768  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_24 (1) & ! ERROR: __LIBINT_MAX_AM is too large
769  = f(24+1)
770 #endif
771 #if 4*LIBINT2_MAX_AM_eri > 25 - 1
772 
773  IF (25 .LE. m_max) &
774  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_25 (1) & ! ERROR: __LIBINT_MAX_AM is too large
775  = f(25+1)
776 #endif
777 #if 4*LIBINT2_MAX_AM_eri > 26 - 1
778 
779  IF (26 .LE. m_max) &
780  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_26 (1) & ! ERROR: __LIBINT_MAX_AM is too large
781  = f(26+1)
782 #endif
783 #if 4*LIBINT2_MAX_AM_eri > 27 - 1
784 
785  IF (27 .LE. m_max) &
786  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_27 (1) & ! ERROR: __LIBINT_MAX_AM is too large
787  = f(27+1)
788 #endif
789 #if 4*LIBINT2_MAX_AM_eri > 28 - 1
790 
791  IF (28 .LE. m_max) &
792  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_28 (1) & ! ERROR: __LIBINT_MAX_AM is too large
793  = f(28+1)
794 #endif
795 #if 4*LIBINT2_MAX_AM_eri > 29 - 1
796 
797  IF (29 .LE. m_max) &
798  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_29 (1) & ! ERROR: __LIBINT_MAX_AM is too large
799  = f(29+1)
800 #endif
801 #if 4*LIBINT2_MAX_AM_eri > 30 - 1
802 
803  IF (30 .LE. m_max) &
804  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_30 (1) & ! ERROR: __LIBINT_MAX_AM is too large
805  = f(30+1)
806 #endif
807 #if 4*LIBINT2_MAX_AM_eri > 31 - 1
808 
809  IF (31 .LE. m_max) &
810  libint%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_31 (1) & ! ERROR: __LIBINT_MAX_AM is too large
811  = f(31+1)
812 #endif
813 
814 #else
815  mark_used(libint)
816  mark_used(a)
817  mark_used(b)
818  mark_used(c)
819  mark_used(d)
820  mark_used(p)
821  mark_used(q)
822  mark_used(w)
823  mark_used(zetainv)
824  mark_used(etainv)
825  mark_used(zetapetainv)
826  mark_used(rho)
827  mark_used(m_max)
828  mark_used(f)
829  cpabort("This CP2K executable has not been linked against the required library libint.")
830 #endif
831 
832  END SUBROUTINE
833 ! **************************************************************************************************
834 !> \brief ...
835 !> \param n_d ...
836 !> \param n_c ...
837 !> \param n_b ...
838 !> \param n_a ...
839 !> \param lib ...
840 !> \param p_work ...
841 !> \param a_mysize ...
842 ! **************************************************************************************************
843  SUBROUTINE cp_libint_get_eris(n_d, n_c, n_b, n_a, lib, p_work, a_mysize)
844  INTEGER, INTENT(IN) :: n_d, n_c, n_b, n_a
845  TYPE(cp_libint_t) :: lib
846  REAL(dp), DIMENSION(:), POINTER :: p_work
847  INTEGER :: a_mysize(1)
848 
849 #if(__LIBINT)
850  PROCEDURE(libint2_build), POINTER :: pbuild
851 
852  CALL c_f_procpointer(libint2_build_eri(n_d, n_c, n_b, n_a), pbuild)
853  CALL pbuild(lib%prv)
854 
855  CALL c_f_pointer(lib%prv(1)%targets(1), p_work, shape=a_mysize)
856 #else
857  mark_used(n_d)
858  mark_used(n_c)
859  mark_used(n_b)
860  mark_used(n_a)
861  mark_used(lib)
862  mark_used(p_work)
863  mark_used(a_mysize)
864  cpabort("This CP2K executable has not been linked against the required library libint.")
865 #endif
866 
867  END SUBROUTINE cp_libint_get_eris
868 
869 ! **************************************************************************************************
870 !> \brief ...
871 !> \param n_c ...
872 !> \param n_b ...
873 !> \param n_a ...
874 !> \param lib ...
875 !> \param p_work ...
876 !> \param a_mysize ...
877 ! **************************************************************************************************
878  SUBROUTINE cp_libint_get_3eris(n_c, n_b, n_a, lib, p_work, a_mysize)
879  INTEGER, INTENT(IN) :: n_c, n_b, n_a
880  TYPE(cp_libint_t) :: lib
881  REAL(dp), DIMENSION(:), POINTER :: p_work
882  INTEGER :: a_mysize(1)
883 
884 #if(__LIBINT)
885  PROCEDURE(libint2_build), POINTER :: pbuild
886 
887  CALL c_f_procpointer(libint2_build_3eri(n_c, n_b, n_a), pbuild)
888  CALL pbuild(lib%prv)
889 
890  CALL c_f_pointer(lib%prv(1)%targets(1), p_work, shape=a_mysize)
891 #else
892  mark_used(n_c)
893  mark_used(n_b)
894  mark_used(n_a)
895  mark_used(lib)
896  mark_used(p_work)
897  mark_used(a_mysize)
898  cpabort("This CP2K executable has not been linked against the required library libint.")
899 #endif
900 
901  END SUBROUTINE cp_libint_get_3eris
902 
903 ! **************************************************************************************************
904 !> \brief ...
905 !> \param n_c ...
906 !> \param n_b ...
907 !> \param n_a ...
908 !> \param lib ...
909 !> \param p_work ...
910 !> \param a_mysize ...
911 ! **************************************************************************************************
912  SUBROUTINE cp_libint_get_3eri_derivs(n_c, n_b, n_a, lib, p_work, a_mysize)
913  INTEGER, INTENT(IN) :: n_c, n_b, n_a
914  TYPE(cp_libint_t) :: lib
915  INTEGER :: a_mysize(1)
916  REAL(dp), DIMENSION(:, :), POINTER :: p_work
917 
918 #if(__LIBINT)
919  REAL(dp), DIMENSION(:), POINTER :: p_work_tmp
920  PROCEDURE(libint2_build), POINTER :: pbuild
921  INTEGER :: i
922 
923  CALL c_f_procpointer(libint2_build_3eri1(n_c, n_b, n_a), pbuild)
924  CALL pbuild(lib%prv)
925 
926  ALLOCATE (p_work(a_mysize(1), 9))
927 
928  !Derivatives 1-3 can be obtained using translational invariance
929  DO i = 4, 9
930  NULLIFY (p_work_tmp)
931  CALL c_f_pointer(lib%prv(1)%targets(i), p_work_tmp, shape=a_mysize)
932  p_work(:, i) = p_work_tmp
933  END DO
934 #else
935  mark_used(n_c)
936  mark_used(n_b)
937  mark_used(n_a)
938  mark_used(lib)
939  mark_used(p_work)
940  mark_used(a_mysize)
941  cpabort("This CP2K executable has not been linked against the required library libint.")
942 #endif
943 
944  END SUBROUTINE cp_libint_get_3eri_derivs
945 
946 ! **************************************************************************************************
947 !> \brief ...
948 !> \param n_c ...
949 !> \param n_b ...
950 !> \param n_a ...
951 !> \param lib ...
952 !> \param p_work ...
953 !> \param a_mysize ...
954 ! **************************************************************************************************
955  SUBROUTINE cp_libint_get_2eri_derivs(n_b, n_a, lib, p_work, a_mysize)
956  INTEGER, INTENT(IN) :: n_b, n_a
957  TYPE(cp_libint_t) :: lib
958  INTEGER :: a_mysize(1)
959  REAL(dp), DIMENSION(:, :), POINTER :: p_work
960 
961 #if(__LIBINT)
962  REAL(dp), DIMENSION(:), POINTER :: p_work_tmp
963  PROCEDURE(libint2_build), POINTER :: pbuild
964  INTEGER :: i
965 
966  CALL c_f_procpointer(libint2_build_2eri1(n_b, n_a), pbuild)
967  CALL pbuild(lib%prv)
968 
969  ALLOCATE (p_work(a_mysize(1), 6))
970 
971  !Derivatives 1-3 can be obtained using translational invariance
972  DO i = 4, 6
973  NULLIFY (p_work_tmp)
974  CALL c_f_pointer(lib%prv(1)%targets(i), p_work_tmp, shape=a_mysize)
975  p_work(:, i) = p_work_tmp
976  END DO
977 #else
978  mark_used(n_b)
979  mark_used(n_a)
980  mark_used(lib)
981  mark_used(p_work)
982  mark_used(a_mysize)
983  cpabort("This CP2K executable has not been linked against the required library libint.")
984 #endif
985 
986  END SUBROUTINE cp_libint_get_2eri_derivs
987 
988 ! **************************************************************************************************
989 !> \brief ...
990 !> \param n_c ...
991 !> \param n_b ...
992 !> \param n_a ...
993 !> \param lib ...
994 !> \param p_work ...
995 !> \param a_mysize ...
996 ! **************************************************************************************************
997  SUBROUTINE cp_libint_get_2eris(n_b, n_a, lib, p_work, a_mysize)
998  INTEGER, INTENT(IN) :: n_b, n_a
999  TYPE(cp_libint_t) :: lib
1000  REAL(dp), DIMENSION(:), POINTER :: p_work
1001  INTEGER :: a_mysize(1)
1002 
1003 #if(__LIBINT)
1004  PROCEDURE(libint2_build), POINTER :: pbuild
1005 
1006  CALL c_f_procpointer(libint2_build_2eri(n_b, n_a), pbuild)
1007  CALL pbuild(lib%prv)
1008 
1009  CALL c_f_pointer(lib%prv(1)%targets(1), p_work, shape=a_mysize)
1010 #else
1011  mark_used(n_b)
1012  mark_used(n_a)
1013  mark_used(lib)
1014  mark_used(p_work)
1015  mark_used(a_mysize)
1016  cpabort("This CP2K executable has not been linked against the required library libint.")
1017 #endif
1018 
1019  END SUBROUTINE
1020 
1021 ! **************************************************************************************************
1022 !> \brief ...
1023 !> \param n_d ...
1024 !> \param n_c ...
1025 !> \param n_b ...
1026 !> \param n_a ...
1027 !> \param lib ...
1028 !> \param work_forces ...
1029 !> \param a_mysize ...
1030 ! **************************************************************************************************
1031  SUBROUTINE cp_libint_get_derivs(n_d, n_c, n_b, n_a, lib, work_forces, a_mysize)
1032  INTEGER, INTENT(IN) :: n_d, n_c, n_b, n_a
1033  TYPE(cp_libint_t) :: lib
1034  REAL(dp), DIMENSION(nco(n_a)*nco(n_b)*nco(n_c)*nco & (n_d), 12) :: work_forces
1035  INTEGER :: a_mysize(1)
1036 
1037 #if(__LIBINT)
1038  REAL(dp), DIMENSION(:), POINTER :: p_work
1039 
1040  PROCEDURE(libint2_build), POINTER :: pbuild
1041  INTEGER :: i, k
1042 #endif
1043 
1044 #if(__LIBINT)
1045  CALL c_f_procpointer(libint2_build_eri1(n_d, n_c, n_b, n_a), pbuild)
1046  CALL pbuild(lib%prv)
1047 
1048  DO k = 1, 12
1049  IF (k == 4 .OR. k == 5 .OR. k == 6) cycle
1050  CALL c_f_pointer(lib%prv(1)%targets(k), p_work, shape=a_mysize)
1051  DO i = 1, a_mysize(1)
1052  work_forces(i, k) = p_work(i)
1053  END DO
1054  END DO
1055 #else
1056  mark_used(n_d)
1057  mark_used(n_c)
1058  mark_used(n_b)
1059  mark_used(n_a)
1060  mark_used(lib)
1061  mark_used(work_forces)
1062  mark_used(a_mysize)
1063  cpabort("This CP2K executable has not been linked against the required library libint.")
1064 #endif
1065 
1066  END SUBROUTINE cp_libint_get_derivs
1067 
1068  FUNCTION get_ssss_f_val(lib)
1069  TYPE(cp_libint_t) :: lib
1070  REAL(kind=dp) :: get_ssss_f_val
1071 
1072  get_ssss_f_val = 0
1073 
1074 #if(__LIBINT)
1075  get_ssss_f_val = lib%prv(1)%f_aB_s___0__s___1___TwoPRep_s___0__s___1___Ab__up_0(1)
1076 #else
1077  mark_used(lib)
1078  get_ssss_f_val = 0.0_dp
1079  cpabort("This CP2K executable has not been linked against the required library libint.")
1080 #endif
1081 
1082  END FUNCTION
1083 
1084  SUBROUTINE cp_libint_init_eri(lib, max_am)
1085  TYPE(cp_libint_t) :: lib
1086  INTEGER :: max_am
1087 #if(__LIBINT)
1088  CALL libint2_init_eri(lib%prv, max_am, c_null_ptr)
1089 #else
1090  mark_used(lib)
1091  mark_used(max_am)
1092  cpabort("This CP2K executable has not been linked against the required library libint.")
1093 #endif
1094  END SUBROUTINE
1095 
1096  SUBROUTINE cp_libint_set_contrdepth(lib, contrdepth)
1097  TYPE(cp_libint_t) :: lib
1098  INTEGER :: contrdepth
1099 #if(__LIBINT)
1100 #if LIBINT_CONTRACTED_INTS
1101  lib%prv(1)%contrdepth = contrdepth
1102 #else
1103  mark_used(lib)
1104  mark_used(contrdepth)
1105 #endif
1106 #else
1107  mark_used(lib)
1108  mark_used(contrdepth)
1109  cpabort("This CP2K executable has not been linked against the required library libint.")
1110 #endif
1111 
1112  END SUBROUTINE
1113 
1114  SUBROUTINE cp_libint_init_eri1(lib, max_am)
1115  TYPE(cp_libint_t) :: lib
1116  INTEGER :: max_am
1117 #if(__LIBINT)
1118  CALL libint2_init_eri1(lib%prv, max_am, c_null_ptr)
1119 #else
1120  mark_used(lib)
1121  mark_used(max_am)
1122  cpabort("This CP2K executable has not been linked against the required library libint.")
1123 #endif
1124  END SUBROUTINE
1125 
1126  SUBROUTINE cp_libint_init_3eri(lib, max_am)
1127  TYPE(cp_libint_t) :: lib
1128  INTEGER :: max_am
1129 #if(__LIBINT)
1130  CALL libint2_init_3eri(lib%prv, max_am, c_null_ptr)
1131 #else
1132  mark_used(lib)
1133  mark_used(max_am)
1134  cpabort("This CP2K executable has not been linked against the required library libint.")
1135 #endif
1136  END SUBROUTINE
1137 
1138  SUBROUTINE cp_libint_init_3eri1(lib, max_am)
1139  TYPE(cp_libint_t) :: lib
1140  INTEGER :: max_am
1141 #if(__LIBINT)
1142  CALL libint2_init_3eri1(lib%prv, max_am, c_null_ptr)
1143 #else
1144  mark_used(lib)
1145  mark_used(max_am)
1146  cpabort("This CP2K executable has not been linked against the required library libint.")
1147 #endif
1148  END SUBROUTINE
1149 
1150  SUBROUTINE cp_libint_init_2eri1(lib, max_am)
1151  TYPE(cp_libint_t) :: lib
1152  INTEGER :: max_am
1153 #if(__LIBINT)
1154  CALL libint2_init_2eri1(lib%prv, max_am, c_null_ptr)
1155 #else
1156  mark_used(lib)
1157  mark_used(max_am)
1158  cpabort("This CP2K executable has not been linked against the required library libint.")
1159 #endif
1160  END SUBROUTINE
1161 
1162  SUBROUTINE cp_libint_init_2eri(lib, max_am)
1163  TYPE(cp_libint_t) :: lib
1164  INTEGER :: max_am
1165 #if(__LIBINT)
1166  CALL libint2_init_2eri(lib%prv, max_am, c_null_ptr)
1167 #else
1168  mark_used(lib)
1169  mark_used(max_am)
1170  cpabort("This CP2K executable has not been linked against the required library libint.")
1171 #endif
1172  END SUBROUTINE
1173 
1174  SUBROUTINE cp_libint_cleanup_eri(lib)
1175  TYPE(cp_libint_t) :: lib
1176 #if(__LIBINT)
1177  CALL libint2_cleanup_eri(lib%prv)
1178 #else
1179  mark_used(lib)
1180  cpabort("This CP2K executable has not been linked against the required library libint.")
1181 #endif
1182  END SUBROUTINE
1183 
1184  SUBROUTINE cp_libint_cleanup_eri1(lib)
1185  TYPE(cp_libint_t) :: lib
1186 #if(__LIBINT)
1187  CALL libint2_cleanup_eri1(lib%prv)
1188 #else
1189  mark_used(lib)
1190  cpabort("This CP2K executable has not been linked against the required library libint.")
1191 #endif
1192  END SUBROUTINE
1193 
1194  SUBROUTINE cp_libint_cleanup_3eri(lib)
1195  TYPE(cp_libint_t) :: lib
1196 #if(__LIBINT)
1197  CALL libint2_cleanup_3eri(lib%prv)
1198 #else
1199  mark_used(lib)
1200  cpabort("This CP2K executable has not been linked against the required library libint.")
1201 #endif
1202  END SUBROUTINE
1203 
1204  SUBROUTINE cp_libint_cleanup_3eri1(lib)
1205  TYPE(cp_libint_t) :: lib
1206 #if(__LIBINT)
1207  CALL libint2_cleanup_3eri1(lib%prv)
1208 #else
1209  mark_used(lib)
1210  cpabort("This CP2K executable has not been linked against the required library libint.")
1211 #endif
1212  END SUBROUTINE
1213 
1214  SUBROUTINE cp_libint_cleanup_2eri1(lib)
1215  TYPE(cp_libint_t) :: lib
1216 #if(__LIBINT)
1217  CALL libint2_cleanup_2eri1(lib%prv)
1218 #else
1219  mark_used(lib)
1220  cpabort("This CP2K executable has not been linked against the required library libint.")
1221 #endif
1222  END SUBROUTINE
1223 
1224  SUBROUTINE cp_libint_cleanup_2eri(lib)
1225  TYPE(cp_libint_t) :: lib
1226 #if(__LIBINT)
1227  CALL libint2_cleanup_2eri(lib%prv)
1228 #else
1229  mark_used(lib)
1230  cpabort("This CP2K executable has not been linked against the required library libint.")
1231 #endif
1232  END SUBROUTINE
1233 
1234  SUBROUTINE cp_libint_static_init()
1235 #if(__LIBINT)
1236  CALL libint2_static_init()
1237 #else
1238  cpabort("This CP2K executable has not been linked against the required library libint.")
1239 #endif
1240  END SUBROUTINE
1241 
1242  SUBROUTINE cp_libint_static_cleanup()
1243 #if(__LIBINT)
1244  CALL libint2_static_cleanup()
1245 #else
1246  cpabort("This CP2K executable has not been linked against the required library libint.")
1247 #endif
1248  END SUBROUTINE
1249 
1250 END MODULE libint_wrapper
1251 
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
Interface to the Libint-Library or a c++ wrapper.
subroutine, public cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
subroutine, public cp_libint_init_eri1(lib, max_am)
subroutine, public cp_libint_get_eris(n_d, n_c, n_b, n_a, lib, p_work, a_mysize)
...
real(kind=dp) function, public get_ssss_f_val(lib)
subroutine, public cp_libint_get_2eri_derivs(n_b, n_a, lib, p_work, a_mysize)
...
integer, parameter, public build_eri_size
subroutine, public cp_libint_get_3eris(n_c, n_b, n_a, lib, p_work, a_mysize)
...
subroutine, public cp_libint_cleanup_3eri1(lib)
subroutine, public cp_libint_get_2eris(n_b, n_a, lib, p_work, a_mysize)
...
integer, parameter, public prim_data_f_size
subroutine, public cp_libint_init_3eri1(lib, max_am)
subroutine, public cp_libint_cleanup_2eri1(lib)
subroutine, public cp_libint_set_params_eri_screen(libint, A, B, C, D, P, Q, W, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
subroutine, public cp_libint_init_2eri1(lib, max_am)
subroutine, public cp_libint_get_derivs(n_d, n_c, n_b, n_a, lib, work_forces, a_mysize)
...
integer, parameter, public libint_max_am
subroutine, public cp_libint_cleanup_eri1(lib)
subroutine, public cp_libint_init_2eri(lib, max_am)
subroutine, public cp_libint_get_3eri_derivs(n_c, n_b, n_a, lib, p_work, a_mysize)
...
subroutine, public cp_libint_static_cleanup()
subroutine, public cp_libint_init_3eri(lib, max_am)
integer, parameter, public build_deriv1_eri_size
subroutine, public cp_libint_init_eri(lib, max_am)
subroutine, public cp_libint_cleanup_3eri(lib)
subroutine, public cp_libint_static_init()
subroutine, public cp_libint_cleanup_eri(lib)
subroutine, public cp_libint_set_contrdepth(lib, contrdepth)
integer, parameter, public libderiv_max_am1
subroutine, public cp_libint_cleanup_2eri(lib)
subroutine, public cp_libint_set_params_eri(libint, A, B, C, D, ZetaInv, EtaInv, ZetapEtaInv, Rho, P, Q, W, m_max, F)
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nco