75 lb_max, lb_min, npgfb, zetb, m, rab, sab, dsab, calculate_forces)
76 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
77 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta
78 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
79 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb
80 INTEGER,
INTENT(IN) :: m
81 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
82 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: sab
83 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: dsab
84 LOGICAL,
INTENT(IN) :: calculate_forces
86 CHARACTER(LEN=*),
PARAMETER :: routinen =
'operator_ra2m'
88 INTEGER :: ax, ay, az, bx, by, bz, coa, cob, &
89 handle, i, ia, ib, ipgf, j, jpgf, k, &
90 ldrr, lma, ma, mb, na, nb, ofa, ofb, &
92 REAL(kind=
dp) :: a, b, f0, prefac, rab2, rap(3), rbp(3), &
93 weights(0:m, 0:m), zet
94 REAL(kind=
dp),
ALLOCATABLE :: dpolynomial(:, :, :, :), drr(:, :, :), &
95 polynomial(:, :, :, :), rr(:, :, :)
97 CALL timeset(routinen, handle)
99 IF (calculate_forces) dsab = 0.0_dp
102 IF (calculate_forces) lma = lma + 1
103 ldrr = max(lma, lb_max) + 1
104 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3), polynomial(0:la_max, 0:lb_max, 0:m, 3))
105 IF (calculate_forces)
THEN
106 ALLOCATE (drr(0:ldrr - 1, 0:ldrr - 1, 3), dpolynomial(0:la_max, 0:lb_max, 0:m, 3))
108 powers = [(2*i, i=0, m)]
119 cpassert(
SIZE(sab, 1) >= na*npgfa .AND.
SIZE(sab, 2) >= nb*npgfb)
130 f0 = (
pi/zet)**1.5_dp*exp(-a*b*rab2/zet)
131 CALL os_rr_ovlp(rap, lma, rbp, lb_max, zet, ldrr, rr)
133 IF (calculate_forces)
THEN
137 [0.0_dp, 0.0_dp, 0.0_dp])
141 DO cob = ofb + 1,
ncoset(lb_max)
146 DO coa = ofa + 1,
ncoset(la_max)
154 prefac = weights(i, j)*f0
155 sab(ia, ib) = sab(ia, ib) + prefac*polynomial(ax, bx, i, 1)* &
156 polynomial(ay, by, j, 2)*polynomial(az, bz, k, 3)
157 IF (calculate_forces)
THEN
158 dsab(ia, ib, 1) = dsab(ia, ib, 1) + prefac*dpolynomial(ax, bx, i, 1)* &
159 polynomial(ay, by, j, 2)*polynomial(az, bz, k, 3)
160 dsab(ia, ib, 2) = dsab(ia, ib, 2) + prefac*polynomial(ax, bx, i, 1)* &
161 dpolynomial(ay, by, j, 2)*polynomial(az, bz, k, 3)
162 dsab(ia, ib, 3) = dsab(ia, ib, 3) + prefac*polynomial(ax, bx, i, 1)* &
163 polynomial(ay, by, j, 2)*dpolynomial(az, bz, k, 3)
171 CALL timestop(handle)