81 SUBROUTINE overlap_aabb(la_max_set1, la_min_set1, npgfa1, rpgfa1, zeta1, &
82 la_max_set2, la_min_set2, npgfa2, rpgfa2, zeta2, &
83 lb_max_set1, lb_min_set1, npgfb1, rpgfb1, zetb1, &
84 lb_max_set2, lb_min_set2, npgfb2, rpgfb2, zetb2, &
85 asets_equal, bsets_equal, rab, dab, saabb, s, lds)
87 INTEGER,
INTENT(IN) :: la_max_set1, la_min_set1, npgfa1
88 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa1, zeta1
89 INTEGER,
INTENT(IN) :: la_max_set2, la_min_set2, npgfa2
90 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa2, zeta2
91 INTEGER,
INTENT(IN) :: lb_max_set1, lb_min_set1, npgfb1
92 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb1, zetb1
93 INTEGER,
INTENT(IN) :: lb_max_set2, lb_min_set2, npgfb2
94 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb2, zetb2
95 LOGICAL,
INTENT(IN) :: asets_equal, bsets_equal
96 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
97 REAL(kind=
dp),
INTENT(IN) :: dab
98 REAL(kind=
dp),
DIMENSION(:, :, :, :), &
99 INTENT(INOUT) :: saabb
100 INTEGER,
INTENT(IN) :: lds
101 REAL(kind=
dp),
DIMENSION(lds, lds),
INTENT(INOUT) :: s
103 CHARACTER(len=*),
PARAMETER :: routinen =
'overlap_aabb'
105 INTEGER :: ax, ay, az, bx, by, bz, coa, cob, handle, i, ia, ib, ipgf, j, ja, jb, jpgf, &
106 jpgf_start, kpgf, la, la_max, la_min, lb, lb_max, lb_min, ldrr, lpgf, lpgf_start, ncoa1, &
108 INTEGER,
DIMENSION(3) :: na, naa, nb, nbb, nia, nib, nja, njb
109 REAL(kind=
dp) :: f0, zeta, zetb, zetp
110 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: rr
111 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp
113 CALL timeset(routinen, handle)
114 ldrr = max(la_max_set1 + la_max_set2, lb_max_set1 + lb_max_set2) + 1
115 ALLOCATE (rr(0:ldrr - 1, 0:ldrr - 1, 3))
128 IF (asets_equal)
THEN
130 DO i = 1, jpgf_start - 1
131 ncoa2 = ncoa2 +
ncoset(la_max_set2)
137 DO jpgf = jpgf_start, npgfa2
140 zeta = zeta1(ipgf) + zeta2(jpgf)
141 la_max = la_max_set1 + la_max_set2
142 la_min = la_min_set1 + la_min_set2
148 IF (bsets_equal)
THEN
150 DO i = 1, lpgf_start - 1
151 ncob2 = ncob2 +
ncoset(lb_max_set2)
157 DO lpgf = lpgf_start, npgfb2
160 IF ((rpgfa1(ipgf) + rpgfb1(kpgf) < dab) .OR. &
161 (rpgfa2(jpgf) + rpgfb1(kpgf) < dab) .OR. &
162 (rpgfa1(ipgf) + rpgfb2(lpgf) < dab) .OR. &
163 (rpgfa2(jpgf) + rpgfb2(lpgf) < dab))
THEN
164 DO jb =
ncoset(lb_min_set2 - 1) + 1,
ncoset(lb_max_set2)
165 DO ib =
ncoset(lb_min_set1 - 1) + 1,
ncoset(lb_max_set1)
166 DO ja =
ncoset(la_min_set2 - 1) + 1,
ncoset(la_max_set2)
167 DO ia =
ncoset(la_min_set1 - 1) + 1,
ncoset(la_max_set1)
168 saabb(ncoa1 + ia, ncoa2 + ja, ncob1 + ib, ncob2 + jb) = 0._dp
169 IF (asets_equal) saabb(ncoa2 + ja, ncoa1 + ia, ncob1 + ib, ncob2 + jb) = 0._dp
170 IF (bsets_equal) saabb(ncoa1 + ia, ncoa2 + ja, ncob2 + jb, ncob1 + ib) = 0._dp
171 IF (asets_equal .AND. bsets_equal)
THEN
172 saabb(ncoa2 + ja, ncoa1 + ia, ncob2 + jb, ncob1 + ib) = 0._dp
178 ncob2 = ncob2 +
ncoset(lb_max_set2)
182 zetb = zetb1(kpgf) + zetb2(lpgf)
183 lb_max = lb_max_set1 + lb_max_set2
184 lb_min = lb_min_set1 + lb_min_set2
188 zetp = 1.0_dp/(zeta + zetb)
190 f0 = sqrt((
pi*zetp)**3)*exp(-zeta*zetb*zetp*dab*dab)
191 rap(:) = zetb*zetp*rab(:)
192 rbp(:) = -zeta*zetp*rab(:)
194 CALL os_rr_ovlp(rap, la_max, rbp, lb_max, 1.0_dp/zetp, ldrr, rr)
200 cob =
coset(bx, by, bz)
205 coa =
coset(ax, ay, az)
206 s(coa, cob) = f0*rr(ax, bx, 1)*rr(ay, by, 2)*rr(az, bz, 3)
215 DO jb =
ncoset(lb_min_set2 - 1) + 1,
ncoset(lb_max_set2)
216 njb(1:3) =
indco(1:3, jb)
217 DO ib =
ncoset(lb_min_set1 - 1) + 1,
ncoset(lb_max_set1)
218 nib(1:3) =
indco(1:3, ib)
220 DO ja =
ncoset(la_min_set2 - 1) + 1,
ncoset(la_max_set2)
221 nja(1:3) =
indco(1:3, ja)
222 DO ia =
ncoset(la_min_set1 - 1) + 1,
ncoset(la_max_set1)
223 nia(1:3) =
indco(1:3, ia)
227 nb(1:3) =
indco(1:3, j)
229 na(1:3) =
indco(1:3, i)
230 IF (all(na == naa) .AND. all(nb == nbb))
THEN
231 saabb(ncoa1 + ia, ncoa2 + ja, ncob1 + ib, ncob2 + jb) = s(i, j)
232 IF (asets_equal) saabb(ncoa2 + ja, ncoa1 + ia, ncob1 + ib, ncob2 + jb) = s(i, j)
233 IF (bsets_equal) saabb(ncoa1 + ia, ncoa2 + ja, ncob2 + jb, ncob1 + ib) = s(i, j)
234 IF (asets_equal .AND. bsets_equal)
THEN
235 saabb(ncoa2 + ja, ncoa1 + ia, ncob2 + jb, ncob1 + ib) = s(i, j)
245 ncob2 = ncob2 +
ncoset(lb_max_set2)
249 ncob1 = ncob1 +
ncoset(lb_max_set1)
253 ncoa2 = ncoa2 +
ncoset(la_max_set2)
257 ncoa1 = ncoa1 +
ncoset(la_max_set1)
262 CALL timestop(handle)
subroutine, public overlap_aabb(la_max_set1, la_min_set1, npgfa1, rpgfa1, zeta1, la_max_set2, la_min_set2, npgfa2, rpgfa2, zeta2, lb_max_set1, lb_min_set1, npgfb1, rpgfb1, zetb1, lb_max_set2, lb_min_set2, npgfb2, rpgfb2, zetb2, asets_equal, bsets_equal, rab, dab, saabb, s, lds)
Purpose: Calculation of the two-center overlap integrals [aa|bb] over Cartesian Gaussian-type functio...