89 #include "../base/base_uses.f90"
92 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ai_verfc'
138 SUBROUTINE verfc(la_max1, npgfa, zeta, rpgfa, la_min1, lb_max1, npgfb, zetb, rpgfb, lb_min1, &
139 zetc, rpgfc, zc, cerf, rab, rab2, rac, rac2, rbc2, vabc, verf, vnuc, f, &
140 maxder, vabc_plus, vnabc, pVp_sum, pVp, dkh_erfc)
141 INTEGER,
INTENT(IN) :: la_max1, npgfa
142 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zeta, rpgfa
143 INTEGER,
INTENT(IN) :: la_min1, lb_max1, npgfb
144 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: zetb, rpgfb
145 INTEGER,
INTENT(IN) :: lb_min1
146 REAL(kind=
dp),
INTENT(IN) :: zetc, rpgfc, zc, cerf
147 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
148 REAL(kind=
dp),
INTENT(IN) :: rab2
149 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
150 REAL(kind=
dp),
INTENT(IN) :: rac2, rbc2
151 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vabc
152 REAL(kind=
dp),
DIMENSION(:, :, :) :: verf, vnuc
153 REAL(kind=
dp),
DIMENSION(0:) :: f
154 INTEGER,
INTENT(IN),
OPTIONAL :: maxder
155 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL :: vabc_plus, vnabc, pvp_sum, pvp
156 LOGICAL,
OPTIONAL :: dkh_erfc
158 INTEGER :: ax, ay, az, bx, by, bz, coamx, coamy, coamz, coapx, coapy, coapz, cobmx, cobmy, &
159 cobmz, cobpx, cobpy, cobpz, i, ipgf, j, jpgf, la, la_max, la_min, la_start, lb, lb_max, &
160 lb_min, maxder_local, n, na, nap, nb, nmax, nxx, nxy, nxz, nyx, nyy, nyz, nzx, nzy, nzz, &
163 REAL(kind=
dp) :: dab, dac, dbc, f0, f1, f2, f3, f4, fax, &
164 fay, faz, fbx, fby, fbz, ferf, fnuc, &
165 ftaz, ftbz, fx, fy, fz, rcp2, t, zetp, &
167 REAL(kind=
dp),
DIMENSION(3) :: rap, rbp, rcp, rpw
171 IF (
PRESENT(maxder))
THEN
178 IF (
PRESENT(pvp))
THEN
184 IF (
PRESENT(maxder))
THEN
191 la_min = max(0, la_min1 - 1)
192 lb_min = max(0, lb_min1 - 1)
201 nmax = la_max + lb_max + 1
204 IF (
PRESENT(maxder)) maxder_local = maxder
223 IF (rpgfa(ipgf) + rpgfc < dac)
THEN
224 na = na +
ncoset(la_max1 - maxder_local)
225 nap = nap +
ncoset(la_max1)
230 IF (rpgfa(ipgf) + rpgfc < dac)
THEN
231 na = na +
ncoset(la_max1 - maxder_local)
232 nap = nap +
ncoset(la_max1)
244 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
245 (rpgfa(ipgf) + rpgfb(jpgf) < dab))
THEN
251 IF ((rpgfb(jpgf) + rpgfc < dbc) .OR. &
252 (rpgfa(ipgf) + rpgfb(jpgf) < dab))
THEN
259 zetp = 1.0_dp/(zeta(ipgf) + zetb(jpgf))
261 zetw = 1.0_dp/(zeta(ipgf) + zetb(jpgf) + zetc)
267 f0 = exp(-zeta(ipgf)*f1*rab2)
269 fnuc = 2.0_dp*
pi*zetp*f0
270 ferf = 2.0_dp*sqrt(
pi**5*zetw)*zetp*zetq*f0
273 rcp(:) = rap(:) - rac(:)
278 rcp2 = rcp(1)*rcp(1) + rcp(2)*rcp(2) + rcp(3)*rcp(3)
282 CALL fgamma(nmax - 1, t, f)
287 vnuc(1, 1, n) = fnuc*f(n - 1)
294 CALL fgamma(nmax - 1, t, f)
299 verf(1, 1, n) = ferf*f(n - 1)
316 vnuc(2, 1, n) = rap(1)*vnuc(1, 1, n) - rcp(1)*vnuc(1, 1, n + 1)
317 verf(2, 1, n) = rap(1)*verf(1, 1, n) + rpw(1)*verf(1, 1, n + 1)
318 vnuc(3, 1, n) = rap(2)*vnuc(1, 1, n) - rcp(2)*vnuc(1, 1, n + 1)
319 verf(3, 1, n) = rap(2)*verf(1, 1, n) + rpw(2)*verf(1, 1, n + 1)
320 vnuc(4, 1, n) = rap(3)*vnuc(1, 1, n) - rcp(3)*vnuc(1, 1, n + 1)
321 verf(4, 1, n) = rap(3)*verf(1, 1, n) + rpw(3)*verf(1, 1, n + 1)
339 vnuc(
coset(0, 0, la), 1, n) = &
340 rap(3)*vnuc(
coset(0, 0, la - 1), 1, n) - &
341 rcp(3)*vnuc(
coset(0, 0, la - 1), 1, n + 1) + &
342 f2*real(la - 1,
dp)*(vnuc(
coset(0, 0, la - 2), 1, n) - &
343 vnuc(
coset(0, 0, la - 2), 1, n + 1))
344 verf(
coset(0, 0, la), 1, n) = &
345 rap(3)*verf(
coset(0, 0, la - 1), 1, n) + &
346 rpw(3)*verf(
coset(0, 0, la - 1), 1, n + 1) + &
347 f2*real(la - 1,
dp)*(verf(
coset(0, 0, la - 2), 1, n) + &
348 f4*verf(
coset(0, 0, la - 2), 1, n + 1))
353 vnuc(
coset(0, 1, az), 1, n) = &
354 rap(2)*vnuc(
coset(0, 0, az), 1, n) - &
355 rcp(2)*vnuc(
coset(0, 0, az), 1, n + 1)
356 verf(
coset(0, 1, az), 1, n) = &
357 rap(2)*verf(
coset(0, 0, az), 1, n) + &
358 rpw(2)*verf(
coset(0, 0, az), 1, n + 1)
362 vnuc(
coset(0, ay, az), 1, n) = &
363 rap(2)*vnuc(
coset(0, ay - 1, az), 1, n) - &
364 rcp(2)*vnuc(
coset(0, ay - 1, az), 1, n + 1) + &
365 f2*real(ay - 1,
dp)*(vnuc(
coset(0, ay - 2, az), 1, n) - &
366 vnuc(
coset(0, ay - 2, az), 1, n + 1))
367 verf(
coset(0, ay, az), 1, n) = &
368 rap(2)*verf(
coset(0, ay - 1, az), 1, n) + &
369 rpw(2)*verf(
coset(0, ay - 1, az), 1, n + 1) + &
370 f2*real(ay - 1,
dp)*(verf(
coset(0, ay - 2, az), 1, n) + &
371 f4*verf(
coset(0, ay - 2, az), 1, n + 1))
378 vnuc(
coset(1, ay, az), 1, n) = &
379 rap(1)*vnuc(
coset(0, ay, az), 1, n) - &
380 rcp(1)*vnuc(
coset(0, ay, az), 1, n + 1)
381 verf(
coset(1, ay, az), 1, n) = &
382 rap(1)*verf(
coset(0, ay, az), 1, n) + &
383 rpw(1)*verf(
coset(0, ay, az), 1, n + 1)
387 f3 = f2*real(ax - 1,
dp)
390 vnuc(
coset(ax, ay, az), 1, n) = &
391 rap(1)*vnuc(
coset(ax - 1, ay, az), 1, n) - &
392 rcp(1)*vnuc(
coset(ax - 1, ay, az), 1, n + 1) + &
393 f3*(vnuc(
coset(ax - 2, ay, az), 1, n) - &
394 vnuc(
coset(ax - 2, ay, az), 1, n + 1))
395 verf(
coset(ax, ay, az), 1, n) = &
396 rap(1)*verf(
coset(ax - 1, ay, az), 1, n) + &
397 rpw(1)*verf(
coset(ax - 1, ay, az), 1, n + 1) + &
398 f3*(verf(
coset(ax - 2, ay, az), 1, n) + &
399 f4*verf(
coset(ax - 2, ay, az), 1, n + 1))
414 rbp(:) = rap(:) - rab(:)
419 la_start = max(0, la_min - 1)
421 DO la = la_start, la_max - 1
422 DO n = 1, nmax - la - 1
426 vnuc(
coset(ax, ay, az), 2, n) = &
427 vnuc(
coset(ax + 1, ay, az), 1, n) - &
428 rab(1)*vnuc(
coset(ax, ay, az), 1, n)
429 verf(
coset(ax, ay, az), 2, n) = &
430 verf(
coset(ax + 1, ay, az), 1, n) - &
431 rab(1)*verf(
coset(ax, ay, az), 1, n)
432 vnuc(
coset(ax, ay, az), 3, n) = &
433 vnuc(
coset(ax, ay + 1, az), 1, n) - &
434 rab(2)*vnuc(
coset(ax, ay, az), 1, n)
435 verf(
coset(ax, ay, az), 3, n) = &
436 verf(
coset(ax, ay + 1, az), 1, n) - &
437 rab(2)*verf(
coset(ax, ay, az), 1, n)
438 vnuc(
coset(ax, ay, az), 4, n) = &
439 vnuc(
coset(ax, ay, az + 1), 1, n) - &
440 rab(3)*vnuc(
coset(ax, ay, az), 1, n)
441 verf(
coset(ax, ay, az), 4, n) = &
442 verf(
coset(ax, ay, az + 1), 1, n) - &
443 rab(3)*verf(
coset(ax, ay, az), 1, n)
460 DO n = 1, nmax - la_max - 1
463 DO ay = 0, la_max - ax
465 az = la_max - ax - ay
469 vnuc(
coset(ax, ay, az), 2, n) = &
470 rbp(1)*vnuc(
coset(ax, ay, az), 1, n) - &
471 rcp(1)*vnuc(
coset(ax, ay, az), 1, n + 1)
472 verf(
coset(ax, ay, az), 2, n) = &
473 rbp(1)*verf(
coset(ax, ay, az), 1, n) + &
474 rpw(1)*verf(
coset(ax, ay, az), 1, n + 1)
476 vnuc(
coset(ax, ay, az), 2, n) = &
477 rbp(1)*vnuc(
coset(ax, ay, az), 1, n) - &
478 rcp(1)*vnuc(
coset(ax, ay, az), 1, n + 1) + &
479 fx*(vnuc(
coset(ax - 1, ay, az), 1, n) - &
480 vnuc(
coset(ax - 1, ay, az), 1, n + 1))
481 verf(
coset(ax, ay, az), 2, n) = &
482 rbp(1)*verf(
coset(ax, ay, az), 1, n) + &
483 rpw(1)*verf(
coset(ax, ay, az), 1, n + 1) + &
484 fx*(verf(
coset(ax - 1, ay, az), 1, n) + &
485 f4*verf(
coset(ax - 1, ay, az), 1, n + 1))
489 vnuc(
coset(ax, ay, az), 3, n) = &
490 rbp(2)*vnuc(
coset(ax, ay, az), 1, n) - &
491 rcp(2)*vnuc(
coset(ax, ay, az), 1, n + 1)
492 verf(
coset(ax, ay, az), 3, n) = &
493 rbp(2)*verf(
coset(ax, ay, az), 1, n) + &
494 rpw(2)*verf(
coset(ax, ay, az), 1, n + 1)
496 vnuc(
coset(ax, ay, az), 3, n) = &
497 rbp(2)*vnuc(
coset(ax, ay, az), 1, n) - &
498 rcp(2)*vnuc(
coset(ax, ay, az), 1, n + 1) + &
499 fy*(vnuc(
coset(ax, ay - 1, az), 1, n) - &
500 vnuc(
coset(ax, ay - 1, az), 1, n + 1))
501 verf(
coset(ax, ay, az), 3, n) = &
502 rbp(2)*verf(
coset(ax, ay, az), 1, n) + &
503 rpw(2)*verf(
coset(ax, ay, az), 1, n + 1) + &
504 fy*(verf(
coset(ax, ay - 1, az), 1, n) + &
505 f4*verf(
coset(ax, ay - 1, az), 1, n + 1))
509 vnuc(
coset(ax, ay, az), 4, n) = &
510 rbp(3)*vnuc(
coset(ax, ay, az), 1, n) - &
511 rcp(3)*vnuc(
coset(ax, ay, az), 1, n + 1)
512 verf(
coset(ax, ay, az), 4, n) = &
513 rbp(3)*verf(
coset(ax, ay, az), 1, n) + &
514 rpw(3)*verf(
coset(ax, ay, az), 1, n + 1)
516 vnuc(
coset(ax, ay, az), 4, n) = &
517 rbp(3)*vnuc(
coset(ax, ay, az), 1, n) - &
518 rcp(3)*vnuc(
coset(ax, ay, az), 1, n + 1) + &
519 fz*(vnuc(
coset(ax, ay, az - 1), 1, n) - &
520 vnuc(
coset(ax, ay, az - 1), 1, n + 1))
521 verf(
coset(ax, ay, az), 4, n) = &
522 rbp(3)*verf(
coset(ax, ay, az), 1, n) + &
523 rpw(3)*verf(
coset(ax, ay, az), 1, n + 1) + &
524 fz*(verf(
coset(ax, ay, az - 1), 1, n) + &
525 f4*verf(
coset(ax, ay, az - 1), 1, n + 1))
544 la_start = max(0, la_min - 1)
546 DO la = la_start, la_max - 1
547 DO n = 1, nmax - la - lb
554 vnuc(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
555 vnuc(
coset(ax, ay, az + 1),
coset(0, 0, lb - 1), n) - &
556 rab(3)*vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 1), n)
557 verf(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
558 verf(
coset(ax, ay, az + 1),
coset(0, 0, lb - 1), n) - &
559 rab(3)*verf(
coset(ax, ay, az),
coset(0, 0, lb - 1), n)
565 vnuc(
coset(ax, ay, az),
coset(0, by, bz), n) = &
566 vnuc(
coset(ax, ay + 1, az),
coset(0, by - 1, bz), n) - &
567 rab(2)*vnuc(
coset(ax, ay, az),
coset(0, by - 1, bz), n)
568 verf(
coset(ax, ay, az),
coset(0, by, bz), n) = &
569 verf(
coset(ax, ay + 1, az),
coset(0, by - 1, bz), n) - &
570 rab(2)*verf(
coset(ax, ay, az),
coset(0, by - 1, bz), n)
578 vnuc(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
579 vnuc(
coset(ax + 1, ay, az),
coset(bx - 1, by, bz), n) - &
580 rab(1)*vnuc(
coset(ax, ay, az),
coset(bx - 1, by, bz), n)
581 verf(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
582 verf(
coset(ax + 1, ay, az),
coset(bx - 1, by, bz), n) - &
583 rab(1)*verf(
coset(ax, ay, az),
coset(bx - 1, by, bz), n)
607 DO n = 1, nmax - la_max - lb
610 DO ay = 0, la_max - ax
612 az = la_max - ax - ay
617 f3 = f2*real(lb - 1,
dp)
620 vnuc(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
621 rbp(3)*vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 1), n) - &
622 rcp(3)*vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 1), n + 1) + &
623 f3*(vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 2), n) - &
624 vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 2), n + 1))
625 verf(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
626 rbp(3)*verf(
coset(ax, ay, az),
coset(0, 0, lb - 1), n) + &
627 rpw(3)*verf(
coset(ax, ay, az),
coset(0, 0, lb - 1), n + 1) + &
628 f3*(verf(
coset(ax, ay, az),
coset(0, 0, lb - 2), n) + &
629 f4*verf(
coset(ax, ay, az),
coset(0, 0, lb - 2), n + 1))
631 vnuc(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
632 rbp(3)*vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 1), n) - &
633 rcp(3)*vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 1), n + 1) + &
634 fz*(vnuc(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1), n) - &
635 vnuc(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1), n + 1)) + &
636 f3*(vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 2), n) - &
637 vnuc(
coset(ax, ay, az),
coset(0, 0, lb - 2), n + 1))
638 verf(
coset(ax, ay, az),
coset(0, 0, lb), n) = &
639 rbp(3)*verf(
coset(ax, ay, az),
coset(0, 0, lb - 1), n) + &
640 rpw(3)*verf(
coset(ax, ay, az),
coset(0, 0, lb - 1), n + 1) + &
641 fz*(verf(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1), n) + &
642 f4*verf(
coset(ax, ay, az - 1),
coset(0, 0, lb - 1), n + 1)) + &
643 f3*(verf(
coset(ax, ay, az),
coset(0, 0, lb - 2), n) + &
644 f4*verf(
coset(ax, ay, az),
coset(0, 0, lb - 2), n + 1))
651 vnuc(
coset(ax, ay, az),
coset(0, 1, bz), n) = &
652 rbp(2)*vnuc(
coset(ax, ay, az),
coset(0, 0, bz), n) - &
653 rcp(2)*vnuc(
coset(ax, ay, az),
coset(0, 0, bz), n + 1)
654 verf(
coset(ax, ay, az),
coset(0, 1, bz), n) = &
655 rbp(2)*verf(
coset(ax, ay, az),
coset(0, 0, bz), n) + &
656 rpw(2)*verf(
coset(ax, ay, az),
coset(0, 0, bz), n + 1)
659 f3 = f2*real(by - 1,
dp)
660 vnuc(
coset(ax, ay, az),
coset(0, by, bz), n) = &
661 rbp(2)*vnuc(
coset(ax, ay, az),
coset(0, by - 1, bz), n) - &
662 rcp(2)*vnuc(
coset(ax, ay, az),
coset(0, by - 1, bz), n + 1) + &
663 f3*(vnuc(
coset(ax, ay, az),
coset(0, by - 2, bz), n) - &
664 vnuc(
coset(ax, ay, az),
coset(0, by - 2, bz), n + 1))
665 verf(
coset(ax, ay, az),
coset(0, by, bz), n) = &
666 rbp(2)*verf(
coset(ax, ay, az),
coset(0, by - 1, bz), n) + &
667 rpw(2)*verf(
coset(ax, ay, az),
coset(0, by - 1, bz), n + 1) + &
668 f3*(verf(
coset(ax, ay, az),
coset(0, by - 2, bz), n) + &
669 f4*verf(
coset(ax, ay, az),
coset(0, by - 2, bz), n + 1))
673 vnuc(
coset(ax, ay, az),
coset(0, 1, bz), n) = &
674 rbp(2)*vnuc(
coset(ax, ay, az),
coset(0, 0, bz), n) - &
675 rcp(2)*vnuc(
coset(ax, ay, az),
coset(0, 0, bz), n + 1) + &
676 fy*(vnuc(
coset(ax, ay - 1, az),
coset(0, 0, bz), n) - &
677 vnuc(
coset(ax, ay - 1, az),
coset(0, 0, bz), n + 1))
678 verf(
coset(ax, ay, az),
coset(0, 1, bz), n) = &
679 rbp(2)*verf(
coset(ax, ay, az),
coset(0, 0, bz), n) + &
680 rpw(2)*verf(
coset(ax, ay, az),
coset(0, 0, bz), n + 1) + &
681 fy*(verf(
coset(ax, ay - 1, az),
coset(0, 0, bz), n) + &
682 f4*verf(
coset(ax, ay - 1, az),
coset(0, 0, bz), n + 1))
685 f3 = f2*real(by - 1,
dp)
686 vnuc(
coset(ax, ay, az),
coset(0, by, bz), n) = &
687 rbp(2)*vnuc(
coset(ax, ay, az),
coset(0, by - 1, bz), n) - &
688 rcp(2)*vnuc(
coset(ax, ay, az),
coset(0, by - 1, bz), n + 1) + &
689 fy*(vnuc(
coset(ax, ay - 1, az),
coset(0, by - 1, bz), n) - &
690 vnuc(
coset(ax, ay - 1, az),
coset(0, by - 1, bz), n + 1)) + &
691 f3*(vnuc(
coset(ax, ay, az),
coset(0, by - 2, bz), n) - &
692 vnuc(
coset(ax, ay, az),
coset(0, by - 2, bz), n + 1))
693 verf(
coset(ax, ay, az),
coset(0, by, bz), n) = &
694 rbp(2)*verf(
coset(ax, ay, az),
coset(0, by - 1, bz), n) + &
695 rpw(2)*verf(
coset(ax, ay, az),
coset(0, by - 1, bz), n + 1) + &
696 fy*(verf(
coset(ax, ay - 1, az),
coset(0, by - 1, bz), n) + &
697 f4*verf(
coset(ax, ay - 1, az), &
698 coset(0, by - 1, bz), n + 1)) + &
699 f3*(verf(
coset(ax, ay, az),
coset(0, by - 2, bz), n) + &
700 f4*verf(
coset(ax, ay, az),
coset(0, by - 2, bz), n + 1))
709 vnuc(
coset(ax, ay, az),
coset(1, by, bz), n) = &
710 rbp(1)*vnuc(
coset(ax, ay, az),
coset(0, by, bz), n) - &
711 rcp(1)*vnuc(
coset(ax, ay, az),
coset(0, by, bz), n + 1)
712 verf(
coset(ax, ay, az),
coset(1, by, bz), n) = &
713 rbp(1)*verf(
coset(ax, ay, az),
coset(0, by, bz), n) + &
714 rpw(1)*verf(
coset(ax, ay, az),
coset(0, by, bz), n + 1)
717 f3 = f2*real(bx - 1,
dp)
720 vnuc(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
721 rbp(1)*vnuc(
coset(ax, ay, az),
coset(bx - 1, by, bz), n) - &
722 rcp(1)*vnuc(
coset(ax, ay, az), &
723 coset(bx - 1, by, bz), n + 1) + &
724 f3*(vnuc(
coset(ax, ay, az),
coset(bx - 2, by, bz), n) - &
725 vnuc(
coset(ax, ay, az),
coset(bx - 2, by, bz), n + 1))
726 verf(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
727 rbp(1)*verf(
coset(ax, ay, az),
coset(bx - 1, by, bz), n) + &
728 rpw(1)*verf(
coset(ax, ay, az), &
729 coset(bx - 1, by, bz), n + 1) + &
730 f3*(verf(
coset(ax, ay, az),
coset(bx - 2, by, bz), n) + &
731 f4*verf(
coset(ax, ay, az),
coset(bx - 2, by, bz), n + 1))
737 vnuc(
coset(ax, ay, az),
coset(1, by, bz), n) = &
738 rbp(1)*vnuc(
coset(ax, ay, az),
coset(0, by, bz), n) - &
739 rcp(1)*vnuc(
coset(ax, ay, az),
coset(0, by, bz), n + 1) + &
740 fx*(vnuc(
coset(ax - 1, ay, az),
coset(0, by, bz), n) - &
741 vnuc(
coset(ax - 1, ay, az),
coset(0, by, bz), n + 1))
742 verf(
coset(ax, ay, az),
coset(1, by, bz), n) = &
743 rbp(1)*verf(
coset(ax, ay, az),
coset(0, by, bz), n) + &
744 rpw(1)*verf(
coset(ax, ay, az),
coset(0, by, bz), n + 1) + &
745 fx*(verf(
coset(ax - 1, ay, az),
coset(0, by, bz), n) + &
746 f4*verf(
coset(ax - 1, ay, az),
coset(0, by, bz), n + 1))
749 f3 = f2*real(bx - 1,
dp)
752 vnuc(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
753 rbp(1)*vnuc(
coset(ax, ay, az),
coset(bx - 1, by, bz), n) - &
754 rcp(1)*vnuc(
coset(ax, ay, az), &
755 coset(bx - 1, by, bz), n + 1) + &
756 fx*(vnuc(
coset(ax - 1, ay, az),
coset(bx - 1, by, bz), n) - &
757 vnuc(
coset(ax - 1, ay, az), &
758 coset(bx - 1, by, bz), n + 1)) + &
759 f3*(vnuc(
coset(ax, ay, az),
coset(bx - 2, by, bz), n) - &
760 vnuc(
coset(ax, ay, az),
coset(bx - 2, by, bz), n + 1))
761 verf(
coset(ax, ay, az),
coset(bx, by, bz), n) = &
762 rbp(1)*verf(
coset(ax, ay, az),
coset(bx - 1, by, bz), n) + &
763 rpw(1)*verf(
coset(ax, ay, az), &
764 coset(bx - 1, by, bz), n + 1) + &
765 fx*(verf(
coset(ax - 1, ay, az), &
766 coset(bx - 1, by, bz), n) + &
767 f4*verf(
coset(ax - 1, ay, az), &
768 coset(bx - 1, by, bz), n + 1)) + &
769 f3*(verf(
coset(ax, ay, az),
coset(bx - 2, by, bz), n) + &
770 f4*verf(
coset(ax, ay, az),
coset(bx - 2, by, bz), n + 1))
790 rbp(:) = rap(:) - rab(:)
798 vnuc(1, 2, n) = rbp(1)*vnuc(1, 1, n) - rcp(1)*vnuc(1, 1, n + 1)
799 verf(1, 2, n) = rbp(1)*verf(1, 1, n) + rpw(1)*verf(1, 1, n + 1)
800 vnuc(1, 3, n) = rbp(2)*vnuc(1, 1, n) - rcp(2)*vnuc(1, 1, n + 1)
801 verf(1, 3, n) = rbp(2)*verf(1, 1, n) + rpw(2)*verf(1, 1, n + 1)
802 vnuc(1, 4, n) = rbp(3)*vnuc(1, 1, n) - rcp(3)*vnuc(1, 1, n + 1)
803 verf(1, 4, n) = rbp(3)*verf(1, 1, n) + rpw(3)*verf(1, 1, n + 1)
821 vnuc(1,
coset(0, 0, lb), n) = &
822 rbp(3)*vnuc(1,
coset(0, 0, lb - 1), n) - &
823 rcp(3)*vnuc(1,
coset(0, 0, lb - 1), n + 1) + &
824 f2*real(lb - 1,
dp)*(vnuc(1,
coset(0, 0, lb - 2), n) - &
825 vnuc(1,
coset(0, 0, lb - 2), n + 1))
826 verf(1,
coset(0, 0, lb), n) = &
827 rbp(3)*verf(1,
coset(0, 0, lb - 1), n) + &
828 rpw(3)*verf(1,
coset(0, 0, lb - 1), n + 1) + &
829 f2*real(lb - 1,
dp)*(verf(1,
coset(0, 0, lb - 2), n) + &
830 f4*verf(1,
coset(0, 0, lb - 2), n + 1))
835 vnuc(1,
coset(0, 1, bz), n) = &
836 rbp(2)*vnuc(1,
coset(0, 0, bz), n) - &
837 rcp(2)*vnuc(1,
coset(0, 0, bz), n + 1)
838 verf(1,
coset(0, 1, bz), n) = &
839 rbp(2)*verf(1,
coset(0, 0, bz), n) + &
840 rpw(2)*verf(1,
coset(0, 0, bz), n + 1)
844 vnuc(1,
coset(0, by, bz), n) = &
845 rbp(2)*vnuc(1,
coset(0, by - 1, bz), n) - &
846 rcp(2)*vnuc(1,
coset(0, by - 1, bz), n + 1) + &
847 f2*real(by - 1,
dp)*(vnuc(1,
coset(0, by - 2, bz), n) - &
848 vnuc(1,
coset(0, by - 2, bz), n + 1))
849 verf(1,
coset(0, by, bz), n) = &
850 rbp(2)*verf(1,
coset(0, by - 1, bz), n) + &
851 rpw(2)*verf(1,
coset(0, by - 1, bz), n + 1) + &
852 f2*real(by - 1,
dp)*(verf(1,
coset(0, by - 2, bz), n) + &
853 f4*verf(1,
coset(0, by - 2, bz), n + 1))
860 vnuc(1,
coset(1, by, bz), n) = &
861 rbp(1)*vnuc(1,
coset(0, by, bz), n) - &
862 rcp(1)*vnuc(1,
coset(0, by, bz), n + 1)
863 verf(1,
coset(1, by, bz), n) = &
864 rbp(1)*verf(1,
coset(0, by, bz), n) + &
865 rpw(1)*verf(1,
coset(0, by, bz), n + 1)
869 f3 = f2*real(bx - 1,
dp)
872 vnuc(1,
coset(bx, by, bz), n) = &
873 rbp(1)*vnuc(1,
coset(bx - 1, by, bz), n) - &
874 rcp(1)*vnuc(1,
coset(bx - 1, by, bz), n + 1) + &
875 f3*(vnuc(1,
coset(bx - 2, by, bz), n) - &
876 vnuc(1,
coset(bx - 2, by, bz), n + 1))
877 verf(1,
coset(bx, by, bz), n) = &
878 rbp(1)*verf(1,
coset(bx - 1, by, bz), n) + &
879 rpw(1)*verf(1,
coset(bx - 1, by, bz), n + 1) + &
880 f3*(verf(1,
coset(bx - 2, by, bz), n) + &
881 f4*verf(1,
coset(bx - 2, by, bz), n + 1))
899 DO i =
ncoset(la_min1 - 1) + 1,
ncoset(la_max1 - maxder_local)
900 vnabc(na + i, nb + j) = vnabc(na + i, nb + j) + cerf*verf(i, j, 1)
904 DO i =
ncoset(la_min1 - 1) + 1,
ncoset(la_max1 - maxder_local)
905 vabc(na + i, nb + j) = vabc(na + i, nb + j) - zc*vnuc(i, j, 1)
910 DO i =
ncoset(la_min1 - 1) + 1,
ncoset(la_max1 - maxder_local)
911 vabc(na + i, nb + j) = vabc(na + i, nb + j) - &
912 zc*vnuc(i, j, 1) + cerf*verf(i, j, 1)
918 IF (
PRESENT(maxder))
THEN
921 vabc_plus(nap + i, nb + j) = vabc_plus(nap + i, nb + j) - &
922 zc*vnuc(i, j, 1) + cerf*verf(i, j, 1)
934 ftaz = 2.0_dp*zeta(ipgf)
935 ftbz = 2.0_dp*zetb(jpgf)
952 pvpa =
coset(ax, ay, az)
953 coamx =
coset(ax - 1, ay, az)
954 coamy =
coset(ax, ay - 1, az)
955 coamz =
coset(ax, ay, az - 1)
956 coapx =
coset(ax + 1, ay, az)
957 coapy =
coset(ax, ay + 1, az)
958 coapz =
coset(ax, ay, az + 1)
966 pvpb =
coset(bx, by, bz)
967 cobmx =
coset(bx - 1, by, bz)
968 cobmy =
coset(bx, by - 1, bz)
969 cobmz =
coset(bx, by, bz - 1)
970 cobpx =
coset(bx + 1, by, bz)
971 cobpy =
coset(bx, by + 1, bz)
972 cobpz =
coset(bx, by, bz + 1)
974 pvp(pvpa, pvpb) = ftaz*ftbz*(-zc*vnuc(coapx, cobpx, 1) + cerf*verf(coapx, cobpx, 1)) - &
975 ftaz*fbx*(-zc*vnuc(coapx, cobmx, 1) + cerf*verf(coapx, cobmx, 1)) - &
976 ftbz*fax*(-zc*vnuc(coamx, cobpx, 1) + cerf*verf(coamx, cobpx, 1)) + &
977 fax*fbx*(-zc*vnuc(coamx, cobmx, 1) + cerf*verf(coamx, cobmx, 1)) + &
978 ftaz*ftbz*(-zc*vnuc(coapy, cobpy, 1) + cerf*verf(coapy, cobpy, 1)) - &
979 ftaz*fby*(-zc*vnuc(coapy, cobmy, 1) + cerf*verf(coapy, cobmy, 1)) - &
980 ftbz*fay*(-zc*vnuc(coamy, cobpy, 1) + cerf*verf(coamy, cobpy, 1)) + &
981 fay*fby*(-zc*vnuc(coamy, cobmy, 1) + cerf*verf(coamy, cobmy, 1)) + &
982 ftaz*ftbz*(-zc*vnuc(coapz, cobpz, 1) + cerf*verf(coapz, cobpz, 1)) - &
983 ftaz*fbz*(-zc*vnuc(coapz, cobmz, 1) + cerf*verf(coapz, cobmz, 1)) - &
984 ftbz*faz*(-zc*vnuc(coamz, cobpz, 1) + cerf*verf(coamz, cobpz, 1)) + &
985 faz*fbz*(-zc*vnuc(coamz, cobmz, 1) + cerf*verf(coamz, cobmz, 1))
987 pvp(pvpa, pvpb) = ftaz*ftbz*(-zc*vnuc(coapx, cobpx, 1)) - &
988 ftaz*fbx*(-zc*vnuc(coapx, cobmx, 1)) - &
989 ftbz*fax*(-zc*vnuc(coamx, cobpx, 1)) + &
990 fax*fbx*(-zc*vnuc(coamx, cobmx, 1)) + &
991 ftaz*ftbz*(-zc*vnuc(coapy, cobpy, 1)) - &
992 ftaz*fby*(-zc*vnuc(coapy, cobmy, 1)) - &
993 ftbz*fay*(-zc*vnuc(coamy, cobpy, 1)) + &
994 fay*fby*(-zc*vnuc(coamy, cobmy, 1)) + &
995 ftaz*ftbz*(-zc*vnuc(coapz, cobpz, 1)) - &
996 ftaz*fbz*(-zc*vnuc(coapz, cobmz, 1)) - &
997 ftbz*faz*(-zc*vnuc(coamz, cobpz, 1)) + &
998 faz*fbz*(-zc*vnuc(coamz, cobmz, 1))
1007 DO j = 1,
ncoset(lb_max1)
1008 DO i =
ncoset(la_min1 - 1) + 1,
ncoset(la_max1 - maxder_local)
1009 pvp_sum(na + i, nb + j) = pvp_sum(na + i, nb + j) + pvp(i, j)
1014 nb = nb +
ncoset(lb_max1)
1018 na = na +
ncoset(la_max1 - maxder_local)
1019 nap = nap +
ncoset(la_max1)
1023 END SUBROUTINE verfc
Build up the nuclear potential part of the core Hamiltonian matrix in the case of an allelectron calc...
subroutine, public verfc(la_max1, npgfa, zeta, rpgfa, la_min1, lb_max1, npgfb, zetb, rpgfb, lb_min1, zetc, rpgfc, zc, cerf, rab, rab2, rac, rac2, rbc2, vabc, verf, vnuc, f, maxder, vabc_plus, vnabc, pVp_sum, pVp, dkh_erfc)
Calculation of the primitive three-center nuclear potential integrals <a|Z*erfc(r)/r|b> over Cartesia...
Calculation of the incomplete Gamma function F_n(t) for multi-center integrals over Cartesian Gaussia...
subroutine, public fgamma_0(nmax, t, f)
Calculation of the incomplete Gamma function F(t) for multicenter integrals over 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