27 #include "./base/base_uses.f90"
35 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'debug_os_integrals'
46 SUBROUTINE overlap_ab_test_simple()
48 INTEGER :: ia1, iax, iay, iaz, ib1, ibx, iby, ibz, &
49 la_max, la_min, lb_max, lb_min, lds, &
51 INTEGER,
DIMENSION(3) :: na, nb
52 REAL(KIND=
dp) :: dab, dmax, res1, xa, xb
53 REAL(KIND=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: sab
54 REAL(KIND=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: swork
55 REAL(KIND=
dp),
DIMENSION(1) :: rpgfa, rpgfb, xa_work, xb_work
56 REAL(KIND=
dp),
DIMENSION(3) :: a, b, rab
58 xa = 0.783300000000_dp
59 xb = 1.239648746700_dp
61 a = (/0.329309000000_dp, 0.28408240000_dp, 0.28408240000_dp/)
62 b = (/0.983983000000_dp, 0.00453720000_dp, 0.00432740000_dp/)
73 maxl = max(la_max, lb_max)
75 ALLOCATE (swork(lds, lds, 1))
78 dab = sqrt(dot_product(rab, rab))
83 CALL overlap(la_max_set=la_max, la_min_set=la_min, npgfa=1, rpgfa=rpgfa, zeta=xa_work, &
84 lb_max_set=lb_max, lb_min_set=lb_min, npgfb=1, rpgfb=rpgfb, zetb=xb_work, &
85 rab=rab, dab=dab, sab=sab, da_max_set=0, return_derivatives=.false., s=swork, lds=lds)
91 DO ma = la_min, la_max
92 DO mb = lb_min, lb_max
96 na(1) = iax; na(2) = iay; na(3) = iaz
97 ia1 =
coset(iax, iay, iaz)
101 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
102 ib1 =
coset(ibx, iby, ibz)
106 dmax = max(dmax, abs(res1 - sab(ia1, ib1)))
114 DEALLOCATE (sab, swork)
116 END SUBROUTINE overlap_ab_test_simple
133 SUBROUTINE overlap_ab_test(la_max, la_min, npgfa, zeta, lb_max, lb_min, npgfb, zetb, &
136 INTEGER,
INTENT(IN) :: la_max, la_min, npgfa
137 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta
138 INTEGER,
INTENT(IN) :: lb_max, lb_min, npgfb
139 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb
140 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: ra, rb
141 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: sab
142 REAL(kind=
dp),
INTENT(INOUT) :: dmax
144 INTEGER :: coa, cob, ia1, iax, iay, iaz, ib1, ibx, &
145 iby, ibz, ipgf, jpgf, ma, mb
146 INTEGER,
DIMENSION(3) :: na, nb
147 REAL(kind=
dp) :: res1, res2, xa, xb
148 REAL(kind=
dp),
DIMENSION(3) :: a, b
159 DO ma = la_min, la_max
160 DO mb = lb_min, lb_max
164 na(1) = iax; na(2) = iay; na(3) = iaz
165 ia1 =
coset(iax, iay, iaz)
169 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
170 ib1 =
coset(ibx, iby, ibz)
172 res2 = sab(coa + ia1, cob + ib1)
173 dmax = max(dmax, abs(res1 - res2))
180 cob = cob +
ncoset(lb_max)
182 coa = coa +
ncoset(la_max)
191 SUBROUTINE overlap_abc_test_simple()
193 INTEGER :: ia1, iax, iay, iaz, ib1, ibx, iby, ibz, &
194 ic1, icx, icy, icz, la_max, la_min, &
195 lb_max, lb_min, lc_max, lc_min, ma, &
197 INTEGER,
DIMENSION(3) :: na, nb, nc
198 REAL(kind=
dp) :: dab, dac, dbc, dmax, res1, xa, xb,
xc
199 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :) :: sabc
200 REAL(kind=
dp),
DIMENSION(1) :: rpgfa, rpgfb, rpgfc, xa_work, xb_work, &
202 REAL(kind=
dp),
DIMENSION(3) :: a, b, c, rab, rac, rbc
204 xa = 0.783300000000_dp
205 xb = 1.239648746700_dp
206 xc = 0.548370000000_dp
208 a = (/0.329309000000_dp, 0.28408240000_dp, 0.28408240000_dp/)
209 b = (/0.983983000000_dp, 0.00453720000_dp, 0.00432740000_dp/)
210 c = (/0.032380000000_dp, 1.23470000000_dp, 0.11137400000_dp/)
222 dab = sqrt(dot_product(rab, rab))
224 dac = sqrt(dot_product(rac, rac))
226 dbc = sqrt(dot_product(rbc, rbc))
236 CALL overlap3(la_max_set=la_max, npgfa=1, zeta=xa_work, rpgfa=rpgfa, la_min_set=la_min, &
237 lb_max_set=lb_max, npgfb=1, zetb=xb_work, rpgfb=rpgfb, lb_min_set=lb_min, &
238 lc_max_set=lc_max, npgfc=1, zetc=xc_work, rpgfc=rpgfc, lc_min_set=lc_min, &
239 rab=rab, dab=dab, rac=rac, dac=dac, rbc=rbc, dbc=dbc, sabc=sabc)
246 DO ma = la_min, la_max
247 DO mc = lc_min, lc_max
248 DO mb = lb_min, lb_max
252 na(1) = iax; na(2) = iay; na(3) = iaz
253 ia1 =
coset(iax, iay, iaz)
257 nc(1) = icx; nc(2) = icy; nc(3) = icz
258 ic1 =
coset(icx, icy, icz)
262 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
263 ib1 =
coset(ibx, iby, ibz)
267 dmax = max(dmax, abs(res1 - sabc(ia1, ib1, ic1)))
280 END SUBROUTINE overlap_abc_test_simple
303 lb_max, npgfb, zetb, lb_min, &
304 lc_max, npgfc, zetc, lc_min, &
305 ra, rb, rc, sabc, dmax)
307 INTEGER,
INTENT(IN) :: la_max, npgfa
308 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta
309 INTEGER,
INTENT(IN) :: la_min, lb_max, npgfb
310 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb
311 INTEGER,
INTENT(IN) :: lb_min, lc_max, npgfc
312 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetc
313 INTEGER,
INTENT(IN) :: lc_min
314 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: ra, rb, rc
315 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(IN) :: sabc
316 REAL(kind=
dp),
INTENT(INOUT) :: dmax
318 INTEGER :: coa, cob, coc, ia1, iax, iay, iaz, ib1, &
319 ibx, iby, ibz, ic1, icx, icy, icz, &
320 ipgf, jpgf, kpgf, ma, mb, mc
321 INTEGER,
DIMENSION(3) :: na, nb, nc
322 REAL(kind=
dp) :: res1, res2, xa, xb,
xc
323 REAL(kind=
dp),
DIMENSION(3) :: a, b, c
342 DO ma = la_min, la_max
343 DO mc = lc_min, lc_max
344 DO mb = lb_min, lb_max
348 na(1) = iax; na(2) = iay; na(3) = iaz
349 ia1 =
coset(iax, iay, iaz)
353 nc(1) = icx; nc(2) = icy; nc(3) = icz
354 ic1 =
coset(icx, icy, icz)
358 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
359 ib1 =
coset(ibx, iby, ibz)
361 res2 = sabc(coa + ia1, cob + ib1, coc + ic1)
362 dmax = max(dmax, abs(res1 - res2))
373 coc = coc +
ncoset(lc_max)
375 cob = cob +
ncoset(lb_max)
377 coa = coa +
ncoset(la_max)
386 SUBROUTINE overlap_aabb_test_simple()
388 INTEGER :: i, iax, iay, iaz, ibx, iby, ibz, j, k, l, la_max, la_max1, la_max2, la_min, &
389 la_min1, la_min2, lb_max, lb_max1, lb_max2, lb_min, lb_min1, lb_min2, lds, ma, maxl, mb
390 INTEGER,
DIMENSION(3) :: na, naa, nb, nbb
391 REAL(kind=
dp) :: dab, dmax, res1, xa, xa1, xa2, xb, xb1, &
393 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: swork
394 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :, :, :) :: saabb
395 REAL(kind=
dp),
DIMENSION(1) :: rpgfa1, rpgfa2, rpgfb1, rpgfb2, &
396 xa_work1, xa_work2, xb_work1, xb_work2
397 REAL(kind=
dp),
DIMENSION(3) :: a, b, rab
399 xa1 = 0.783300000000_dp
400 xb1 = 1.239648746700_dp
401 xa2 = 0.3400000000_dp
404 a = (/0.329309000000_dp, 0.28408240000_dp, 0.28408240000_dp/)
405 b = (/0.983983000000_dp, 0.00453720000_dp, 0.00432740000_dp/)
420 maxl = max(la_max1 + la_max2, lb_max1 + lb_max2)
422 ALLOCATE (swork(lds, lds))
425 dab = sqrt(dot_product(rab, rab))
434 CALL overlap_aabb(la_max_set1=la_max1, la_min_set1=la_min1, npgfa1=1, rpgfa1=rpgfa1, zeta1=xa_work1, &
435 la_max_set2=la_max2, la_min_set2=la_min2, npgfa2=1, rpgfa2=rpgfa2, zeta2=xa_work2, &
436 lb_max_set1=lb_max1, lb_min_set1=lb_min1, npgfb1=1, rpgfb1=rpgfb1, zetb1=xb_work1, &
437 lb_max_set2=lb_max2, lb_min_set2=lb_min2, npgfb2=1, rpgfb2=rpgfb2, zetb2=xb_work2, &
438 asets_equal=.false., bsets_equal=.false., rab=rab, dab=dab, saabb=saabb, s=swork, lds=lds)
443 la_min = la_min1 + la_min2
444 la_max = la_max1 + la_max2
445 lb_min = lb_min1 + lb_min2
446 lb_max = lb_max1 + lb_max2
451 DO ma = la_min, la_max
452 DO mb = lb_min, lb_max
456 na(1) = iax; na(2) = iay; na(3) = iaz
460 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
468 IF (all(na == naa) .AND. all(nb == nbb))
THEN
469 dmax = max(dmax, abs(res1 - saabb(i, j, k, l)))
482 DEALLOCATE (saabb, swork)
484 END SUBROUTINE overlap_aabb_test_simple
510 la_max2, la_min2, npgfa2, zeta2, &
511 lb_max1, lb_min1, npgfb1, zetb1, &
512 lb_max2, lb_min2, npgfb2, zetb2, &
515 INTEGER,
INTENT(IN) :: la_max1, la_min1, npgfa1
516 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta1
517 INTEGER,
INTENT(IN) :: la_max2, la_min2, npgfa2
518 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta2
519 INTEGER,
INTENT(IN) :: lb_max1, lb_min1, npgfb1
520 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb1
521 INTEGER,
INTENT(IN) :: lb_max2, lb_min2, npgfb2
522 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb2
523 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: ra, rb
524 REAL(kind=
dp),
DIMENSION(:, :, :, :),
INTENT(IN) :: saabb
525 REAL(kind=
dp),
INTENT(INOUT) :: dmax
527 INTEGER :: coa1, coa2, cob1, cob2, i, iax, iay, &
528 iaz, ibx, iby, ibz, ipgf, j, jpgf, k, &
529 kpgf, l, la_max, la_min, lb_max, &
531 INTEGER,
DIMENSION(3) :: na, naa, nb, nbb
532 REAL(kind=
dp) :: res1, xa, xb
533 REAL(kind=
dp),
DIMENSION(3) :: a, b
544 xa = zeta1(ipgf) + zeta2(jpgf)
545 xb = zetb1(kpgf) + zetb2(lpgf)
546 la_max = la_max1 + la_max2
547 lb_max = lb_max1 + lb_max2
548 la_min = la_min1 + la_min2
549 lb_min = lb_min1 + lb_min2
556 DO ma = la_min, la_max
557 DO mb = lb_min, lb_max
561 na(1) = iax; na(2) = iay; na(3) = iaz
565 nb(1) = ibx; nb(2) = iby; nb(3) = ibz
573 IF (all(na == naa) .AND. all(nb == nbb))
THEN
574 dmax = max(dmax, abs(res1 - saabb(coa1 + i, coa2 + j, cob1 + k, cob2 + l)))
586 cob2 = cob2 +
ncoset(lb_max2)
588 cob1 = cob1 +
ncoset(lb_max1)
590 coa2 = coa2 +
ncoset(la_max2)
592 coa1 = coa1 +
ncoset(la_max1)
Three-center integrals over Cartesian Gaussian-type functions.
subroutine, public init_os_overlap3(ya, yb, yc, rA, rB, rC)
Calculation of three-center integrals over Cartesian Gaussian-type functions.
recursive real(dp) function, public os_overlap3(an, cn, bn)
...
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.
Calculation of the overlap integrals over Cartesian Gaussian-type functions.
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...
Two-center overlap integrals over Cartesian Gaussian-type functions.
recursive real(dp) function, public os_overlap2(an, bn)
...
subroutine, public init_os_overlap2(ya, yb, rA, rB)
Calculation of overlap integrals over Cartesian Gaussian-type functions.
Calculation of the overlap integrals over Cartesian Gaussian-type functions.
subroutine, public overlap(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, rab, dab, sab, da_max_set, return_derivatives, s, lds, sdab, pab, force_a)
Purpose: Calculation of the two-center overlap integrals [a|b] over Cartesian Gaussian-type functions...
Debugs Obara-Saika integral matrices.
subroutine, public overlap_ab_test(la_max, la_min, npgfa, zeta, lb_max, lb_min, npgfb, zetb, ra, rb, sab, dmax)
recursive test routines for integral (a,b)
subroutine, public overlap_abc_test(la_max, npgfa, zeta, la_min, lb_max, npgfb, zetb, lb_min, lc_max, npgfc, zetc, lc_min, ra, rb, rc, sabc, dmax)
recursive test routines for integral (a,b,c)
subroutine, public overlap_aabb_test(la_max1, la_min1, npgfa1, zeta1, la_max2, la_min2, npgfa2, zeta2, lb_max1, lb_min1, npgfb1, zetb1, lb_max2, lb_min2, npgfb2, zetb2, ra, rb, saabb, dmax)
recursive test routines for integral (aa,bb)
Defines the basic variable types.
integer, parameter, public dp
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public ncoset
integer, dimension(:, :, :), allocatable, public coset
integer, dimension(:, :), allocatable, public indco
Exchange and Correlation functional calculations.