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