(git:374b731)
Loading...
Searching...
No Matches
ai_overlap_ppl.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 Calculation of three-center overlap integrals over Cartesian
10!> Gaussian-type functions for the second term V(ppl) of the local
11!> part of the Goedecker pseudopotential (GTH):
12!>
13!> <a|V(local)|b> = <a|V(erf) + V(ppl)|b>
14!> = <a|V(erf)|b> + <a|V(ppl)|b>
15!> = <a|-Z(eff)*erf(SQRT(2)*alpha*r)/r +
16!> (C1 + C2*(alpha*r)**2 + C3*(alpha*r)**4 +
17!> C4*(alpha*r)**6)*exp(-(alpha*r)**2/2))|b>
18!> \par Literature
19!> S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986)
20!> S. Goedecker, M. Teter and J. Hutter, Phys. Rev. B 54, 1703 (1996)
21!> C. Hartwigsen, S. Goedecker and J. Hutter, Phys. Rev. B 58, 3641 (1998)
22!> \par History
23!> - Derivatives added (17.05.2002,MK)
24!> - Complete refactoring (05.2011,jhu)
25!> \author Matthias Krack (04.10.2000)
26! **************************************************************************************************
28 USE ai_oneelectron, ONLY: os_2center,&
32 USE kinds, ONLY: dp
33 USE mathconstants, ONLY: fac,&
34 pi
35 USE orbital_pointers, ONLY: indco,&
36 ncoset
37#include "../base/base_uses.f90"
38
39 IMPLICIT NONE
40
41 PRIVATE
42
43 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_overlap_ppl'
44
45! *** Public subroutines ***
46
48
49CONTAINS
50
51! **************************************************************************************************
52!> \brief Calculation of three-center overlap integrals <a|c|b> over
53!> Cartesian Gaussian functions for the local part of the Goedecker
54!> pseudopotential (GTH). c is a primitive Gaussian-type function
55!> with a set of even angular momentum indices.
56!>
57!> <a|V(ppl)|b> = <a| (C1 + C2*(alpha*r)**2 + C3*(alpha*r)**4 +
58!> C4*(alpha*r)**6)*exp(-(alpha*r)**2/2))|b>
59!> zetc = alpha**2/2
60!>
61!> \param la_max_set ...
62!> \param la_min_set ...
63!> \param npgfa ...
64!> \param rpgfa ...
65!> \param zeta ...
66!> \param lb_max_set ...
67!> \param lb_min_set ...
68!> \param npgfb ...
69!> \param rpgfb ...
70!> \param zetb ...
71!> \param nexp_ppl ...
72!> \param alpha_ppl ...
73!> \param nct_ppl ...
74!> \param cexp_ppl ...
75!> \param rpgfc ...
76!> \param rab ...
77!> \param dab ...
78!> \param rac ...
79!> \param dac ...
80!> \param rbc ...
81!> \param dbc ...
82!> \param vab ...
83!> \param s ...
84!> \param pab ...
85!> \param force_a ...
86!> \param force_b ...
87!> \param fs ...
88!> \param hab2 The derivative of the ppl integrals according to the weighting factors deltaR
89!> \param hab2_work ...
90!> \param deltaR Weighting factors for the derivatives wrt. nuclear positions
91!> \param iatom ...
92!> \param jatom ...
93!> \param katom ...
94!> \date May 2011
95!> \author Juerg Hutter
96!> \version 1.0
97!> \note Extended by the derivatives for DFPT [Sandra Luber, Edward Ditler, 2021]
98! **************************************************************************************************
99 SUBROUTINE ppl_integral(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
100 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, nexp_ppl, alpha_ppl, nct_ppl, cexp_ppl, rpgfc, &
101 rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, &
102 hab2, hab2_work, deltaR, iatom, jatom, katom)
103 INTEGER, INTENT(IN) :: la_max_set, la_min_set, npgfa
104 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: rpgfa, zeta
105 INTEGER, INTENT(IN) :: lb_max_set, lb_min_set, npgfb
106 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: rpgfb, zetb
107 INTEGER, INTENT(IN) :: nexp_ppl
108 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: alpha_ppl
109 INTEGER, DIMENSION(:), INTENT(IN) :: nct_ppl
110 REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: cexp_ppl
111 REAL(kind=dp), INTENT(IN) :: rpgfc
112 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rab
113 REAL(kind=dp), INTENT(IN) :: dab
114 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rac
115 REAL(kind=dp), INTENT(IN) :: dac
116 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rbc
117 REAL(kind=dp), INTENT(IN) :: dbc
118 REAL(kind=dp), DIMENSION(:, :), INTENT(INOUT) :: vab
119 REAL(kind=dp), DIMENSION(:, :, :), INTENT(INOUT) :: s
120 REAL(kind=dp), DIMENSION(:, :), INTENT(IN), &
121 OPTIONAL :: pab
122 REAL(kind=dp), DIMENSION(3), INTENT(OUT), OPTIONAL :: force_a, force_b
123 REAL(kind=dp), DIMENSION(:, :, :), INTENT(INOUT), &
124 OPTIONAL :: fs, hab2, hab2_work
125 REAL(kind=dp), DIMENSION(:, :), INTENT(IN), &
126 OPTIONAL :: deltar
127 INTEGER, INTENT(IN), OPTIONAL :: iatom, jatom, katom
128
129 INTEGER :: iexp, ij, ipgf, jpgf, mmax, nexp
130 REAL(kind=dp) :: rho, sab, t, zetc
131 REAL(kind=dp), ALLOCATABLE, DIMENSION(:, :) :: auxint
132 REAL(kind=dp), DIMENSION(3) :: pci
133
134 IF (PRESENT(pab)) THEN
135 cpassert(PRESENT(force_a))
136 cpassert(PRESENT(force_b))
137 cpassert(PRESENT(fs))
138 mmax = la_max_set + lb_max_set + 2
139 force_a(:) = 0.0_dp
140 force_b(:) = 0.0_dp
141 ELSE IF (PRESENT(hab2)) THEN
142 mmax = la_max_set + lb_max_set + 2
143 ELSE
144 mmax = la_max_set + lb_max_set
145 END IF
146
147 ALLOCATE (auxint(0:mmax, npgfa*npgfb))
148 auxint = 0._dp
149
150 ! *** Calculate auxiliary integrals ***
151
152 DO ipgf = 1, npgfa
153 ! *** Screening ***
154 IF (rpgfa(ipgf) + rpgfc < dac) cycle
155 DO jpgf = 1, npgfb
156 ! *** Screening ***
157 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
158 (rpgfa(ipgf) + rpgfb(jpgf) < dab)) cycle
159 ij = (ipgf - 1)*npgfb + jpgf
160 rho = zeta(ipgf) + zetb(jpgf)
161 pci(:) = -(zeta(ipgf)*rac(:) + zetb(jpgf)*rbc(:))/rho
162 sab = exp(-(zeta(ipgf)*zetb(jpgf)/rho*dab*dab))
163 t = rho*sum(pci(:)*pci(:))
164
165 DO iexp = 1, nexp_ppl
166 nexp = nct_ppl(iexp)
167 zetc = alpha_ppl(iexp)
168 CALL ppl_aux(auxint(0:mmax, ij), mmax, t, rho, nexp, cexp_ppl(:, iexp), zetc)
169 END DO
170
171 auxint(0:mmax, ij) = sab*auxint(0:mmax, ij)
172
173 END DO
174 END DO
175
176 CALL os_3center(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
177 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, auxint, rpgfc, &
178 rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, &
179 vab2=hab2, vab2_work=hab2_work, &
180 deltar=deltar, iatom=iatom, jatom=jatom, katom=katom)
181
182 DEALLOCATE (auxint)
183
184 END SUBROUTINE ppl_integral
185! **************************************************************************************************
186!> \brief Calculation of two-center overlap integrals <a|c> over
187!> Cartesian Gaussian functions for the local part of the Goedecker
188!> pseudopotential (GTH). c is a primitive Gaussian-type function
189!> with a set of even angular momentum indices.
190!>
191!> <a|V(ppl)|b> = <a| (C1 + C2*(alpha*r)**2 + C3*(alpha*r)**4 +
192!> C4*(alpha*r)**6)*exp(-(alpha*r)**2/2))|b>
193!> zetc = alpha**2/2
194!>
195!> \param la_max_set ...
196!> \param la_min_set ...
197!> \param npgfa ...
198!> \param rpgfa ...
199!> \param zeta ...
200!> \param nexp_ppl ...
201!> \param alpha_ppl ...
202!> \param nct_ppl ...
203!> \param cexp_ppl ...
204!> \param rpgfc ...
205!> \param rac ...
206!> \param dac ...
207!> \param va ...
208!> \param dva ...
209!> \date December 2017
210!> \author Juerg Hutter
211!> \version 1.0
212! **************************************************************************************************
213 SUBROUTINE ppl_integral_ri(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
214 nexp_ppl, alpha_ppl, nct_ppl, cexp_ppl, rpgfc, &
215 rac, dac, va, dva)
216 INTEGER, INTENT(IN) :: la_max_set, la_min_set, npgfa
217 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: rpgfa, zeta
218 INTEGER, INTENT(IN) :: nexp_ppl
219 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: alpha_ppl
220 INTEGER, DIMENSION(:), INTENT(IN) :: nct_ppl
221 REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: cexp_ppl
222 REAL(kind=dp), INTENT(IN) :: rpgfc
223 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rac
224 REAL(kind=dp), INTENT(IN) :: dac
225 REAL(kind=dp), DIMENSION(:), INTENT(INOUT) :: va
226 REAL(kind=dp), DIMENSION(:, :), INTENT(INOUT), &
227 OPTIONAL :: dva
228
229 INTEGER :: i, iexp, ipgf, iw, mmax, na, nexp
230 INTEGER, DIMENSION(3) :: ani, anm, anp
231 LOGICAL :: debug
232 REAL(kind=dp) :: oint, oref, rho, t, zetc
233 REAL(kind=dp), ALLOCATABLE, DIMENSION(:, :) :: auxint
234 REAL(kind=dp), DIMENSION(3) :: doint, doref
235
236 debug = .false.
237
238 IF (PRESENT(dva)) THEN
239 mmax = la_max_set + 1
240 ELSE
241 mmax = la_max_set
242 END IF
243
244 ALLOCATE (auxint(0:mmax, npgfa))
245 auxint = 0._dp
246
247 ! *** Calculate auxiliary integrals ***
248 DO ipgf = 1, npgfa
249 IF (rpgfa(ipgf) + rpgfc < dac) cycle
250 rho = zeta(ipgf)
251 t = rho*dac*dac
252
253 DO iexp = 1, nexp_ppl
254 nexp = nct_ppl(iexp)
255 zetc = alpha_ppl(iexp)
256 CALL ppl_aux(auxint(0:mmax, ipgf), mmax, t, rho, nexp, cexp_ppl(:, iexp), zetc)
257 END DO
258
259 END DO
260
261 IF (PRESENT(dva)) THEN
262 CALL os_2center(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
263 auxint, rpgfc, rac, dac, va, dva)
264 ELSE
265 CALL os_2center(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
266 auxint, rpgfc, rac, dac, va)
267 END IF
268
269 DEALLOCATE (auxint)
270
271 IF (debug) THEN
272 iw = 6
273 na = 0
274 DO ipgf = 1, npgfa
275 IF (rpgfa(ipgf) + rpgfc < dac) THEN
276 na = na + ncoset(la_max_set)
277 cycle
278 END IF
279 rho = zeta(ipgf)
280 DO i = ncoset(la_min_set - 1) + 1, ncoset(la_max_set)
281 oref = va(na + i)
282 ani(1:3) = indco(1:3, i)
283 oint = ppl_ri_test(rho, ani, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl)
284 ! test
285 IF (abs(oint - oref) > 1.0e-12_dp) THEN
286 WRITE (iw, '(A,3i2,i5,F10.4,2G24.12)') "PPL int error ", ani, la_max_set, dac, oint, oref
287 END IF
288 IF (PRESENT(dva)) THEN
289 anp = ani + (/1, 0, 0/)
290 anm = ani - (/1, 0, 0/)
291 doint(1) = 2._dp*rho*ppl_ri_test(rho, anp, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl) &
292 - ani(1)*ppl_ri_test(rho, anm, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl)
293 anp = ani + (/0, 1, 0/)
294 anm = ani - (/0, 1, 0/)
295 doint(2) = 2._dp*rho*ppl_ri_test(rho, anp, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl) &
296 - ani(2)*ppl_ri_test(rho, anm, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl)
297 anp = ani + (/0, 0, 1/)
298 anm = ani - (/0, 0, 1/)
299 doint(3) = 2._dp*rho*ppl_ri_test(rho, anp, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl) &
300 - ani(3)*ppl_ri_test(rho, anm, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl)
301 doref(1:3) = dva(na + i, 1:3)
302 IF (any(abs(doint - doref) > 1.0e-6_dp)) THEN
303 WRITE (iw, '(A,3i2,i5,F10.4,2G24.12)') " PPL dint error ", &
304 ani, la_max_set, dac, sum(abs(doint)), sum(abs(doref))
305 END IF
306 END IF
307 END DO
308 na = na + ncoset(la_max_set)
309 END DO
310 END IF
311
312 END SUBROUTINE ppl_integral_ri
313
314! **************************************************************************************************
315!> \brief ...
316!> \param rho ...
317!> \param ani ...
318!> \param rac ...
319!> \param nexp_ppl ...
320!> \param nct_ppl ...
321!> \param alpha_ppl ...
322!> \param cexp_ppl ...
323!> \return ...
324! **************************************************************************************************
325 FUNCTION ppl_ri_test(rho, ani, rac, nexp_ppl, nct_ppl, alpha_ppl, cexp_ppl) RESULT(oint)
326 REAL(kind=dp), INTENT(IN) :: rho
327 INTEGER, DIMENSION(3), INTENT(IN) :: ani
328 REAL(kind=dp), DIMENSION(3), INTENT(IN) :: rac
329 INTEGER, INTENT(IN) :: nexp_ppl
330 INTEGER, DIMENSION(:), INTENT(IN) :: nct_ppl
331 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: alpha_ppl
332 REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: cexp_ppl
333 REAL(kind=dp) :: oint
334
335 INTEGER :: iexp, nexp, ni
336 REAL(kind=dp) :: cn, zetc
337 REAL(kind=dp), DIMENSION(3) :: ra
338
339 oint = 0.0_dp
340 ra = 0.0_dp
341 DO iexp = 1, nexp_ppl
342 nexp = nct_ppl(iexp)
343 zetc = alpha_ppl(iexp)
344 CALL init_os_overlap2(rho, zetc, ra, -rac)
345 DO ni = 1, nexp
346 cn = cexp_ppl(ni, iexp)
347 SELECT CASE (ni)
348 CASE (1)
349 oint = oint + cn*os_overlap2(ani, (/0, 0, 0/))
350 CASE (2)
351 oint = oint + cn*os_overlap2(ani, (/2, 0, 0/))
352 oint = oint + cn*os_overlap2(ani, (/0, 2, 0/))
353 oint = oint + cn*os_overlap2(ani, (/0, 0, 2/))
354 CASE (3)
355 oint = oint + cn*os_overlap2(ani, (/4, 0, 0/))
356 oint = oint + cn*os_overlap2(ani, (/0, 4, 0/))
357 oint = oint + cn*os_overlap2(ani, (/0, 0, 4/))
358 oint = oint + 2.0_dp*cn*os_overlap2(ani, (/2, 2, 0/))
359 oint = oint + 2.0_dp*cn*os_overlap2(ani, (/0, 2, 2/))
360 oint = oint + 2.0_dp*cn*os_overlap2(ani, (/2, 0, 2/))
361 CASE (4)
362 oint = oint + cn*os_overlap2(ani, (/6, 0, 0/))
363 oint = oint + cn*os_overlap2(ani, (/0, 6, 0/))
364 oint = oint + cn*os_overlap2(ani, (/0, 0, 6/))
365 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/4, 2, 0/))
366 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/4, 0, 2/))
367 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/2, 4, 0/))
368 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/0, 4, 2/))
369 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/2, 0, 4/))
370 oint = oint + 3.0_dp*cn*os_overlap2(ani, (/0, 2, 4/))
371 oint = oint + 6.0_dp*cn*os_overlap2(ani, (/2, 2, 2/))
372 CASE DEFAULT
373 cpabort("OVERLAP_PPL")
374 END SELECT
375 END DO
376 END DO
377
378 END FUNCTION ppl_ri_test
379
380! **************************************************************************************************
381!> \brief ...
382!> \param auxint ...
383!> \param mmax ...
384!> \param t ...
385!> \param rho ...
386!> \param nexp_ppl ...
387!> \param cexp_ppl ...
388!> \param zetc ...
389! **************************************************************************************************
390 SUBROUTINE ppl_aux(auxint, mmax, t, rho, nexp_ppl, cexp_ppl, zetc)
391 INTEGER, INTENT(IN) :: mmax
392 REAL(kind=dp), DIMENSION(0:mmax) :: auxint
393 REAL(kind=dp), INTENT(IN) :: t, rho
394 INTEGER, INTENT(IN) :: nexp_ppl
395 REAL(kind=dp), DIMENSION(:), INTENT(IN) :: cexp_ppl
396 REAL(kind=dp), INTENT(IN) :: zetc
397
398 INTEGER :: i, j, ke, kp, pmax
399 REAL(kind=dp) :: a2, a3, a4, cc, f, q, q2, q4, q6, rho2, &
400 rho3, t2, t3
401 REAL(kind=dp), DIMENSION(0:6) :: polder
402 REAL(kind=dp), DIMENSION(0:mmax) :: expder
403
404 cpassert(nexp_ppl > 0)
405 q = rho + zetc
406 polder = 0._dp
407 pmax = 0
408 IF (nexp_ppl > 0) THEN
409 polder(0) = polder(0) + cexp_ppl(1)
410 pmax = 0
411 END IF
412 IF (nexp_ppl > 1) THEN
413 q2 = q*q
414 a2 = 0.5_dp/q2*cexp_ppl(2)
415 polder(0) = polder(0) + a2*(2._dp*rho*t + 3._dp*q)
416 polder(1) = polder(1) - a2*2._dp*rho
417 pmax = 1
418 END IF
419 IF (nexp_ppl > 2) THEN
420 q4 = q2*q2
421 rho2 = rho*rho
422 t2 = t*t
423 a3 = 0.25_dp/q4*cexp_ppl(3)
424 polder(0) = polder(0) + a3*(4._dp*rho2*t2 + 20._dp*rho*t*q + 15._dp*q2)
425 polder(1) = polder(1) - a3*(8._dp*rho2*t + 20._dp*rho*q)
426 polder(2) = polder(2) + a3*8._dp*rho2
427 pmax = 2
428 END IF
429 IF (nexp_ppl > 3) THEN
430 q6 = q4*q2
431 rho3 = rho2*rho
432 t3 = t2*t
433 a4 = 0.125_dp/q6*cexp_ppl(4)
434 polder(0) = polder(0) + a4*(8._dp*rho3*t3 + 84._dp*rho2*t2*q + 210._dp*rho*t*q2 + 105._dp*q*q2)
435 polder(1) = polder(1) - a4*(24._dp*rho3*t2 + 168._dp*rho2*t*q + 210._dp*rho*q2)
436 polder(2) = polder(2) + a4*(48._dp*rho3*t + 168._dp*rho2*q)
437 polder(3) = polder(3) - a4*48_dp*rho3
438 pmax = 3
439 END IF
440 IF (nexp_ppl > 4) THEN
441 cpabort("nexp_ppl > 4")
442 END IF
443
444 f = zetc/q
445 cc = (pi/q)**1.5_dp*exp(-t*f)
446
447 IF (mmax >= 0) expder(0) = cc
448 DO i = 1, mmax
449 expder(i) = f*expder(i - 1)
450 END DO
451
452 DO i = 0, mmax
453 DO j = 0, min(i, pmax)
454 kp = j
455 ke = i - j
456 auxint(i) = auxint(i) + expder(ke)*polder(kp)*choose(i, j)
457 END DO
458 END DO
459
460 END SUBROUTINE ppl_aux
461! **************************************************************************************************
462!> \brief ...
463!> \param n ...
464!> \param k ...
465!> \return ...
466! **************************************************************************************************
467 FUNCTION choose(n, k)
468
469 INTEGER, INTENT(IN) :: n, k
470 REAL(kind=dp) :: choose
471
472 IF (n >= k) THEN
473 choose = real(nint(fac(n)/(fac(k)*fac(n - k))), kind=dp)
474 ELSE
475 choose = 0.0_dp
476 END IF
477
478 END FUNCTION choose
479! **************************************************************************************************
480
481END MODULE ai_overlap_ppl
Calculation of general three-center integrals over Cartesian Gaussian-type functions and a spherical ...
subroutine, public os_3center(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, auxint, rpgfc, rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, vab2, vab2_work, deltar, iatom, jatom, katom)
Calculation of three-center integrals <a|c|b> over Cartesian Gaussian functions and a spherical poten...
subroutine, public os_2center(la_max_set, la_min_set, npgfa, rpgfa, zeta, auxint, rpgfc, rac, dac, va, dva)
Calculation of two-center integrals <a|c> over Cartesian Gaussian functions and a spherical potential...
Two-center overlap integrals over Cartesian Gaussian-type functions.
subroutine, public init_os_overlap2(ya, yb, ra, rb)
Calculation of overlap integrals over Cartesian Gaussian-type functions.
recursive real(dp) function, public os_overlap2(an, bn)
...
Calculation of three-center overlap integrals over Cartesian Gaussian-type functions for the second t...
subroutine, public ppl_integral(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, nexp_ppl, alpha_ppl, nct_ppl, cexp_ppl, rpgfc, rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, hab2, hab2_work, deltar, iatom, jatom, katom)
Calculation of three-center overlap integrals <a|c|b> over Cartesian Gaussian functions for the local...
subroutine, public ppl_integral_ri(la_max_set, la_min_set, npgfa, rpgfa, zeta, nexp_ppl, alpha_ppl, nct_ppl, cexp_ppl, rpgfc, rac, dac, va, dva)
Calculation of two-center overlap integrals <a|c> over Cartesian Gaussian functions for the local par...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
real(kind=dp), dimension(0:maxfac), parameter, public fac
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :), allocatable, public indco