108 SUBROUTINE operator2(cps_operator2, la_max, npgfa, zeta, la_min, lc_max, npgfc, zetc, lc_min, &
109 omega, r_cutoff, rac, rac2, vac, v, maxder, vac_plus)
110 PROCEDURE(
ab_sint_os),
POINTER :: cps_operator2
111 INTEGER,
INTENT(IN) :: la_max, npgfa
112 REAL(kind=dp),
DIMENSION(:),
INTENT(IN) :: zeta
113 INTEGER,
INTENT(IN) :: la_min, lc_max, npgfc
114 REAL(kind=dp),
DIMENSION(:),
INTENT(IN) :: zetc
115 INTEGER,
INTENT(IN) :: lc_min
116 REAL(kind=dp),
INTENT(IN) :: omega, r_cutoff
117 REAL(kind=dp),
DIMENSION(3),
INTENT(IN) :: rac
118 REAL(kind=dp),
INTENT(IN) :: rac2
119 REAL(kind=dp),
DIMENSION(:, :),
INTENT(INOUT) :: vac
120 REAL(kind=dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: v
121 INTEGER,
INTENT(IN),
OPTIONAL :: maxder
122 REAL(kind=dp),
DIMENSION(:, :),
OPTIONAL :: vac_plus
124 CHARACTER(len=*),
PARAMETER :: routinen =
'operator2'
126 INTEGER :: ax, ay, az, coc, cocx, cocy, cocz, cx, &
127 cy, cz, i, ipgf, j, jpgf, la, lc, &
128 maxder_local, n, na, nap, nc, ncp, &
130 REAL(kind=dp) :: dac, f1, f2, f3, f4, f5, f6, fcx, &
131 fcy, fcz, rho, zetp, zetq, zetw
132 REAL(kind=dp),
DIMENSION(3) :: raw, rcw
134 CALL timeset(routinen, handle)
139 IF (
PRESENT(maxder))
THEN
140 maxder_local = maxder
144 nmax = la_max + lc_max + 1
164 zetp = 1.0_dp/zeta(ipgf)
165 zetq = 1.0_dp/zetc(jpgf)
166 zetw = 1.0_dp/(zeta(ipgf) + zetc(jpgf))
168 rho = zeta(ipgf)*zetc(jpgf)*zetw
172 CALL cps_operator2(v, nmax, zetp, zetq, zetw, rho, rac2, omega, r_cutoff)
181 rcw(:) = -zeta(ipgf)*zetw*rac(:)
186 v(1, 2, n) = rcw(1)*v(1, 1, n + 1)
187 v(1, 3, n) = rcw(2)*v(1, 1, n + 1)
188 v(1, 4, n) = rcw(3)*v(1, 1, n + 1)
201 v(1,
coset(0, 0, lc), n) = &
202 rcw(3)*v(1,
coset(0, 0, lc - 1), n + 1) + &
203 f1*real(lc - 1, dp)*(v(1,
coset(0, 0, lc - 2), n) + &
204 f2*v(1,
coset(0, 0, lc - 2), n + 1))
209 v(1,
coset(0, 1, cz), n) = rcw(2)*v(1,
coset(0, 0, cz), n + 1)
213 v(1,
coset(0, cy, cz), n) = &
214 rcw(2)*v(1,
coset(0, cy - 1, cz), n + 1) + &
215 f1*real(cy - 1, dp)*(v(1,
coset(0, cy - 2, cz), n) + &
216 f2*v(1,
coset(0, cy - 2, cz), n + 1))
223 v(1,
coset(1, cy, cz), n) = rcw(1)*v(1,
coset(0, cy, cz), n + 1)
227 f6 = f1*real(cx - 1, dp)
230 v(1,
coset(cx, cy, cz), n) = &
231 rcw(1)*v(1,
coset(cx - 1, cy, cz), n + 1) + &
232 f6*(v(1,
coset(cx - 2, cy, cz), n) + &
233 f2*v(1,
coset(cx - 2, cy, cz), n + 1))
251 raw(:) = zetc(jpgf)*zetw*rac(:)
256 v(2, 1, n) = raw(1)*v(1, 1, n + 1)
257 v(3, 1, n) = raw(2)*v(1, 1, n + 1)
258 v(4, 1, n) = raw(3)*v(1, 1, n + 1)
271 v(
coset(0, 0, la), 1, n) = &
272 raw(3)*v(
coset(0, 0, la - 1), 1, n + 1) + &
273 f3*real(la - 1, dp)*(v(
coset(0, 0, la - 2), 1, n) + &
274 f4*v(
coset(0, 0, la - 2), 1, n + 1))
279 v(
coset(0, 1, az), 1, n) = raw(2)*v(
coset(0, 0, az), 1, n + 1)
283 v(
coset(0, ay, az), 1, n) = &
284 raw(2)*v(
coset(0, ay - 1, az), 1, n + 1) + &
285 f3*real(ay - 1, dp)*(v(
coset(0, ay - 2, az), 1, n) + &
286 f4*v(
coset(0, ay - 2, az), 1, n + 1))
293 v(
coset(1, ay, az), 1, n) = raw(1)*v(
coset(0, ay, az), 1, n + 1)
297 f6 = f3*real(ax - 1, dp)
300 v(
coset(ax, ay, az), 1, n) = &
301 raw(1)*v(
coset(ax - 1, ay, az), 1, n + 1) + &
302 f6*(v(
coset(ax - 2, ay, az), 1, n) + &
303 f4*v(
coset(ax - 2, ay, az), 1, n + 1))
317 coc =
coset(cx, cy, cz)
318 cocx =
coset(max(0, cx - 1), cy, cz)
319 cocy =
coset(cx, max(0, cy - 1), cz)
320 cocz =
coset(cx, cy, max(0, cz - 1))
322 fcx = f5*real(cx, dp)
323 fcy = f5*real(cy, dp)
324 fcz = f5*real(cz, dp)
329 DO n = 1, nmax - 1 - lc
330 v(2, coc, n) = raw(1)*v(1, coc, n + 1) + fcx*v(1, cocx, n + 1)
331 v(3, coc, n) = raw(2)*v(1, coc, n + 1) + fcy*v(1, cocy, n + 1)
332 v(4, coc, n) = raw(3)*v(1, coc, n + 1) + fcz*v(1, cocz, n + 1)
342 DO n = 1, nmax - la - lc
346 v(
coset(0, 0, la), coc, n) = &
347 raw(3)*v(
coset(0, 0, la - 1), coc, n + 1) + &
348 f3*real(la - 1, dp)*(v(
coset(0, 0, la - 2), coc, n) + &
349 f4*v(
coset(0, 0, la - 2), coc, n + 1)) + &
350 fcz*v(
coset(0, 0, la - 1), cocz, n + 1)
355 v(
coset(0, 1, az), coc, n) = &
356 raw(2)*v(
coset(0, 0, az), coc, n + 1) + &
357 fcy*v(
coset(0, 0, az), cocy, n + 1)
361 v(
coset(0, ay, az), coc, n) = &
362 raw(2)*v(
coset(0, ay - 1, az), coc, n + 1) + &
363 f3*real(ay - 1, dp)*(v(
coset(0, ay - 2, az), coc, n) + &
364 f4*v(
coset(0, ay - 2, az), coc, n + 1)) + &
365 fcy*v(
coset(0, ay - 1, az), cocy, n + 1)
372 v(
coset(1, ay, az), coc, n) = &
373 raw(1)*v(
coset(0, ay, az), coc, n + 1) + &
374 fcx*v(
coset(0, ay, az), cocx, n + 1)
378 f6 = f3*real(ax - 1, dp)
381 v(
coset(ax, ay, az), coc, n) = &
382 raw(1)*v(
coset(ax - 1, ay, az), coc, n + 1) + &
383 f6*(v(
coset(ax - 2, ay, az), coc, n) + &
384 f4*v(
coset(ax - 2, ay, az), coc, n + 1)) + &
385 fcx*v(
coset(ax - 1, ay, az), cocx, n + 1)
400 DO j =
ncoset(lc_min - 1) + 1,
ncoset(lc_max - maxder_local)
401 DO i =
ncoset(la_min - 1) + 1,
ncoset(la_max - maxder_local)
402 vac(na + i, nc + j) = v(i, j, 1)
406 IF (
PRESENT(maxder))
THEN
409 vac_plus(nap + i, ncp + j) = v(i, j, 1)
414 nc = nc +
ncoset(lc_max - maxder_local)
415 ncp = ncp +
ncoset(lc_max)
419 na = na +
ncoset(la_max - maxder_local)
420 nap = nap +
ncoset(la_max)
424 CALL timestop(handle)