60 SUBROUTINE kinetic(la_max, la_min, npgfa, rpgfa, zeta, &
61 lb_max, lb_min, npgfb, rpgfb, zetb, &
63 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
64 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
65 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
66 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
67 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
68 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
70 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT), &
73 INTEGER :: avec(3), bvec(3), coa, cob, ia, ib, &
74 idir, ipgf, jdir, jpgf, kdir, ldrr, &
75 lma, lmb, ma, mb, na, nb, ofa, ofb
76 REAL(kind=
dp) :: a, b, f0, rab2, tab, xhi, zet
77 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: drr, dtt, rr, tt
78 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp
80 cpassert(
PRESENT(kab) .OR.
PRESENT(dab))
84 rab2 = rab(1)*rab(1) + rab(2)*rab(2) + rab(3)*rab(3)
88 IF (
PRESENT(kab))
THEN
92 IF (
PRESENT(dab))
THEN
96 ldrr = max(lma, lmb) + 1
99 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3), tt(0:ldrr - 1, 0:ldrr - 1, 3), &
100 drr(0:ldrr - 1, 0:ldrr - 1, 3))
101 IF (
PRESENT(dab))
ALLOCATE (dtt(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)
146 CALL apply_cartesian_1d(rr, drr, lma - 1, lmb, .false., .true., a, [0.0_dp, 0.0_dp, 0.0_dp])
147 CALL apply_cartesian_1d(drr, tt, lma - 1, lmb - 1, .true., .true., b, [0.0_dp, 0.0_dp, 0.0_dp])
148 IF (
PRESENT(dab))
THEN
149 CALL apply_cartesian_1d(tt, dtt, la_max, lb_max, .false., .true., a, [0.0_dp, 0.0_dp, 0.0_dp])
152 DO cob = ofb + 1,
ncoset(lb_max)
155 DO coa = ofa + 1,
ncoset(la_max)
158 IF (
PRESENT(kab)) kab(ia, ib) = 0.0_dp
160 jdir = mod(idir, 3) + 1
161 kdir = mod(idir + 1, 3) + 1
162 IF (
PRESENT(kab))
THEN
163 kab(ia, ib) = kab(ia, ib) + tt(avec(idir), bvec(idir), idir)* &
164 rr(avec(jdir), bvec(jdir), jdir)*rr(avec(kdir), bvec(kdir), kdir)
166 IF (
PRESENT(dab))
THEN
167 dab(ia, ib, idir) = dtt(avec(idir), bvec(idir), idir)* &
168 rr(avec(jdir), bvec(jdir), jdir)*rr(avec(kdir), bvec(kdir), kdir) + &
169 drr(avec(idir), bvec(idir), idir)* &
170 (tt(avec(jdir), bvec(jdir), jdir)*rr(avec(kdir), bvec(kdir), kdir) + &
171 rr(avec(jdir), bvec(jdir), jdir)*tt(avec(kdir), bvec(kdir), kdir))
174 IF (
PRESENT(kab)) kab(ia, ib) = f0*kab(ia, ib)
175 IF (
PRESENT(dab)) dab(ia, ib, 1:3) = f0*dab(ia, ib, 1:3)
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...