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
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)
243 mark_used(la_max_set)
244 mark_used(la_min_set)
248 mark_used(lb_max_set)
249 mark_used(lb_min_set)
255 mark_used(coeffs_ecp)
268 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
302 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
303 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
304 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
306 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
307 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
308 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
309 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
310 INTEGER,
INTENT(IN) :: lmax_ecp
311 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
312 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
313 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
314 REAL(kind=
dp),
INTENT(IN) :: rpgfc
315 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
316 REAL(kind=
dp),
INTENT(IN) :: dab
317 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
318 REAL(kind=
dp),
INTENT(IN) :: dac
319 REAL(kind=
dp),
INTENT(IN) :: dbc
320 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
321 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN), &
323 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT), &
324 OPTIONAL :: force_a, force_b
326#if defined(__LIBGRPP)
327 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
328 ipgf, j, jpgf, li, lj, lk, ncoa, ncob
329 LOGICAL :: calc_forces
330 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
331 zeti, zetj, mindist, fac_a, fac_b
332 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp, tmpx, tmpz, tmpy
333 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
337 calc_forces = .false.
338 IF (
PRESENT(pab) .AND.
PRESENT(force_a) .AND.
PRESENT(force_b)) calc_forces = .true.
340 IF (calc_forces)
THEN
344 CALL cp_warn(__location__, &
345 "ECP gradients calculated with the libgrpp library are, to this date, not numerically stable. "// &
346 "Please use the reference routine 'libgrpp_semilocal_forces_ref' instead.")
356 IF (dab >= mindist .AND. dbc >= mindist .AND. dac >= mindist)
THEN
361 ELSE IF (dab < mindist .AND. dac >= mindist)
THEN
366 ELSE IF (dab >= mindist .AND. dac < mindist)
THEN
371 ELSE IF (dab >= mindist .AND. dbc < mindist)
THEN
377 calc_forces = .false.
386 ALLOCATE (tmp(
nco(la_max_set)*
nco(lb_max_set)))
387 IF (calc_forces)
THEN
388 ALLOCATE (tmpx(
nco(la_max_set)*
nco(lb_max_set)))
389 ALLOCATE (tmpy(
nco(la_max_set)*
nco(lb_max_set)))
390 ALLOCATE (tmpz(
nco(la_max_set)*
nco(lb_max_set)))
394 IF (rpgfa(ipgf) + rpgfc < dac) cycle
396 a_start = (ipgf - 1)*
ncoset(la_max_set)
399 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
400 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
402 b_start = (jpgf - 1)*
ncoset(lb_max_set)
404 DO li = la_min_set, la_max_set
405 a_offset = a_start +
ncoset(li - 1)
407 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
408 expi = 0.25_dp*real(2*li + 3,
dp)
409 normi = 1.0_dp/(prefi*zeti**expi)
411 DO lj = lb_min_set, lb_max_set
412 b_offset = b_start +
ncoset(lj - 1)
414 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
415 expj = 0.25_dp*real(2*lj + 3,
dp)
416 normj = 1.0_dp/(prefj*zetj**expj)
420 tmp(1:ncoa*ncob) = 0.0_dp
424 rb, lj, 1, [normj], [zetj], &
425 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
426 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
431 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
435 IF (calc_forces)
THEN
437 tmpx(1:ncoa*ncob) = 0.0_dp
438 tmpy(1:ncoa*ncob) = 0.0_dp
439 tmpz(1:ncoa*ncob) = 0.0_dp
443 rb, lj, 1, [normj], [zetj], &
444 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
445 coeffs_ecp(:, lk), alpha_ecp(:, lk), ra, &
452 force_a(1) = force_a(1) + fac_a*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
453 force_a(2) = force_a(2) + fac_a*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
454 force_a(3) = force_a(3) + fac_a*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
458 tmpx(1:ncoa*ncob) = 0.0_dp
459 tmpy(1:ncoa*ncob) = 0.0_dp
460 tmpz(1:ncoa*ncob) = 0.0_dp
464 rb, lj, 1, [normj], [zetj], &
465 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
466 coeffs_ecp(:, lk), alpha_ecp(:, lk), rb, &
472 force_b(1) = force_b(1) + fac_b*pab(a_offset + i, b_offset + j)*tmpx((i - 1)*ncob + j)
473 force_b(2) = force_b(2) + fac_b*pab(a_offset + i, b_offset + j)*tmpy((i - 1)*ncob + j)
474 force_b(3) = force_b(3) + fac_b*pab(a_offset + i, b_offset + j)*tmpz((i - 1)*ncob + j)
490 mark_used(la_max_set)
491 mark_used(la_min_set)
495 mark_used(lb_max_set)
496 mark_used(lb_min_set)
503 mark_used(coeffs_ecp)
516 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
552 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
553 npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
554 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
556 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
557 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
558 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
559 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
560 INTEGER,
INTENT(IN) :: npot_ecp
561 REAL(kind=
dp),
DIMENSION(1:npot_ecp),
INTENT(IN) :: alpha_ecp, coeffs_ecp
562 INTEGER,
DIMENSION(1:npot_ecp),
INTENT(IN) :: nrpot_ecp
563 REAL(kind=
dp),
INTENT(IN) :: rpgfc
564 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
565 REAL(kind=
dp),
INTENT(IN) :: dab
566 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
567 REAL(kind=
dp),
INTENT(IN) :: dac
568 REAL(kind=
dp),
INTENT(IN) :: dbc
569 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
570 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
571 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
573#if defined(__LIBGRPP)
574 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
575 ipgf, j, jpgf, li, lj, ncoa, ncob, a_offset_f, &
576 b_offset_f, a_start_f, b_start_f
577 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
579 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
580 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: vab_f, tmpx, tmpy, tmpz
581 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
586 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
594 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
597 IF (rpgfa(ipgf) + rpgfc < dac) cycle
599 a_start = (ipgf - 1)*
ncoset(la_max_set)
600 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
603 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
604 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
606 b_start = (jpgf - 1)*
ncoset(lb_max_set)
607 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
609 DO li = max(0, la_min_set - 1), la_max_set + 1
610 a_offset = a_start +
ncoset(li - 1)
611 a_offset_f = a_start_f +
ncoset(li - 1)
613 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
614 expi = 0.25_dp*real(2*li + 3,
dp)
615 normi = 1.0_dp/(prefi*zeti**expi)
617 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
618 b_offset = b_start +
ncoset(lj - 1)
619 b_offset_f = b_start_f +
ncoset(lj - 1)
621 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
622 expj = 0.25_dp*real(2*lj + 3,
dp)
623 normj = 1.0_dp/(prefj*zetj**expj)
625 tmp(1:ncoa*ncob) = 0.0_dp
629 rb, lj, 1, [normj], [zetj], &
630 rc, [npot_ecp], nrpot_ecp, &
631 coeffs_ecp, alpha_ecp, tmp)
636 vab_f(a_offset_f + i, b_offset_f + j) = &
637 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
642 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
645 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
656 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
657 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
658 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
664 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
665 dab, vab_f, tmpx, tmpy, tmpz)
666 DO j = 1, npgfb*
ncoset(lb_max_set)
667 DO i = 1, npgfa*
ncoset(la_max_set)
668 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
669 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
670 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
678 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
679 dab, vab_f, tmpx, tmpy, tmpz)
680 DO j = 1, npgfb*
ncoset(lb_max_set)
681 DO i = 1, npgfa*
ncoset(la_max_set)
682 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
683 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
684 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
687 DEALLOCATE (tmpx, tmpy, tmpz)
691 mark_used(la_max_set)
692 mark_used(la_min_set)
696 mark_used(lb_max_set)
697 mark_used(lb_min_set)
703 mark_used(coeffs_ecp)
716 cpabort(
"Please compile CP2K with libgrpp support for calculations with ECPs")
753 lb_max_set, lb_min_set, npgfb, rpgfb, zetb, &
754 lmax_ecp, npot_ecp, alpha_ecp, coeffs_ecp, nrpot_ecp, &
755 rpgfc, rab, dab, rac, dac, dbc, vab, pab, force_a, force_b)
757 INTEGER,
INTENT(IN) :: la_max_set, la_min_set, npgfa
758 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfa, zeta
759 INTEGER,
INTENT(IN) :: lb_max_set, lb_min_set, npgfb
760 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: rpgfb, zetb
761 INTEGER,
INTENT(IN) :: lmax_ecp
762 INTEGER,
DIMENSION(0:10),
INTENT(IN) :: npot_ecp
763 REAL(kind=
dp),
DIMENSION(1:15, 0:10),
INTENT(IN) :: alpha_ecp, coeffs_ecp
764 INTEGER,
DIMENSION(1:15, 0:10),
INTENT(IN) :: nrpot_ecp
765 REAL(kind=
dp),
INTENT(IN) :: rpgfc
766 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
767 REAL(kind=
dp),
INTENT(IN) :: dab
768 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rac
769 REAL(kind=
dp),
INTENT(IN) :: dac
770 REAL(kind=
dp),
INTENT(IN) :: dbc
771 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: vab
772 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(IN) :: pab
773 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force_a, force_b
775#if defined(__LIBGRPP)
776 INTEGER :: a_offset, a_start, b_offset, b_start, i, &
777 ipgf, j, jpgf, li, lj, lk, ncoa, ncob, &
778 a_start_f, b_start_f, a_offset_f, b_offset_f
779 REAL(
dp) :: expi, expj, normi, normj, prefi, prefj, &
781 REAL(
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp
782 REAL(
dp),
ALLOCATABLE,
DIMENSION(:, :) :: vab_f, tmpx, tmpy, tmpz
783 REAL(
dp),
DIMENSION(3) :: ra, rb, rc
788 ALLOCATE (vab_f(npgfa*
ncoset(la_max_set + 1), npgfb*
ncoset(lb_max_set + 1)))
796 ALLOCATE (tmp(
nco(la_max_set + 1)*
nco(lb_max_set + 1)))
799 IF (rpgfa(ipgf) + rpgfc < dac) cycle
801 a_start = (ipgf - 1)*
ncoset(la_max_set)
802 a_start_f = (ipgf - 1)*
ncoset(la_max_set + 1)
805 IF (rpgfb(jpgf) + rpgfc < dbc) cycle
806 IF (rpgfa(ipgf) + rpgfb(jpgf) < dab) cycle
808 b_start = (jpgf - 1)*
ncoset(lb_max_set)
809 b_start_f = (jpgf - 1)*
ncoset(lb_max_set + 1)
811 DO li = max(0, la_min_set - 1), la_max_set + 1
812 a_offset = a_start +
ncoset(li - 1)
813 a_offset_f = a_start_f +
ncoset(li - 1)
815 prefi = 2.0_dp**li*(2.0_dp/
pi)**0.75_dp
816 expi = 0.25_dp*real(2*li + 3,
dp)
817 normi = 1.0_dp/(prefi*zeti**expi)
819 DO lj = max(0, lb_min_set - 1), lb_max_set + 1
820 b_offset = b_start +
ncoset(lj - 1)
821 b_offset_f = b_start_f +
ncoset(lj - 1)
823 prefj = 2.0_dp**lj*(2.0_dp/
pi)**0.75_dp
824 expj = 0.25_dp*real(2*lj + 3,
dp)
825 normj = 1.0_dp/(prefj*zetj**expj)
829 tmp(1:ncoa*ncob) = 0.0_dp
833 rb, lj, 1, [normj], [zetj], &
834 rc, lk, [npot_ecp(lk)], nrpot_ecp(:, lk), &
835 coeffs_ecp(:, lk), alpha_ecp(:, lk), tmp)
840 vab_f(a_offset_f + i, b_offset_f + j) = &
841 vab_f(a_offset_f + i, b_offset_f + j) + tmp((i - 1)*ncob + j)
846 IF (li >= la_min_set .AND. li <= la_max_set .AND. lj >= lb_min_set .AND. lj <= lb_max_set)
THEN
849 vab(a_offset + i, b_offset + j) = vab(a_offset + i, b_offset + j) + tmp((i - 1)*ncob + j)
862 ALLOCATE (tmpx(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
863 ALLOCATE (tmpy(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
864 ALLOCATE (tmpz(npgfa*
ncoset(la_max_set), npgfb*
ncoset(lb_max_set)))
870 CALL dabdr(la_max_set, npgfa, zeta, rpgfa, la_min_set, lb_max_set, npgfb, rpgfb, lb_min_set, &
871 0.0_dp, vab_f, tmpx, tmpy, tmpz)
872 DO j = 1, npgfb*
ncoset(lb_max_set)
873 DO i = 1, npgfa*
ncoset(la_max_set)
874 force_a(1) = force_a(1) + tmpx(i, j)*pab(i, j)
875 force_a(2) = force_a(2) + tmpy(i, j)*pab(i, j)
876 force_a(3) = force_a(3) + tmpz(i, j)*pab(i, j)
884 CALL adbdr(la_max_set, npgfa, rpgfa, la_min_set, lb_max_set, npgfb, zetb, rpgfb, lb_min_set, &
885 0.0_dp, vab_f, tmpx, tmpy, tmpz)
886 DO j = 1, npgfb*
ncoset(lb_max_set)
887 DO i = 1, npgfa*
ncoset(la_max_set)
888 force_b(1) = force_b(1) + tmpx(i, j)*pab(i, j)
889 force_b(2) = force_b(2) + tmpy(i, j)*pab(i, j)
890 force_b(3) = force_b(3) + tmpz(i, j)*pab(i, j)
893 DEALLOCATE (tmpx, tmpy, tmpz)
897 mark_used(la_max_set)
898 mark_used(la_min_set)
902 mark_used(lb_max_set)
903 mark_used(lb_min_set)
910 mark_used(coeffs_ecp)
923 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...