(git:e7e05ae)
ai_overlap_debug.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 Two-center overlap integrals over Cartesian Gaussian-type functions
10 !> \par Literature
11 !> S. Obara and A. Saika, J. Chem. Phys. 84, 3963 (1986)
12 !> \par History
13 !> none
14 !> \author Dorothea Golze
15 ! **************************************************************************************************
17 
18  USE kinds, ONLY: dp
19  USE mathconstants, ONLY: pi
20 #include "../base/base_uses.f90"
21 
22  IMPLICIT NONE
23 
24  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ai_overlap_debug'
25 
26  INTEGER, PARAMETER :: lmax = 5
27 
28  REAL(dp) :: xa, xb
29  REAL(dp), DIMENSION(3) :: a, b
30  REAL(dp), DIMENSION(3) :: p
31  REAL(dp) :: xsi, zeta, ss
32 
33  PRIVATE
34  PUBLIC :: init_os_overlap2, os_overlap2
35 
36 CONTAINS
37 
38 ! **************************************************************************************************
39 !> \brief Calculation of overlap integrals over
40 !> Cartesian Gaussian-type functions.
41 !> \param ya ...
42 !> \param yb ...
43 !> \param rA ...
44 !> \param rB ...
45 ! **************************************************************************************************
46  SUBROUTINE init_os_overlap2(ya, yb, rA, rB)
47  REAL(dp) :: ya, yb
48  REAL(dp), DIMENSION(3) :: ra, rb
49 
50  xa = ya
51  xb = yb
52  a = ra
53  b = rb
54 
55  xsi = xa + xb
56  zeta = xa*xb/xsi
57 
58  p = (xa*a + xb*b)/xsi
59 
60  ss = (pi/xsi)**(3._dp/2._dp)*exp(-zeta*sum((a - b)**2))
61 
62  END SUBROUTINE init_os_overlap2
63 
64 ! **************************************************************************************************
65 
66 ! **************************************************************************************************
67 !> \brief ...
68 !> \param an ...
69 !> \param bn ...
70 !> \return ...
71 ! **************************************************************************************************
72  RECURSIVE FUNCTION os_overlap2(an, bn) RESULT(IAB)
73  INTEGER, DIMENSION(3) :: an, bn
74  REAL(dp) :: iab
75 
76  INTEGER, DIMENSION(3), PARAMETER :: i1 = (/1, 0, 0/), i2 = (/0, 1, 0/), &
77  i3 = (/0, 0, 1/)
78 
79  iab = 0._dp
80  IF (any(an < 0)) RETURN
81  IF (any(bn < 0)) RETURN
82 
83  IF (sum(an + bn) == 0) THEN
84  iab = ss
85  RETURN
86  END IF
87 
88  IF (bn(1) > 0) THEN
89  iab = os_overlap2(an + i1, bn - i1) + (a(1) - b(1))*os_overlap2(an, bn - i1)
90  ELSEIF (bn(2) > 0) THEN
91  iab = os_overlap2(an + i2, bn - i2) + (a(2) - b(2))*os_overlap2(an, bn - i2)
92  ELSEIF (bn(3) > 0) THEN
93  iab = os_overlap2(an + i3, bn - i3) + (a(3) - b(3))*os_overlap2(an, bn - i3)
94  ELSE
95  IF (an(1) > 0) THEN
96  iab = (p(1) - a(1))*os_overlap2(an - i1, bn) + &
97  0.5_dp*(an(1) - 1)/xsi*os_overlap2(an - i1 - i1, bn)
98  ELSEIF (an(2) > 0) THEN
99  iab = (p(2) - a(2))*os_overlap2(an - i2, bn) + &
100  0.5_dp*(an(2) - 1)/xsi*os_overlap2(an - i2 - i2, bn)
101  ELSEIF (an(3) > 0) THEN
102  iab = (p(3) - a(3))*os_overlap2(an - i3, bn) + &
103  0.5_dp*(an(3) - 1)/xsi*os_overlap2(an - i3 - i3, bn)
104  ELSE
105  cpabort("I(0000)")
106  END IF
107  END IF
108 
109  END FUNCTION os_overlap2
110 
111 ! **************************************************************************************************
112 
113 END MODULE ai_overlap_debug
Two-center overlap integrals over Cartesian Gaussian-type functions.
real(dp), dimension(3) b
recursive real(dp) function, public os_overlap2(an, bn)
...
integer, parameter lmax
subroutine, public init_os_overlap2(ya, yb, rA, rB)
Calculation of overlap integrals over Cartesian Gaussian-type functions.
real(dp), dimension(3) a
real(dp), dimension(3) p
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), parameter, public pi