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