26 #include "../base/base_uses.f90"
32 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_kinetic'
59 SUBROUTINE kinetic(la_max, la_min, npgfa, rpgfa, zeta, &
60 lb_max, lb_min, npgfb, rpgfb, zetb, &
62 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
63 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
64 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
65 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
66 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
67 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
69 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT), &
72 INTEGER :: ax, ay, az, bx, by, bz, coa, cob, ia, &
73 ib,
idx, idy, idz, ipgf, jpgf, la, lb, &
74 ldrr, lma, lmb, ma, mb, na, nb, ofa, &
76 REAL(kind=
dp) :: a, b, dsx, dsy, dsz, dtx, dty, dtz, f0, &
78 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: rr, tt
79 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp
83 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
87 IF (
PRESENT(kab))
THEN
91 IF (
PRESENT(dab))
THEN
98 ldrr = max(lma, lmb) + 1
101 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3), tt(0:ldrr - 1, 0:ldrr - 1, 3))
108 IF (
PRESENT(kab))
THEN
109 cpassert((
SIZE(kab, 1) >= na*npgfa))
110 cpassert((
SIZE(kab, 2) >= nb*npgfb))
112 IF (
PRESENT(dab))
THEN
113 cpassert((
SIZE(dab, 1) >= na*npgfa))
114 cpassert((
SIZE(dab, 2) >= nb*npgfb))
115 cpassert((
SIZE(dab, 3) >= 3))
124 IF (rpgfa(ipgf) + rpgfb(jpgf) < tab)
THEN
125 IF (
PRESENT(kab)) kab(ma + 1:ma + na, mb + 1:mb + nb) = 0.0_dp
126 IF (
PRESENT(dab)) dab(ma + 1:ma + na, mb + 1:mb + nb, 1:3) = 0.0_dp
140 f0 = 0.5_dp*(
pi/zet)**(1.5_dp)*exp(-xhi*rab2)
143 CALL os_rr_ovlp(rap, lma, rbp, lmb, zet, ldrr, rr)
148 tt(la, lb, 1) = 4.0_dp*a*b*rr(la + 1, lb + 1, 1)
149 tt(la, lb, 2) = 4.0_dp*a*b*rr(la + 1, lb + 1, 2)
150 tt(la, lb, 3) = 4.0_dp*a*b*rr(la + 1, lb + 1, 3)
151 IF (la > 0 .AND. lb > 0)
THEN
152 tt(la, lb, 1) = tt(la, lb, 1) + real(la*lb,
dp)*rr(la - 1, lb - 1, 1)
153 tt(la, lb, 2) = tt(la, lb, 2) + real(la*lb,
dp)*rr(la - 1, lb - 1, 2)
154 tt(la, lb, 3) = tt(la, lb, 3) + real(la*lb,
dp)*rr(la - 1, lb - 1, 3)
157 tt(la, lb, 1) = tt(la, lb, 1) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 1)
158 tt(la, lb, 2) = tt(la, lb, 2) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 2)
159 tt(la, lb, 3) = tt(la, lb, 3) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 3)
162 tt(la, lb, 1) = tt(la, lb, 1) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 1)
163 tt(la, lb, 2) = tt(la, lb, 2) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 2)
164 tt(la, lb, 3) = tt(la, lb, 3) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 3)
169 DO lb = lb_min, lb_max
173 cob =
coset(bx, by, bz) - ofb
175 DO la = la_min, la_max
179 coa =
coset(ax, ay, az) - ofa
182 IF (
PRESENT(kab))
THEN
183 kab(ia, ib) = f0*(tt(ax, bx, 1)*rr(ay, by, 2)*rr(az, bz, 3) + &
184 rr(ax, bx, 1)*tt(ay, by, 2)*rr(az, bz, 3) + &
185 rr(ax, bx, 1)*rr(ay, by, 2)*tt(az, bz, 3))
188 IF (
PRESENT(dab))
THEN
190 dsx = 2.0_dp*a*rr(ax + 1, bx, 1)
191 IF (ax > 0) dsx = dsx - real(ax,
dp)*rr(ax - 1, bx, 1)
192 dtx = 2.0_dp*a*tt(ax + 1, bx, 1)
193 IF (ax > 0) dtx = dtx - real(ax,
dp)*tt(ax - 1, bx, 1)
194 dab(ia, ib,
idx) = dtx*rr(ay, by, 2)*rr(az, bz, 3) + &
195 dsx*(tt(ay, by, 2)*rr(az, bz, 3) + rr(ay, by, 2)*tt(az, bz, 3))
197 dsy = 2.0_dp*a*rr(ay + 1, by, 2)
198 IF (ay > 0) dsy = dsy - real(ay,
dp)*rr(ay - 1, by, 2)
199 dty = 2.0_dp*a*tt(ay + 1, by, 2)
200 IF (ay > 0) dty = dty - real(ay,
dp)*tt(ay - 1, by, 2)
201 dab(ia, ib, idy) = dty*rr(ax, bx, 1)*rr(az, bz, 3) + &
202 dsy*(tt(ax, bx, 1)*rr(az, bz, 3) + rr(ax, bx, 1)*tt(az, bz, 3))
204 dsz = 2.0_dp*a*rr(az + 1, bz, 3)
205 IF (az > 0) dsz = dsz - real(az,
dp)*rr(az - 1, bz, 3)
206 dtz = 2.0_dp*a*tt(az + 1, bz, 3)
207 IF (az > 0) dtz = dtz - real(az,
dp)*tt(az - 1, bz, 3)
208 dab(ia, ib, idz) = dtz*rr(ax, bx, 1)*rr(ay, by, 2) + &
209 dsz*(tt(ax, bx, 1)*rr(ay, by, 2) + rr(ax, bx, 1)*tt(ay, by, 2))
211 dab(ia, ib, 1:3) = f0*dab(ia, ib, 1:3)
static GRID_HOST_DEVICE int idx(const orbital a)
Return coset index of given orbital angular momentum.
Calculation of the kinetic energy integrals over Cartesian Gaussian-type functions.
subroutine, public kinetic(la_max, la_min, npgfa, rpgfa, zeta, lb_max, lb_min, npgfb, rpgfb, zetb, rab, kab, dab)
Calculation of the two-center kinetic energy integrals [a|T|b] over Cartesian Gaussian-type functions...
subroutine, public os_rr_ovlp(rap, la_max, rbp, lb_max, zet, ldrr, rr)
Calculation of the basic Obara-Saika recurrence relation.
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset