39 #include "../base/base_uses.f90"
45 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_oneelectron'
92 SUBROUTINE os_3center(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
93 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, auxint, rpgfc, &
94 rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, &
95 vab2, vab2_work, deltaR, iatom, jatom, katom)
96 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
97 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
98 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
99 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
100 REAL(kind=
dp),
DIMENSION(0:, :),
INTENT(IN) :: auxint
101 REAL(kind=
dp),
INTENT(IN) :: rpgfc
102 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
103 REAL(kind=
dp),
INTENT(IN) :: dab
104 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
105 REAL(kind=
dp),
INTENT(IN) :: dac
106 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rbc
107 REAL(kind=
dp),
INTENT(IN) :: dbc
108 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
109 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT) :: s
110 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
112 REAL(kind=
dp),
DIMENSION(3),
INTENT(OUT),
OPTIONAL :: force_a, force_b
113 REAL(kind=
dp),
DIMENSION(:, :, :),
INTENT(INOUT), &
114 OPTIONAL :: fs, vab2, vab2_work
115 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
117 INTEGER,
INTENT(IN),
OPTIONAL :: iatom, jatom, katom
119 INTEGER :: ax, ay, az, bx, by, bz, cda, cdax, cday, cdaz, cdb, cdbx, cdby, cdbz, coa, coamx, &
120 coamy, coamz, coapx, coapy, coapz, cob, cobmx, cobmy, cobmz, cobpx, cobpy, cobpz, da, &
121 da_max, dax, day, daz, db, db_max, dbx, dby, dbz, i, ia, iap, iax, iay, iaz, ib, ibm, &
122 ibx, iby, ibz, idir, ii(3), iim(3), ij, ipgf, ir, ir1, ir2, irm(3), irr(3), irx, iry, &
123 irz, ix, ixx(1), j, jj(3), jjp(3), jpgf, la, la_max, la_min, lb, lb_max, lb_min, llr, m, &
125 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: iiap
126 LOGICAL :: calculate_force_a, calculate_force_b
127 REAL(kind=
dp) :: aai, abx, fax, fay, faz, fbx, fby, fbz, &
128 ftz, orho, rho, s1, s2
129 REAL(kind=
dp),
DIMENSION(3) :: pai, pbi, pci
131 IF (
PRESENT(pab))
THEN
132 cpassert(
PRESENT(fs))
133 IF (
PRESENT(force_a))
THEN
134 calculate_force_a = .true.
136 calculate_force_a = .false.
138 IF (
PRESENT(force_b))
THEN
139 calculate_force_b = .true.
141 calculate_force_b = .false.
144 calculate_force_a = .false.
145 calculate_force_b = .false.
148 IF (calculate_force_a)
THEN
155 IF (calculate_force_b)
THEN
162 IF (
PRESENT(vab2))
THEN
167 la_max = la_max_set + da_max
168 la_min = max(0, la_min_set - da_max)
170 lb_max = lb_max_set + db_max
171 lb_min = max(0, lb_min_set - db_max)
173 mmax = la_max + lb_max
176 ALLOCATE (iiap(
ncoset(mmax), 3))
181 ia =
coset(iax, iay, iaz)
182 jj(1) = iax; jj(2) = iay; jj(3) = iaz
185 iap =
coset(jjp(1), jjp(2), jjp(3))
189 iap =
coset(jjp(1), jjp(2), jjp(3))
193 iap =
coset(jjp(1), jjp(2), jjp(3))
206 IF (rpgfa(ipgf) + rpgfc < dac)
THEN
207 na = na +
ncoset(la_max_set)
216 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
217 (rpgfa(ipgf) + rpgfb(jpgf) < dab))
THEN
218 nb = nb +
ncoset(lb_max_set)
223 rho = zeta(ipgf) + zetb(jpgf)
224 pai(:) = zetb(jpgf)/rho*rab(:)
225 pbi(:) = -zeta(ipgf)/rho*rab(:)
226 pci(:) = -(zeta(ipgf)*rac(:) + zetb(jpgf)*rbc(:))/rho
229 ij = (ipgf - 1)*npgfb + jpgf
230 s(1, 1, 1:mmax + 1) = auxint(0:mmax, ij)
243 s(2, 1, m + 1) = pai(1)*s1 - pci(1)*s2
244 s(3, 1, m + 1) = pai(2)*s1 - pci(2)*s2
245 s(4, 1, m + 1) = pai(3)*s1 - pci(3)*s2
247 ELSE IF (llr == 2)
THEN
249 s1 = s(1, 1, m + 1) - s(1, 1, m + 2)
250 s(5, 1, m + 1) = pai(1)*s(2, 1, m + 1) - pci(1)*s(2, 1, m + 2) + orho*s1
251 s(6, 1, m + 1) = pai(1)*s(3, 1, m + 1) - pci(1)*s(3, 1, m + 2)
252 s(7, 1, m + 1) = pai(1)*s(4, 1, m + 1) - pci(1)*s(4, 1, m + 2)
253 s(8, 1, m + 1) = pai(2)*s(3, 1, m + 1) - pci(2)*s(3, 1, m + 2) + orho*s1
254 s(9, 1, m + 1) = pai(2)*s(4, 1, m + 1) - pci(2)*s(4, 1, m + 2)
255 s(10, 1, m + 1) = pai(3)*s(4, 1, m + 1) - pci(3)*s(4, 1, m + 2) + orho*s1
257 ELSE IF (llr == 3)
THEN
259 s(11, 1, m + 1) = pai(1)*s(5, 1, m + 1) - pci(1)*s(5, 1, m + 2) &
260 + 2._dp*orho*(s(2, 1, m + 1) - s(2, 1, m + 2))
261 s(12, 1, m + 1) = pai(1)*s(6, 1, m + 1) - pci(1)*s(6, 1, m + 2) &
262 + orho*(s(3, 1, m + 1) - s(3, 1, m + 2))
263 s(13, 1, m + 1) = pai(1)*s(7, 1, m + 1) - pci(1)*s(7, 1, m + 2) &
264 + orho*(s(4, 1, m + 1) - s(4, 1, m + 2))
265 s(14, 1, m + 1) = pai(2)*s(6, 1, m + 1) - pci(2)*s(6, 1, m + 2) &
266 + orho*(s(2, 1, m + 1) - s(2, 1, m + 2))
267 s(15, 1, m + 1) = pai(1)*s(9, 1, m + 1) - pci(1)*s(9, 1, m + 2)
268 s(16, 1, m + 1) = pai(3)*s(7, 1, m + 1) - pci(3)*s(7, 1, m + 2) &
269 + orho*(s(2, 1, m + 1) - s(2, 1, m + 2))
270 s(17, 1, m + 1) = pai(2)*s(8, 1, m + 1) - pci(2)*s(8, 1, m + 2) &
271 + 2._dp*orho*(s(3, 1, m + 1) - s(3, 1, m + 2))
272 s(18, 1, m + 1) = pai(2)*s(9, 1, m + 1) - pci(2)*s(9, 1, m + 2) &
273 + orho*(s(4, 1, m + 1) - s(4, 1, m + 2))
274 s(19, 1, m + 1) = pai(3)*s(9, 1, m + 1) - pci(3)*s(9, 1, m + 2) &
275 + orho*(s(3, 1, m + 1) - s(3, 1, m + 2))
276 s(20, 1, m + 1) = pai(3)*s(10, 1, m + 1) - pci(3)*s(10, 1, m + 2) &
277 + 2._dp*orho*(s(4, 1, m + 1) - s(4, 1, m + 2))
279 ELSE IF (llr == 4)
THEN
281 s(21, 1, m + 1) = pai(1)*s(11, 1, m + 1) - pci(1)*s(11, 1, m + 2) &
282 + 3._dp*orho*(s(5, 1, m + 1) - s(5, 1, m + 2))
283 s(22, 1, m + 1) = pai(1)*s(12, 1, m + 1) - pci(1)*s(12, 1, m + 2) &
284 + 2._dp*orho*(s(6, 1, m + 1) - s(6, 1, m + 2))
285 s(23, 1, m + 1) = pai(1)*s(13, 1, m + 1) - pci(1)*s(13, 1, m + 2) &
286 + 2._dp*orho*(s(7, 1, m + 1) - s(7, 1, m + 2))
287 s(24, 1, m + 1) = pai(1)*s(14, 1, m + 1) - pci(1)*s(14, 1, m + 2) &
288 + orho*(s(8, 1, m + 1) - s(8, 1, m + 2))
289 s(25, 1, m + 1) = pai(1)*s(15, 1, m + 1) - pci(1)*s(15, 1, m + 2) &
290 + orho*(s(9, 1, m + 1) - s(9, 1, m + 2))
291 s(26, 1, m + 1) = pai(1)*s(16, 1, m + 1) - pci(1)*s(16, 1, m + 2) &
292 + orho*(s(10, 1, m + 1) - s(10, 1, m + 2))
293 s(27, 1, m + 1) = pai(1)*s(17, 1, m + 1) - pci(1)*s(17, 1, m + 2)
294 s(28, 1, m + 1) = pai(1)*s(18, 1, m + 1) - pci(1)*s(18, 1, m + 2)
295 s(29, 1, m + 1) = pai(1)*s(19, 1, m + 1) - pci(1)*s(19, 1, m + 2)
296 s(30, 1, m + 1) = pai(1)*s(20, 1, m + 1) - pci(1)*s(20, 1, m + 2)
297 s(31, 1, m + 1) = pai(2)*s(17, 1, m + 1) - pci(2)*s(17, 1, m + 2) &
298 + 3._dp*orho*(s(8, 1, m + 1) - s(8, 1, m + 2))
299 s(32, 1, m + 1) = pai(2)*s(18, 1, m + 1) - pci(2)*s(18, 1, m + 2) &
300 + 2._dp*orho*(s(9, 1, m + 1) - s(9, 1, m + 2))
301 s(33, 1, m + 1) = pai(2)*s(19, 1, m + 1) - pci(2)*s(19, 1, m + 2) &
302 + orho*(s(10, 1, m + 1) - s(10, 1, m + 2))
303 s(34, 1, m + 1) = pai(2)*s(20, 1, m + 1) - pci(2)*s(20, 1, m + 2)
304 s(35, 1, m + 1) = pai(3)*s(20, 1, m + 1) - pci(3)*s(20, 1, m + 2) &
305 + 3._dp*orho*(s(10, 1, m + 1) - s(10, 1, m + 2))
309 DO iry = 0, llr - irx
310 irz = llr - irx - iry
311 irr(1) = irx; irr(2) = iry; irr(3) = irz
314 ir =
coset(irx, iry, irz)
316 irm(ix) = irm(ix) - 1
317 aai = real(max(irm(ix), 0),
dp)*orho
318 ir1 =
coset(irm(1), irm(2), irm(3))
319 irm(ix) = irm(ix) - 1
320 ir2 =
coset(irm(1), irm(2), irm(3))
322 s(ir, 1, m + 1) = pai(ix)*s(ir1, 1, m + 1) - pci(ix)*s(ir1, 1, m + 2) &
323 + aai*(s(ir2, 1, m + 1) - s(ir2, 1, m + 2))
337 ib =
coset(ibx, iby, ibz)
338 ii(1) = ibx; ii(2) = iby; ii(3) = ibz
343 iim(ix) = iim(ix) - 1
344 ibm =
coset(iim(1), iim(2), iim(3))
345 DO ia = 1,
ncoset(mmax - mb)
347 s(ia, ib, 1) = s(iap, ibm, 1) + abx*s(ia, ibm, 1)
353 ELSE IF (lb_max > 0)
THEN
362 DO m = 0, lb_max - llr
365 s(1, 2, m + 1) = pbi(1)*s1 - pci(1)*s2
366 s(1, 3, m + 1) = pbi(2)*s1 - pci(2)*s2
367 s(1, 4, m + 1) = pbi(3)*s1 - pci(3)*s2
369 ELSE IF (llr == 2)
THEN
370 DO m = 0, lb_max - llr
371 s1 = s(1, 1, m + 1) - s(1, 1, m + 2)
372 s(1, 5, m + 1) = pbi(1)*s(1, 2, m + 1) - pci(1)*s(1, 2, m + 2) + orho*s1
373 s(1, 6, m + 1) = pbi(1)*s(1, 3, m + 1) - pci(1)*s(1, 3, m + 2)
374 s(1, 7, m + 1) = pbi(1)*s(1, 4, m + 1) - pci(1)*s(1, 4, m + 2)
375 s(1, 8, m + 1) = pbi(2)*s(1, 3, m + 1) - pci(2)*s(1, 3, m + 2) + orho*s1
376 s(1, 9, m + 1) = pbi(2)*s(1, 4, m + 1) - pci(2)*s(1, 4, m + 2)
377 s(1, 10, m + 1) = pbi(3)*s(1, 4, m + 1) - pci(3)*s(1, 4, m + 2) + orho*s1
379 ELSE IF (llr == 3)
THEN
380 DO m = 0, lb_max - llr
381 s(1, 11, m + 1) = pbi(1)*s(1, 5, m + 1) - pci(1)*s(1, 5, m + 2) &
382 + 2._dp*orho*(s(1, 2, m + 1) - s(1, 2, m + 2))
383 s(1, 12, m + 1) = pbi(1)*s(1, 6, m + 1) - pci(1)*s(1, 6, m + 2) &
384 + orho*(s(1, 3, m + 1) - s(1, 3, m + 2))
385 s(1, 13, m + 1) = pbi(1)*s(1, 7, m + 1) - pci(1)*s(1, 7, m + 2) &
386 + orho*(s(1, 4, m + 1) - s(1, 4, m + 2))
387 s(1, 14, m + 1) = pbi(2)*s(1, 6, m + 1) - pci(2)*s(1, 6, m + 2) &
388 + orho*(s(1, 2, m + 1) - s(1, 2, m + 2))
389 s(1, 15, m + 1) = pbi(1)*s(1, 9, m + 1) - pci(1)*s(1, 9, m + 2)
390 s(1, 16, m + 1) = pbi(3)*s(1, 7, m + 1) - pci(3)*s(1, 7, m + 2) &
391 + orho*(s(1, 2, m + 1) - s(1, 2, m + 2))
392 s(1, 17, m + 1) = pbi(2)*s(1, 8, m + 1) - pci(2)*s(1, 8, m + 2) &
393 + 2._dp*orho*(s(1, 3, m + 1) - s(1, 3, m + 2))
394 s(1, 18, m + 1) = pbi(2)*s(1, 9, m + 1) - pci(2)*s(1, 9, m + 2) &
395 + orho*(s(1, 4, m + 1) - s(1, 4, m + 2))
396 s(1, 19, m + 1) = pbi(3)*s(1, 9, m + 1) - pci(3)*s(1, 9, m + 2) &
397 + orho*(s(1, 3, m + 1) - s(1, 3, m + 2))
398 s(1, 20, m + 1) = pbi(3)*s(1, 10, m + 1) - pci(3)*s(1, 10, m + 2) &
399 + 2._dp*orho*(s(1, 4, m + 1) - s(1, 4, m + 2))
403 DO iry = 0, llr - irx
404 irz = llr - irx - iry
405 irr(1) = irx; irr(2) = iry; irr(3) = irz
408 ir =
coset(irx, iry, irz)
410 irm(ix) = irm(ix) - 1
411 aai = real(max(irm(ix), 0),
dp)
412 ir1 =
coset(irm(1), irm(2), irm(3))
413 irm(ix) = irm(ix) - 1
414 ir2 =
coset(irm(1), irm(2), irm(3))
415 DO m = 0, lb_max - llr
416 s(1, ir, m + 1) = pbi(ix)*s(1, ir1, m + 1) - pci(ix)*s(1, ir1, m + 2) &
417 + aai*orho*(s(1, ir2, m + 1) - s(1, ir2, m + 2))
429 vab(na + i, nb + j) = vab(na + i, nb + j) + s(i, j, 1)
436 DO da = 0, da_max - 1
437 ftz = 2.0_dp*zeta(ipgf)
441 cda =
coset(dax, day, daz)
442 cdax =
coset(dax + 1, day, daz)
443 cday =
coset(dax, day + 1, daz)
444 cdaz =
coset(dax, day, daz + 1)
448 DO la = la_min_set, la_max - da - 1
455 coa =
coset(ax, ay, az)
456 coamx =
coset(ax - 1, ay, az)
457 coamy =
coset(ax, ay - 1, az)
458 coamz =
coset(ax, ay, az - 1)
459 coapx =
coset(ax + 1, ay, az)
460 coapy =
coset(ax, ay + 1, az)
461 coapz =
coset(ax, ay, az + 1)
463 fs(coa, cob, cdax) = ftz*s(coapx, cob, cda) - fax*s(coamx, cob, cda)
464 fs(coa, cob, cday) = ftz*s(coapy, cob, cda) - fay*s(coamy, cob, cda)
465 fs(coa, cob, cdaz) = ftz*s(coapz, cob, cda) - faz*s(coamz, cob, cda)
476 IF (
PRESENT(vab2_work))
THEN
479 vab2_work(na + i, nb + j, 1) = vab2_work(na + i, nb + j, 1) + fs(i, j, 2)
480 vab2_work(na + i, nb + j, 2) = vab2_work(na + i, nb + j, 2) + fs(i, j, 3)
481 vab2_work(na + i, nb + j, 3) = vab2_work(na + i, nb + j, 3) + fs(i, j, 4)
488 IF (calculate_force_a)
THEN
491 force_a(1) = force_a(1) + pab(na + i, nb + j)*fs(i, j, 2)
492 force_a(2) = force_a(2) + pab(na + i, nb + j)*fs(i, j, 3)
493 force_a(3) = force_a(3) + pab(na + i, nb + j)*fs(i, j, 4)
501 DO db = 0, db_max - 1
502 ftz = 2.0_dp*zetb(jpgf)
506 cdb =
coset(dbx, dby, dbz)
507 cdbx =
coset(dbx + 1, dby, dbz)
508 cdby =
coset(dbx, dby + 1, dbz)
509 cdbz =
coset(dbx, dby, dbz + 1)
513 DO lb = lb_min_set, lb_max - db - 1
520 cob =
coset(bx, by, bz)
521 cobmx =
coset(bx - 1, by, bz)
522 cobmy =
coset(bx, by - 1, bz)
523 cobmz =
coset(bx, by, bz - 1)
524 cobpx =
coset(bx + 1, by, bz)
525 cobpy =
coset(bx, by + 1, bz)
526 cobpz =
coset(bx, by, bz + 1)
528 fs(coa, cob, cdbx) = ftz*s(coa, cobpx, cdb) - fbx*s(coa, cobmx, cdb)
529 fs(coa, cob, cdby) = ftz*s(coa, cobpy, cdb) - fby*s(coa, cobmy, cdb)
530 fs(coa, cob, cdbz) = ftz*s(coa, cobpz, cdb) - fbz*s(coa, cobmz, cdb)
541 IF (
PRESENT(vab2_work))
THEN
544 vab2_work(na + i, nb + j, 4) = vab2_work(na + i, nb + j, 4) + fs(i, j, 2)
545 vab2_work(na + i, nb + j, 5) = vab2_work(na + i, nb + j, 5) + fs(i, j, 3)
546 vab2_work(na + i, nb + j, 6) = vab2_work(na + i, nb + j, 6) + fs(i, j, 4)
553 vab2(na + i, nb + j, idir) = vab2(na + i, nb + j, idir) &
554 + vab2_work(na + i, nb + j, idir)*deltar(idir, iatom) &
555 - vab2_work(na + i, nb + j, idir)*deltar(idir, katom) &
556 + vab2_work(na + i, nb + j, idir + 3)*deltar(idir, jatom) &
557 - vab2_work(na + i, nb + j, idir + 3)*deltar(idir, katom)
565 IF (calculate_force_b)
THEN
568 force_b(1) = force_b(1) + pab(na + i, nb + j)*fs(i, j, 2)
569 force_b(2) = force_b(2) + pab(na + i, nb + j)*fs(i, j, 3)
570 force_b(3) = force_b(3) + pab(na + i, nb + j)*fs(i, j, 4)
575 nb = nb +
ncoset(lb_max_set)
579 na = na +
ncoset(la_max_set)
605 SUBROUTINE os_2center(la_max_set, la_min_set, npgfa, rpgfa, zeta, &
606 auxint, rpgfc, rac, dac, va, dva)
607 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
608 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
609 REAL(kind=
dp),
DIMENSION(0:, :),
INTENT(IN) :: auxint
610 REAL(kind=
dp),
INTENT(IN) :: rpgfc
611 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
612 REAL(kind=
dp),
INTENT(IN) :: dac
613 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT) :: va
614 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
617 INTEGER :: ax, ay, az, coa, coamx, coamy, coamz, coapx, coapy, coapz, da_max, i, ipgf, ir, &
618 ir1, ir2, irm(3), irr(3), irx, iry, irz, ix, ixx(1), la, la_max, la_min, llr, m, mmax, na
619 REAL(kind=
dp) :: aai, fax, fay, faz, ftz, orho, s1
620 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: s
622 IF (
PRESENT(dva))
THEN
628 la_max = la_max_set + da_max
629 la_min = max(0, la_min_set - da_max)
633 ALLOCATE (s(
ncoset(mmax), mmax + 1))
636 IF (rpgfa(ipgf) + rpgfc < dac)
THEN
637 na = na +
ncoset(la_max_set)
640 s(1, 1:mmax + 1) = auxint(0:mmax, ipgf)
648 orho = 0.5_dp/zeta(ipgf)
654 s(2, m + 1) = -rac(1)*s1
655 s(3, m + 1) = -rac(2)*s1
656 s(4, m + 1) = -rac(3)*s1
658 ELSE IF (llr == 2)
THEN
660 s1 = s(1, m + 1) - s(1, m + 2)
661 s(5, m + 1) = -rac(1)*s(2, m + 2) + orho*s1
662 s(6, m + 1) = -rac(1)*s(3, m + 2)
663 s(7, m + 1) = -rac(1)*s(4, m + 2)
664 s(8, m + 1) = -rac(2)*s(3, m + 2) + orho*s1
665 s(9, m + 1) = -rac(2)*s(4, m + 2)
666 s(10, m + 1) = -rac(3)*s(4, m + 2) + orho*s1
668 ELSE IF (llr == 3)
THEN
670 s(11, m + 1) = -rac(1)*s(5, m + 2) + 2._dp*orho*(s(2, m + 1) - s(2, m + 2))
671 s(12, m + 1) = -rac(1)*s(6, m + 2) + orho*(s(3, m + 1) - s(3, m + 2))
672 s(13, m + 1) = -rac(1)*s(7, m + 2) + orho*(s(4, m + 1) - s(4, m + 2))
673 s(14, m + 1) = -rac(2)*s(6, m + 2) + orho*(s(2, m + 1) - s(2, m + 2))
674 s(15, m + 1) = -rac(1)*s(9, m + 2)
675 s(16, m + 1) = -rac(3)*s(7, m + 2) + orho*(s(2, m + 1) - s(2, m + 2))
676 s(17, m + 1) = -rac(2)*s(8, m + 2) + 2._dp*orho*(s(3, m + 1) - s(3, m + 2))
677 s(18, m + 1) = -rac(2)*s(9, m + 2) + orho*(s(4, m + 1) - s(4, m + 2))
678 s(19, m + 1) = -rac(3)*s(9, m + 2) + orho*(s(3, m + 1) - s(3, m + 2))
679 s(20, m + 1) = -rac(3)*s(10, m + 2) + 2._dp*orho*(s(4, m + 1) - s(4, m + 2))
681 ELSE IF (llr == 4)
THEN
683 s(21, m + 1) = -rac(1)*s(11, m + 2) + 3._dp*orho*(s(5, m + 1) - s(5, m + 2))
684 s(22, m + 1) = -rac(1)*s(12, m + 2) + 2._dp*orho*(s(6, m + 1) - s(6, m + 2))
685 s(23, m + 1) = -rac(1)*s(13, m + 2) + 2._dp*orho*(s(7, m + 1) - s(7, m + 2))
686 s(24, m + 1) = -rac(1)*s(14, m + 2) + orho*(s(8, m + 1) - s(8, m + 2))
687 s(25, m + 1) = -rac(1)*s(15, m + 2) + orho*(s(9, m + 1) - s(9, m + 2))
688 s(26, m + 1) = -rac(1)*s(16, m + 2) + orho*(s(10, m + 1) - s(10, m + 2))
689 s(27, m + 1) = -rac(1)*s(17, m + 2)
690 s(28, m + 1) = -rac(1)*s(18, m + 2)
691 s(29, m + 1) = -rac(1)*s(19, m + 2)
692 s(30, m + 1) = -rac(1)*s(20, m + 2)
693 s(31, m + 1) = -rac(2)*s(17, m + 2) + 3._dp*orho*(s(8, m + 1) - s(8, m + 2))
694 s(32, m + 1) = -rac(2)*s(18, m + 2) + 2._dp*orho*(s(9, m + 1) - s(9, m + 2))
695 s(33, m + 1) = -rac(2)*s(19, m + 2) + orho*(s(10, m + 1) - s(10, m + 2))
696 s(34, m + 1) = -rac(2)*s(20, m + 2)
697 s(35, m + 1) = -rac(3)*s(20, m + 2) + 3._dp*orho*(s(10, m + 1) - s(10, m + 2))
701 DO iry = 0, llr - irx
702 irz = llr - irx - iry
703 irr(1) = irx; irr(2) = iry; irr(3) = irz
706 ir =
coset(irx, iry, irz)
708 irm(ix) = irm(ix) - 1
709 aai = real(max(irm(ix), 0),
dp)*orho
710 ir1 =
coset(irm(1), irm(2), irm(3))
711 irm(ix) = irm(ix) - 1
712 ir2 =
coset(irm(1), irm(2), irm(3))
714 s(ir, m + 1) = -rac(ix)*s(ir1, m + 2) + aai*(s(ir2, m + 1) - s(ir2, m + 2))
725 va(na + i) = va(na + i) + s(i, 1)
731 IF (
PRESENT(dva))
THEN
732 ftz = 2.0_dp*zeta(ipgf)
733 DO la = la_min_set, la_max_set
740 coa =
coset(ax, ay, az)
741 coamx =
coset(ax - 1, ay, az)
742 coamy =
coset(ax, ay - 1, az)
743 coamz =
coset(ax, ay, az - 1)
744 coapx =
coset(ax + 1, ay, az)
745 coapy =
coset(ax, ay + 1, az)
746 coapz =
coset(ax, ay, az + 1)
747 dva(na + coa, 1) = dva(na + coa, 1) + ftz*s(coapx, 1) - fax*s(coamx, 1)
748 dva(na + coa, 2) = dva(na + coa, 2) + ftz*s(coapy, 1) - fay*s(coamy, 1)
749 dva(na + coa, 3) = dva(na + coa, 3) + ftz*s(coapz, 1) - faz*s(coamz, 1)
755 na = na +
ncoset(la_max_set)
Calculation of general three-center integrals over Cartesian Gaussian-type functions and a spherical ...
subroutine, public os_2center(la_max_set, la_min_set, npgfa, rpgfa, zeta, auxint, rpgfc, rac, dac, va, dva)
Calculation of two-center integrals <a|c> over Cartesian Gaussian functions and a spherical potential...
subroutine, public os_3center(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, auxint, rpgfc, rab, dab, rac, dac, rbc, dbc, vab, s, pab, force_a, force_b, fs, vab2, vab2_work, deltaR, iatom, jatom, katom)
Calculation of three-center integrals <a|c|b> over Cartesian Gaussian functions and a spherical poten...
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