(git:374b731)
Loading...
Searching...
No Matches
ai_overlap3_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 Three-center 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_overlap3_debug'
25
26 INTEGER, PARAMETER :: lmax = 5
27
28 REAL(dp) :: xa, xb, xc
29 REAL(dp), DIMENSION(3) :: a, b, c
30 REAL(dp), DIMENSION(3) :: p, g
31 REAL(dp) :: xsi, zeta, sss
32
33 PRIVATE
35
36CONTAINS
37
38! **************************************************************************************************
39!> \brief Calculation of three-center integrals over
40!> Cartesian Gaussian-type functions.
41!> \param ya ...
42!> \param yb ...
43!> \param yc ...
44!> \param rA ...
45!> \param rB ...
46!> \param rC ...
47! **************************************************************************************************
48 SUBROUTINE init_os_overlap3(ya, yb, yc, rA, rB, rC)
49 REAL(dp) :: ya, yb, yc
50 REAL(dp), DIMENSION(3) :: ra, rb, rc
51
52 REAL(dp) :: fpc, ss
53
54 xa = ya
55 xb = yb
56 xc = yc
57 a = ra
58 b = rb
59 c = rc
60
61 xsi = xa + xb
62 zeta = xa*xb/xsi
63
64 p = (xa*a + xb*b)/xsi
65 g = (xsi*p + xc*c)/(xsi + xc)
66
67 ss = (pi/xsi)**(3._dp/2._dp)*exp(-zeta*sum((a - b)**2))
68
69 fpc = exp(-xsi*xc/(xsi + xc)*sum((p - c)**2))
70 sss = (xsi/(xsi + xc))**(3._dp/2._dp)*ss*fpc
71
72 END SUBROUTINE init_os_overlap3
73
74! **************************************************************************************************
75
76! **************************************************************************************************
77!> \brief ...
78!> \param an ...
79!> \param cn ...
80!> \param bn ...
81!> \return ...
82! **************************************************************************************************
83 RECURSIVE FUNCTION os_overlap3(an, cn, bn) RESULT(IACB)
84 INTEGER, DIMENSION(3) :: an, cn, bn
85 REAL(dp) :: iacb
86
87 INTEGER, DIMENSION(3), PARAMETER :: i1 = (/1, 0, 0/), i2 = (/0, 1, 0/), &
88 i3 = (/0, 0, 1/)
89
90 iacb = 0._dp
91 IF (any(an < 0)) RETURN
92 IF (any(bn < 0)) RETURN
93 IF (any(cn < 0)) RETURN
94
95 IF (sum(an + cn + bn) == 0) THEN
96 iacb = sss
97 RETURN
98 END IF
99
100 IF (bn(1) > 0) THEN
101 iacb = os_overlap3(an, cn + i1, bn - i1) + (c(1) - b(1))*os_overlap3(an, cn, bn - i1)
102 ELSEIF (bn(2) > 0) THEN
103 iacb = os_overlap3(an, cn + i2, bn - i2) + (c(2) - b(2))*os_overlap3(an, cn, bn - i2)
104 ELSEIF (bn(3) > 0) THEN
105 iacb = os_overlap3(an, cn + i3, bn - i3) + (c(3) - b(3))*os_overlap3(an, cn, bn - i3)
106 ELSE
107 IF (cn(1) > 0) THEN
108 iacb = os_overlap3(an + i1, cn - i1, bn) + (a(1) - c(1))*os_overlap3(an, cn - i1, bn)
109 ELSEIF (cn(2) > 0) THEN
110 iacb = os_overlap3(an + i2, cn - i2, bn) + (a(2) - c(2))*os_overlap3(an, cn - i2, bn)
111 ELSEIF (cn(3) > 0) THEN
112 iacb = os_overlap3(an + i3, cn - i3, bn) + (a(3) - c(3))*os_overlap3(an, cn - i3, bn)
113 ELSE
114 IF (an(1) > 0) THEN
115 iacb = (g(1) - a(1))*os_overlap3(an - i1, cn, bn) + &
116 0.5_dp*(an(1) - 1)/(xsi + xc)*os_overlap3(an - i1 - i1, cn, bn)
117 ELSEIF (an(2) > 0) THEN
118 iacb = (g(2) - a(2))*os_overlap3(an - i2, cn, bn) + &
119 0.5_dp*(an(2) - 1)/(xsi + xc)*os_overlap3(an - i2 - i2, cn, bn)
120 ELSEIF (an(3) > 0) THEN
121 iacb = (g(3) - a(3))*os_overlap3(an - i3, cn, bn) + &
122 0.5_dp*(an(3) - 1)/(xsi + xc)*os_overlap3(an - i3 - i3, cn, bn)
123 ELSE
124 cpabort("I(0000)")
125 END IF
126 END IF
127 END IF
128
129 END FUNCTION os_overlap3
130
131! **************************************************************************************************
132
133END MODULE ai_overlap3_debug
Three-center integrals over Cartesian Gaussian-type functions.
real(dp), dimension(3) a
subroutine, public init_os_overlap3(ya, yb, yc, ra, rb, rc)
Calculation of three-center integrals over Cartesian Gaussian-type functions.
real(dp), dimension(3) c
real(dp), dimension(3) b
integer, parameter lmax
real(dp), dimension(3) g
recursive real(dp) function, public os_overlap3(an, cn, bn)
...
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.
real(kind=dp), parameter, public pi
Exchange and Correlation functional calculations.
Definition xc.F:17