74 iatom, ncoa, nsgfa, sgfa, sphi_a, ldsa, &
75 jatom, ncob, nsgfb, sgfb, sphi_b, ldsb, &
76 cosab, sinab, ldab, work, ldwork)
78 REAL(
dp),
DIMENSION(:, :),
POINTER :: cos_block, sin_block
79 INTEGER,
INTENT(IN) :: iatom, ncoa, nsgfa, sgfa
80 REAL(
dp),
DIMENSION(:, :),
INTENT(IN) :: sphi_a
81 INTEGER,
INTENT(IN) :: ldsa, jatom, ncob, nsgfb, sgfb
82 REAL(
dp),
DIMENSION(:, :),
INTENT(IN) :: sphi_b
83 INTEGER,
INTENT(IN) :: ldsb
84 REAL(
dp),
DIMENSION(:, :),
INTENT(IN) :: cosab, sinab
85 INTEGER,
INTENT(IN) :: ldab
86 REAL(
dp),
DIMENSION(:, :) :: work
87 INTEGER,
INTENT(IN) :: ldwork
91 CALL dgemm(
"N",
"N", ncoa, nsgfb, ncob, &
92 1.0_dp, cosab(1, 1), ldab, &
93 sphi_b(1, sgfb), ldsb, &
94 0.0_dp, work(1, 1), ldwork)
96 IF (iatom <= jatom)
THEN
97 CALL dgemm(
"T",
"N", nsgfa, nsgfb, ncoa, &
98 1.0_dp, sphi_a(1, sgfa), ldsa, &
100 1.0_dp, cos_block(sgfa, sgfb), &
103 CALL dgemm(
"T",
"N", nsgfb, nsgfa, ncoa, &
104 1.0_dp, work(1, 1), ldwork, &
105 sphi_a(1, sgfa), ldsa, &
106 1.0_dp, cos_block(sgfb, sgfa), &
111 CALL dgemm(
"N",
"N", ncoa, nsgfb, ncob, &
112 1.0_dp, sinab(1, 1), ldab, &
113 sphi_b(1, sgfb), ldsb, &
114 0.0_dp, work(1, 1), ldwork)
116 IF (iatom <= jatom)
THEN
117 CALL dgemm(
"T",
"N", nsgfa, nsgfb, ncoa, &
118 1.0_dp, sphi_a(1, sgfa), ldsa, &
119 work(1, 1), ldwork, &
120 1.0_dp, sin_block(sgfa, sgfb), &
123 CALL dgemm(
"T",
"N", nsgfb, nsgfa, ncoa, &
124 1.0_dp, work(1, 1), ldwork, &
125 sphi_a(1, sgfa), ldsa, &
126 1.0_dp, sin_block(sgfb, sgfa), &
152 SUBROUTINE cossin(la_max_set, npgfa, zeta, rpgfa, la_min_set, &
153 lb_max, npgfb, zetb, rpgfb, lb_min, &
154 rac, rbc, kvec, cosab, sinab, dcosab, dsinab)
156 INTEGER,
INTENT(IN) :: la_max_set, npgfa
157 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
158 INTEGER,
INTENT(IN) :: la_min_set, lb_max, npgfb
159 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
160 INTEGER,
INTENT(IN) :: lb_min
161 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac, rbc, kvec
162 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: cosab, sinab
163 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT), &
164 OPTIONAL :: dcosab, dsinab
166 INTEGER :: ax, ay, az, bx, by, bz, cda, cdax, cday, cdaz, coa, coamx, coamy, coamz, coapx, &
167 coapy, coapz, cob, da, da_max, dax, day, daz, i, ipgf, j, jpgf, k, la, la_max, la_min, &
168 la_start, lb, lb_start, na, nb
169 REAL(kind=
dp) :: dab, f0, f1, f2, f3, fax, fay, faz, ftz, &
170 fx, fy, fz, k2, kdp, rab2, s, zetp
171 REAL(kind=
dp),
DIMENSION(3) :: rab, rap, rbp
172 REAL(kind=
dp),
DIMENSION(ncoset(la_max_set), &
ncoset(lb_max), 3) :: dscos, dssin
174 DIMENSION(ncoset(la_max_set+1), ncoset(lb_max)) :: sc, ss
179 k2 = kvec(1)*kvec(1) + kvec(2)*kvec(2) + kvec(3)*kvec(3)
181 IF (
PRESENT(dcosab))
THEN
183 la_max = la_max_set + 1
184 la_min = max(0, la_min_set - 1)
194 IF (
PRESENT(dcosab))
THEN
195 na =
ncoset(la_max - 1)*npgfa
200 cosab(1:na, 1:nb) = 0.0_dp
201 sinab(1:na, 1:nb) = 0.0_dp
202 IF (
PRESENT(dcosab))
THEN
203 dcosab(1:na, 1:nb, :) = 0.0_dp
204 dsinab(1:na, 1:nb, :) = 0.0_dp
219 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab)
THEN
226 zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
228 f0 = (
pi*zetp)**1.5_dp
232 kdp = zetp*dot_product(kvec, zeta(ipgf)*rac + zetb(jpgf)*rbc)
236 s = f0*exp(-zeta(ipgf)*f1*rab2)*exp(-0.25_dp*k2*zetp)
237 sc(1, 1) = s*cos(kdp)
238 ss(1, 1) = s*sin(kdp)
250 sc(2, 1) = rap(1)*sc(1, 1) - f2*kvec(1)*ss(1, 1)
251 sc(3, 1) = rap(2)*sc(1, 1) - f2*kvec(2)*ss(1, 1)
252 sc(4, 1) = rap(3)*sc(1, 1) - f2*kvec(3)*ss(1, 1)
253 ss(2, 1) = rap(1)*ss(1, 1) + f2*kvec(1)*sc(1, 1)
254 ss(3, 1) = rap(2)*ss(1, 1) + f2*kvec(2)*sc(1, 1)
255 ss(4, 1) = rap(3)*ss(1, 1) + f2*kvec(3)*sc(1, 1)
264 sc(
coset(0, 0, la), 1) = rap(3)*sc(
coset(0, 0, la - 1), 1) + &
265 f2*real(la - 1,
dp)*sc(
coset(0, 0, la - 2), 1) - &
266 f2*kvec(3)*ss(
coset(0, 0, la - 1), 1)
267 ss(
coset(0, 0, la), 1) = rap(3)*ss(
coset(0, 0, la - 1), 1) + &
268 f2*real(la - 1,
dp)*ss(
coset(0, 0, la - 2), 1) + &
269 f2*kvec(3)*sc(
coset(0, 0, la - 1), 1)
274 sc(
coset(0, 1, az), 1) = rap(2)*sc(
coset(0, 0, az), 1) - &
275 f2*kvec(2)*ss(
coset(0, 0, az), 1)
276 ss(
coset(0, 1, az), 1) = rap(2)*ss(
coset(0, 0, az), 1) + &
277 f2*kvec(2)*sc(
coset(0, 0, az), 1)
281 sc(
coset(0, ay, az), 1) = rap(2)*sc(
coset(0, ay - 1, az), 1) + &
282 f2*real(ay - 1,
dp)*sc(
coset(0, ay - 2, az), 1) - &
283 f2*kvec(2)*ss(
coset(0, ay - 1, az), 1)
284 ss(
coset(0, ay, az), 1) = rap(2)*ss(
coset(0, ay - 1, az), 1) + &
285 f2*real(ay - 1,
dp)*ss(
coset(0, ay - 2, az), 1) + &
286 f2*kvec(2)*sc(
coset(0, ay - 1, az), 1)
293 sc(
coset(1, ay, az), 1) = rap(1)*sc(
coset(0, ay, az), 1) - &
294 f2*kvec(1)*ss(
coset(0, ay, az), 1)
295 ss(
coset(1, ay, az), 1) = rap(1)*ss(
coset(0, ay, az), 1) + &
296 f2*kvec(1)*sc(
coset(0, ay, az), 1)
300 f3 = f2*real(ax - 1,
dp)
303 sc(
coset(ax, ay, az), 1) = rap(1)*sc(
coset(ax - 1, ay, az), 1) + &
304 f3*sc(
coset(ax - 2, ay, az), 1) - &
305 f2*kvec(1)*ss(
coset(ax - 1, ay, az), 1)
306 ss(
coset(ax, ay, az), 1) = rap(1)*ss(
coset(ax - 1, ay, az), 1) + &
307 f3*ss(
coset(ax - 2, ay, az), 1) + &
308 f2*kvec(1)*sc(
coset(ax - 1, ay, az), 1)
327 rbp(:) = rap(:) - rab(:)
331 IF (lb_max == 1)
THEN
334 la_start = max(0, la_min - 1)
337 DO la = la_start, la_max - 1
341 sc(
coset(ax, ay, az), 2) = sc(
coset(ax + 1, ay, az), 1) - &
342 rab(1)*sc(
coset(ax, ay, az), 1)
343 sc(
coset(ax, ay, az), 3) = sc(
coset(ax, ay + 1, az), 1) - &
344 rab(2)*sc(
coset(ax, ay, az), 1)
345 sc(
coset(ax, ay, az), 4) = sc(
coset(ax, ay, az + 1), 1) - &
346 rab(3)*sc(
coset(ax, ay, az), 1)
347 ss(
coset(ax, ay, az), 2) = ss(
coset(ax + 1, ay, az), 1) - &
348 rab(1)*ss(
coset(ax, ay, az), 1)
349 ss(
coset(ax, ay, az), 3) = ss(
coset(ax, ay + 1, az), 1) - &
350 rab(2)*ss(
coset(ax, ay, az), 1)
351 ss(
coset(ax, ay, az), 4) = ss(
coset(ax, ay, az + 1), 1) - &
352 rab(3)*ss(
coset(ax, ay, az), 1)
364 DO ay = 0, la_max - ax
366 az = la_max - ax - ay
369 sc(
coset(ax, ay, az), 2) = rbp(1)*sc(
coset(ax, ay, az), 1) - &
370 f2*kvec(1)*ss(
coset(ax, ay, az), 1)
371 ss(
coset(ax, ay, az), 2) = rbp(1)*ss(
coset(ax, ay, az), 1) + &
372 f2*kvec(1)*sc(
coset(ax, ay, az), 1)
374 sc(
coset(ax, ay, az), 2) = rbp(1)*sc(
coset(ax, ay, az), 1) + &
375 fx*sc(
coset(ax - 1, ay, az), 1) - &
376 f2*kvec(1)*ss(
coset(ax, ay, az), 1)
377 ss(
coset(ax, ay, az), 2) = rbp(1)*ss(
coset(ax, ay, az), 1) + &
378 fx*ss(
coset(ax - 1, ay, az), 1) + &
379 f2*kvec(1)*sc(
coset(ax, ay, az), 1)
382 sc(
coset(ax, ay, az), 3) = rbp(2)*sc(
coset(ax, ay, az), 1) - &
383 f2*kvec(2)*ss(
coset(ax, ay, az), 1)
384 ss(
coset(ax, ay, az), 3) = rbp(2)*ss(
coset(ax, ay, az), 1) + &
385 f2*kvec(2)*sc(
coset(ax, ay, az), 1)
387 sc(
coset(ax, ay, az), 3) = rbp(2)*sc(
coset(ax, ay, az), 1) + &
388 fy*sc(
coset(ax, ay - 1, az), 1) - &
389 f2*kvec(2)*ss(
coset(ax, ay, az), 1)
390 ss(
coset(ax, ay, az), 3) = rbp(2)*ss(
coset(ax, ay, az), 1) + &
391 fy*ss(
coset(ax, ay - 1, az), 1) + &
392 f2*kvec(2)*sc(
coset(ax, ay, az), 1)
395 sc(
coset(ax, ay, az), 4) = rbp(3)*sc(
coset(ax, ay, az), 1) - &
396 f2*kvec(3)*ss(
coset(ax, ay, az), 1)
397 ss(
coset(ax, ay, az), 4) = rbp(3)*ss(
coset(ax, ay, az), 1) + &
398 f2*kvec(3)*sc(
coset(ax, ay, az), 1)
400 sc(
coset(ax, ay, az), 4) = rbp(3)*sc(
coset(ax, ay, az), 1) + &
401 fz*sc(
coset(ax, ay, az - 1), 1) - &
402 f2*kvec(3)*ss(
coset(ax, ay, az), 1)
403 ss(
coset(ax, ay, az), 4) = rbp(3)*ss(
coset(ax, ay, az), 1) + &
404 fz*ss(
coset(ax, ay, az - 1), 1) + &
405 f2*kvec(3)*sc(
coset(ax, ay, az), 1)
418 IF (lb == lb_max)
THEN
421 la_start = max(0, la_min - 1)
424 DO la = la_start, la_max - 1
432 sc(
coset(ax, ay, az + 1),
coset(0, 0, lb - 1)) - &
433 rab(3)*sc(
coset(ax, ay, az),
coset(0, 0, lb - 1))
435 ss(
coset(ax, ay, az + 1),
coset(0, 0, lb - 1)) - &
436 rab(3)*ss(
coset(ax, ay, az),
coset(0, 0, lb - 1))
443 sc(
coset(ax, ay + 1, az),
coset(0, by - 1, bz)) - &
444 rab(2)*sc(
coset(ax, ay, az),
coset(0, by - 1, bz))
446 ss(
coset(ax, ay + 1, az),
coset(0, by - 1, bz)) - &
447 rab(2)*ss(
coset(ax, ay, az),
coset(0, by - 1, bz))
456 sc(
coset(ax + 1, ay, az),
coset(bx - 1, by, bz)) - &
457 rab(1)*sc(
coset(ax, ay, az),
coset(bx - 1, by, bz))
459 ss(
coset(ax + 1, ay, az),
coset(bx - 1, by, bz)) - &
460 rab(1)*ss(
coset(ax, ay, az),
coset(bx - 1, by, bz))
475 DO ay = 0, la_max - ax
477 az = la_max - ax - ay
482 f3 = f2*real(lb - 1,
dp)
486 rbp(3)*sc(
coset(ax, ay, az),
coset(0, 0, lb - 1)) + &
487 f3*sc(
coset(ax, ay, az),
coset(0, 0, lb - 2)) - &
488 f2*kvec(3)*ss(
coset(ax, ay, az),
coset(0, 0, lb - 1))
490 rbp(3)*ss(
coset(ax, ay, az),
coset(0, 0, lb - 1)) + &
491 f3*ss(
coset(ax, ay, az),
coset(0, 0, lb - 2)) + &
492 f2*kvec(3)*sc(
coset(ax, ay, az),
coset(0, 0, lb - 1))
495 rbp(3)*sc(
coset(ax, ay, az),
coset(0, 0, lb - 1)) + &
496 fz*sc(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1)) + &
497 f3*sc(
coset(ax, ay, az),
coset(0, 0, lb - 2)) - &
498 f2*kvec(3)*ss(
coset(ax, ay, az),
coset(0, 0, lb - 1))
500 rbp(3)*ss(
coset(ax, ay, az),
coset(0, 0, lb - 1)) + &
501 fz*ss(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1)) + &
502 f3*ss(
coset(ax, ay, az),
coset(0, 0, lb - 2)) + &
503 f2*kvec(3)*sc(
coset(ax, ay, az),
coset(0, 0, lb - 1))
511 rbp(2)*sc(
coset(ax, ay, az),
coset(0, 0, bz)) - &
512 f2*kvec(2)*ss(
coset(ax, ay, az),
coset(0, 0, bz))
514 rbp(2)*ss(
coset(ax, ay, az),
coset(0, 0, bz)) + &
515 f2*kvec(2)*sc(
coset(ax, ay, az),
coset(0, 0, bz))
518 f3 = f2*real(by - 1,
dp)
520 rbp(2)*sc(
coset(ax, ay, az),
coset(0, by - 1, bz)) + &
521 f3*sc(
coset(ax, ay, az),
coset(0, by - 2, bz)) - &
522 f2*kvec(2)*ss(
coset(ax, ay, az),
coset(0, by - 1, bz))
524 rbp(2)*ss(
coset(ax, ay, az),
coset(0, by - 1, bz)) + &
525 f3*ss(
coset(ax, ay, az),
coset(0, by - 2, bz)) + &
526 f2*kvec(2)*sc(
coset(ax, ay, az),
coset(0, by - 1, bz))
531 rbp(2)*sc(
coset(ax, ay, az),
coset(0, 0, bz)) + &
532 fy*sc(
coset(ax, ay - 1, az),
coset(0, 0, bz)) - &
533 f2*kvec(2)*ss(
coset(ax, ay, az),
coset(0, 0, bz))
535 rbp(2)*ss(
coset(ax, ay, az),
coset(0, 0, bz)) + &
536 fy*ss(
coset(ax, ay - 1, az),
coset(0, 0, bz)) + &
537 f2*kvec(2)*sc(
coset(ax, ay, az),
coset(0, 0, bz))
540 f3 = f2*real(by - 1,
dp)
542 rbp(2)*sc(
coset(ax, ay, az),
coset(0, by - 1, bz)) + &
543 fy*sc(
coset(ax, ay - 1, az),
coset(0, by - 1, bz)) + &
544 f3*sc(
coset(ax, ay, az),
coset(0, by - 2, bz)) - &
545 f2*kvec(2)*ss(
coset(ax, ay, az),
coset(0, by - 1, bz))
547 rbp(2)*ss(
coset(ax, ay, az),
coset(0, by - 1, bz)) + &
548 fy*ss(
coset(ax, ay - 1, az),
coset(0, by - 1, bz)) + &
549 f3*ss(
coset(ax, ay, az),
coset(0, by - 2, bz)) + &
550 f2*kvec(2)*sc(
coset(ax, ay, az),
coset(0, by - 1, bz))
560 rbp(1)*sc(
coset(ax, ay, az),
coset(0, by, bz)) - &
561 f2*kvec(1)*ss(
coset(ax, ay, az),
coset(0, by, bz))
563 rbp(1)*ss(
coset(ax, ay, az),
coset(0, by, bz)) + &
564 f2*kvec(1)*sc(
coset(ax, ay, az),
coset(0, by, bz))
567 f3 = f2*real(bx - 1,
dp)
571 rbp(1)*sc(
coset(ax, ay, az), &
572 coset(bx - 1, by, bz)) + &
573 f3*sc(
coset(ax, ay, az),
coset(bx - 2, by, bz)) - &
574 f2*kvec(1)*ss(
coset(ax, ay, az),
coset(bx - 1, by, bz))
576 rbp(1)*ss(
coset(ax, ay, az), &
577 coset(bx - 1, by, bz)) + &
578 f3*ss(
coset(ax, ay, az),
coset(bx - 2, by, bz)) + &
579 f2*kvec(1)*sc(
coset(ax, ay, az),
coset(bx - 1, by, bz))
586 rbp(1)*sc(
coset(ax, ay, az),
coset(0, by, bz)) + &
587 fx*sc(
coset(ax - 1, ay, az),
coset(0, by, bz)) - &
588 f2*kvec(1)*ss(
coset(ax, ay, az),
coset(0, by, bz))
590 rbp(1)*ss(
coset(ax, ay, az),
coset(0, by, bz)) + &
591 fx*ss(
coset(ax - 1, ay, az),
coset(0, by, bz)) + &
592 f2*kvec(1)*sc(
coset(ax, ay, az),
coset(0, by, bz))
595 f3 = f2*real(bx - 1,
dp)
599 rbp(1)*sc(
coset(ax, ay, az), &
600 coset(bx - 1, by, bz)) + &
601 fx*sc(
coset(ax - 1, ay, az),
coset(bx - 1, by, bz)) + &
602 f3*sc(
coset(ax, ay, az),
coset(bx - 2, by, bz)) - &
603 f2*kvec(1)*ss(
coset(ax, ay, az),
coset(bx - 1, by, bz))
605 rbp(1)*ss(
coset(ax, ay, az), &
606 coset(bx - 1, by, bz)) + &
607 fx*ss(
coset(ax - 1, ay, az),
coset(bx - 1, by, bz)) + &
608 f3*ss(
coset(ax, ay, az),
coset(bx - 2, by, bz)) + &
609 f2*kvec(1)*sc(
coset(ax, ay, az),
coset(bx - 1, by, bz))
627 rbp(:) = (f1 - 1.0_dp)*rab(:)
631 sc(1, 2) = rbp(1)*sc(1, 1) - f2*kvec(1)*ss(1, 1)
632 sc(1, 3) = rbp(2)*sc(1, 1) - f2*kvec(2)*ss(1, 1)
633 sc(1, 4) = rbp(3)*sc(1, 1) - f2*kvec(3)*ss(1, 1)
634 ss(1, 2) = rbp(1)*ss(1, 1) + f2*kvec(1)*sc(1, 1)
635 ss(1, 3) = rbp(2)*ss(1, 1) + f2*kvec(2)*sc(1, 1)
636 ss(1, 4) = rbp(3)*ss(1, 1) + f2*kvec(3)*sc(1, 1)
645 sc(1,
coset(0, 0, lb)) = rbp(3)*sc(1,
coset(0, 0, lb - 1)) + &
646 f2*real(lb - 1,
dp)*sc(1,
coset(0, 0, lb - 2)) - &
647 f2*kvec(3)*ss(1,
coset(0, 0, lb - 1))
648 ss(1,
coset(0, 0, lb)) = rbp(3)*ss(1,
coset(0, 0, lb - 1)) + &
649 f2*real(lb - 1,
dp)*ss(1,
coset(0, 0, lb - 2)) + &
650 f2*kvec(3)*sc(1,
coset(0, 0, lb - 1))
655 sc(1,
coset(0, 1, bz)) = rbp(2)*sc(1,
coset(0, 0, bz)) - &
656 f2*kvec(2)*ss(1,
coset(0, 0, bz))
657 ss(1,
coset(0, 1, bz)) = rbp(2)*ss(1,
coset(0, 0, bz)) + &
658 f2*kvec(2)*sc(1,
coset(0, 0, bz))
662 sc(1,
coset(0, by, bz)) = rbp(2)*sc(1,
coset(0, by - 1, bz)) + &
663 f2*real(by - 1,
dp)*sc(1,
coset(0, by - 2, bz)) - &
664 f2*kvec(2)*ss(1,
coset(0, by - 1, bz))
665 ss(1,
coset(0, by, bz)) = rbp(2)*ss(1,
coset(0, by - 1, bz)) + &
666 f2*real(by - 1,
dp)*ss(1,
coset(0, by - 2, bz)) + &
667 f2*kvec(2)*sc(1,
coset(0, by - 1, bz))
674 sc(1,
coset(1, by, bz)) = rbp(1)*sc(1,
coset(0, by, bz)) - &
675 f2*kvec(1)*ss(1,
coset(0, by, bz))
676 ss(1,
coset(1, by, bz)) = rbp(1)*ss(1,
coset(0, by, bz)) + &
677 f2*kvec(1)*sc(1,
coset(0, by, bz))
681 f3 = f2*real(bx - 1,
dp)
684 sc(1,
coset(bx, by, bz)) = rbp(1)*sc(1,
coset(bx - 1, by, bz)) + &
685 f3*sc(1,
coset(bx - 2, by, bz)) - &
686 f2*kvec(1)*ss(1,
coset(bx - 1, by, bz))
687 ss(1,
coset(bx, by, bz)) = rbp(1)*ss(1,
coset(bx - 1, by, bz)) + &
688 f3*ss(1,
coset(bx - 2, by, bz)) + &
689 f2*kvec(1)*sc(1,
coset(bx - 1, by, bz))
701 cosab(na + i, nb + j) = sc(i, j)
702 sinab(na + i, nb + j) = ss(i, j)
706 IF (
PRESENT(dcosab))
THEN
714 DO da = 0, da_max - 1
715 ftz = 2.0_dp*zeta(ipgf)
719 cda =
coset(dax, day, daz) - 1
720 cdax =
coset(dax + 1, day, daz) - 1
721 cday =
coset(dax, day + 1, daz) - 1
722 cdaz =
coset(dax, day, daz + 1) - 1
725 DO la = la_start, la_max - da - 1
732 coa =
coset(ax, ay, az)
733 coamx =
coset(ax - 1, ay, az)
734 coamy =
coset(ax, ay - 1, az)
735 coamz =
coset(ax, ay, az - 1)
736 coapx =
coset(ax + 1, ay, az)
737 coapy =
coset(ax, ay + 1, az)
738 coapz =
coset(ax, ay, az + 1)
739 DO lb = lb_start, lb_max
743 cob =
coset(bx, by, bz)
744 dscos(coa, cob, cdax) = ftz*sc(coapx, cob) - fax*sc(coamx, cob)
745 dscos(coa, cob, cday) = ftz*sc(coapy, cob) - fay*sc(coamy, cob)
746 dscos(coa, cob, cdaz) = ftz*sc(coapz, cob) - faz*sc(coamz, cob)
747 dssin(coa, cob, cdax) = ftz*ss(coapx, cob) - fax*ss(coamx, cob)
748 dssin(coa, cob, cday) = ftz*ss(coapy, cob) - fay*ss(coamy, cob)
749 dssin(coa, cob, cdaz) = ftz*ss(coapz, cob) - faz*ss(coamz, cob)
761 IF (
PRESENT(dcosab))
THEN
764 DO i = 1,
ncoset(la_max_set)
765 dcosab(na + i, nb + j, k) = dscos(i, j, k)
766 dsinab(na + i, nb + j, k) = dssin(i, j, k)
776 na = na +
ncoset(la_max_set)
799 lb_max, npgfb, zetb, rpgfb, &
800 lc_max, rac, rbc, mab)
802 INTEGER,
INTENT(IN) :: la_max, npgfa
803 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
804 INTEGER,
INTENT(IN) :: la_min, lb_max, npgfb
805 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
806 INTEGER,
INTENT(IN) :: lc_max
807 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac, rbc
808 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: mab
810 INTEGER :: ax, ay, az, bx, by, bz, i, ipgf, j, &
811 jpgf, k, l, l1, l2, la, la_start, lb, &
812 lx, lx1, ly, ly1, lz, lz1, na, nb, ni
813 REAL(kind=
dp) :: dab, f0, f1, f2, f2x, f2y, f2z, f3, fx, &
815 REAL(kind=
dp),
DIMENSION(3) :: rab, rap, rbp, rpc
816 REAL(kind=
dp),
DIMENSION(ncoset(la_max), ncoset(&
lb_max), ncoset(lc_max)) :: s
835 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab)
THEN
836 DO k = 1,
ncoset(lc_max) - 1
837 DO j = nb + 1, nb +
ncoset(lb_max)
838 DO i = na + 1, na +
ncoset(la_max)
839 mab(i, j, k) = 0.0_dp
849 zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
851 f0 = (
pi*zetp)**1.5_dp
857 rpc = zetp*(zeta(ipgf)*rac + zetb(jpgf)*rbc)
858 s(1, 1, 1) = f0*exp(-zeta(ipgf)*f1*rab2)
865 l1 =
coset(lx, ly, lz - 1)
866 IF (lz > 1) l2 =
coset(lx, ly, lz - 2)
869 ELSE IF (ly > 0)
THEN
870 l1 =
coset(lx, ly - 1, lz)
871 IF (ly > 1) l2 =
coset(lx, ly - 2, lz)
874 ELSE IF (lx > 0)
THEN
875 l1 =
coset(lx - 1, ly, lz)
876 IF (lx > 1) l2 =
coset(lx - 2, ly, lz)
880 s(1, 1, l) = rpc(i)*s(1, 1, l1)
881 IF (l2 > 0) s(1, 1, l) = s(1, 1, l) + f2*real(ni,
dp)*s(1, 1, l2)
892 lx1 =
coset(lx - 1, ly, lz)
897 ly1 =
coset(lx, ly - 1, lz)
902 lz1 =
coset(lx, ly, lz - 1)
906 f2x = f2*real(lx,
dp)
907 f2y = f2*real(ly,
dp)
908 f2z = f2*real(lz,
dp)
918 s(2, 1, l) = rap(1)*s(1, 1, l)
919 s(3, 1, l) = rap(2)*s(1, 1, l)
920 s(4, 1, l) = rap(3)*s(1, 1, l)
921 IF (lx1 > 0) s(2, 1, l) = s(2, 1, l) + f2x*s(1, 1, lx1)
922 IF (ly1 > 0) s(3, 1, l) = s(3, 1, l) + f2y*s(1, 1, ly1)
923 IF (lz1 > 0) s(4, 1, l) = s(4, 1, l) + f2z*s(1, 1, lz1)
932 s(
coset(0, 0, la), 1, l) = rap(3)*s(
coset(0, 0, la - 1), 1, l) + &
933 f2*real(la - 1,
dp)*s(
coset(0, 0, la - 2), 1, l)
934 IF (lz1 > 0) s(
coset(0, 0, la), 1, l) = s(
coset(0, 0, la), 1, l) + &
935 f2z*s(
coset(0, 0, la - 1), 1, lz1)
940 s(
coset(0, 1, az), 1, l) = rap(2)*s(
coset(0, 0, az), 1, l)
941 IF (ly1 > 0) s(
coset(0, 1, az), 1, l) = s(
coset(0, 1, az), 1, l) + &
942 f2y*s(
coset(0, 0, az), 1, ly1)
946 s(
coset(0, ay, az), 1, l) = rap(2)*s(
coset(0, ay - 1, az), 1, l) + &
947 f2*real(ay - 1,
dp)*s(
coset(0, ay - 2, az), 1, l)
948 IF (ly1 > 0) s(
coset(0, ay, az), 1, l) = s(
coset(0, ay, az), 1, l) + &
949 f2y*s(
coset(0, ay - 1, az), 1, ly1)
956 s(
coset(1, ay, az), 1, l) = rap(1)*s(
coset(0, ay, az), 1, l)
957 IF (lx1 > 0) s(
coset(1, ay, az), 1, l) = s(
coset(1, ay, az), 1, l) + &
958 f2x*s(
coset(0, ay, az), 1, lx1)
962 f3 = f2*real(ax - 1,
dp)
965 s(
coset(ax, ay, az), 1, l) = rap(1)*s(
coset(ax - 1, ay, az), 1, l) + &
966 f3*s(
coset(ax - 2, ay, az), 1, l)
967 IF (lx1 > 0) s(
coset(ax, ay, az), 1, l) = s(
coset(ax, ay, az), 1, l) + &
968 f2x*s(
coset(ax - 1, ay, az), 1, lx1)
986 rbp(:) = rap(:) - rab(:)
990 IF (lb_max == 1)
THEN
993 la_start = max(0, la_min - 1)
996 DO la = la_start, la_max - 1
1000 s(
coset(ax, ay, az), 2, l) = s(
coset(ax + 1, ay, az), 1, l) - &
1001 rab(1)*s(
coset(ax, ay, az), 1, l)
1002 s(
coset(ax, ay, az), 3, l) = s(
coset(ax, ay + 1, az), 1, l) - &
1003 rab(2)*s(
coset(ax, ay, az), 1, l)
1004 s(
coset(ax, ay, az), 4, l) = s(
coset(ax, ay, az + 1), 1, l) - &
1005 rab(3)*s(
coset(ax, ay, az), 1, l)
1016 fx = f2*real(ax,
dp)
1017 DO ay = 0, la_max - ax
1018 fy = f2*real(ay,
dp)
1019 az = la_max - ax - ay
1020 fz = f2*real(az,
dp)
1022 s(
coset(ax, ay, az), 2, l) = rbp(1)*s(
coset(ax, ay, az), 1, l)
1024 s(
coset(ax, ay, az), 2, l) = rbp(1)*s(
coset(ax, ay, az), 1, l) + &
1025 fx*s(
coset(ax - 1, ay, az), 1, l)
1027 IF (lx1 > 0) s(
coset(ax, ay, az), 2, l) = s(
coset(ax, ay, az), 2, l) + &
1028 f2x*s(
coset(ax, ay, az), 1, lx1)
1030 s(
coset(ax, ay, az), 3, l) = rbp(2)*s(
coset(ax, ay, az), 1, l)
1032 s(
coset(ax, ay, az), 3, l) = rbp(2)*s(
coset(ax, ay, az), 1, l) + &
1033 fy*s(
coset(ax, ay - 1, az), 1, l)
1035 IF (ly1 > 0) s(
coset(ax, ay, az), 3, l) = s(
coset(ax, ay, az), 3, l) + &
1036 f2y*s(
coset(ax, ay, az), 1, ly1)
1038 s(
coset(ax, ay, az), 4, l) = rbp(3)*s(
coset(ax, ay, az), 1, l)
1040 s(
coset(ax, ay, az), 4, l) = rbp(3)*s(
coset(ax, ay, az), 1, l) + &
1041 fz*s(
coset(ax, ay, az - 1), 1, l)
1043 IF (lz1 > 0) s(
coset(ax, ay, az), 4, l) = s(
coset(ax, ay, az), 4, l) + &
1044 f2z*s(
coset(ax, ay, az), 1, lz1)
1056 IF (lb == lb_max)
THEN
1059 la_start = max(0, la_min - 1)
1062 DO la = la_start, la_max - 1
1070 s(
coset(ax, ay, az + 1),
coset(0, 0, lb - 1), l) - &
1071 rab(3)*s(
coset(ax, ay, az),
coset(0, 0, lb - 1), l)
1077 s(
coset(ax, ay, az),
coset(0, by, bz), l) = &
1078 s(
coset(ax, ay + 1, az),
coset(0, by - 1, bz), l) - &
1079 rab(2)*s(
coset(ax, ay, az),
coset(0, by - 1, bz), l)
1087 s(
coset(ax, ay, az),
coset(bx, by, bz), l) = &
1088 s(
coset(ax + 1, ay, az),
coset(bx - 1, by, bz), l) - &
1089 rab(1)*s(
coset(ax, ay, az),
coset(bx - 1, by, bz), l)
1103 fx = f2*real(ax,
dp)
1104 DO ay = 0, la_max - ax
1105 fy = f2*real(ay,
dp)
1106 az = la_max - ax - ay
1107 fz = f2*real(az,
dp)
1111 f3 = f2*real(lb - 1,
dp)
1115 rbp(3)*s(
coset(ax, ay, az),
coset(0, 0, lb - 1), l) + &
1116 f3*s(
coset(ax, ay, az),
coset(0, 0, lb - 2), l)
1119 rbp(3)*s(
coset(ax, ay, az),
coset(0, 0, lb - 1), l) + &
1120 fz*s(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1), l) + &
1121 f3*s(
coset(ax, ay, az),
coset(0, 0, lb - 2), l)
1123 IF (lz1 > 0) s(
coset(ax, ay, az),
coset(0, 0, lb), l) = &
1125 f2z*s(
coset(ax, ay, az),
coset(0, 0, lb - 1), lz1)
1132 rbp(2)*s(
coset(ax, ay, az),
coset(0, 0, bz), l)
1133 IF (ly1 > 0) s(
coset(ax, ay, az),
coset(0, 1, bz), l) = &
1135 f2y*s(
coset(ax, ay, az),
coset(0, 0, bz), ly1)
1138 f3 = f2*real(by - 1,
dp)
1139 s(
coset(ax, ay, az),
coset(0, by, bz), l) = &
1140 rbp(2)*s(
coset(ax, ay, az),
coset(0, by - 1, bz), l) + &
1141 f3*s(
coset(ax, ay, az),
coset(0, by - 2, bz), l)
1142 IF (ly1 > 0) s(
coset(ax, ay, az),
coset(0, by, bz), l) = &
1143 s(
coset(ax, ay, az),
coset(0, by, bz), l) + &
1144 f2y*s(
coset(ax, ay, az),
coset(0, by - 1, bz), ly1)
1149 rbp(2)*s(
coset(ax, ay, az),
coset(0, 0, bz), l) + &
1150 fy*s(
coset(ax, ay - 1, az),
coset(0, 0, bz), l)
1151 IF (ly1 > 0) s(
coset(ax, ay, az),
coset(0, 1, bz), l) = &
1153 f2y*s(
coset(ax, ay, az),
coset(0, 0, bz), ly1)
1156 f3 = f2*real(by - 1,
dp)
1157 s(
coset(ax, ay, az),
coset(0, by, bz), l) = &
1158 rbp(2)*s(
coset(ax, ay, az),
coset(0, by - 1, bz), l) + &
1159 fy*s(
coset(ax, ay - 1, az),
coset(0, by - 1, bz), l) + &
1160 f3*s(
coset(ax, ay, az),
coset(0, by - 2, bz), l)
1161 IF (ly1 > 0) s(
coset(ax, ay, az),
coset(0, by, bz), l) = &
1162 s(
coset(ax, ay, az),
coset(0, by, bz), l) + &
1163 f2y*s(
coset(ax, ay, az),
coset(0, by - 1, bz), ly1)
1172 s(
coset(ax, ay, az),
coset(1, by, bz), l) = &
1173 rbp(1)*s(
coset(ax, ay, az),
coset(0, by, bz), l)
1174 IF (lx1 > 0) s(
coset(ax, ay, az),
coset(1, by, bz), l) = &
1175 s(
coset(ax, ay, az),
coset(1, by, bz), l) + &
1176 f2x*s(
coset(ax, ay, az),
coset(0, by, bz), lx1)
1179 f3 = f2*real(bx - 1,
dp)
1182 s(
coset(ax, ay, az),
coset(bx, by, bz), l) = &
1183 rbp(1)*s(
coset(ax, ay, az),
coset(bx - 1, by, bz), l) + &
1184 f3*s(
coset(ax, ay, az),
coset(bx - 2, by, bz), l)
1185 IF (lx1 > 0) s(
coset(ax, ay, az),
coset(bx, by, bz), l) = &
1186 s(
coset(ax, ay, az),
coset(bx, by, bz), l) + &
1187 f2x*s(
coset(ax, ay, az),
coset(bx - 1, by, bz), lx1)
1193 s(
coset(ax, ay, az),
coset(1, by, bz), l) = &
1194 rbp(1)*s(
coset(ax, ay, az),
coset(0, by, bz), l) + &
1195 fx*s(
coset(ax - 1, ay, az),
coset(0, by, bz), l)
1196 IF (lx1 > 0) s(
coset(ax, ay, az),
coset(1, by, bz), l) = &
1197 s(
coset(ax, ay, az),
coset(1, by, bz), l) + &
1198 f2x*s(
coset(ax, ay, az),
coset(0, by, bz), lx1)
1201 f3 = f2*real(bx - 1,
dp)
1204 s(
coset(ax, ay, az),
coset(bx, by, bz), l) = &
1205 rbp(1)*s(
coset(ax, ay, az),
coset(bx - 1, by, bz), l) + &
1206 fx*s(
coset(ax - 1, ay, az),
coset(bx - 1, by, bz), l) + &
1207 f3*s(
coset(ax, ay, az),
coset(bx - 2, by, bz), l)
1208 IF (lx1 > 0) s(
coset(ax, ay, az),
coset(bx, by, bz), l) = &
1209 s(
coset(ax, ay, az),
coset(bx, by, bz), l) + &
1210 f2x*s(
coset(ax, ay, az),
coset(bx - 1, by, bz), lx1)
1224 IF (lb_max > 0)
THEN
1228 rbp(:) = (f1 - 1.0_dp)*rab(:)
1232 s(1, 2, l) = rbp(1)*s(1, 1, l)
1233 s(1, 3, l) = rbp(2)*s(1, 1, l)
1234 s(1, 4, l) = rbp(3)*s(1, 1, l)
1235 IF (lx1 > 0) s(1, 2, l) = s(1, 2, l) + f2x*s(1, 1, lx1)
1236 IF (ly1 > 0) s(1, 3, l) = s(1, 3, l) + f2y*s(1, 1, ly1)
1237 IF (lz1 > 0) s(1, 4, l) = s(1, 4, l) + f2z*s(1, 1, lz1)
1246 s(1,
coset(0, 0, lb), l) = rbp(3)*s(1,
coset(0, 0, lb - 1), l) + &
1247 f2*real(lb - 1,
dp)*s(1,
coset(0, 0, lb - 2), l)
1248 IF (lz1 > 0) s(1,
coset(0, 0, lb), l) = s(1,
coset(0, 0, lb), l) + &
1249 f2z*s(1,
coset(0, 0, lb - 1), lz1)
1254 s(1,
coset(0, 1, bz), l) = rbp(2)*s(1,
coset(0, 0, bz), l)
1255 IF (ly1 > 0) s(1,
coset(0, 1, bz), l) = s(1,
coset(0, 1, bz), l) + &
1256 f2y*s(1,
coset(0, 0, bz), ly1)
1260 s(1,
coset(0, by, bz), l) = rbp(2)*s(1,
coset(0, by - 1, bz), l) + &
1261 f2*real(by - 1,
dp)*s(1,
coset(0, by - 2, bz), l)
1262 IF (ly1 > 0) s(1,
coset(0, by, bz), l) = s(1,
coset(0, by, bz), l) + &
1263 f2y*s(1,
coset(0, by - 1, bz), ly1)
1270 s(1,
coset(1, by, bz), l) = rbp(1)*s(1,
coset(0, by, bz), l)
1271 IF (lx1 > 0) s(1,
coset(1, by, bz), l) = s(1,
coset(1, by, bz), l) + &
1272 f2x*s(1,
coset(0, by, bz), lx1)
1276 f3 = f2*real(bx - 1,
dp)
1279 s(1,
coset(bx, by, bz), l) = rbp(1)*s(1,
coset(bx - 1, by, bz), l) + &
1280 f3*s(1,
coset(bx - 2, by, bz), l)
1281 IF (lx1 > 0) s(1,
coset(bx, by, bz), l) = s(1,
coset(bx, by, bz), l) + &
1282 f2x*s(1,
coset(bx - 1, by, bz), lx1)
1297 mab(na + i, nb + j, k - 1) = s(i, j, k)
1345 order, rac, rbc, difmab, mab_ext, deltaR, lambda, iatom, jatom)
1347 INTEGER,
INTENT(IN) :: la_max, npgfa
1348 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
1349 INTEGER,
INTENT(IN) :: la_min, lb_max, npgfb
1350 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
1351 INTEGER,
INTENT(IN) :: lb_min, order
1352 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac, rbc
1353 REAL(kind=
dp),
DIMENSION(:, :, :, :),
INTENT(OUT) :: difmab
1354 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
1356 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: deltar
1357 INTEGER,
INTENT(IN),
OPTIONAL :: lambda, iatom, jatom
1359 INTEGER :: ider, imom, lda, lda_min, ldb, ldb_min
1360 REAL(kind=
dp) :: dab, rab(3), rab2
1361 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: difmab_tmp
1362 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: mab
1368 lda_min = max(0, la_min - 1)
1369 ldb_min = max(0, lb_min - 1)
1370 lda =
ncoset(la_max)*npgfa
1371 ldb =
ncoset(lb_max)*npgfb
1372 ALLOCATE (difmab_tmp(lda, ldb, 3))
1374 IF (
PRESENT(mab_ext))
THEN
1377 ALLOCATE (mab(npgfa*
ncoset(la_max + 1), npgfb*
ncoset(lb_max + 1), &
1381 CALL moment(la_max + 1, npgfa, zeta, rpgfa, lda_min, &
1382 lb_max + 1, npgfb, zetb, rpgfb, &
1383 order, rac, rbc, mab)
1386 DO imom = 1,
ncoset(order) - 1
1387 CALL adbdr(la_max, npgfa, rpgfa, la_min, &
1388 lb_max, npgfb, zetb, rpgfb, lb_min, &
1389 dab, mab(:, :, imom), difmab_tmp(:, :, 1), &
1390 difmab_tmp(:, :, 2), difmab_tmp(:, :, 3))
1391 IF (
PRESENT(deltar))
THEN
1392 cpassert(
ASSOCIATED(deltar))
1393 cpassert(
PRESENT(iatom) .AND.
PRESENT(jatom))
1395 difmab(1:lda, 1:ldb, imom, ider) = &
1396 difmab_tmp(1:lda, 1:ldb, ider)*deltar(ider, jatom)
1399 CALL dabdr(la_max, npgfa, zeta, rpgfa, la_min, &
1400 lb_max, npgfb, rpgfb, lb_min, &
1401 dab, mab(:, :, imom), difmab_tmp(:, :, 1), &
1402 difmab_tmp(:, :, 2), difmab_tmp(:, :, 3))
1404 difmab(1:lda, 1:ldb, imom, ider) = difmab(1:lda, 1:ldb, imom, ider) &
1405 + difmab_tmp(1:lda, 1:ldb, ider)*deltar(ider, iatom)
1408 difmab(1:lda, 1:ldb, imom, :) = difmab_tmp(1:lda, 1:ldb, :)
1412 IF (
PRESENT(lambda))
THEN
1413 cpassert(.NOT.
PRESENT(deltar))
1414 cpassert(
PRESENT(iatom) .AND.
PRESENT(jatom))
1415 IF (iatom == lambda .AND. jatom == lambda)
THEN
1417 ELSE IF (iatom == lambda)
THEN
1419 ELSE IF (jatom == lambda)
THEN
1426 IF (
PRESENT(mab_ext))
THEN
1431 DEALLOCATE (difmab_tmp)
1459 order, rac, rbc, pab, forcea, forceb)
1461 INTEGER,
INTENT(IN) :: la_max, npgfa
1462 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
1463 INTEGER,
INTENT(IN) :: la_min, lb_max, npgfb
1464 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
1465 INTEGER,
INTENT(IN) :: lb_min, order
1466 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac, rbc
1467 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
1468 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: forcea, forceb
1470 INTEGER :: i, imom, ipgf, j, jpgf, lda, lda_min, &
1471 ldb, ldb_min, na, nb
1472 REAL(kind=
dp) :: dab, rab(3), rab2
1473 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: difmab, mab
1475 cpassert(order == 1)
1482 lda_min = max(0, la_min - 1)
1483 ldb_min = max(0, lb_min - 1)
1484 lda =
ncoset(la_max)*npgfa
1485 ldb =
ncoset(lb_max)*npgfb
1486 ALLOCATE (difmab(lda, ldb, 3))
1487 ALLOCATE (mab(npgfa*
ncoset(la_max + 1), npgfb*
ncoset(lb_max + 1), 3))
1489 CALL moment(la_max + 1, npgfa, zeta, rpgfa, lda_min, &
1490 lb_max + 1, npgfb, zetb, rpgfb, 1, rac, rbc, mab)
1494 CALL adbdr(la_max, npgfa, rpgfa, la_min, lb_max, npgfb, zetb, rpgfb, lb_min, &
1495 dab, mab(:, :, imom), difmab(:, :, 1), difmab(:, :, 2), difmab(:, :, 3))
1500 DO j = nb +
ncoset(lb_min - 1) + 1, nb +
ncoset(lb_max)
1501 DO i = na +
ncoset(la_min - 1) + 1, na +
ncoset(la_max)
1502 forceb(imom, 1) = forceb(imom, 1) + pab(i, j)*difmab(i, j, 1)
1503 forceb(imom, 2) = forceb(imom, 2) + pab(i, j)*difmab(i, j, 2)
1504 forceb(imom, 3) = forceb(imom, 3) + pab(i, j)*difmab(i, j, 3)
1513 CALL dabdr(la_max, npgfa, zeta, rpgfa, la_min, lb_max, npgfb, rpgfb, lb_min, &
1514 dab, mab(:, :, imom), difmab(:, :, 1), difmab(:, :, 2), difmab(:, :, 3))
1519 DO j = nb +
ncoset(lb_min - 1) + 1, nb +
ncoset(lb_max)
1520 DO i = na +
ncoset(la_min - 1) + 1, na +
ncoset(la_max)
1521 forcea(imom, 1) = forcea(imom, 1) + pab(i, j)*difmab(i, j, 1)
1522 forcea(imom, 2) = forcea(imom, 2) + pab(i, j)*difmab(i, j, 2)
1523 forcea(imom, 3) = forcea(imom, 3) + pab(i, j)*difmab(i, j, 3)
1532 DEALLOCATE (mab, difmab)