51 #include "../base/base_uses.f90"
57 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_overlap3'
102 SUBROUTINE overlap3(la_max_set, npgfa, zeta, rpgfa, la_min_set, &
103 lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
104 lc_max_set, npgfc, zetc, rpgfc, lc_min_set, &
105 rab, dab, rac, dac, rbc, dbc, sabc, &
106 sdabc, sabdc, int_abc_ext)
108 INTEGER,
INTENT(IN) :: la_max_set, npgfa
109 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
110 INTEGER,
INTENT(IN) :: la_min_set, lb_max_set, npgfb
111 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
112 INTEGER,
INTENT(IN) :: lb_min_set, lc_max_set, npgfc
113 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetc, rpgfc
114 INTEGER,
INTENT(IN) :: lc_min_set
115 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
116 REAL(kind=
dp),
INTENT(IN) :: dab
117 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
118 REAL(kind=
dp),
INTENT(IN) :: dac
119 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rbc
120 REAL(kind=
dp),
INTENT(IN) :: dbc
121 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: sabc
122 REAL(kind=
dp),
DIMENSION(:, :, :, :), &
123 INTENT(INOUT),
OPTIONAL :: sdabc, sabdc
124 REAL(
dp),
INTENT(OUT),
OPTIONAL :: int_abc_ext
126 CHARACTER(len=*),
PARAMETER :: routinen =
'overlap3'
128 INTEGER :: ax, ay, az, bx, by, bz, coa, coax, coay, coaz, coc, cocx, cocy, cocz, cx, cy, cz, &
129 handle, i, ipgf, j, jpgf, k, kpgf, l, la, la_max, la_min, la_start, lai, lb, lb_max, &
130 lb_min, lbi, lc, lc_max, lc_min, lci, na, nb, nc, nda, ndc
131 REAL(kind=
dp) :: f0, f1, f2, f3, fcx, fcy, fcz, fx, fy, &
133 REAL(kind=
dp),
DIMENSION(3) :: rag, rbg, rcg, rcp
134 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: s
135 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: sda, sdc
139 CALL timeset(routinen, handle)
141 NULLIFY (s, sda, sdc)
147 IF (
PRESENT(sdabc)) lai = 1
148 IF (
PRESENT(sabdc)) lci = 1
150 la_max = la_max_set + lai
151 la_min = max(0, la_min_set - lai)
154 lc_max = lc_max_set + lci
155 lc_min = max(0, lc_min_set - lci)
159 IF (
PRESENT(sdabc))
THEN
163 IF (
PRESENT(sabdc))
THEN
167 IF (
PRESENT(int_abc_ext))
THEN
181 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab)
THEN
182 nb = nb +
ncoset(lb_max_set)
191 IF ((rpgfb(jpgf) + rpgfc(kpgf) < dbc) .OR. &
192 (rpgfa(ipgf) + rpgfc(kpgf) < dac))
THEN
193 nc = nc +
ncoset(lc_max_set)
194 ndc = ndc +
ncoset(lc_max_set)
199 zetg = 1.0_dp/(zeta(ipgf) + zetb(jpgf) + zetc(kpgf))
200 zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
201 f0 = (
pi*zetg)**1.5_dp
204 rcp(:) = f1*rab(:) - rac(:)
205 rcp2 = rcp(1)*rcp(1) + rcp(2)*rcp(2) + rcp(3)*rcp(3)
208 s(1, 1, 1) = f0*exp(-(zeta(ipgf)*f1*dab*dab + zetc(kpgf)*zetg*rcp2/zetp))
216 rag(:) = zetg*(zetb(jpgf)*rab(:) + zetc(kpgf)*rac(:))
220 s(2, 1, 1) = rag(1)*s(1, 1, 1)
221 s(3, 1, 1) = rag(2)*s(1, 1, 1)
222 s(4, 1, 1) = rag(3)*s(1, 1, 1)
230 s(
coset(0, 0, la), 1, 1) = rag(3)*s(
coset(0, 0, la - 1), 1, 1) + &
231 f2*real(la - 1,
dp)*s(
coset(0, 0, la - 2), 1, 1)
236 s(
coset(0, 1, az), 1, 1) = rag(2)*s(
coset(0, 0, az), 1, 1)
240 s(
coset(0, ay, az), 1, 1) = rag(2)*s(
coset(0, ay - 1, az), 1, 1) + &
241 f2*real(ay - 1,
dp)*s(
coset(0, ay - 2, az), 1, 1)
248 s(
coset(1, ay, az), 1, 1) = rag(1)*s(
coset(0, ay, az), 1, 1)
252 f3 = f2*real(ax - 1,
dp)
255 s(
coset(ax, ay, az), 1, 1) = rag(1)*s(
coset(ax - 1, ay, az), 1, 1) + &
256 f3*s(
coset(ax - 2, ay, az), 1, 1)
268 rbg(:) = rag(:) - rab(:)
272 IF (lb_max == 1)
THEN
275 la_start = max(0, la_min - 1)
278 DO la = la_start, la_max - 1
282 coa =
coset(ax, ay, az)
283 coax =
coset(ax + 1, ay, az)
284 coay =
coset(ax, ay + 1, az)
285 coaz =
coset(ax, ay, az + 1)
286 s(
coset(ax, ay, az), 2, 1) = s(coax, 1, 1) - rab(1)*s(coa, 1, 1)
287 s(
coset(ax, ay, az), 3, 1) = s(coay, 1, 1) - rab(2)*s(coa, 1, 1)
288 s(
coset(ax, ay, az), 4, 1) = s(coaz, 1, 1) - rab(3)*s(coa, 1, 1)
299 DO ay = 0, la_max - ax
301 az = la_max - ax - ay
303 coa =
coset(ax, ay, az)
305 s(coa, 2, 1) = rbg(1)*s(coa, 1, 1)
307 s(coa, 2, 1) = rbg(1)*s(coa, 1, 1) + fx*s(
coset(ax - 1, ay, az), 1, 1)
310 s(coa, 3, 1) = rbg(2)*s(coa, 1, 1)
312 s(coa, 3, 1) = rbg(2)*s(coa, 1, 1) + fy*s(
coset(ax, ay - 1, az), 1, 1)
315 s(coa, 4, 1) = rbg(3)*s(coa, 1, 1)
317 s(coa, 4, 1) = rbg(3)*s(coa, 1, 1) + fz*s(
coset(ax, ay, az - 1), 1, 1)
330 IF (lb == lb_max)
THEN
333 la_start = max(0, la_min - 1)
336 DO la = la_start, la_max - 1
341 coa =
coset(ax, ay, az)
342 coax =
coset(ax + 1, ay, az)
343 coay =
coset(ax, ay + 1, az)
344 coaz =
coset(ax, ay, az + 1)
348 s(coa,
coset(0, 0, lb), 1) = &
349 s(coaz,
coset(0, 0, lb - 1), 1) - &
350 rab(3)*s(coa,
coset(0, 0, lb - 1), 1)
356 s(coa,
coset(0, by, bz), 1) = &
357 s(coay,
coset(0, by - 1, bz), 1) - &
358 rab(2)*s(coa,
coset(0, by - 1, bz), 1)
366 s(coa,
coset(bx, by, bz), 1) = &
367 s(coax,
coset(bx - 1, by, bz), 1) - &
368 rab(1)*s(coa,
coset(bx - 1, by, bz), 1)
384 DO ay = 0, la_max - ax
386 az = la_max - ax - ay
389 coa =
coset(ax, ay, az)
391 f3 = f2*real(lb - 1,
dp)
396 s(coa,
coset(0, 0, lb), 1) = &
397 rbg(3)*s(coa,
coset(0, 0, lb - 1), 1) + &
398 f3*s(coa,
coset(0, 0, lb - 2), 1)
400 coaz =
coset(ax, ay, az - 1)
401 s(coa,
coset(0, 0, lb), 1) = &
402 rbg(3)*s(coa,
coset(0, 0, lb - 1), 1) + &
403 fz*s(coaz,
coset(0, 0, lb - 1), 1) + &
404 f3*s(coa,
coset(0, 0, lb - 2), 1)
411 s(coa,
coset(0, 1, bz), 1) = &
412 rbg(2)*s(coa,
coset(0, 0, bz), 1)
415 f3 = f2*real(by - 1,
dp)
416 s(coa,
coset(0, by, bz), 1) = &
417 rbg(2)*s(coa,
coset(0, by - 1, bz), 1) + &
418 f3*s(coa,
coset(0, by - 2, bz), 1)
421 coay =
coset(ax, ay - 1, az)
423 s(coa,
coset(0, 1, bz), 1) = &
424 rbg(2)*s(coa,
coset(0, 0, bz), 1) + &
425 fy*s(coay,
coset(0, 0, bz), 1)
428 f3 = f2*real(by - 1,
dp)
429 s(coa,
coset(0, by, bz), 1) = &
430 rbg(2)*s(coa,
coset(0, by - 1, bz), 1) + &
431 fy*s(coay,
coset(0, by - 1, bz), 1) + &
432 f3*s(coa,
coset(0, by - 2, bz), 1)
441 s(coa,
coset(1, by, bz), 1) = &
442 rbg(1)*s(coa,
coset(0, by, bz), 1)
445 f3 = f2*real(bx - 1,
dp)
448 s(coa,
coset(bx, by, bz), 1) = &
449 rbg(1)*s(coa,
coset(bx - 1, by, bz), 1) + &
450 f3*s(coa,
coset(bx - 2, by, bz), 1)
454 coax =
coset(ax - 1, ay, az)
457 s(coa,
coset(1, by, bz), 1) = &
458 rbg(1)*s(coa,
coset(0, by, bz), 1) + &
459 fx*s(coax,
coset(0, by, bz), 1)
462 f3 = f2*real(bx - 1,
dp)
465 s(coa,
coset(bx, by, bz), 1) = &
466 rbg(1)*s(coa,
coset(bx - 1, by, bz), 1) + &
467 fx*s(coax,
coset(bx - 1, by, bz), 1) + &
468 f3*s(coa,
coset(bx - 2, by, bz), 1)
486 rbg(:) = -zetg*(zeta(ipgf)*rab(:) - zetc(kpgf)*rbc(:))
490 s(1, 2, 1) = rbg(1)*s(1, 1, 1)
491 s(1, 3, 1) = rbg(2)*s(1, 1, 1)
492 s(1, 4, 1) = rbg(3)*s(1, 1, 1)
500 s(1,
coset(0, 0, lb), 1) = rbg(3)*s(1,
coset(0, 0, lb - 1), 1) + &
501 f2*real(lb - 1,
dp)*s(1,
coset(0, 0, lb - 2), 1)
506 s(1,
coset(0, 1, bz), 1) = rbg(2)*s(1,
coset(0, 0, bz), 1)
510 s(1,
coset(0, by, bz), 1) = &
511 rbg(2)*s(1,
coset(0, by - 1, bz), 1) + &
512 f2*real(by - 1,
dp)*s(1,
coset(0, by - 2, bz), 1)
519 s(1,
coset(1, by, bz), 1) = rbg(1)*s(1,
coset(0, by, bz), 1)
523 f3 = f2*real(bx - 1,
dp)
526 s(1,
coset(bx, by, bz), 1) = rbg(1)*s(1,
coset(bx - 1, by, bz), 1) + &
527 f3*s(1,
coset(bx - 2, by, bz), 1)
543 rcg(:) = -zetg*(zeta(ipgf)*rac(:) + zetb(jpgf)*rbc(:))
547 s(1, 1, 2) = rcg(1)*s(1, 1, 1)
548 s(1, 1, 3) = rcg(2)*s(1, 1, 1)
549 s(1, 1, 4) = rcg(3)*s(1, 1, 1)
557 s(1, 1,
coset(0, 0, lc)) = rcg(3)*s(1, 1,
coset(0, 0, lc - 1)) + &
558 f2*real(lc - 1,
dp)*s(1, 1,
coset(0, 0, lc - 2))
563 s(1, 1,
coset(0, 1, cz)) = rcg(2)*s(1, 1,
coset(0, 0, cz))
567 s(1, 1,
coset(0, cy, cz)) = rcg(2)*s(1, 1,
coset(0, cy - 1, cz)) + &
568 f2*real(cy - 1,
dp)*s(1, 1,
coset(0, cy - 2, cz))
575 s(1, 1,
coset(1, cy, cz)) = rcg(1)*s(1, 1,
coset(0, cy, cz))
579 f3 = f2*real(cx - 1,
dp)
582 s(1, 1,
coset(cx, cy, cz)) = rcg(1)*s(1, 1,
coset(cx - 1, cy, cz)) + &
583 f3*s(1, 1,
coset(cx - 2, cy, cz))
597 coc =
coset(cx, cy, cz)
598 cocx =
coset(max(0, cx - 1), cy, cz)
599 cocy =
coset(cx, max(0, cy - 1), cz)
600 cocz =
coset(cx, cy, max(0, cz - 1))
602 fcx = f2*real(cx,
dp)
603 fcy = f2*real(cy,
dp)
604 fcz = f2*real(cz,
dp)
612 rag(:) = rcg(:) + rac(:)
616 s(2, 1, coc) = rag(1)*s(1, 1, coc) + fcx*s(1, 1, cocx)
617 s(3, 1, coc) = rag(2)*s(1, 1, coc) + fcy*s(1, 1, cocy)
618 s(4, 1, coc) = rag(3)*s(1, 1, coc) + fcz*s(1, 1, cocz)
628 s(
coset(0, 0, la), 1, coc) = &
629 rag(3)*s(
coset(0, 0, la - 1), 1, coc) + &
630 f2*real(la - 1,
dp)*s(
coset(0, 0, la - 2), 1, coc) + &
631 fcz*s(
coset(0, 0, la - 1), 1, cocz)
636 s(
coset(0, 1, az), 1, coc) = &
637 rag(2)*s(
coset(0, 0, az), 1, coc) + &
638 fcy*s(
coset(0, 0, az), 1, cocy)
642 s(
coset(0, ay, az), 1, coc) = &
643 rag(2)*s(
coset(0, ay - 1, az), 1, coc) + &
644 f2*real(ay - 1,
dp)*s(
coset(0, ay - 2, az), 1, coc) + &
645 fcy*s(
coset(0, ay - 1, az), 1, cocy)
652 s(
coset(1, ay, az), 1, coc) = &
653 rag(1)*s(
coset(0, ay, az), 1, coc) + &
654 fcx*s(
coset(0, ay, az), 1, cocx)
658 f3 = f2*real(ax - 1,
dp)
661 s(
coset(ax, ay, az), 1, coc) = &
662 rag(1)*s(
coset(ax - 1, ay, az), 1, coc) + &
663 f3*s(
coset(ax - 2, ay, az), 1, coc) + &
664 fcx*s(
coset(ax - 1, ay, az), 1, cocx)
676 rbg(:) = rag(:) - rab(:)
680 IF (lb_max == 1)
THEN
683 la_start = max(0, la_min - 1)
686 DO la = la_start, la_max - 1
690 coa =
coset(ax, ay, az)
691 coax =
coset(ax + 1, ay, az)
692 coay =
coset(ax, ay + 1, az)
693 coaz =
coset(ax, ay, az + 1)
694 s(coa, 2, coc) = s(coax, 1, coc) - rab(1)*s(coa, 1, coc)
695 s(coa, 3, coc) = s(coay, 1, coc) - rab(2)*s(coa, 1, coc)
696 s(coa, 4, coc) = s(coaz, 1, coc) - rab(3)*s(coa, 1, coc)
709 DO ay = 0, la_max - ax
711 az = la_max - ax - ay
713 coa =
coset(ax, ay, az)
715 s(coa, 2, coc) = rbg(1)*s(coa, 1, coc) + &
718 s(coa, 2, coc) = rbg(1)*s(coa, 1, coc) + &
719 fx*s(
coset(ax - 1, ay, az), 1, coc) + &
723 s(coa, 3, coc) = rbg(2)*s(coa, 1, coc) + &
726 s(coa, 3, coc) = rbg(2)*s(coa, 1, coc) + &
727 fy*s(
coset(ax, ay - 1, az), 1, coc) + &
731 s(coa, 4, coc) = rbg(3)*s(coa, 1, coc) + &
734 s(coa, 4, coc) = rbg(3)*s(coa, 1, coc) + &
735 fz*s(
coset(ax, ay, az - 1), 1, coc) + &
749 IF (lb == lb_max)
THEN
752 la_start = max(0, la_min - 1)
755 DO la = la_start, la_max - 1
760 coa =
coset(ax, ay, az)
761 coax =
coset(ax + 1, ay, az)
762 coay =
coset(ax, ay + 1, az)
763 coaz =
coset(ax, ay, az + 1)
768 s(coa,
coset(0, 0, lb), coc) = &
769 s(coaz,
coset(0, 0, lb - 1), coc) - &
770 rab(3)*s(coa,
coset(0, 0, lb - 1), coc)
777 s(coa,
coset(0, by, bz), coc) = &
778 s(coay,
coset(0, by - 1, bz), coc) - &
779 rab(2)*s(coa,
coset(0, by - 1, bz), coc)
788 s(coa,
coset(bx, by, bz), coc) = &
789 s(coax,
coset(bx - 1, by, bz), coc) - &
790 rab(1)*s(coa,
coset(bx - 1, by, bz), coc)
807 DO ay = 0, la_max - ax
809 az = la_max - ax - ay
812 coa =
coset(ax, ay, az)
813 coax =
coset(max(0, ax - 1), ay, az)
814 coay =
coset(ax, max(0, ay - 1), az)
815 coaz =
coset(ax, ay, max(0, az - 1))
817 f3 = f2*real(lb - 1,
dp)
823 s(coa,
coset(0, 0, lb), coc) = &
824 rbg(3)*s(coa,
coset(0, 0, lb - 1), coc) + &
825 f3*s(coa,
coset(0, 0, lb - 2), coc) + &
826 fcz*s(coa,
coset(0, 0, lb - 1), cocz)
828 s(coa,
coset(0, 0, lb), coc) = &
829 rbg(3)*s(coa,
coset(0, 0, lb - 1), coc) + &
830 fz*s(coaz,
coset(0, 0, lb - 1), coc) + &
831 f3*s(coa,
coset(0, 0, lb - 2), coc) + &
832 fcz*s(coa,
coset(0, 0, lb - 1), cocz)
840 s(coa,
coset(0, 1, bz), coc) = &
841 rbg(2)*s(coa,
coset(0, 0, bz), coc) + &
842 fcy*s(coa,
coset(0, 0, bz), cocy)
845 f3 = f2*real(by - 1,
dp)
846 s(coa,
coset(0, by, bz), coc) = &
847 rbg(2)*s(coa,
coset(0, by - 1, bz), coc) + &
848 f3*s(coa,
coset(0, by - 2, bz), coc) + &
849 fcy*s(coa,
coset(0, by - 1, bz), cocy)
853 s(coa,
coset(0, 1, bz), coc) = &
854 rbg(2)*s(coa,
coset(0, 0, bz), coc) + &
855 fy*s(coay,
coset(0, 0, bz), coc) + &
856 fcy*s(coa,
coset(0, 0, bz), cocy)
859 f3 = f2*real(by - 1,
dp)
860 s(coa,
coset(0, by, bz), coc) = &
861 rbg(2)*s(coa,
coset(0, by - 1, bz), coc) + &
862 fy*s(coay,
coset(0, by - 1, bz), coc) + &
863 f3*s(coa,
coset(0, by - 2, bz), coc) + &
864 fcy*s(coa,
coset(0, by - 1, bz), cocy)
874 s(coa,
coset(1, by, bz), coc) = &
875 rbg(1)*s(coa,
coset(0, by, bz), coc) + &
876 fcx*s(coa,
coset(0, by, bz), cocx)
879 f3 = f2*real(bx - 1,
dp)
882 s(coa,
coset(bx, by, bz), coc) = &
883 rbg(1)*s(coa,
coset(bx - 1, by, bz), coc) + &
884 f3*s(coa,
coset(bx - 2, by, bz), coc) + &
885 fcx*s(coa,
coset(bx - 1, by, bz), cocx)
891 s(coa,
coset(1, by, bz), coc) = &
892 rbg(1)*s(coa,
coset(0, by, bz), coc) + &
893 fx*s(coax,
coset(0, by, bz), coc) + &
894 fcx*s(coa,
coset(0, by, bz), cocx)
897 f3 = f2*real(bx - 1,
dp)
900 s(coa,
coset(bx, by, bz), coc) = &
901 rbg(1)*s(coa,
coset(bx - 1, by, bz), coc) + &
902 fx*s(coax,
coset(bx - 1, by, bz), coc) + &
903 f3*s(coa,
coset(bx - 2, by, bz), coc) + &
904 fcx*s(coa,
coset(bx - 1, by, bz), cocx)
922 rbg(:) = rcg(:) + rbc(:)
926 s(1, 2, coc) = rbg(1)*s(1, 1, coc) + fcx*s(1, 1, cocx)
927 s(1, 3, coc) = rbg(2)*s(1, 1, coc) + fcy*s(1, 1, cocy)
928 s(1, 4, coc) = rbg(3)*s(1, 1, coc) + fcz*s(1, 1, cocz)
938 s(1,
coset(0, 0, lb), coc) = &
939 rbg(3)*s(1,
coset(0, 0, lb - 1), coc) + &
940 f2*real(lb - 1,
dp)*s(1,
coset(0, 0, lb - 2), coc) + &
941 fcz*s(1,
coset(0, 0, lb - 1), cocz)
946 s(1,
coset(0, 1, bz), coc) = &
947 rbg(2)*s(1,
coset(0, 0, bz), coc) + &
948 fcy*s(1,
coset(0, 0, bz), cocy)
952 s(1,
coset(0, by, bz), coc) = &
953 rbg(2)*s(1,
coset(0, by - 1, bz), coc) + &
954 f2*real(by - 1,
dp)*s(1,
coset(0, by - 2, bz), coc) + &
955 fcy*s(1,
coset(0, by - 1, bz), cocy)
962 s(1,
coset(1, by, bz), coc) = &
963 rbg(1)*s(1,
coset(0, by, bz), coc) + &
964 fcx*s(1,
coset(0, by, bz), cocx)
968 f3 = f2*real(bx - 1,
dp)
971 s(1,
coset(bx, by, bz), coc) = &
972 rbg(1)*s(1,
coset(bx - 1, by, bz), coc) + &
973 f3*s(1,
coset(bx - 2, by, bz), coc) + &
974 fcx*s(1,
coset(bx - 1, by, bz), cocx)
993 IF (
PRESENT(int_abc_ext))
THEN
997 sabc(na + i, nb + j, nc + k) = s(i, j, k)
998 int_abc_ext = max(int_abc_ext, abs(s(i, j, k)))
1006 sabc(na + i, nb + j, nc + k) = s(i, j, k)
1015 IF (
PRESENT(sdabc) .OR.
PRESENT(sabdc))
THEN
1016 CALL derivatives_overlap3(la_max_set, la_min_set, lb_max_set, lb_min_set, &
1017 lc_max_set, lc_min_set, zeta(ipgf), zetc(kpgf), &
1023 IF (
PRESENT(sdabc))
THEN
1025 DO l = 1,
ncoset(lc_max_set)
1026 DO j = 1,
ncoset(lb_max_set)
1027 DO i = 1,
ncoset(la_max_set)
1028 sdabc(nda + i, nb + j, nc + l, k) = sda(i, j, l, k)
1035 IF (
PRESENT(sabdc))
THEN
1037 DO l = 1,
ncoset(lc_max_set)
1038 DO j = 1,
ncoset(lb_max_set)
1039 DO i = 1,
ncoset(la_max_set)
1040 sabdc(na + i, nb + j, ndc + l, k) = sdc(i, j, l, k)
1047 nc = nc +
ncoset(lc_max_set)
1048 ndc = ndc +
ncoset(lc_max_set)
1054 na = na +
ncoset(la_max_set)
1055 nda = nda +
ncoset(la_max_set)
1059 IF (
PRESENT(sdabc))
THEN
1062 IF (
PRESENT(sabdc))
THEN
1066 CALL timestop(handle)
1085 SUBROUTINE derivatives_overlap3(la_max_set, la_min_set, lb_max_set, lb_min_set, &
1086 lc_max_set, lc_min_set, zeta, zetc, s, sda, sdc)
1088 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, lb_max_set, &
1089 lb_min_set, lc_max_set, lc_min_set
1090 REAL(kind=
dp),
INTENT(IN) :: zeta, zetc
1091 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: s
1092 REAL(kind=
dp),
DIMENSION(:, :, :, :),
POINTER :: sda, sdc
1094 CHARACTER(len=*),
PARAMETER :: routinen =
'derivatives_overlap3'
1096 INTEGER :: ax, ay, az, bx, by, bz, coa, coamx, coamy, coamz, coapx, coapy, coapz, cob, coc, &
1097 cocmx, cocmy, cocmz, cocpx, cocpy, cocpz, cx, cy, cz, devx, devy, devz, handle, la, lb, lc
1098 REAL(kind=
dp) :: fax, fay, faz, fcx, fcy, fcz, fexpa, &
1101 CALL timeset(routinen, handle)
1115 DO la = la_min_set, la_max_set
1122 coa =
coset(ax, ay, az)
1123 coamx =
coset(ax - 1, ay, az)
1124 coamy =
coset(ax, ay - 1, az)
1125 coamz =
coset(ax, ay, az - 1)
1126 coapx =
coset(ax + 1, ay, az)
1127 coapy =
coset(ax, ay + 1, az)
1128 coapz =
coset(ax, ay, az + 1)
1129 DO lb = lb_min_set, lb_max_set
1133 cob =
coset(bx, by, bz)
1134 DO lc = lc_min_set, lc_max_set
1141 coc =
coset(cx, cy, cz)
1142 cocmx =
coset(cx - 1, cy, cz)
1143 cocmy =
coset(cx, cy - 1, cz)
1144 cocmz =
coset(cx, cy, cz - 1)
1145 cocpx =
coset(cx + 1, cy, cz)
1146 cocpy =
coset(cx, cy + 1, cz)
1147 cocpz =
coset(cx, cy, cz + 1)
1148 IF (
ASSOCIATED(sda))
THEN
1149 sda(coa, cob, coc, devx) = fexpa*s(coapx, cob, coc) - &
1150 fax*s(coamx, cob, coc)
1151 sda(coa, cob, coc, devy) = fexpa*s(coapy, cob, coc) - &
1152 fay*s(coamy, cob, coc)
1153 sda(coa, cob, coc, devz) = fexpa*s(coapz, cob, coc) - &
1154 faz*s(coamz, cob, coc)
1156 IF (
ASSOCIATED(sdc))
THEN
1157 sdc(coa, cob, coc, devx) = fexpc*s(coa, cob, cocpx) - &
1158 fcx*s(coa, cob, cocmx)
1159 sdc(coa, cob, coc, devy) = fexpc*s(coa, cob, cocpy) - &
1160 fcy*s(coa, cob, cocmy)
1161 sdc(coa, cob, coc, devz) = fexpc*s(coa, cob, cocpz) - &
1162 fcz*s(coa, cob, cocmz)
1174 CALL timestop(handle)
1176 END SUBROUTINE derivatives_overlap3
subroutine, public overlap3(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, lc_max_set, npgfc, zetc, rpgfc, lc_min_set, rab, dab, rac, dac, rbc, dbc, sabc, sdabc, sabdc, int_abc_ext)
Calculation of three-center overlap integrals [a|b|c] over primitive Cartesian Gaussian functions.
Defines the basic variable types.
integer, parameter, public dp
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset