(git:e7e05ae)
ai_onecenter.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 ! Calculates atomic integrals over unnormalized spherical Gaussian functions
10 !-----------------------------------------------------------------------------!
11 !
12 ! phi(r) = r^l * exp[-p*r^2] Ylm
13 !
14 !-----------------------------------------------------------------------------!
15 ! Calculates atomic integrals over normalized Slater type functions
16 !-----------------------------------------------------------------------------!
17 !
18 ! phi(r) = N(nlm) r^(n-1) * exp[-p*r] Ylm
19 ! N(nlm) = [(2n)!]^(-1/2) (2p)^(n+1/2)
20 !
21 !-----------------------------------------------------------------------------!
22 ! Calculates atomic integrals over spherical numerical functions
23 !-----------------------------------------------------------------------------!
24 !
25 ! phi(r) = R(r) Ylm
26 !
27 !-----------------------------------------------------------------------------!
29 
30  USE kinds, ONLY: dp
31  USE mathconstants, ONLY: dfac,&
32  fac,&
33  gamma0,&
34  gamma1,&
35  pi
36 #include "../base/base_uses.f90"
37 
38  IMPLICIT NONE
39 
40  PRIVATE
41 
42  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_onecenter'
43 
48 
49 CONTAINS
50 
51 !------------------------------------------------------------------------------
52 !
53 ! S(l,pq) = pi^(1/2)*(2*l+1)!! / 2^(l+2) / (p+q)^(l+1.5)
54 !
55 !------------------------------------------------------------------------------
56 ! **************************************************************************************************
57 !> \brief ...
58 !> \param smat ...
59 !> \param l ...
60 !> \param pa ...
61 !> \param pb ...
62 ! **************************************************************************************************
63  SUBROUTINE sg_overlap(smat, l, pa, pb)
64 
65  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: smat
66  INTEGER, INTENT(IN) :: l
67  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
68 
69  INTEGER :: ip, iq, m, n
70  REAL(kind=dp) :: el, spi
71 
72  n = SIZE(pa)
73  m = SIZE(pb)
74 
75  cpassert(.NOT. (n > SIZE(smat, 1) .OR. m > SIZE(smat, 2)))
76 
77  spi = sqrt(pi)/2.0_dp**(l + 2)*dfac(2*l + 1)
78  el = real(l, dp) + 1.5_dp
79 
80  DO iq = 1, m
81  DO ip = 1, n
82  smat(ip, iq) = spi/(pa(ip) + pb(iq))**el
83  END DO
84  END DO
85 
86  END SUBROUTINE sg_overlap
87 
88 !------------------------------------------------------------------------------
89 !
90 ! T(l,pq) = (2l+3)!! pi^(1/2)/2^(l+2) [pq/(p+q)^(l+2.5)]
91 !
92 !------------------------------------------------------------------------------
93 ! **************************************************************************************************
94 !> \brief ...
95 !> \param kmat ...
96 !> \param l ...
97 !> \param pa ...
98 !> \param pb ...
99 ! **************************************************************************************************
100  SUBROUTINE sg_kinetic(kmat, l, pa, pb)
101 
102  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: kmat
103  INTEGER, INTENT(IN) :: l
104  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
105 
106  INTEGER :: ip, iq, m, n
107  REAL(kind=dp) :: spi
108 
109  n = SIZE(pa)
110  m = SIZE(pb)
111 
112  cpassert(.NOT. (n > SIZE(kmat, 1) .OR. m > SIZE(kmat, 2)))
113 
114  spi = dfac(2*l + 3)*sqrt(pi)/2.0_dp**(l + 2)
115  DO iq = 1, m
116  DO ip = 1, n
117  kmat(ip, iq) = spi*pa(ip)*pb(iq)/(pa(ip) + pb(iq))**(l + 2.5_dp)
118  END DO
119  END DO
120 
121  END SUBROUTINE sg_kinetic
122 
123 !------------------------------------------------------------------------------
124 !
125 ! U(l,pq) = l!/2 / (p+q)^(l+1)
126 !
127 !------------------------------------------------------------------------------
128 ! **************************************************************************************************
129 !> \brief ...
130 !> \param umat ...
131 !> \param l ...
132 !> \param pa ...
133 !> \param pb ...
134 ! **************************************************************************************************
135  SUBROUTINE sg_nuclear(umat, l, pa, pb)
136 
137  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
138  INTEGER, INTENT(IN) :: l
139  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
140 
141  INTEGER :: ip, iq, m, n
142  REAL(kind=dp) :: tld
143 
144  n = SIZE(pa)
145  m = SIZE(pb)
146 
147  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
148 
149  tld = 0.5_dp*fac(l)
150  DO iq = 1, m
151  DO ip = 1, n
152  umat(ip, iq) = tld/(pa(ip) + pb(iq))**(l + 1)
153  END DO
154  END DO
155 
156  END SUBROUTINE sg_nuclear
157 
158 !------------------------------------------------------------------------------
159 !
160 ! U(l,pq) = l!/2 / (p+q)^l * [4/(p+q)^2 *pq*(l+1) + 1]
161 !
162 !------------------------------------------------------------------------------
163 ! **************************************************************************************************
164 !> \brief ...
165 !> \param umat ...
166 !> \param l ...
167 !> \param pa ...
168 !> \param pb ...
169 ! **************************************************************************************************
170  SUBROUTINE sg_kinnuc(umat, l, pa, pb)
171 
172  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
173  INTEGER, INTENT(IN) :: l
174  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
175 
176  INTEGER :: ip, iq, m, n
177  REAL(kind=dp) :: ppq, pq, tld
178 
179  n = SIZE(pa)
180  m = SIZE(pb)
181 
182  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
183 
184  IF (l > 0) THEN
185  tld = 0.5_dp*fac(l)
186  DO iq = 1, m
187  DO ip = 1, n
188  ppq = pa(ip) + pb(iq)
189  pq = pa(ip)*pb(iq)
190  umat(ip, iq) = tld/ppq**l*(4.0_dp/ppq**2*pq*real(l + 1, dp) + 1.0_dp)
191  END DO
192  END DO
193  ELSE
194  DO iq = 1, m
195  DO ip = 1, n
196  ppq = pa(ip) + pb(iq)
197  pq = pa(ip)*pb(iq)
198  umat(ip, iq) = 2.0_dp*pq/ppq**2
199  END DO
200  END DO
201  END IF
202 
203  END SUBROUTINE sg_kinnuc
204 
205 !------------------------------------------------------------------------------
206 !
207 ! z = a/(p+q)
208 !
209 ! UP(l,pq,a) = Gamma(l+3/2)*a/SQRT(Pi)/(p+q)^(l+3/2)*
210 ! Hypergeom([1/2, 3/2 + l], [3/2], -z)
211 !
212 ! UP(l,pq,a) = a/2^(l+1)/(p+q)^(l+3/2)/(1+z)^(l+1/2) * F(z,l)
213 !
214 ! F(z,0) = 1
215 ! F(z,1) = 3 + 2*z
216 ! F(z,2) = 15 + 20*z + 8*z^2
217 ! F(z,3) = 35 + 70*z + 56*z^2 + 16*z^3
218 ! F(z,4) = 315 + 840*z + 1008*z^2 + 576*z^3 + 128*z^4
219 !
220 !------------------------------------------------------------------------------
221 ! **************************************************************************************************
222 !> \brief ...
223 !> \param upmat ...
224 !> \param l ...
225 !> \param a ...
226 !> \param pa ...
227 !> \param pb ...
228 ! **************************************************************************************************
229  SUBROUTINE sg_erf(upmat, l, a, pa, pb)
230 
231  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: upmat
232  INTEGER, INTENT(IN) :: l
233  REAL(kind=dp), INTENT(IN) :: a
234  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
235 
236  INTEGER :: handle, ip, iq, m, n
237  REAL(kind=dp) :: a2, fpol, pq, tld, z, z2
238 
239  CALL timeset("sg_erf", handle)
240 
241  n = SIZE(pa)
242  m = SIZE(pb)
243 
244  cpassert(.NOT. (n > SIZE(upmat, 1) .OR. m > SIZE(upmat, 2)))
245 
246  a2 = a*a
247  tld = a/2._dp**(l + 1)
248  DO iq = 1, m
249  DO ip = 1, n
250  pq = pa(ip) + pb(iq)
251  z = a2/pq
252  upmat(ip, iq) = tld/(1._dp + z)**(l + 0.5_dp)/pq**(l + 1.5_dp)
253  END DO
254  END DO
255 
256  DO iq = 1, m
257  SELECT CASE (l)
258  CASE DEFAULT
259  cpabort("")
260  CASE (0)
261  ! nothing left to do
262  CASE (1)
263  DO ip = 1, n
264  pq = pa(ip) + pb(iq)
265  z = a2/pq
266  fpol = 2.0_dp*z + 3.0_dp
267  upmat(ip, iq) = upmat(ip, iq)*fpol
268  END DO
269  CASE (2)
270  DO ip = 1, n
271  pq = pa(ip) + pb(iq)
272  z = a2/pq
273  fpol = 8.0_dp*z*z + 20.0_dp*z + 15.0_dp
274  upmat(ip, iq) = upmat(ip, iq)*fpol
275  END DO
276  CASE (3)
277  DO ip = 1, n
278  pq = pa(ip) + pb(iq)
279  z = a2/pq
280  fpol = 16.0_dp*z*z*z + 56.0_dp*z*z + 70.0_dp*z + 35.0_dp
281  fpol = 3._dp*fpol
282  upmat(ip, iq) = upmat(ip, iq)*fpol
283  END DO
284  CASE (4)
285  DO ip = 1, n
286  pq = pa(ip) + pb(iq)
287  z = a2/pq
288  fpol = 128.0_dp*z*z*z*z + 576.0_dp*z*z*z + 1008.0_dp*z*z + 840.0_dp*z + 315.0_dp
289  fpol = 3._dp*fpol
290  upmat(ip, iq) = upmat(ip, iq)*fpol
291  END DO
292  CASE (5)
293  DO ip = 1, n
294  pq = pa(ip) + pb(iq)
295  z = a2/pq
296  fpol = 256.0_dp*z*z*z*z*z + 1408.0_dp*z*z*z*z + 3168.0_dp*z*z*z + 3696.0_dp*z*z + 2310.0_dp*z + 693.0_dp
297  fpol = 15._dp*fpol
298  upmat(ip, iq) = upmat(ip, iq)*fpol
299  END DO
300  CASE (6)
301  DO ip = 1, n
302  pq = pa(ip) + pb(iq)
303  z = a2/pq
304  z2 = z*z
305  fpol = 1024.0_dp*z2*z2*z2 + 6656.0_dp*z*z2*z2 + 18304.0_dp*z2*z2 + 27456.0_dp*z2*z + &
306  24024.0_dp*z2 + 12012.0_dp*z + 3003.0_dp
307  fpol = 45._dp*fpol
308  upmat(ip, iq) = upmat(ip, iq)*fpol
309  END DO
310  END SELECT
311  END DO
312 
313  CALL timestop(handle)
314 
315  END SUBROUTINE sg_erf
316 
317 !------------------------------------------------------------------------------
318 !
319 ! Overlap with Projectors P(l,k,rc) for k=0,1,..
320 !
321 ! P(l,k,rc) = SQRT(2)/SQRT(Gamma[l+2k+1.5])/rc^(l+2k+1.5) r^(l+2k) exp[-0.5(r/rc)^2]
322 !
323 ! SP(l,k,p,rc) = 2^(l+k+1) / SQRT(gamma[l+2k+1.5]) / rc^(l+2k+1.5)
324 ! * Gamma(l+k+1.5) / (2p+1/rc^2)^(l+k+1.5)
325 !
326 !------------------------------------------------------------------------------
327 ! **************************************************************************************************
328 !> \brief ...
329 !> \param spmat ...
330 !> \param l ...
331 !> \param p ...
332 !> \param k ...
333 !> \param rc ...
334 ! **************************************************************************************************
335  SUBROUTINE sg_proj_ol(spmat, l, p, k, rc)
336 
337  REAL(kind=dp), DIMENSION(:), INTENT(OUT) :: spmat
338  INTEGER, INTENT(IN) :: l
339  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: p
340  INTEGER, INTENT(IN) :: k
341  REAL(kind=dp), INTENT(IN) :: rc
342 
343  REAL(kind=dp) :: orc, pf
344 
345  cpassert(SIZE(spmat) >= SIZE(p))
346 
347  pf = 2._dp**(l + k + 1)*gamma1(l + k + 1)/rc**(l + 2*k + 1.5_dp)/sqrt(gamma1(l + 2*k + 1))
348  orc = 1._dp/(rc*rc)
349  spmat(:) = pf/(2._dp*p(:) + orc)**(l + k + 1.5_dp)
350 
351  END SUBROUTINE sg_proj_ol
352 
353 !------------------------------------------------------------------------------
354 !
355 ! Matrix elements for Gaussian potentials
356 !
357 ! V(k,rc) = (r/rc)^2k exp[-1/2(r/rc)^2]
358 !
359 ! VP(l,k,p+q,rc) = 2^(l+k+0.5) * rc^(2l+3) * Gamma(l+k+1.5) / (1+2rc^2(p+q))^(l+k+1.5)
360 !
361 !------------------------------------------------------------------------------
362 ! **************************************************************************************************
363 !> \brief ...
364 !> \param vpmat ...
365 !> \param k ...
366 !> \param rc ...
367 !> \param l ...
368 !> \param pa ...
369 !> \param pb ...
370 ! **************************************************************************************************
371  SUBROUTINE sg_gpot(vpmat, k, rc, l, pa, pb)
372 
373  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: vpmat
374  INTEGER, INTENT(IN) :: k
375  REAL(kind=dp), INTENT(IN) :: rc
376  INTEGER, INTENT(IN) :: l
377  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
378 
379  INTEGER :: ip, iq, m, n
380  REAL(kind=dp) :: tld
381 
382  n = SIZE(pa)
383  m = SIZE(pb)
384 
385  cpassert(.NOT. (n > SIZE(vpmat, 1) .OR. m > SIZE(vpmat, 2)))
386 
387  tld = gamma1(l + k + 1)*rc**(2*l + 3)*2._dp**(l + k + 0.5)
388 
389  DO iq = 1, m
390  DO ip = 1, n
391  vpmat(ip, iq) = tld/(1._dp + 2._dp*rc*rc*(pa(ip) + pb(iq)))**(l + k + 1.5_dp)
392  END DO
393  END DO
394 
395  END SUBROUTINE sg_gpot
396 
397 !------------------------------------------------------------------------------
398 !
399 ! G(l,k,pq) = <a|[r/rc]^2k|b>
400 ! = 0.5*Gamma(l+k+1.5)/rc^(2k)/(p+q)^(l+k+1.5)
401 !
402 !------------------------------------------------------------------------------
403 ! **************************************************************************************************
404 !> \brief ...
405 !> \param gmat ...
406 !> \param rc ...
407 !> \param k ...
408 !> \param l ...
409 !> \param pa ...
410 !> \param pb ...
411 ! **************************************************************************************************
412  SUBROUTINE sg_conf(gmat, rc, k, l, pa, pb)
413 
414  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: gmat
415  REAL(kind=dp), INTENT(IN) :: rc
416  INTEGER, INTENT(IN) :: k, l
417  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
418 
419  INTEGER :: ip, iq, m, n
420  REAL(kind=dp) :: tld
421 
422  n = SIZE(pa)
423  m = SIZE(pb)
424 
425  cpassert(.NOT. (n > SIZE(gmat, 1) .OR. m > SIZE(gmat, 2)))
426 
427  tld = 0.5_dp/rc**(2*k)*gamma1(l + k + 1)
428  DO iq = 1, m
429  DO ip = 1, n
430  gmat(ip, iq) = tld/(pa(ip) + pb(iq))**(l + k + 1.5_dp)
431  END DO
432  END DO
433 
434  END SUBROUTINE sg_conf
435 
436 !------------------------------------------------------------------------------
437 !
438 ! (plql,rl'sl')
439 !
440 !------------------------------------------------------------------------------
441 ! **************************************************************************************************
442 !> \brief ...
443 !> \param eri ...
444 !> \param nu ...
445 !> \param pa ...
446 !> \param lab ...
447 !> \param pc ...
448 !> \param lcd ...
449 ! **************************************************************************************************
450  SUBROUTINE sg_coulomb(eri, nu, pa, lab, pc, lcd)
451 
452  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: eri
453  INTEGER, INTENT(IN) :: nu
454  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
455  INTEGER, INTENT(IN) :: lab
456  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pc
457  INTEGER, INTENT(IN) :: lcd
458 
459  INTEGER :: handle, ia, ib, ic, id, jab, jcd, na, nc
460  REAL(kind=dp) :: cc1, cc2, ee, p, q, r, s, vab1, vab3, &
461  vcd1, vcd3, xab, xcd
462 
463  CALL timeset("sg_coulomb", handle)
464 
465  na = SIZE(pa)
466  nc = SIZE(pc)
467  ee = sqrt(2.0_dp*pi)/2.0_dp**(2*(lab + lcd) + 6)
468  jab = 0
469  DO ia = 1, na
470  p = pa(ia)
471  DO ib = ia, na
472  jab = jab + 1
473  q = pa(ib)
474  xab = 0.5_dp*(p + q)
475  vab1 = vgau(2*lab - nu + 1, xab)
476  vab3 = vgau(2*lab + nu + 2, xab)
477  jcd = 0
478  DO ic = 1, nc
479  r = pc(ic)
480  DO id = ic, nc
481  jcd = jcd + 1
482  s = pc(id)
483  xcd = 0.5_dp*(r + s)
484  vcd1 = vgau(2*lcd + nu + 2, xcd)
485  vcd3 = vgau(2*lcd - nu + 1, xcd)
486  cc1 = cgau(2*lab - nu + 1, 2*lcd + nu + 2, xab/xcd)
487  cc2 = cgau(2*lcd - nu + 1, 2*lab + nu + 2, xcd/xab)
488 
489  eri(jab, jcd) = ee*(cc1*vab1*vcd1 + cc2*vab3*vcd3)
490 
491  END DO
492  END DO
493  END DO
494  END DO
495 
496  CALL timestop(handle)
497 
498  END SUBROUTINE sg_coulomb
499 
500 !------------------------------------------------------------------------------
501 !
502 ! (plql',rlsl')
503 !
504 !------------------------------------------------------------------------------
505 ! **************************************************************************************************
506 !> \brief ...
507 !> \param eri ...
508 !> \param nu ...
509 !> \param pa ...
510 !> \param lac ...
511 !> \param pb ...
512 !> \param lbd ...
513 ! **************************************************************************************************
514  SUBROUTINE sg_exchange(eri, nu, pa, lac, pb, lbd)
515 
516  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: eri
517  INTEGER, INTENT(IN) :: nu
518  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
519  INTEGER, INTENT(IN) :: lac
520  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pb
521  INTEGER, INTENT(IN) :: lbd
522 
523  INTEGER :: handle, ia, ib, ic, id, jac, jbd, na, nb
524  REAL(kind=dp) :: cc1, cc2, cc3, cc4, ee, p, q, r, s, &
525  v1pr, v1ps, v1qr, v1qs, v2pr, v2ps, &
526  v2qr, v2qs, xab, xad, xbc, xcd
527 
528  CALL timeset("sg_exchange", handle)
529 
530  eri = 0.0_dp
531  na = SIZE(pa)
532  nb = SIZE(pb)
533  ee = sqrt(2.0_dp*pi)/2.0_dp**(2*(lac + lbd) + 7)
534  jac = 0
535  DO ia = 1, na
536  p = pa(ia)
537  DO ic = ia, na
538  jac = jac + 1
539  q = pa(ic)
540  jbd = 0
541  DO ib = 1, nb
542  r = pb(ib)
543  xab = 0.5_dp*(p + r)
544  xbc = 0.5_dp*(q + r)
545  DO id = ib, nb
546  jbd = jbd + 1
547  s = pb(id)
548  xcd = 0.5_dp*(q + s)
549  xad = 0.5_dp*(p + s)
550  v1pr = vgau(lac + lbd - nu + 1, xab)
551  v1qs = vgau(lac + lbd - nu + 1, xcd)
552  v1ps = vgau(lac + lbd - nu + 1, xad)
553  v1qr = vgau(lac + lbd - nu + 1, xbc)
554  v2qs = vgau(lac + lbd + nu + 2, xcd)
555  v2pr = vgau(lac + lbd + nu + 2, xab)
556  v2qr = vgau(lac + lbd + nu + 2, xbc)
557  v2ps = vgau(lac + lbd + nu + 2, xad)
558  cc1 = cgau(lac + lbd - nu + 1, lac + lbd + nu + 2, xab/xcd)
559  cc2 = cgau(lac + lbd - nu + 1, lac + lbd + nu + 2, xcd/xab)
560  cc3 = cgau(lac + lbd - nu + 1, lac + lbd + nu + 2, xad/xbc)
561  cc4 = cgau(lac + lbd - nu + 1, lac + lbd + nu + 2, xbc/xad)
562 
563  eri(jac, jbd) = ee*(v1pr*v2qs*cc1 + v1qs*v2pr*cc2 + &
564  v1ps*v2qr*cc3 + v1qr*v2ps*cc4)
565 
566  END DO
567  END DO
568  END DO
569  END DO
570 
571  CALL timestop(handle)
572 
573  END SUBROUTINE sg_exchange
574 
575 !------------------------------------------------------------------------------
576 !
577 ! erfc(a*x)/x = 1/x - erf(a*x)/x
578 !
579 !------------------------------------------------------------------------------
580 ! **************************************************************************************************
581 !> \brief ...
582 !> \param umat ...
583 !> \param l ...
584 !> \param a ...
585 !> \param pa ...
586 !> \param pb ...
587 ! **************************************************************************************************
588  SUBROUTINE sg_erfc(umat, l, a, pa, pb)
589 
590  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
591  INTEGER, INTENT(IN) :: l
592  REAL(kind=dp), INTENT(IN) :: a
593  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa, pb
594 
595  INTEGER :: ip, iq, m, n
596  REAL(kind=dp) :: tld
597 
598  n = SIZE(pa)
599  m = SIZE(pb)
600 
601  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
602 
603  CALL sg_erf(umat, l, a, pa, pb)
604 
605  tld = 0.5_dp*fac(l)
606  DO iq = 1, m
607  DO ip = 1, n
608  umat(ip, iq) = tld/(pa(ip) + pb(iq))**(l + 1) - umat(ip, iq)
609  END DO
610  END DO
611 
612  END SUBROUTINE sg_erfc
613 
614 ! ***************************************************************************************************
615 
616 ! **************************************************************************************************
617 !> \brief ...
618 !> \param n ...
619 !> \param x ...
620 !> \return ...
621 ! **************************************************************************************************
622  ELEMENTAL FUNCTION vgau(n, x) RESULT(v)
623  INTEGER, INTENT(IN) :: n
624  REAL(kind=dp), INTENT(IN) :: x
625  REAL(kind=dp) :: v
626 
627  v = dfac(n - 1)/x**(0.5_dp*(n + 1))
628 
629  END FUNCTION vgau
630 
631 ! **************************************************************************************************
632 !> \brief ...
633 !> \param a ...
634 !> \param b ...
635 !> \param t ...
636 !> \return ...
637 ! **************************************************************************************************
638  ELEMENTAL FUNCTION cgau(a, b, t) RESULT(c)
639  INTEGER, INTENT(IN) :: a, b
640  REAL(kind=dp), INTENT(IN) :: t
641  REAL(kind=dp) :: c
642 
643  INTEGER :: l
644 
645  c = 0.0_dp
646  DO l = 0, (a - 1)/2
647  c = c + (t/(1.0_dp + t))**l*dfac(2*l + b - 1)/dfac(2*l)
648  END DO
649  c = c*(1.0_dp + t)**(-0.5_dp*(b + 1))/dfac(b - 1)
650 
651  END FUNCTION cgau
652 
653 !------------------------------------------------------------------------------
654 !
655 ! S(l,pn,qm) = ( V[2n,p]*V[2m,q] )^(-1/2) * V[n+m,(p+q)/2]
656 !
657 !------------------------------------------------------------------------------
658 ! **************************************************************************************************
659 !> \brief ...
660 !> \param smat ...
661 !> \param na ...
662 !> \param pa ...
663 !> \param nb ...
664 !> \param pb ...
665 ! **************************************************************************************************
666  SUBROUTINE sto_overlap(smat, na, pa, nb, pb)
667 
668  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: smat
669  INTEGER, DIMENSION(:), INTENT(IN) :: na
670  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
671  INTEGER, DIMENSION(:), INTENT(IN) :: nb
672  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pb
673 
674  INTEGER :: ip, iq, m, n
675  REAL(kind=dp) :: vp, vpq, vq
676 
677  n = SIZE(pa)
678  m = SIZE(pb)
679 
680  cpassert(.NOT. (n > SIZE(smat, 1) .OR. m > SIZE(smat, 2)))
681 
682  DO iq = 1, m
683  vq = vsto(2*nb(iq), pb(iq))
684  DO ip = 1, n
685  vp = vsto(2*na(ip), pa(ip))
686  vpq = vsto(na(ip) + nb(iq), 0.5_dp*(pa(ip) + pb(iq)))
687  smat(ip, iq) = vpq/sqrt(vp*vq)
688  END DO
689  END DO
690 
691  END SUBROUTINE sto_overlap
692 
693 !------------------------------------------------------------------------------
694 !
695 ! T(l,pn,qm) = 0.5*p*q*( V[2n,p]*V[2m,q] )^(-1/2) * V[n+m,(p+q)/2]
696 ! -(W[l,n,p]+W[l,m,q]) * V[n+m-1,(p+q)/2]
697 ! +W[l,n,p]*W[l,m,q] * V[n+m-2,(p+q)/2]
698 !
699 !------------------------------------------------------------------------------
700 ! **************************************************************************************************
701 !> \brief ...
702 !> \param kmat ...
703 !> \param l ...
704 !> \param na ...
705 !> \param pa ...
706 !> \param nb ...
707 !> \param pb ...
708 ! **************************************************************************************************
709  SUBROUTINE sto_kinetic(kmat, l, na, pa, nb, pb)
710 
711  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: kmat
712  INTEGER, INTENT(IN) :: l
713  INTEGER, DIMENSION(:), INTENT(IN) :: na
714  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
715  INTEGER, DIMENSION(:), INTENT(IN) :: nb
716  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pb
717 
718  INTEGER :: ip, iq, m, n
719  REAL(kind=dp) :: vp, vpq, vpq1, vpq2, vq, wp, wq
720 
721  n = SIZE(pa)
722  m = SIZE(pb)
723 
724  cpassert(.NOT. (n > SIZE(kmat, 1) .OR. m > SIZE(kmat, 2)))
725 
726  DO iq = 1, m
727  vq = vsto(2*nb(iq), pb(iq))
728  wq = wsto(l, nb(iq), pb(iq))
729  DO ip = 1, n
730  vp = vsto(2*na(ip), pa(ip))
731  vpq = vsto(na(ip) + nb(iq), 0.5_dp*(pa(ip) + pb(iq)))
732  vpq1 = vsto(na(ip) + nb(iq) - 1, 0.5_dp*(pa(ip) + pb(iq)))
733  vpq2 = vsto(na(ip) + nb(iq) - 2, 0.5_dp*(pa(ip) + pb(iq)))
734  wp = wsto(l, na(ip), pa(ip))
735  kmat(ip, iq) = 0.5_dp*pa(ip)*pb(iq)/sqrt(vp*vq)* &
736  (vpq - (wp + wq)*vpq1 + wp*wq*vpq2)
737  END DO
738  END DO
739 
740  END SUBROUTINE sto_kinetic
741 
742 !------------------------------------------------------------------------------
743 !
744 ! U(l,pq) = 2( V[2n,p]*V[2m,q] )^(-1/2) * V[n+m-1,(p+q)/2]
745 !
746 !------------------------------------------------------------------------------
747 ! **************************************************************************************************
748 !> \brief ...
749 !> \param umat ...
750 !> \param na ...
751 !> \param pa ...
752 !> \param nb ...
753 !> \param pb ...
754 ! **************************************************************************************************
755  SUBROUTINE sto_nuclear(umat, na, pa, nb, pb)
756 
757  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
758  INTEGER, DIMENSION(:), INTENT(IN) :: na
759  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
760  INTEGER, DIMENSION(:), INTENT(IN) :: nb
761  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pb
762 
763  INTEGER :: ip, iq, m, n
764  REAL(kind=dp) :: vp, vpq1, vq
765 
766  n = SIZE(pa)
767  m = SIZE(pb)
768 
769  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
770 
771  DO iq = 1, m
772  vq = vsto(2*nb(iq), pb(iq))
773  DO ip = 1, n
774  vp = vsto(2*na(ip), pa(ip))
775  vpq1 = vsto(na(ip) + nb(iq) - 1, 0.5_dp*(pa(ip) + pb(iq)))
776  umat(ip, iq) = 2._dp/sqrt(vp*vq)*vpq1
777  END DO
778  END DO
779 
780  END SUBROUTINE sto_nuclear
781 
782 !------------------------------------------------------------------------------
783 !
784 ! G(l,k,pq) = <aln|[r/rc]^2k|blm>
785 ! = N(aln)*N(blm) (a+b)^(-(n+m+2k+1))/rc^2k * GAMMA(n+m+2k+1)
786 !
787 !------------------------------------------------------------------------------
788 ! **************************************************************************************************
789 !> \brief ...
790 !> \param gmat ...
791 !> \param rc ...
792 !> \param k ...
793 !> \param na ...
794 !> \param pa ...
795 !> \param nb ...
796 !> \param pb ...
797 ! **************************************************************************************************
798  SUBROUTINE sto_conf(gmat, rc, k, na, pa, nb, pb)
799 
800  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: gmat
801  REAL(kind=dp), INTENT(IN) :: rc
802  INTEGER, INTENT(IN) :: k
803  INTEGER, DIMENSION(:), INTENT(IN) :: na
804  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pa
805  INTEGER, DIMENSION(:), INTENT(IN) :: nb
806  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: pb
807 
808  INTEGER :: ip, iq, m, n
809 
810  n = SIZE(pa)
811  m = SIZE(pb)
812 
813  cpassert(.NOT. (n > SIZE(gmat, 1) .OR. m > SIZE(gmat, 2)))
814 
815  DO iq = 1, m
816  DO ip = 1, n
817  gmat(ip, iq) = (2._dp*pa(ip))**(na(ip) + 0.5_dp)/sqrt(fac(2*na(ip))) &
818  *(2._dp*pb(iq))**(nb(iq) + 0.5_dp)/sqrt(fac(2*nb(iq))) &
819  /rc**(2*k)/(pa(ip) + pb(iq))**(na(ip) + nb(iq) + 2*k + 1) &
820  *gamma0(na(ip) + nb(iq) + 2*k + 1)
821  END DO
822  END DO
823 
824  END SUBROUTINE sto_conf
825 
826 ! **************************************************************************************************
827 
828 ! **************************************************************************************************
829 !> \brief ...
830 !> \param n ...
831 !> \param x ...
832 !> \return ...
833 ! **************************************************************************************************
834  ELEMENTAL FUNCTION vsto(n, x) RESULT(v)
835  INTEGER, INTENT(IN) :: n
836  REAL(kind=dp), INTENT(IN) :: x
837  REAL(kind=dp) :: v
838 
839  v = fac(n)/x**(n + 1)
840 
841  END FUNCTION vsto
842 
843 ! **************************************************************************************************
844 !> \brief ...
845 !> \param n ...
846 !> \param m ...
847 !> \param x ...
848 !> \return ...
849 ! **************************************************************************************************
850  ELEMENTAL FUNCTION wsto(n, m, x) RESULT(w)
851  INTEGER, INTENT(IN) :: n, m
852  REAL(kind=dp), INTENT(IN) :: x
853  REAL(kind=dp) :: w
854 
855  w = 2._dp*real(m - n - 1, dp)/x
856 
857  END FUNCTION wsto
858 !------------------------------------------------------------------------------
859 !
860 ! S(l,pq) = INT(u^2 Ra(u) Rb(u))du
861 !
862 !------------------------------------------------------------------------------
863 ! **************************************************************************************************
864 !> \brief ...
865 !> \param smat ...
866 !> \param ra ...
867 !> \param rb ...
868 !> \param wr ...
869 ! **************************************************************************************************
870  SUBROUTINE num_overlap(smat, ra, rb, wr)
871 
872  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: smat
873  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, rb
874  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: wr
875 
876  INTEGER :: ip, iq, m, n
877 
878  n = SIZE(ra, 2)
879  m = SIZE(rb, 2)
880 
881  cpassert(.NOT. (n > SIZE(smat, 1) .OR. m > SIZE(smat, 2)))
882 
883  DO iq = 1, m
884  DO ip = 1, n
885  smat(ip, iq) = sum(ra(:, ip)*rb(:, iq)*wr(:))
886  END DO
887  END DO
888 
889  END SUBROUTINE num_overlap
890 
891 !------------------------------------------------------------------------------
892 !
893 ! T(l,pq) = 0.5 INT( u^2 dRa(u) dRb(u) + l(l+1) Ra(u) Rb(u))du
894 !
895 !------------------------------------------------------------------------------
896 ! **************************************************************************************************
897 !> \brief ...
898 !> \param kmat ...
899 !> \param l ...
900 !> \param ra ...
901 !> \param dra ...
902 !> \param rb ...
903 !> \param drb ...
904 !> \param r ...
905 !> \param wr ...
906 ! **************************************************************************************************
907  SUBROUTINE num_kinetic(kmat, l, ra, dra, rb, drb, r, wr)
908 
909  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: kmat
910  INTEGER, INTENT(IN) :: l
911  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, dra, rb, drb
912  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
913 
914  INTEGER :: ip, iq, m, n
915 
916  n = SIZE(ra, 2)
917  m = SIZE(rb, 2)
918 
919  cpassert(.NOT. (n > SIZE(kmat, 1) .OR. m > SIZE(kmat, 2)))
920 
921  DO iq = 1, m
922  DO ip = 1, n
923  kmat(ip, iq) = 0.5_dp*sum(wr(:)*dra(:, ip)*drb(:, iq) &
924  + wr(:)*real(l*(l + 1), dp)*ra(:, ip)*rb(:, iq)/r(:)**2)
925  END DO
926  END DO
927 
928  END SUBROUTINE num_kinetic
929 
930 !------------------------------------------------------------------------------
931 !
932 ! U(l,pq) = INT(u Ra(u) Rb(u))du
933 !
934 !------------------------------------------------------------------------------
935 ! **************************************************************************************************
936 !> \brief ...
937 !> \param umat ...
938 !> \param ra ...
939 !> \param rb ...
940 !> \param r ...
941 !> \param wr ...
942 ! **************************************************************************************************
943  SUBROUTINE num_nuclear(umat, ra, rb, r, wr)
944 
945  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
946  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, rb
947  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
948 
949  INTEGER :: ip, iq, m, n
950 
951  n = SIZE(ra, 2)
952  m = SIZE(rb, 2)
953 
954  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
955 
956  DO iq = 1, m
957  DO ip = 1, n
958  umat(ip, iq) = sum(wr(:)*ra(:, ip)*rb(:, iq)/r(:))
959  END DO
960  END DO
961 
962  END SUBROUTINE num_nuclear
963 
964 !------------------------------------------------------------------------------
965 !
966 ! U(l,pq) = INT(u dRa(u) dRb(u))du + l(l+1) * INT(Ra(u) Rb(u) / u)du
967 !
968 !------------------------------------------------------------------------------
969 ! **************************************************************************************************
970 !> \brief ...
971 !> \param umat ...
972 !> \param l ...
973 !> \param ra ...
974 !> \param dra ...
975 !> \param rb ...
976 !> \param drb ...
977 !> \param r ...
978 !> \param wr ...
979 ! **************************************************************************************************
980  SUBROUTINE num_kinnuc(umat, l, ra, dra, rb, drb, r, wr)
981 
982  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: umat
983  INTEGER, INTENT(IN) :: l
984  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, dra, rb, drb
985  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
986 
987  INTEGER :: ip, iq, m, n
988 
989  n = SIZE(ra, 2)
990  m = SIZE(rb, 2)
991 
992  cpassert(.NOT. (n > SIZE(umat, 1) .OR. m > SIZE(umat, 2)))
993 
994  DO iq = 1, m
995  DO ip = 1, n
996  umat(ip, iq) = sum(wr(:)*dra(:, ip)*drb(:, iq)/r(:) &
997  + wr(:)*real(l*(l + 1), dp)*ra(:, ip)*rb(:, iq)/r(:)**3)
998  END DO
999  END DO
1000 
1001  END SUBROUTINE num_kinnuc
1002 
1003 !------------------------------------------------------------------------------
1004 !
1005 ! U(l,pq) = INT(u erf(a*u) Ra(u) Rb(u))du
1006 !
1007 !------------------------------------------------------------------------------
1008 ! **************************************************************************************************
1009 !> \brief ...
1010 !> \param upmat ...
1011 !> \param a ...
1012 !> \param ra ...
1013 !> \param rb ...
1014 !> \param r ...
1015 !> \param wr ...
1016 ! **************************************************************************************************
1017  SUBROUTINE num_erf(upmat, a, ra, rb, r, wr)
1018 
1019  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: upmat
1020  REAL(kind=dp), INTENT(IN) :: a
1021  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, rb
1022  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
1023 
1024  INTEGER :: ip, iq, k, m, n
1025 
1026  n = SIZE(ra, 2)
1027  m = SIZE(rb, 2)
1028 
1029  cpassert(.NOT. (n > SIZE(upmat, 1) .OR. m > SIZE(upmat, 2)))
1030 
1031  DO iq = 1, m
1032  DO ip = 1, n
1033  upmat(ip, iq) = 0._dp
1034  DO k = 1, SIZE(r)
1035  upmat(ip, iq) = upmat(ip, iq) + &
1036  (wr(k)*ra(k, ip)*rb(k, iq)*erf(a*r(k))/r(k))
1037  END DO
1038  END DO
1039  END DO
1040 
1041  END SUBROUTINE num_erf
1042 
1043 !------------------------------------------------------------------------------
1044 !
1045 ! Overlap with Projectors P(l,k,rc) for k=0,1,..
1046 !
1047 ! P(l,k,rc) = SQRT(2)/SQRT(Gamma[l+2k+1.5])/rc^(l+2k+1.5) r^(l+2k) exp[-0.5(r/rc)^2]
1048 !
1049 ! SP(l,k,p,rc) = INT(u^2 R(u) P(u))du
1050 !
1051 !------------------------------------------------------------------------------
1052 ! **************************************************************************************************
1053 !> \brief ...
1054 !> \param spmat ...
1055 !> \param l ...
1056 !> \param ra ...
1057 !> \param k ...
1058 !> \param rc ...
1059 !> \param r ...
1060 !> \param wr ...
1061 ! **************************************************************************************************
1062  SUBROUTINE num_proj_ol(spmat, l, ra, k, rc, r, wr)
1063 
1064  REAL(kind=dp), DIMENSION(:), INTENT(OUT) :: spmat
1065  INTEGER, INTENT(IN) :: l
1066  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra
1067  INTEGER, INTENT(IN) :: k
1068  REAL(kind=dp), INTENT(IN) :: rc
1069  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
1070 
1071  INTEGER :: ip, n
1072  REAL(kind=dp) :: pf
1073  REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: pro
1074 
1075  n = SIZE(ra, 2)
1076  cpassert(SIZE(spmat) >= n)
1077 
1078  ALLOCATE (pro(n))
1079 
1080  pf = sqrt(2._dp)/sqrt(gamma1(l + 2*k + 1))/rc**(l + 2*k + 1.5_dp)
1081  pro(:) = pf*r(:)**(l + 2*k)*exp(-0.5_dp*(r(:)/rc)**2)
1082 
1083  DO ip = 1, n
1084  spmat(ip) = sum(wr(:)*pro(:)*ra(:, ip))
1085  END DO
1086 
1087  DEALLOCATE (pro)
1088 
1089  END SUBROUTINE num_proj_ol
1090 
1091 !------------------------------------------------------------------------------
1092 !
1093 ! Matrix elements for Gaussian potentials
1094 !
1095 ! V(k,rc) = (r/rc)^2k exp[-1/2(r/rc)^2]
1096 !
1097 ! VP(l,k,p+q,rc) = INT(u^2 V(u) Ra(u) Rb(u))du
1098 !
1099 !------------------------------------------------------------------------------
1100 ! **************************************************************************************************
1101 !> \brief ...
1102 !> \param vpmat ...
1103 !> \param k ...
1104 !> \param rc ...
1105 !> \param ra ...
1106 !> \param rb ...
1107 !> \param r ...
1108 !> \param wr ...
1109 ! **************************************************************************************************
1110  SUBROUTINE num_gpot(vpmat, k, rc, ra, rb, r, wr)
1111 
1112  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: vpmat
1113  INTEGER, INTENT(IN) :: k
1114  REAL(kind=dp), INTENT(IN) :: rc
1115  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, rb
1116  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
1117 
1118  INTEGER :: ip, iq, m, n
1119  REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: op
1120 
1121  n = SIZE(ra, 2)
1122  m = SIZE(rb, 2)
1123 
1124  cpassert(.NOT. (n > SIZE(vpmat, 1) .OR. m > SIZE(vpmat, 2)))
1125 
1126  ALLOCATE (op(n))
1127 
1128  op(:) = (r(:)/rc)**(2*k)*exp(-0.5_dp*(r(:)/rc)**2)
1129 
1130  DO iq = 1, m
1131  DO ip = 1, n
1132  vpmat(ip, iq) = sum(wr(:)*ra(:, ip)*rb(:, iq)*op(:))
1133  END DO
1134  END DO
1135 
1136  DEALLOCATE (op)
1137 
1138  END SUBROUTINE num_gpot
1139 
1140 !------------------------------------------------------------------------------
1141 !
1142 ! G(l,k,pq) = <a|[r/rc]^2k|b>
1143 ! = INT(u^2 [u/rc]^2k Ra(u) Rb(u))du
1144 !
1145 !------------------------------------------------------------------------------
1146 ! **************************************************************************************************
1147 !> \brief ...
1148 !> \param gmat ...
1149 !> \param rc ...
1150 !> \param k ...
1151 !> \param ra ...
1152 !> \param rb ...
1153 !> \param r ...
1154 !> \param wr ...
1155 ! **************************************************************************************************
1156  SUBROUTINE num_conf(gmat, rc, k, ra, rb, r, wr)
1157 
1158  REAL(kind=dp), DIMENSION(:, :), INTENT(OUT) :: gmat
1159  REAL(kind=dp), INTENT(IN) :: rc
1160  INTEGER, INTENT(IN) :: k
1161  REAL(kind=dp), DIMENSION(:, :), INTENT(IN) :: ra, rb
1162  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: r, wr
1163 
1164  INTEGER :: ip, iq, m, n
1165  REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: op
1166 
1167  n = SIZE(ra, 2)
1168  m = SIZE(rb, 2)
1169 
1170  cpassert(.NOT. (n > SIZE(gmat, 1) .OR. m > SIZE(gmat, 2)))
1171 
1172  ALLOCATE (op(n))
1173 
1174  op(:) = (r(:)/rc)**(2*k)
1175 
1176  DO iq = 1, m
1177  DO ip = 1, n
1178  gmat(ip, iq) = sum(wr(:)*ra(:, ip)*rb(:, iq)*op(:))
1179  END DO
1180  END DO
1181 
1182  DEALLOCATE (op)
1183 
1184  END SUBROUTINE num_conf
1185 
1186 END MODULE ai_onecenter
subroutine, public sg_kinnuc(umat, l, pa, pb)
...
Definition: ai_onecenter.F:171
subroutine, public sg_nuclear(umat, l, pa, pb)
...
Definition: ai_onecenter.F:136
subroutine, public sg_coulomb(eri, nu, pa, lab, pc, lcd)
...
Definition: ai_onecenter.F:451
subroutine, public sg_exchange(eri, nu, pa, lac, pb, lbd)
...
Definition: ai_onecenter.F:515
subroutine, public sg_erfc(umat, l, a, pa, pb)
...
Definition: ai_onecenter.F:589
subroutine, public sg_kinetic(kmat, l, pa, pb)
...
Definition: ai_onecenter.F:101
subroutine, public sto_nuclear(umat, na, pa, nb, pb)
...
Definition: ai_onecenter.F:756
subroutine, public sto_overlap(smat, na, pa, nb, pb)
...
Definition: ai_onecenter.F:667
subroutine, public sto_kinetic(kmat, l, na, pa, nb, pb)
...
Definition: ai_onecenter.F:710
subroutine, public sg_gpot(vpmat, k, rc, l, pa, pb)
...
Definition: ai_onecenter.F:372
subroutine, public sg_proj_ol(spmat, l, p, k, rc)
...
Definition: ai_onecenter.F:336
subroutine, public sg_erf(upmat, l, a, pa, pb)
...
Definition: ai_onecenter.F:230
subroutine, public sg_conf(gmat, rc, k, l, pa, pb)
...
Definition: ai_onecenter.F:413
subroutine, public sg_overlap(smat, l, pa, pb)
...
Definition: ai_onecenter.F:64
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
Definition of mathematical constants and functions.
Definition: mathconstants.F:16
real(kind=dp), dimension(0:maxfac), parameter, public gamma1
Definition: mathconstants.F:95
real(kind=dp), parameter, public pi
real(kind=dp), dimension(-1:2 *maxfac+1), parameter, public dfac
Definition: mathconstants.F:61
real(kind=dp), dimension(0:maxfac), parameter, public gamma0
Definition: mathconstants.F:83
real(kind=dp), dimension(0:maxfac), parameter, public fac
Definition: mathconstants.F:37