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
81 cpassert(
PRESENT(kab) .OR.
PRESENT(dab))
85 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
89 IF (
PRESENT(kab))
THEN
93 IF (
PRESENT(dab))
THEN
100 ldrr = max(lma, lmb) + 1
103 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3), tt(0:ldrr - 1, 0:ldrr - 1, 3))
110 IF (
PRESENT(kab))
THEN
111 cpassert((
SIZE(kab, 1) >= na*npgfa))
112 cpassert((
SIZE(kab, 2) >= nb*npgfb))
114 IF (
PRESENT(dab))
THEN
115 cpassert((
SIZE(dab, 1) >= na*npgfa))
116 cpassert((
SIZE(dab, 2) >= nb*npgfb))
117 cpassert((
SIZE(dab, 3) >= 3))
126 IF (rpgfa(ipgf) + rpgfb(jpgf) < tab)
THEN
127 IF (
PRESENT(kab)) kab(ma + 1:ma + na, mb + 1:mb + nb) = 0.0_dp
128 IF (
PRESENT(dab)) dab(ma + 1:ma + na, mb + 1:mb + nb, 1:3) = 0.0_dp
142 f0 = 0.5_dp*(
pi/zet)**(1.5_dp)*exp(-xhi*rab2)
145 CALL os_rr_ovlp(rap, lma, rbp, lmb, zet, ldrr, rr)
150 tt(la, lb, 1) = 4.0_dp*a*b*rr(la + 1, lb + 1, 1)
151 tt(la, lb, 2) = 4.0_dp*a*b*rr(la + 1, lb + 1, 2)
152 tt(la, lb, 3) = 4.0_dp*a*b*rr(la + 1, lb + 1, 3)
153 IF (la > 0 .AND. lb > 0)
THEN
154 tt(la, lb, 1) = tt(la, lb, 1) + real(la*lb,
dp)*rr(la - 1, lb - 1, 1)
155 tt(la, lb, 2) = tt(la, lb, 2) + real(la*lb,
dp)*rr(la - 1, lb - 1, 2)
156 tt(la, lb, 3) = tt(la, lb, 3) + real(la*lb,
dp)*rr(la - 1, lb - 1, 3)
159 tt(la, lb, 1) = tt(la, lb, 1) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 1)
160 tt(la, lb, 2) = tt(la, lb, 2) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 2)
161 tt(la, lb, 3) = tt(la, lb, 3) - 2.0_dp*real(la,
dp)*b*rr(la - 1, lb + 1, 3)
164 tt(la, lb, 1) = tt(la, lb, 1) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 1)
165 tt(la, lb, 2) = tt(la, lb, 2) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 2)
166 tt(la, lb, 3) = tt(la, lb, 3) - 2.0_dp*real(lb,
dp)*a*rr(la + 1, lb - 1, 3)
171 DO lb = lb_min, lb_max
175 cob =
coset(bx, by, bz) - ofb
177 DO la = la_min, la_max
181 coa =
coset(ax, ay, az) - ofa
184 IF (
PRESENT(kab))
THEN
185 kab(ia, ib) = f0*(tt(ax, bx, 1)*rr(ay, by, 2)*rr(az, bz, 3) + &
186 rr(ax, bx, 1)*tt(ay, by, 2)*rr(az, bz, 3) + &
187 rr(ax, bx, 1)*rr(ay, by, 2)*tt(az, bz, 3))
190 IF (
PRESENT(dab))
THEN
192 dsx = 2.0_dp*a*rr(ax + 1, bx, 1)
193 IF (ax > 0) dsx = dsx - real(ax,
dp)*rr(ax - 1, bx, 1)
194 dtx = 2.0_dp*a*tt(ax + 1, bx, 1)
195 IF (ax > 0) dtx = dtx - real(ax,
dp)*tt(ax - 1, bx, 1)
196 dab(ia, ib,
idx) = dtx*rr(ay, by, 2)*rr(az, bz, 3) + &
197 dsx*(tt(ay, by, 2)*rr(az, bz, 3) + rr(ay, by, 2)*tt(az, bz, 3))
199 dsy = 2.0_dp*a*rr(ay + 1, by, 2)
200 IF (ay > 0) dsy = dsy - real(ay,
dp)*rr(ay - 1, by, 2)
201 dty = 2.0_dp*a*tt(ay + 1, by, 2)
202 IF (ay > 0) dty = dty - real(ay,
dp)*tt(ay - 1, by, 2)
203 dab(ia, ib, idy) = dty*rr(ax, bx, 1)*rr(az, bz, 3) + &
204 dsy*(tt(ax, bx, 1)*rr(az, bz, 3) + rr(ax, bx, 1)*tt(az, bz, 3))
206 dsz = 2.0_dp*a*rr(az + 1, bz, 3)
207 IF (az > 0) dsz = dsz - real(az,
dp)*rr(az - 1, bz, 3)
208 dtz = 2.0_dp*a*tt(az + 1, bz, 3)
209 IF (az > 0) dtz = dtz - real(az,
dp)*tt(az - 1, bz, 3)
210 dab(ia, ib, idz) = dtz*rr(ax, bx, 1)*rr(ay, by, 2) + &
211 dsz*(tt(ax, bx, 1)*rr(ay, by, 2) + rr(ax, bx, 1)*tt(ay, by, 2))
213 dab(ia, ib, 1:3) = f0*dab(ia, ib, 1:3)