(git:374b731)
Loading...
Searching...
No Matches
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
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
68
70 PRIVATE
71#if(__LIBINT)
72 TYPE(libint_t), DIMENSION(1) :: prv
73#else
74 INTEGER :: unused = -1
75#endif
76 END TYPE
77
78CONTAINS
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
1250END 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)
...
subroutine, public cp_libint_set_params_eri(libint, a, b, c, d, zetainv, etainv, zetapetainv, rho, p, q, w, m_max, f)
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)
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nco