62 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
63 npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
64 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
66 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
67 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
68 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
69 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
70 INTEGER,
INTENT(IN) :: npot_ecp
71 REAL(kind=
dp),
DIMENSION(1:npot_ecp),
INTENT(IN) :: alpha_ecp, coeffs_ecp
72 INTEGER,
DIMENSION(1:npot_ecp),
INTENT(IN) :: nrpot_ecp
73 REAL(kind=
dp),
INTENT(IN) :: rpgfc
74 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
75 REAL(kind=
dp),
INTENT(IN) :: dab
76 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
77 REAL(kind=
dp),
INTENT(IN) :: dac
78 REAL(kind=
dp),
INTENT(IN) :: dbc
79 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
80 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
82 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT), &
83 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, normi, normj, prefi, prefj, &
90 zeti, zetj, mindist, fac_a, fac_b
91 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp, tmpx, tmpy, tmpz
92 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
95 IF (
PRESENT(pab) .AND.
PRESENT(force_a) .AND.
PRESENT(force_b)) calc_forces = .true.
101 CALL cp_warn(__location__, &
102 "ECP gradients calculated with the libgrpp library are, to this date, not numerically stable. "// &
103 "Please use the reference routine 'libgrpp_local_forces_ref' instead.")
113 IF (dab >= mindist .AND. dbc >= mindist .AND. dac >= mindist)
THEN
118 ELSE IF (dab < mindist .AND. dac >= mindist)
THEN
123 ELSE IF (dab >= mindist .AND. dac < mindist)
THEN
128 ELSE IF (dab >= mindist .AND. dbc < mindist)
THEN
134 calc_forces = .false.
143 ALLOCATE (tmp(
nco(la_max_set)*
nco(lb_max_set)))
144 IF (calc_forces)
THEN
145 ALLOCATE (tmpx(
nco(la_max_set)*
nco(lb_max_set)))
146 ALLOCATE (tmpy(
nco(la_max_set)*
nco(lb_max_set)))
147 ALLOCATE (tmpz(
nco(la_max_set)*
nco(lb_max_set)))
151 IF (rpgfa(ipgf) + rpgfc < dac) cycle
153 a_start = (ipgf - 1)*
ncoset(la_max_set)
156 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
157 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
159 b_start = (jpgf - 1)*
ncoset(lb_max_set)
161 DO li = la_min_set, la_max_set
162 a_offset = a_start +
ncoset(li - 1)
164 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
165 expi = 0.25_dp*real(2*li + 3,
dp)
166 normi = 1.0_dp/(prefi*zeti**expi)
168 DO lj = lb_min_set, lb_max_set
169 b_offset = b_start +
ncoset(lj - 1)
171 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
172 expj = 0.25_dp*real(2*lj + 3,
dp)
173 normj = 1.0_dp/(prefj*zetj**expj)
175 tmp(1:ncoa*ncob) = 0.0_dp
178 CALL libgrpp_type1_integrals(ra, li, 1, [normi], [zeti], &
179 rb, lj, 1, [normj], [zetj], &
180 rc, [npot_ecp], nrpot_ecp, &
181 coeffs_ecp, alpha_ecp, tmp)
186 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
190 IF (calc_forces)
THEN
191 tmpx(1:ncoa*ncob) = 0.0_dp
192 tmpy(1:ncoa*ncob) = 0.0_dp
193 tmpz(1:ncoa*ncob) = 0.0_dp
196 CALL libgrpp_type1_integrals_gradient(ra, li, 1, [normi], [zeti], &
197 rb, lj, 1, [normj], [zetj], &
198 rc, [npot_ecp], nrpot_ecp, &
199 coeffs_ecp, alpha_ecp, ra, &
206 force_a(1) = force_a(1) + fac_a*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
207 force_a(2) = force_a(2) + fac_a*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
208 force_a(3) = force_a(3) + fac_a*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
212 tmpx(1:ncoa*ncob) = 0.0_dp
213 tmpy(1:ncoa*ncob) = 0.0_dp
214 tmpz(1:ncoa*ncob) = 0.0_dp
217 CALL libgrpp_type1_integrals_gradient(ra, li, 1, [normi], [zeti], &
218 rb, lj, 1, [normj], [zetj], &
219 rc, [npot_ecp], nrpot_ecp, &
220 coeffs_ecp, alpha_ecp, rb, &
227 force_b(1) = force_b(1) + fac_b*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
228 force_b(2) = force_b(2) + fac_b*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
229 force_b(3) = force_b(3) + fac_b*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
241 mark_used(la_max_set)
242 mark_used(la_min_set)
246 mark_used(lb_max_set)
247 mark_used(lb_min_set)
253 mark_used(coeffs_ecp)
266 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
300 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
301 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
302 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
304 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
305 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
306 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
307 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
308 INTEGER,
INTENT(IN) :: lmax_ecp
309 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
310 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
311 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
312 REAL(kind=
dp),
INTENT(IN) :: rpgfc
313 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
314 REAL(kind=
dp),
INTENT(IN) :: dab
315 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
316 REAL(kind=
dp),
INTENT(IN) :: dac
317 REAL(kind=
dp),
INTENT(IN) :: dbc
318 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
319 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
321 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT), &
322 OPTIONAL :: force_a, force_b
324#if defined(__LIBGRPP)
325 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
326 ipgf, j, jpgf, li, lj, lk, ncoa, ncob
327 LOGICAL :: calc_forces
328 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
329 zeti, zetj, mindist, fac_a, fac_b
330 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp, tmpx, tmpz, tmpy
331 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
333 calc_forces = .false.
334 IF (
PRESENT(pab) .AND.
PRESENT(force_a) .AND.
PRESENT(force_b)) calc_forces = .true.
336 IF (calc_forces)
THEN
340 CALL cp_warn(__location__, &
341 "ECP gradients calculated with the libgrpp library are, to this date, not numerically stable. "// &
342 "Please use the reference routine 'libgrpp_semilocal_forces_ref' instead.")
352 IF (dab >= mindist .AND. dbc >= mindist .AND. dac >= mindist)
THEN
357 ELSE IF (dab < mindist .AND. dac >= mindist)
THEN
362 ELSE IF (dab >= mindist .AND. dac < mindist)
THEN
367 ELSE IF (dab >= mindist .AND. dbc < mindist)
THEN
373 calc_forces = .false.
382 ALLOCATE (tmp(
nco(la_max_set)*
nco(lb_max_set)))
383 IF (calc_forces)
THEN
384 ALLOCATE (tmpx(
nco(la_max_set)*
nco(lb_max_set)))
385 ALLOCATE (tmpy(
nco(la_max_set)*
nco(lb_max_set)))
386 ALLOCATE (tmpz(
nco(la_max_set)*
nco(lb_max_set)))
390 IF (rpgfa(ipgf) + rpgfc < dac) cycle
392 a_start = (ipgf - 1)*
ncoset(la_max_set)
395 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
396 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
398 b_start = (jpgf - 1)*
ncoset(lb_max_set)
400 DO li = la_min_set, la_max_set
401 a_offset = a_start +
ncoset(li - 1)
403 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
404 expi = 0.25_dp*real(2*li + 3,
dp)
405 normi = 1.0_dp/(prefi*zeti**expi)
407 DO lj = lb_min_set, lb_max_set
408 b_offset = b_start +
ncoset(lj - 1)
410 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
411 expj = 0.25_dp*real(2*lj + 3,
dp)
412 normj = 1.0_dp/(prefj*zetj**expj)
416 tmp(1:ncoa*ncob) = 0.0_dp
419 CALL libgrpp_type2_integrals(ra, li, 1, [normi], [zeti], &
420 rb, lj, 1, [normj], [zetj], &
421 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
422 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
427 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
431 IF (calc_forces)
THEN
433 tmpx(1:ncoa*ncob) = 0.0_dp
434 tmpy(1:ncoa*ncob) = 0.0_dp
435 tmpz(1:ncoa*ncob) = 0.0_dp
438 CALL libgrpp_type2_integrals_gradient(ra, li, 1, [normi], [zeti], &
439 rb, lj, 1, [normj], [zetj], &
440 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
441 coeffs_ecp(:, lk), alpha_ecp(:, lk), ra, &
448 force_a(1) = force_a(1) + fac_a*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
449 force_a(2) = force_a(2) + fac_a*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
450 force_a(3) = force_a(3) + fac_a*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
454 tmpx(1:ncoa*ncob) = 0.0_dp
455 tmpy(1:ncoa*ncob) = 0.0_dp
456 tmpz(1:ncoa*ncob) = 0.0_dp
459 CALL libgrpp_type2_integrals_gradient(ra, li, 1, [normi], [zeti], &
460 rb, lj, 1, [normj], [zetj], &
461 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
462 coeffs_ecp(:, lk), alpha_ecp(:, lk), rb, &
468 force_b(1) = force_b(1) + fac_b*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
469 force_b(2) = force_b(2) + fac_b*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
470 force_b(3) = force_b(3) + fac_b*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
486 mark_used(la_max_set)
487 mark_used(la_min_set)
491 mark_used(lb_max_set)
492 mark_used(lb_min_set)
499 mark_used(coeffs_ecp)
512 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
548 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
549 npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
550 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
552 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
553 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
554 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
555 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
556 INTEGER,
INTENT(IN) :: npot_ecp
557 REAL(kind=
dp),
DIMENSION(1:npot_ecp),
INTENT(IN) :: alpha_ecp, coeffs_ecp
558 INTEGER,
DIMENSION(1:npot_ecp),
INTENT(IN) :: nrpot_ecp
559 REAL(kind=
dp),
INTENT(IN) :: rpgfc
560 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
561 REAL(kind=
dp),
INTENT(IN) :: dab
562 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
563 REAL(kind=
dp),
INTENT(IN) :: dac
564 REAL(kind=
dp),
INTENT(IN) :: dbc
565 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
566 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
567 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
569#if defined(__LIBGRPP)
570 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
571 ipgf, j, jpgf, li, lj, ncoa, ncob, a_offset_f, &
572 b_offset_f, a_start_f, b_start_f
573 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
575 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
576 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: vab_f, tmpx, tmpy, tmpz
577 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
580 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
588 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
591 IF (rpgfa(ipgf) + rpgfc < dac) cycle
593 a_start = (ipgf - 1)*
ncoset(la_max_set)
594 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
597 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
598 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
600 b_start = (jpgf - 1)*
ncoset(lb_max_set)
601 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
603 DO li = max(0, la_min_set - 1), la_max_set + 1
604 a_offset = a_start +
ncoset(li - 1)
605 a_offset_f = a_start_f +
ncoset(li - 1)
607 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
608 expi = 0.25_dp*real(2*li + 3,
dp)
609 normi = 1.0_dp/(prefi*zeti**expi)
611 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
612 b_offset = b_start +
ncoset(lj - 1)
613 b_offset_f = b_start_f +
ncoset(lj - 1)
615 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
616 expj = 0.25_dp*real(2*lj + 3,
dp)
617 normj = 1.0_dp/(prefj*zetj**expj)
619 tmp(1:ncoa*ncob) = 0.0_dp
622 CALL libgrpp_type1_integrals(ra, li, 1, [normi], [zeti], &
623 rb, lj, 1, [normj], [zetj], &
624 rc, [npot_ecp], nrpot_ecp, &
625 coeffs_ecp, alpha_ecp, tmp)
630 vab_f(a_offset_f + i, b_offset_f + j) = &
631 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
636 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
639 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
650 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
651 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
652 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
658 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
659 dab, vab_f, tmpx, tmpy, tmpz)
660 DO j = 1, npgfb*
ncoset(lb_max_set)
661 DO i = 1, npgfa*
ncoset(la_max_set)
662 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
663 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
664 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
672 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
673 dab, vab_f, tmpx, tmpy, tmpz)
674 DO j = 1, npgfb*
ncoset(lb_max_set)
675 DO i = 1, npgfa*
ncoset(la_max_set)
676 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
677 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
678 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
681 DEALLOCATE (tmpx, tmpy, tmpz)
685 mark_used(la_max_set)
686 mark_used(la_min_set)
690 mark_used(lb_max_set)
691 mark_used(lb_min_set)
697 mark_used(coeffs_ecp)
710 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
747 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
748 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
749 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
751 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
752 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
753 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
754 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
755 INTEGER,
INTENT(IN) :: lmax_ecp
756 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
757 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
758 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
759 REAL(kind=
dp),
INTENT(IN) :: rpgfc
760 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
761 REAL(kind=
dp),
INTENT(IN) :: dab
762 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
763 REAL(kind=
dp),
INTENT(IN) :: dac
764 REAL(kind=
dp),
INTENT(IN) :: dbc
765 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
766 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
767 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
769#if defined(__LIBGRPP)
770 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
771 ipgf, j, jpgf, li, lj, lk, ncoa, ncob, &
772 a_start_f, b_start_f, a_offset_f, b_offset_f
773 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
775 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
776 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: vab_f, tmpx, tmpy, tmpz
777 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
780 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
788 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
791 IF (rpgfa(ipgf) + rpgfc < dac) cycle
793 a_start = (ipgf - 1)*
ncoset(la_max_set)
794 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
797 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
798 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
800 b_start = (jpgf - 1)*
ncoset(lb_max_set)
801 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
803 DO li = max(0, la_min_set - 1), la_max_set + 1
804 a_offset = a_start +
ncoset(li - 1)
805 a_offset_f = a_start_f +
ncoset(li - 1)
807 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
808 expi = 0.25_dp*real(2*li + 3,
dp)
809 normi = 1.0_dp/(prefi*zeti**expi)
811 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
812 b_offset = b_start +
ncoset(lj - 1)
813 b_offset_f = b_start_f +
ncoset(lj - 1)
815 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
816 expj = 0.25_dp*real(2*lj + 3,
dp)
817 normj = 1.0_dp/(prefj*zetj**expj)
821 tmp(1:ncoa*ncob) = 0.0_dp
824 CALL libgrpp_type2_integrals(ra, li, 1, [normi], [zeti], &
825 rb, lj, 1, [normj], [zetj], &
826 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
827 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
832 vab_f(a_offset_f + i, b_offset_f + j) = &
833 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
838 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
841 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
854 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
855 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
856 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
862 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
863 0.0_dp, vab_f, tmpx, tmpy, tmpz)
864 DO j = 1, npgfb*
ncoset(lb_max_set)
865 DO i = 1, npgfa*
ncoset(la_max_set)
866 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
867 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
868 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
876 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
877 0.0_dp, vab_f, tmpx, tmpy, tmpz)
878 DO j = 1, npgfb*
ncoset(lb_max_set)
879 DO i = 1, npgfa*
ncoset(la_max_set)
880 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
881 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
882 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
885 DEALLOCATE (tmpx, tmpy, tmpz)
889 mark_used(la_max_set)
890 mark_used(la_min_set)
894 mark_used(lb_max_set)
895 mark_used(lb_min_set)
902 mark_used(coeffs_ecp)
915 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
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...