64 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
65 npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
66 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
68 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
69 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
70 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
71 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
72 INTEGER,
INTENT(IN) :: npot_ecp
73 REAL(kind=
dp),
DIMENSION(1:npot_ecp),
INTENT(IN) :: alpha_ecp, coeffs_ecp
74 INTEGER,
DIMENSION(1:npot_ecp),
INTENT(IN) :: nrpot_ecp
75 REAL(kind=
dp),
INTENT(IN) :: rpgfc
76 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
77 REAL(kind=
dp),
INTENT(IN) :: dab
78 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
79 REAL(kind=
dp),
INTENT(IN) :: dac, dbc
80 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
81 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
83 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT), &
84 OPTIONAL :: force_a, force_b
86 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
87 ipgf, j, jpgf, li, lj, ncoa, ncob
88 LOGICAL :: calc_forces
89 REAL(
dp) :: expi, expj, fac_a, fac_b, mindist, &
90 normi, normj, prefi, prefj, zeti, zetj
91 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp, tmpx, tmpy, tmpz
92 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
97 IF (
PRESENT(pab) .AND.
PRESENT(force_a) .AND.
PRESENT(force_b)) calc_forces = .true.
103 CALL cp_warn(__location__, &
104 "ECP gradients calculated with the libgrpp library are, to this date, not numerically stable. "// &
105 "Please use the reference routine 'libgrpp_local_forces_ref' instead.")
115 IF (dab >= mindist .AND. dbc >= mindist .AND. dac >= mindist)
THEN
120 ELSE IF (dab < mindist .AND. dac >= mindist)
THEN
125 ELSE IF (dab >= mindist .AND. dac < mindist)
THEN
130 ELSE IF (dab >= mindist .AND. dbc < mindist)
THEN
136 calc_forces = .false.
145 ALLOCATE (tmp(
nco(la_max_set)*
nco(lb_max_set)))
146 IF (calc_forces)
THEN
147 ALLOCATE (tmpx(
nco(la_max_set)*
nco(lb_max_set)))
148 ALLOCATE (tmpy(
nco(la_max_set)*
nco(lb_max_set)))
149 ALLOCATE (tmpz(
nco(la_max_set)*
nco(lb_max_set)))
153 IF (rpgfa(ipgf) + rpgfc < dac) cycle
155 a_start = (ipgf - 1)*
ncoset(la_max_set)
158 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
159 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
161 b_start = (jpgf - 1)*
ncoset(lb_max_set)
163 DO li = la_min_set, la_max_set
164 a_offset = a_start +
ncoset(li - 1)
166 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
167 expi = 0.25_dp*real(2*li + 3,
dp)
168 normi = 1.0_dp/(prefi*zeti**expi)
170 DO lj = lb_min_set, lb_max_set
171 b_offset = b_start +
ncoset(lj - 1)
173 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
174 expj = 0.25_dp*real(2*lj + 3,
dp)
175 normj = 1.0_dp/(prefj*zetj**expj)
177 tmp(1:ncoa*ncob) = 0.0_dp
181 rb, lj, 1, [normj], [zetj], &
182 rc, [npot_ecp], nrpot_ecp, &
183 coeffs_ecp, alpha_ecp, tmp)
188 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
192 IF (calc_forces)
THEN
193 tmpx(1:ncoa*ncob) = 0.0_dp
194 tmpy(1:ncoa*ncob) = 0.0_dp
195 tmpz(1:ncoa*ncob) = 0.0_dp
199 rb, lj, 1, [normj], [zetj], &
200 rc, [npot_ecp], nrpot_ecp, &
201 coeffs_ecp, alpha_ecp, ra, &
208 force_a(1) = force_a(1) + fac_a*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
209 force_a(2) = force_a(2) + fac_a*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
210 force_a(3) = force_a(3) + fac_a*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
214 tmpx(1:ncoa*ncob) = 0.0_dp
215 tmpy(1:ncoa*ncob) = 0.0_dp
216 tmpz(1:ncoa*ncob) = 0.0_dp
220 rb, lj, 1, [normj], [zetj], &
221 rc, [npot_ecp], nrpot_ecp, &
222 coeffs_ecp, alpha_ecp, rb, &
229 force_b(1) = force_b(1) + fac_b*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
230 force_b(2) = force_b(2) + fac_b*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
231 force_b(3) = force_b(3) + fac_b*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
272 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
273 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
274 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
276 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
277 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
278 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
279 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
280 INTEGER,
INTENT(IN) :: lmax_ecp
281 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
282 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
283 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
284 REAL(kind=
dp),
INTENT(IN) :: rpgfc
285 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
286 REAL(kind=
dp),
INTENT(IN) :: dab
287 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
288 REAL(kind=
dp),
INTENT(IN) :: dac, dbc
289 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
290 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
292 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT), &
293 OPTIONAL :: force_a, force_b
295 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
296 ipgf, j, jpgf, li, lj, lk, ncoa, ncob
297 LOGICAL :: calc_forces
298 REAL(
dp) :: expi, expj, fac_a, fac_b, mindist, &
299 normi, normj, prefi, prefj, zeti, zetj
300 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp, tmpx, tmpy, tmpz
301 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
305 calc_forces = .false.
306 IF (
PRESENT(pab) .AND.
PRESENT(force_a) .AND.
PRESENT(force_b)) calc_forces = .true.
308 IF (calc_forces)
THEN
312 CALL cp_warn(__location__, &
313 "ECP gradients calculated with the libgrpp library are, to this date, not numerically stable. "// &
314 "Please use the reference routine 'libgrpp_semilocal_forces_ref' instead.")
324 IF (dab >= mindist .AND. dbc >= mindist .AND. dac >= mindist)
THEN
329 ELSE IF (dab < mindist .AND. dac >= mindist)
THEN
334 ELSE IF (dab >= mindist .AND. dac < mindist)
THEN
339 ELSE IF (dab >= mindist .AND. dbc < mindist)
THEN
345 calc_forces = .false.
354 ALLOCATE (tmp(
nco(la_max_set)*
nco(lb_max_set)))
355 IF (calc_forces)
THEN
356 ALLOCATE (tmpx(
nco(la_max_set)*
nco(lb_max_set)))
357 ALLOCATE (tmpy(
nco(la_max_set)*
nco(lb_max_set)))
358 ALLOCATE (tmpz(
nco(la_max_set)*
nco(lb_max_set)))
362 IF (rpgfa(ipgf) + rpgfc < dac) cycle
364 a_start = (ipgf - 1)*
ncoset(la_max_set)
367 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
368 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
370 b_start = (jpgf - 1)*
ncoset(lb_max_set)
372 DO li = la_min_set, la_max_set
373 a_offset = a_start +
ncoset(li - 1)
375 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
376 expi = 0.25_dp*real(2*li + 3,
dp)
377 normi = 1.0_dp/(prefi*zeti**expi)
379 DO lj = lb_min_set, lb_max_set
380 b_offset = b_start +
ncoset(lj - 1)
382 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
383 expj = 0.25_dp*real(2*lj + 3,
dp)
384 normj = 1.0_dp/(prefj*zetj**expj)
388 tmp(1:ncoa*ncob) = 0.0_dp
392 rb, lj, 1, [normj], [zetj], &
393 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
394 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
399 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
403 IF (calc_forces)
THEN
405 tmpx(1:ncoa*ncob) = 0.0_dp
406 tmpy(1:ncoa*ncob) = 0.0_dp
407 tmpz(1:ncoa*ncob) = 0.0_dp
411 rb, lj, 1, [normj], [zetj], &
412 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
413 coeffs_ecp(:, lk), alpha_ecp(:, lk), ra, &
420 force_a(1) = force_a(1) + fac_a*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
421 force_a(2) = force_a(2) + fac_a*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
422 force_a(3) = force_a(3) + fac_a*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
426 tmpx(1:ncoa*ncob) = 0.0_dp
427 tmpy(1:ncoa*ncob) = 0.0_dp
428 tmpz(1:ncoa*ncob) = 0.0_dp
432 rb, lj, 1, [normj], [zetj], &
433 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
434 coeffs_ecp(:, lk), alpha_ecp(:, lk), rb, &
440 force_b(1) = force_b(1) + fac_b*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
441 force_b(2) = force_b(2) + fac_b*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
442 force_b(3) = force_b(3) + fac_b*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
488 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
489 npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
490 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
492 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
493 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
494 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
495 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
496 INTEGER,
INTENT(IN) :: npot_ecp
497 REAL(kind=
dp),
DIMENSION(1:npot_ecp),
INTENT(IN) :: alpha_ecp, coeffs_ecp
498 INTEGER,
DIMENSION(1:npot_ecp),
INTENT(IN) :: nrpot_ecp
499 REAL(kind=
dp),
INTENT(IN) :: rpgfc
500 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
501 REAL(kind=
dp),
INTENT(IN) :: dab
502 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
503 REAL(kind=
dp),
INTENT(IN) :: dac, dbc
504 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
505 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
506 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
508 INTEGER :: a_offset, a_offset_f, a_start, &
509 a_start_f, b_offset, b_offset_f, &
510 b_start, b_start_f, i, ipgf, j, jpgf, &
512 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
514 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
515 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: tmpx, tmpy, tmpz, vab_f
516 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
521 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
529 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
532 IF (rpgfa(ipgf) + rpgfc < dac) cycle
534 a_start = (ipgf - 1)*
ncoset(la_max_set)
535 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
538 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
539 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
541 b_start = (jpgf - 1)*
ncoset(lb_max_set)
542 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
544 DO li = max(0, la_min_set - 1), la_max_set + 1
545 a_offset = a_start +
ncoset(li - 1)
546 a_offset_f = a_start_f +
ncoset(li - 1)
548 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
549 expi = 0.25_dp*real(2*li + 3,
dp)
550 normi = 1.0_dp/(prefi*zeti**expi)
552 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
553 b_offset = b_start +
ncoset(lj - 1)
554 b_offset_f = b_start_f +
ncoset(lj - 1)
556 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
557 expj = 0.25_dp*real(2*lj + 3,
dp)
558 normj = 1.0_dp/(prefj*zetj**expj)
560 tmp(1:ncoa*ncob) = 0.0_dp
564 rb, lj, 1, [normj], [zetj], &
565 rc, [npot_ecp], nrpot_ecp, &
566 coeffs_ecp, alpha_ecp, tmp)
571 vab_f(a_offset_f + i, b_offset_f + j) = &
572 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
577 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
580 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
591 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
592 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
593 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
599 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
600 dab, vab_f, tmpx, tmpy, tmpz)
601 DO j = 1, npgfb*
ncoset(lb_max_set)
602 DO i = 1, npgfa*
ncoset(la_max_set)
603 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
604 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
605 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
613 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
614 dab, vab_f, tmpx, tmpy, tmpz)
615 DO j = 1, npgfb*
ncoset(lb_max_set)
616 DO i = 1, npgfa*
ncoset(la_max_set)
617 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
618 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
619 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
622 DEALLOCATE (tmpx, tmpy, tmpz)
657 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
658 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
659 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
661 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
662 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
663 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
664 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
665 INTEGER,
INTENT(IN) :: lmax_ecp
666 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
667 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
668 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
669 REAL(kind=
dp),
INTENT(IN) :: rpgfc
670 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
671 REAL(kind=
dp),
INTENT(IN) :: dab
672 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
673 REAL(kind=
dp),
INTENT(IN) :: dac, dbc
674 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
675 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
676 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
678 INTEGER :: a_offset, a_offset_f, a_start, &
679 a_start_f, b_offset, b_offset_f, &
680 b_start, b_start_f, i, ipgf, j, jpgf, &
681 li, lj, lk, ncoa, ncob
682 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
684 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
685 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: tmpx, tmpy, tmpz, vab_f
686 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
691 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
699 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
702 IF (rpgfa(ipgf) + rpgfc < dac) cycle
704 a_start = (ipgf - 1)*
ncoset(la_max_set)
705 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
708 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
709 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
711 b_start = (jpgf - 1)*
ncoset(lb_max_set)
712 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
714 DO li = max(0, la_min_set - 1), la_max_set + 1
715 a_offset = a_start +
ncoset(li - 1)
716 a_offset_f = a_start_f +
ncoset(li - 1)
718 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
719 expi = 0.25_dp*real(2*li + 3,
dp)
720 normi = 1.0_dp/(prefi*zeti**expi)
722 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
723 b_offset = b_start +
ncoset(lj - 1)
724 b_offset_f = b_start_f +
ncoset(lj - 1)
726 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
727 expj = 0.25_dp*real(2*lj + 3,
dp)
728 normj = 1.0_dp/(prefj*zetj**expj)
732 tmp(1:ncoa*ncob) = 0.0_dp
736 rb, lj, 1, [normj], [zetj], &
737 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
738 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
743 vab_f(a_offset_f + i, b_offset_f + j) = &
744 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
749 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
752 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
765 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
766 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
767 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
773 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
774 0.0_dp, vab_f, tmpx, tmpy, tmpz)
775 DO j = 1, npgfb*
ncoset(lb_max_set)
776 DO i = 1, npgfa*
ncoset(la_max_set)
777 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
778 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
779 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
787 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
788 0.0_dp, vab_f, tmpx, tmpy, tmpz)
789 DO j = 1, npgfb*
ncoset(lb_max_set)
790 DO i = 1, npgfa*
ncoset(la_max_set)
791 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
792 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
793 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
796 DEALLOCATE (tmpx, tmpy, tmpz)
subroutine, public libgrpp_semilocal_integrals(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
Semi-local ECP integrals using libgrpp.
subroutine, public libgrpp_local_integrals(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
Local ECP integrals using libgrpp.
subroutine, public libgrpp_local_forces_ref(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
Reference local ECP force routine using l+-1 integrals. No call is made to the numerically unstable g...
subroutine, public libgrpp_semilocal_forces_ref(la_max_set, la_min_set, npgfa, rpgfa, zeta, lb_max_set, lb_min_set, npgfb, rpgfb, zetb, lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
Reference semi-local ECP forces using l+-1 integrals. No call is made to the numerically unstable gra...