21 USE hfx_types,
ONLY: hfx_pgf_product_list,&
40 #include "./base/base_uses.f90"
48 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm1 = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12/)
49 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm2 = (/4, 5, 6, 1, 2, 3, 7, 8, 9, 10, 11, 12/)
50 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm3 = (/1, 2, 3, 4, 5, 6, 10, 11, 12, 7, 8, 9/)
51 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm4 = (/4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9/)
52 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm5 = (/7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6/)
53 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm6 = (/7, 8, 9, 10, 11, 12, 4, 5, 6, 1, 2, 3/)
54 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm7 = (/10, 11, 12, 7, 8, 9, 1, 2, 3, 4, 5, 6/)
55 INTEGER,
DIMENSION(12),
PARAMETER :: full_perm8 = (/10, 11, 12, 7, 8, 9, 4, 5, 6, 1, 2, 3/)
80 SUBROUTINE build_quartet_data_screen(A, B, C, D, Zeta_A, Zeta_B, Zeta_C, Zeta_D, m_max, &
81 potential_parameter, libint, R11, R22)
83 REAL(KIND=
dp) :: a(3), b(3), c(3), d(3)
84 REAL(KIND=
dp),
INTENT(IN) :: zeta_a, zeta_b, zeta_c, zeta_d
85 INTEGER,
INTENT(IN) :: m_max
86 TYPE(hfx_potential_type) :: potential_parameter
87 TYPE(cp_libint_t) :: libint
92 REAL(KIND=dp) :: ab(3), ab2, cd(3), cd2, den, eta, etainv, factor, g(3), num, omega2, &
93 omega_corr, omega_corr2, p(3), pq(3), pq2, q(3), r, r1, r2, rho, rhoinv, s1234, ssss, t, &
94 tmp, w(3), zeta, zetainv, zetapetainv
95 REAL(KIND=dp),
DIMENSION(prim_data_f_size) :: f, fm
97 zeta = zeta_a + zeta_b
101 zetapetainv = zeta + eta
102 zetapetainv = 1.0_dp/zetapetainv
103 rho = zeta*eta*zetapetainv
107 p(i) = (zeta_a*a(i) + zeta_b*b(i))*zetainv
108 q(i) = (zeta_c*c(i) + zeta_d*d(i))*etainv
112 w(i) = (zeta*p(i) + eta*q(i))*zetapetainv
115 ab2 = dot_product(ab, ab)
116 cd2 = dot_product(cd, cd)
117 pq2 = dot_product(pq, pq)
119 s1234 = exp((-zeta_a*zeta_b*zetainv*ab2) + (-zeta_c*zeta_d*etainv*cd2))
122 SELECT CASE (potential_parameter%potential_type)
124 r = potential_parameter%cutoff_radius*sqrt(rho)
127 IF (pq2 > (r1 + r2 + potential_parameter%cutoff_radius)**2)
THEN
130 CALL t_c_g0_n(f(1), use_gamma, r, t, m_max)
131 IF (use_gamma)
CALL fgamma(m_max, t, f(1))
132 factor = 2.0_dp*
pi*rhoinv
134 CALL fgamma(m_max, t, f(1))
135 factor = 2.0_dp*
pi*rhoinv
137 r = potential_parameter%cutoff_radius*sqrt(rho)
140 IF (pq2 > (r1 + r2 + potential_parameter%cutoff_radius)**2)
THEN
143 CALL fgamma(m_max, t, f(1))
144 omega2 = potential_parameter%omega**2
145 omega_corr2 = omega2/(omega2 + rho)
146 omega_corr = sqrt(omega_corr2)
148 CALL fgamma(m_max, t, fm)
151 f(i) = f(i) + fm(i)*tmp
152 tmp = tmp*omega_corr2
154 factor = 2.0_dp*
pi*rhoinv
156 omega2 = potential_parameter%omega**2
157 omega_corr2 = omega2/(omega2 + rho)
158 omega_corr = sqrt(omega_corr2)
160 CALL fgamma(m_max, t, f(1))
164 tmp = tmp*omega_corr2
166 factor = 2.0_dp*
pi*rhoinv
168 CALL fgamma(m_max, t, f(1))
169 omega2 = potential_parameter%omega**2
170 omega_corr2 = omega2/(omega2 + rho)
171 omega_corr = sqrt(omega_corr2)
173 CALL fgamma(m_max, t, fm)
176 f(i) = f(i)*potential_parameter%scale_coulomb + fm(i)*tmp*potential_parameter%scale_longrange
177 tmp = tmp*omega_corr2
179 factor = 2.0_dp*
pi*rhoinv
183 r = potential_parameter%cutoff_radius*sqrt(rho)
186 IF (pq2 > (r1 + r2 + potential_parameter%cutoff_radius)**2)
THEN
189 CALL t_c_g0_n(f(1), use_gamma, r, t, m_max)
190 IF (use_gamma)
CALL fgamma(m_max, t, f(1))
193 CALL fgamma(m_max, t, fm)
196 f(i) = f(i)*(potential_parameter%scale_coulomb + potential_parameter%scale_longrange) - &
197 fm(i)*potential_parameter%scale_longrange
201 omega2 = potential_parameter%omega**2
202 omega_corr2 = omega2/(omega2 + rho)
203 omega_corr = sqrt(omega_corr2)
205 CALL fgamma(m_max, t, fm)
208 f(i) = f(i) + fm(i)*tmp*potential_parameter%scale_longrange
209 tmp = tmp*omega_corr2
211 factor = 2.0_dp*
pi*rhoinv
214 omega2 = potential_parameter%omega**2
215 t = -omega2*t/(rho + omega2)
219 tmp = tmp*omega2/(rho + omega2)
221 factor = (
pi/(rho + omega2))**(1.5_dp)
223 omega2 = potential_parameter%omega**2
224 omega_corr2 = omega2/(omega2 + rho)
225 omega_corr = sqrt(omega_corr2)
227 CALL fgamma(m_max, t, fm)
228 tmp = omega_corr*2.0_dp*
pi*rhoinv*potential_parameter%scale_longrange
231 tmp = tmp*omega_corr2
234 t = -omega2*t/(rho + omega2)
235 tmp = (
pi/(rho + omega2))**(1.5_dp)*potential_parameter%scale_gaussian
237 f(i) = exp(t)*tmp + fm(i)
238 tmp = tmp*omega2/(rho + omega2)
242 ssss = -zeta_a*zeta_b*zetainv*ab2
244 num = (zeta_a + zeta_b)*zeta_c
245 den = zeta_a + zeta_b + zeta_c
246 ssss = ssss - num/den*sum((p - c)**2)
248 g(:) = (zeta_a*a(:) + zeta_b*b(:) + zeta_c*c(:))/den
251 ssss = ssss - num/den*sum((g - d)**2)
255 IF (s1234 > epsilon(0.0_dp)) factor = 1.0_dp/s1234
258 tmp = (
pi*zetapetainv)**3
259 factor = factor*s1234*sqrt(tmp)
265 CALL cp_libint_set_params_eri_screen(libint, a, b, c, d, p, q, w, zetainv, etainv, zetapetainv, rho, m_max, f)
267 END SUBROUTINE build_quartet_data_screen
294 SUBROUTINE build_deriv_data(libint, A, B, C, D, &
295 Zeta_A, Zeta_B, Zeta_C, Zeta_D, &
296 ZetaInv, EtaInv, ZetapEtaInv, Rho, RhoInv, &
299 TYPE(cp_libint_t) :: libint
300 REAL(KIND=
dp),
INTENT(IN) :: a(3), b(3), c(3), d(3)
301 REAL(dp),
INTENT(IN) :: Zeta_A, Zeta_B, Zeta_C, Zeta_D, ZetaInv, &
302 EtaInv, ZetapEtaInv, Rho, RhoInv, &
304 INTEGER,
INTENT(IN) :: m_max
305 REAL(KIND=dp),
DIMENSION(:) :: f
311 CALL cp_libint_set_params_eri_deriv(libint, a, b, c, d, p, q, w, zeta_a, zeta_b, zeta_c, zeta_d, &
312 zetainv, etainv, zetapetainv, rho, m_max, f)
314 END SUBROUTINE build_deriv_data
379 n_a, n_b, n_c, n_d, &
380 ncoa, ncob, ncoc, ncod, &
381 nsgfa, nsgfb, nsgfc, nsgfd, &
382 primitives, max_contraction, tmp_max_all, &
383 eps_schwarz, neris, &
384 Zeta_A, Zeta_B, Zeta_C, Zeta_D, ZetaInv, EtaInv, &
385 s_offset_a, s_offset_b, s_offset_c, s_offset_d, &
386 nl_a, nl_b, nl_c, nl_d, nsoa, nsob, nsoc, nsod, &
387 sphi_a, sphi_b, sphi_c, sphi_d, &
388 work, work2, work_forces, buffer1, buffer2, primitives_tmp, &
389 use_virial, work_virial, work2_virial, primitives_tmp_virial, &
390 primitives_virial, cell, tmp_max_all_virial)
392 TYPE(cp_libint_t) :: deriv
393 INTEGER,
INTENT(IN) :: nproducts
394 TYPE(hfx_pgf_product_list),
DIMENSION(nproducts) :: pgf_product_list
395 INTEGER,
INTENT(IN) :: n_a, n_b, n_c, n_d, ncoa, ncob, ncoc, &
396 ncod, nsgfa, nsgfb, nsgfc, nsgfd
398 DIMENSION(nsgfa, nsgfb, nsgfc, nsgfd, 12) :: primitives
399 REAL(
dp) :: max_contraction, tmp_max_all, eps_schwarz
400 INTEGER(int_8) :: neris
401 REAL(
dp),
INTENT(IN) :: zeta_a, zeta_b, zeta_c, zeta_d, zetainv, &
403 INTEGER :: s_offset_a, s_offset_b, s_offset_c, &
404 s_offset_d, nl_a, nl_b, nl_c, nl_d, &
405 nsoa, nsob, nsoc, nsod
406 REAL(
dp),
DIMENSION(ncoa, nsoa*nl_a) :: sphi_a
407 REAL(
dp),
DIMENSION(ncob, nsob*nl_b) :: sphi_b
408 REAL(
dp),
DIMENSION(ncoc, nsoc*nl_c) :: sphi_c
409 REAL(
dp),
DIMENSION(ncod, nsod*nl_d) :: sphi_d
410 REAL(
dp) :: work(ncoa*ncob*ncoc*ncod, 12), work2(ncoa, ncob, ncoc, ncod, 12), &
411 work_forces(ncoa*ncob*ncoc*ncod, 12)
412 REAL(
dp),
DIMENSION(ncoa*ncob*ncoc*ncod) :: buffer1, buffer2
413 REAL(
dp),
DIMENSION(nsoa*nl_a, nsob*nl_b, nsoc*&
nl_c, nsod*nl_d) :: primitives_tmp
414 LOGICAL,
INTENT(IN) :: use_virial
415 REAL(
dp) :: work_virial(ncoa*ncob*ncoc*ncod, 12, 3), &
416 work2_virial(ncoa, ncob, ncoc, ncod, 12, 3)
417 REAL(
dp),
DIMENSION(nsoa*nl_a, nsob*nl_b, nsoc*&
nl_c, nsod*nl_d) :: primitives_tmp_virial
419 DIMENSION(nsgfa, nsgfb, nsgfc, nsgfd, 12, 3) :: primitives_virial
420 TYPE(cell_type),
POINTER :: cell
421 REAL(
dp) :: tmp_max_all_virial
423 INTEGER :: a_mysize(1), i, j, k, l, m, m_max, &
424 mysize, n, p1, p2, p3, p4, perm_case
425 REAL(
dp) :: a(3), ab(3), b(3), c(3), cd(3), d(3), &
426 p(3), q(3), rho, rhoinv, scoord(12), &
427 tmp_max, tmp_max_virial, w(3), &
430 m_max = n_a + n_b + n_c + n_d
432 mysize = ncoa*ncob*ncoc*ncod
440 work2_virial = 0.0_dp
445 perm_case = perm_case + 1
448 perm_case = perm_case + 2
450 IF (n_a + n_b > n_c + n_d)
THEN
451 perm_case = perm_case + 4
454 SELECT CASE (perm_case)
457 a = pgf_product_list(i)%ra
458 b = pgf_product_list(i)%rb
459 c = pgf_product_list(i)%rc
460 d = pgf_product_list(i)%rd
461 rho = pgf_product_list(i)%Rho
462 rhoinv = pgf_product_list(i)%RhoInv
463 p = pgf_product_list(i)%P
464 q = pgf_product_list(i)%Q
465 w = pgf_product_list(i)%W
466 ab = pgf_product_list(i)%AB
467 cd = pgf_product_list(i)%CD
468 zetapetainv = pgf_product_list(i)%ZetapEtaInv
470 CALL build_deriv_data(deriv, a, b, c, d, &
471 zeta_a, zeta_b, zeta_c, zeta_d, &
472 zetainv, etainv, zetapetainv, rho, rhoinv, &
473 p, q, w, m_max, pgf_product_list(i)%Fm)
477 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
478 work_forces(j, k + 3) + &
479 work_forces(j, k + 6))
484 work(j, k) = work(j, k) + work_forces(j, k)
487 neris = neris + 12*mysize
496 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
506 tmp_max = max(tmp_max, abs(work(i, n)))
508 tmp_max = tmp_max*max_contraction
509 tmp_max_all = max(tmp_max_all, tmp_max)
514 p2 = (p1 + j - 1)*ncoc
516 p3 = (p2 + k - 1)*ncod
519 work2(i, j, k, l, full_perm1(n)) = work(p4, n)
527 tmp_max_virial = 0.0_dp
529 tmp_max_virial = max(tmp_max_virial, &
530 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
532 tmp_max_virial = tmp_max_virial*max_contraction
533 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
538 p2 = (p1 + j - 1)*ncoc
540 p3 = (p2 + k - 1)*ncod
543 work2_virial(i, j, k, l, full_perm1(n), 1:3) = work_virial(p4, n, 1:3)
552 a = pgf_product_list(i)%ra
553 b = pgf_product_list(i)%rb
554 c = pgf_product_list(i)%rc
555 d = pgf_product_list(i)%rd
556 rho = pgf_product_list(i)%Rho
557 rhoinv = pgf_product_list(i)%RhoInv
558 p = pgf_product_list(i)%P
559 q = pgf_product_list(i)%Q
560 w = pgf_product_list(i)%W
561 ab = pgf_product_list(i)%AB
562 cd = pgf_product_list(i)%CD
563 zetapetainv = pgf_product_list(i)%ZetapEtaInv
565 CALL build_deriv_data(deriv, b, a, c, d, &
566 zeta_b, zeta_a, zeta_c, zeta_d, &
567 zetainv, etainv, zetapetainv, rho, rhoinv, &
568 p, q, w, m_max, pgf_product_list(i)%Fm)
572 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
573 work_forces(j, k + 3) + &
574 work_forces(j, k + 6))
579 work(j, k) = work(j, k) + work_forces(j, k)
582 neris = neris + 12*mysize
591 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
601 tmp_max = max(tmp_max, abs(work(i, n)))
603 tmp_max = tmp_max*max_contraction
604 tmp_max_all = max(tmp_max_all, tmp_max)
609 p2 = (p1 + i - 1)*ncoc
611 p3 = (p2 + k - 1)*ncod
614 work2(i, j, k, l, full_perm2(n)) = work(p4, n)
622 tmp_max_virial = 0.0_dp
624 tmp_max_virial = max(tmp_max_virial, &
625 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
627 tmp_max_virial = tmp_max_virial*max_contraction
628 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
633 p2 = (p1 + i - 1)*ncoc
635 p3 = (p2 + k - 1)*ncod
638 work2_virial(i, j, k, l, full_perm2(n), 1:3) = work_virial(p4, n, 1:3)
647 a = pgf_product_list(i)%ra
648 b = pgf_product_list(i)%rb
649 c = pgf_product_list(i)%rc
650 d = pgf_product_list(i)%rd
651 rho = pgf_product_list(i)%Rho
652 rhoinv = pgf_product_list(i)%RhoInv
653 p = pgf_product_list(i)%P
654 q = pgf_product_list(i)%Q
655 w = pgf_product_list(i)%W
656 ab = pgf_product_list(i)%AB
657 cd = pgf_product_list(i)%CD
658 zetapetainv = pgf_product_list(i)%ZetapEtaInv
660 CALL build_deriv_data(deriv, a, b, d, c, &
661 zeta_a, zeta_b, zeta_d, zeta_c, &
662 zetainv, etainv, zetapetainv, rho, rhoinv, &
663 p, q, w, m_max, pgf_product_list(i)%Fm)
667 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
668 work_forces(j, k + 3) + &
669 work_forces(j, k + 6))
674 work(j, k) = work(j, k) + work_forces(j, k)
677 neris = neris + 12*mysize
686 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
696 tmp_max = max(tmp_max, abs(work(i, n)))
698 tmp_max = tmp_max*max_contraction
699 tmp_max_all = max(tmp_max_all, tmp_max)
704 p2 = (p1 + j - 1)*ncod
706 p3 = (p2 + l - 1)*ncoc
709 work2(i, j, k, l, full_perm3(n)) = work(p4, n)
717 tmp_max_virial = 0.0_dp
719 tmp_max_virial = max(tmp_max_virial, &
720 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
722 tmp_max_virial = tmp_max_virial*max_contraction
723 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
728 p2 = (p1 + j - 1)*ncod
730 p3 = (p2 + l - 1)*ncoc
733 work2_virial(i, j, k, l, full_perm3(n), 1:3) = work_virial(p4, n, 1:3)
742 a = pgf_product_list(i)%ra
743 b = pgf_product_list(i)%rb
744 c = pgf_product_list(i)%rc
745 d = pgf_product_list(i)%rd
746 rho = pgf_product_list(i)%Rho
747 rhoinv = pgf_product_list(i)%RhoInv
748 p = pgf_product_list(i)%P
749 q = pgf_product_list(i)%Q
750 w = pgf_product_list(i)%W
751 ab = pgf_product_list(i)%AB
752 cd = pgf_product_list(i)%CD
753 zetapetainv = pgf_product_list(i)%ZetapEtaInv
754 CALL build_deriv_data(deriv, b, a, d, c, &
755 zeta_b, zeta_a, zeta_d, zeta_c, &
756 zetainv, etainv, zetapetainv, rho, rhoinv, &
757 p, q, w, m_max, pgf_product_list(i)%Fm)
761 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
762 work_forces(j, k + 3) + &
763 work_forces(j, k + 6))
768 work(j, k) = work(j, k) + work_forces(j, k)
771 neris = neris + 12*mysize
780 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
790 tmp_max = max(tmp_max, abs(work(i, n)))
792 tmp_max = tmp_max*max_contraction
793 tmp_max_all = max(tmp_max_all, tmp_max)
798 p2 = (p1 + i - 1)*ncod
800 p3 = (p2 + l - 1)*ncoc
803 work2(i, j, k, l, full_perm4(n)) = work(p4, n)
811 tmp_max_virial = 0.0_dp
813 tmp_max_virial = max(tmp_max_virial, &
814 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
816 tmp_max_virial = tmp_max_virial*max_contraction
817 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
822 p2 = (p1 + i - 1)*ncod
824 p3 = (p2 + l - 1)*ncoc
827 work2_virial(i, j, k, l, full_perm4(n), 1:3) = work_virial(p4, n, 1:3)
836 a = pgf_product_list(i)%ra
837 b = pgf_product_list(i)%rb
838 c = pgf_product_list(i)%rc
839 d = pgf_product_list(i)%rd
840 rho = pgf_product_list(i)%Rho
841 rhoinv = pgf_product_list(i)%RhoInv
842 p = pgf_product_list(i)%P
843 q = pgf_product_list(i)%Q
844 w = pgf_product_list(i)%W
845 ab = pgf_product_list(i)%AB
846 cd = pgf_product_list(i)%CD
847 zetapetainv = pgf_product_list(i)%ZetapEtaInv
848 CALL build_deriv_data(deriv, c, d, a, b, &
849 zeta_c, zeta_d, zeta_a, zeta_b, &
850 etainv, zetainv, zetapetainv, rho, rhoinv, &
851 q, p, w, m_max, pgf_product_list(i)%Fm)
855 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
856 work_forces(j, k + 3) + &
857 work_forces(j, k + 6))
862 work(j, k) = work(j, k) + work_forces(j, k)
865 neris = neris + 12*mysize
874 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
884 tmp_max = max(tmp_max, abs(work(i, n)))
886 tmp_max = tmp_max*max_contraction
887 tmp_max_all = max(tmp_max_all, tmp_max)
892 p2 = (p1 + l - 1)*ncoa
894 p3 = (p2 + i - 1)*ncob
897 work2(i, j, k, l, full_perm5(n)) = work(p4, n)
905 tmp_max_virial = 0.0_dp
907 tmp_max_virial = max(tmp_max_virial, &
908 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
910 tmp_max_virial = tmp_max_virial*max_contraction
911 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
916 p2 = (p1 + l - 1)*ncoa
918 p3 = (p2 + i - 1)*ncob
921 work2_virial(i, j, k, l, full_perm5(n), 1:3) = work_virial(p4, n, 1:3)
930 a = pgf_product_list(i)%ra
931 b = pgf_product_list(i)%rb
932 c = pgf_product_list(i)%rc
933 d = pgf_product_list(i)%rd
934 rho = pgf_product_list(i)%Rho
935 rhoinv = pgf_product_list(i)%RhoInv
936 p = pgf_product_list(i)%P
937 q = pgf_product_list(i)%Q
938 w = pgf_product_list(i)%W
939 ab = pgf_product_list(i)%AB
940 cd = pgf_product_list(i)%CD
941 zetapetainv = pgf_product_list(i)%ZetapEtaInv
943 CALL build_deriv_data(deriv, c, d, b, a, &
944 zeta_c, zeta_d, zeta_b, zeta_a, &
945 etainv, zetainv, zetapetainv, rho, rhoinv, &
946 q, p, w, m_max, pgf_product_list(i)%Fm)
950 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
951 work_forces(j, k + 3) + &
952 work_forces(j, k + 6))
957 work(j, k) = work(j, k) + work_forces(j, k)
960 neris = neris + 12*mysize
969 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
979 tmp_max = max(tmp_max, abs(work(i, n)))
981 tmp_max = tmp_max*max_contraction
982 tmp_max_all = max(tmp_max_all, tmp_max)
987 p2 = (p1 + l - 1)*ncob
989 p3 = (p2 + j - 1)*ncoa
992 work2(i, j, k, l, full_perm6(n)) = work(p4, n)
1000 tmp_max_virial = 0.0_dp
1002 tmp_max_virial = max(tmp_max_virial, &
1003 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
1005 tmp_max_virial = tmp_max_virial*max_contraction
1006 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
1011 p2 = (p1 + l - 1)*ncob
1013 p3 = (p2 + j - 1)*ncoa
1016 work2_virial(i, j, k, l, full_perm6(n), 1:3) = work_virial(p4, n, 1:3)
1025 a = pgf_product_list(i)%ra
1026 b = pgf_product_list(i)%rb
1027 c = pgf_product_list(i)%rc
1028 d = pgf_product_list(i)%rd
1029 rho = pgf_product_list(i)%Rho
1030 rhoinv = pgf_product_list(i)%RhoInv
1031 p = pgf_product_list(i)%P
1032 q = pgf_product_list(i)%Q
1033 w = pgf_product_list(i)%W
1034 ab = pgf_product_list(i)%AB
1035 cd = pgf_product_list(i)%CD
1036 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1038 CALL build_deriv_data(deriv, d, c, a, b, &
1039 zeta_d, zeta_c, zeta_a, zeta_b, &
1040 etainv, zetainv, zetapetainv, rho, rhoinv, &
1041 q, p, w, m_max, pgf_product_list(i)%Fm)
1045 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
1046 work_forces(j, k + 3) + &
1047 work_forces(j, k + 6))
1052 work(j, k) = work(j, k) + work_forces(j, k)
1055 neris = neris + 12*mysize
1056 IF (use_virial)
THEN
1064 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
1074 tmp_max = max(tmp_max, abs(work(i, n)))
1076 tmp_max = tmp_max*max_contraction
1077 tmp_max_all = max(tmp_max_all, tmp_max)
1082 p2 = (p1 + k - 1)*ncoa
1084 p3 = (p2 + i - 1)*ncob
1087 work2(i, j, k, l, full_perm7(n)) = work(p4, n)
1093 IF (use_virial)
THEN
1095 tmp_max_virial = 0.0_dp
1097 tmp_max_virial = max(tmp_max_virial, &
1098 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
1100 tmp_max_virial = tmp_max_virial*max_contraction
1101 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
1106 p2 = (p1 + k - 1)*ncoa
1108 p3 = (p2 + i - 1)*ncob
1111 work2_virial(i, j, k, l, full_perm7(n), 1:3) = work_virial(p4, n, 1:3)
1120 a = pgf_product_list(i)%ra
1121 b = pgf_product_list(i)%rb
1122 c = pgf_product_list(i)%rc
1123 d = pgf_product_list(i)%rd
1124 rho = pgf_product_list(i)%Rho
1125 rhoinv = pgf_product_list(i)%RhoInv
1126 p = pgf_product_list(i)%P
1127 q = pgf_product_list(i)%Q
1128 w = pgf_product_list(i)%W
1129 ab = pgf_product_list(i)%AB
1130 cd = pgf_product_list(i)%CD
1131 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1133 CALL build_deriv_data(deriv, d, c, b, a, &
1134 zeta_d, zeta_c, zeta_b, zeta_a, &
1135 etainv, zetainv, zetapetainv, rho, rhoinv, &
1136 q, p, w, m_max, pgf_product_list(i)%Fm)
1140 work_forces(j, k) = -1.0_dp*(work_forces(j, k - 3) + &
1141 work_forces(j, k + 3) + &
1142 work_forces(j, k + 6))
1147 work(j, k) = work(j, k) + work_forces(j, k)
1150 neris = neris + 12*mysize
1151 IF (use_virial)
THEN
1159 work_virial(j, k, m) = work_virial(j, k, m) + work_forces(j, k)*scoord(int((k - 1)/3)*3 + m)
1169 tmp_max = max(tmp_max, abs(work(i, n)))
1171 tmp_max = tmp_max*max_contraction
1172 tmp_max_all = max(tmp_max_all, tmp_max)
1177 p2 = (p1 + k - 1)*ncob
1179 p3 = (p2 + j - 1)*ncoa
1182 work2(i, j, k, l, full_perm8(n)) = work(p4, n)
1188 IF (use_virial)
THEN
1190 tmp_max_virial = 0.0_dp
1192 tmp_max_virial = max(tmp_max_virial, &
1193 abs(work_virial(i, n, 1)), abs(work_virial(i, n, 2)), abs(work_virial(i, n, 3)))
1195 tmp_max_virial = tmp_max_virial*max_contraction
1196 tmp_max_all_virial = max(tmp_max_all_virial, tmp_max_virial)
1201 p2 = (p1 + k - 1)*ncob
1203 p3 = (p2 + j - 1)*ncoa
1206 work2_virial(i, j, k, l, full_perm8(n), 1:3) = work_virial(p4, n, 1:3)
1215 IF (.NOT. use_virial)
THEN
1216 IF (tmp_max_all < eps_schwarz)
RETURN
1219 IF (tmp_max_all >= eps_schwarz)
THEN
1221 primitives_tmp(:, :, :, :) = 0.0_dp
1222 CALL contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1223 n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work2(1, 1, 1, 1, i), &
1228 primitives_tmp(1, 1, 1, 1), &
1231 primitives(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1232 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1233 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1234 s_offset_d + 1:s_offset_d + nsod*nl_d, i) = &
1235 primitives(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1236 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1237 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1238 s_offset_d + 1:s_offset_d + nsod*nl_d, i) + primitives_tmp(:, :, :, :)
1242 IF (use_virial .AND. tmp_max_all_virial >= eps_schwarz)
THEN
1245 primitives_tmp_virial(:, :, :, :) = 0.0_dp
1246 CALL contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1247 n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work2_virial(1, 1, 1, 1, i, m), &
1252 primitives_tmp_virial(1, 1, 1, 1), &
1255 primitives_virial(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1256 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1257 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1258 s_offset_d + 1:s_offset_d + nsod*nl_d, i, m) = &
1259 primitives_virial(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1260 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1261 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1262 s_offset_d + 1:s_offset_d + nsod*nl_d, i, m) + primitives_tmp_virial(:, :, :, :)
1295 n_a, n_b, n_c, n_d, &
1296 max_val, potential_parameter, R1, R2, &
1299 TYPE(cp_libint_t) :: libint
1300 REAL(
dp),
INTENT(IN) :: a(3), b(3), c(3), d(3), zeta_a, zeta_b, &
1302 INTEGER,
INTENT(IN) :: n_a, n_b, n_c, n_d
1303 REAL(
dp),
INTENT(INOUT) :: max_val
1304 TYPE(hfx_potential_type) :: potential_parameter
1306 REAL(
dp),
DIMENSION(:),
POINTER :: p_work
1308 INTEGER :: a_mysize(1), i, m_max, mysize, perm_case
1310 m_max = n_a + n_b + n_c + n_d
1314 IF (m_max /= 0)
THEN
1317 perm_case = perm_case + 1
1320 perm_case = perm_case + 2
1322 IF (n_a + n_b > n_c + n_d)
THEN
1323 perm_case = perm_case + 4
1326 SELECT CASE (perm_case)
1328 CALL build_quartet_data_screen(a, b, c, d, zeta_a, zeta_b, zeta_c, zeta_d, m_max, &
1329 potential_parameter, libint, r1, r2)
1333 max_val = max(max_val, abs(p_work(i)))
1336 CALL build_quartet_data_screen(b, a, c, d, zeta_b, zeta_a, zeta_c, zeta_d, m_max, &
1337 potential_parameter, libint, r1, r2)
1341 max_val = max(max_val, abs(p_work(i)))
1344 CALL build_quartet_data_screen(a, b, d, c, zeta_a, zeta_b, zeta_d, zeta_c, m_max, &
1345 potential_parameter, libint, r1, r2)
1349 max_val = max(max_val, abs(p_work(i)))
1352 CALL build_quartet_data_screen(b, a, d, c, zeta_b, zeta_a, zeta_d, zeta_c, m_max, &
1353 potential_parameter, libint, r1, r2)
1357 max_val = max(max_val, abs(p_work(i)))
1360 CALL build_quartet_data_screen(c, d, a, b, zeta_c, zeta_d, zeta_a, zeta_b, m_max, &
1361 potential_parameter, libint, r1, r2)
1365 max_val = max(max_val, abs(p_work(i)))
1368 CALL build_quartet_data_screen(c, d, b, a, zeta_c, zeta_d, zeta_b, zeta_a, m_max, &
1369 potential_parameter, libint, r1, r2)
1373 max_val = max(max_val, abs(p_work(i)))
1376 CALL build_quartet_data_screen(d, c, a, b, zeta_d, zeta_c, zeta_a, zeta_b, m_max, &
1377 potential_parameter, libint, r1, r2)
1381 max_val = max(max_val, abs(p_work(i)))
1384 CALL build_quartet_data_screen(d, c, b, a, zeta_d, zeta_c, zeta_b, zeta_a, m_max, &
1385 potential_parameter, libint, r1, r2)
1389 max_val = max(max_val, abs(p_work(i)))
1393 CALL build_quartet_data_screen(a, b, c, d, zeta_a, zeta_b, zeta_c, zeta_d, m_max, &
1394 potential_parameter, libint, r1, r2)
1451 SUBROUTINE evaluate_eri(libint, nproducts, pgf_product_list, &
1452 n_a, n_b, n_c, n_d, &
1453 ncoa, ncob, ncoc, ncod, &
1454 nsgfa, nsgfb, nsgfc, nsgfd, &
1455 primitives, max_contraction, tmp_max, &
1456 eps_schwarz, neris, &
1458 s_offset_a, s_offset_b, s_offset_c, s_offset_d, &
1459 nl_a, nl_b, nl_c, nl_d, nsoa, nsob, nsoc, nsod, &
1460 sphi_a, sphi_b, sphi_c, sphi_d, work, work2, buffer1, buffer2, &
1461 primitives_tmp, p_work)
1463 TYPE(cp_libint_t) :: libint
1464 INTEGER,
INTENT(IN) :: nproducts
1465 TYPE(hfx_pgf_product_list),
DIMENSION(nproducts) :: pgf_product_list
1466 INTEGER,
INTENT(IN) :: n_a, n_b, n_c, n_d, ncoa, ncob, ncoc, &
1467 ncod, nsgfa, nsgfb, nsgfc, nsgfd
1468 REAL(
dp),
DIMENSION(nsgfa, nsgfb, nsgfc, nsgfd) :: primitives
1469 REAL(
dp) :: max_contraction, tmp_max, eps_schwarz
1470 INTEGER(int_8) :: neris
1471 REAL(
dp),
INTENT(IN) :: zetainv, etainv
1472 INTEGER :: s_offset_a, s_offset_b, s_offset_c, &
1473 s_offset_d, nl_a, nl_b, nl_c, nl_d, &
1474 nsoa, nsob, nsoc, nsod
1475 REAL(
dp),
DIMENSION(ncoa, nsoa*nl_a),
INTENT(IN) :: sphi_a
1476 REAL(
dp),
DIMENSION(ncob, nsob*nl_b),
INTENT(IN) :: sphi_b
1477 REAL(
dp),
DIMENSION(ncoc, nsoc*nl_c),
INTENT(IN) :: sphi_c
1478 REAL(
dp),
DIMENSION(ncod, nsod*nl_d),
INTENT(IN) :: sphi_d
1479 REAL(
dp) :: work(ncoa*ncob*ncoc*ncod), &
1480 work2(ncoa, ncob, ncoc, ncod)
1481 REAL(
dp),
DIMENSION(ncoa*ncob*ncoc*ncod) :: buffer1, buffer2
1482 REAL(
dp),
DIMENSION(nsoa*nl_a, nsob*nl_b, nsoc*&
nl_c, nsod*nl_d) :: primitives_tmp
1483 REAL(
dp),
DIMENSION(:),
POINTER :: p_work
1485 INTEGER :: a_mysize(1), i, j, k, l, m_max, mysize, &
1486 p1, p2, p3, p4, perm_case
1487 REAL(
dp) :: a(3), ab(3), b(3), c(3), cd(3), d(3), &
1488 p(3), q(3), rho, rhoinv, w(3), &
1490 REAL(kind=
dp),
DIMENSION(prim_data_f_size) :: f
1492 m_max = n_a + n_b + n_c + n_d
1493 mysize = ncoa*ncob*ncoc*ncod
1497 IF (m_max /= 0)
THEN
1500 perm_case = perm_case + 1
1503 perm_case = perm_case + 2
1505 IF (n_a + n_b > n_c + n_d)
THEN
1506 perm_case = perm_case + 4
1508 SELECT CASE (perm_case)
1511 a = pgf_product_list(i)%ra
1512 b = pgf_product_list(i)%rb
1513 c = pgf_product_list(i)%rc
1514 d = pgf_product_list(i)%rd
1515 rho = pgf_product_list(i)%Rho
1516 rhoinv = pgf_product_list(i)%RhoInv
1517 p = pgf_product_list(i)%P
1518 q = pgf_product_list(i)%Q
1519 w = pgf_product_list(i)%W
1520 ab = pgf_product_list(i)%AB
1521 cd = pgf_product_list(i)%CD
1522 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1523 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1525 CALL build_quartet_data(libint, a, b, c, d, zetainv, etainv, zetapetainv, rho, &
1528 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1529 neris = neris + mysize
1532 tmp_max = max(tmp_max, abs(work(i)))
1534 tmp_max = tmp_max*max_contraction
1535 IF (tmp_max < eps_schwarz)
THEN
1542 p2 = (p1 + j - 1)*ncoc
1544 p3 = (p2 + k - 1)*ncod
1547 work2(i, j, k, l) = work(p4)
1554 a = pgf_product_list(i)%ra
1555 b = pgf_product_list(i)%rb
1556 c = pgf_product_list(i)%rc
1557 d = pgf_product_list(i)%rd
1558 rho = pgf_product_list(i)%Rho
1559 rhoinv = pgf_product_list(i)%RhoInv
1560 p = pgf_product_list(i)%P
1561 q = pgf_product_list(i)%Q
1562 w = pgf_product_list(i)%W
1563 ab = pgf_product_list(i)%AB
1564 cd = pgf_product_list(i)%CD
1565 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1566 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1568 CALL build_quartet_data(libint, b, a, c, d, &
1569 zetainv, etainv, zetapetainv, rho, &
1573 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1574 neris = neris + mysize
1577 tmp_max = max(tmp_max, abs(work(i)))
1579 tmp_max = tmp_max*max_contraction
1580 IF (tmp_max < eps_schwarz)
THEN
1587 p2 = (p1 + i - 1)*ncoc
1589 p3 = (p2 + k - 1)*ncod
1592 work2(i, j, k, l) = work(p4)
1599 a = pgf_product_list(i)%ra
1600 b = pgf_product_list(i)%rb
1601 c = pgf_product_list(i)%rc
1602 d = pgf_product_list(i)%rd
1603 rho = pgf_product_list(i)%Rho
1604 rhoinv = pgf_product_list(i)%RhoInv
1605 p = pgf_product_list(i)%P
1606 q = pgf_product_list(i)%Q
1607 w = pgf_product_list(i)%W
1608 ab = pgf_product_list(i)%AB
1609 cd = pgf_product_list(i)%CD
1610 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1611 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1613 CALL build_quartet_data(libint, a, b, d, c, &
1614 zetainv, etainv, zetapetainv, rho, &
1618 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1619 neris = neris + mysize
1622 tmp_max = max(tmp_max, abs(work(i)))
1624 tmp_max = tmp_max*max_contraction
1625 IF (tmp_max < eps_schwarz)
THEN
1632 p2 = (p1 + j - 1)*ncod
1634 p3 = (p2 + l - 1)*ncoc
1637 work2(i, j, k, l) = work(p4)
1644 a = pgf_product_list(i)%ra
1645 b = pgf_product_list(i)%rb
1646 c = pgf_product_list(i)%rc
1647 d = pgf_product_list(i)%rd
1648 rho = pgf_product_list(i)%Rho
1649 rhoinv = pgf_product_list(i)%RhoInv
1650 p = pgf_product_list(i)%P
1651 q = pgf_product_list(i)%Q
1652 w = pgf_product_list(i)%W
1653 ab = pgf_product_list(i)%AB
1654 cd = pgf_product_list(i)%CD
1655 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1656 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1658 CALL build_quartet_data(libint, b, a, d, c, &
1659 zetainv, etainv, zetapetainv, rho, &
1663 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1664 neris = neris + mysize
1667 tmp_max = max(tmp_max, abs(work(i)))
1669 tmp_max = tmp_max*max_contraction
1670 IF (tmp_max < eps_schwarz)
THEN
1677 p2 = (p1 + i - 1)*ncod
1679 p3 = (p2 + l - 1)*ncoc
1682 work2(i, j, k, l) = work(p4)
1689 a = pgf_product_list(i)%ra
1690 b = pgf_product_list(i)%rb
1691 c = pgf_product_list(i)%rc
1692 d = pgf_product_list(i)%rd
1693 rho = pgf_product_list(i)%Rho
1694 rhoinv = pgf_product_list(i)%RhoInv
1695 p = pgf_product_list(i)%P
1696 q = pgf_product_list(i)%Q
1697 w = pgf_product_list(i)%W
1698 ab = pgf_product_list(i)%AB
1699 cd = pgf_product_list(i)%CD
1700 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1701 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1703 CALL build_quartet_data(libint, c, d, a, b, &
1704 etainv, zetainv, zetapetainv, rho, &
1708 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1709 neris = neris + mysize
1712 tmp_max = max(tmp_max, abs(work(i)))
1714 tmp_max = tmp_max*max_contraction
1715 IF (tmp_max < eps_schwarz)
THEN
1722 p2 = (p1 + l - 1)*ncoa
1724 p3 = (p2 + i - 1)*ncob
1727 work2(i, j, k, l) = work(p4)
1734 a = pgf_product_list(i)%ra
1735 b = pgf_product_list(i)%rb
1736 c = pgf_product_list(i)%rc
1737 d = pgf_product_list(i)%rd
1738 rho = pgf_product_list(i)%Rho
1739 rhoinv = pgf_product_list(i)%RhoInv
1740 p = pgf_product_list(i)%P
1741 q = pgf_product_list(i)%Q
1742 w = pgf_product_list(i)%W
1743 ab = pgf_product_list(i)%AB
1744 cd = pgf_product_list(i)%CD
1745 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1746 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1748 CALL build_quartet_data(libint, c, d, b, a, &
1749 etainv, zetainv, zetapetainv, rho, &
1753 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1754 neris = neris + mysize
1757 tmp_max = max(tmp_max, abs(work(i)))
1759 tmp_max = tmp_max*max_contraction
1760 IF (tmp_max < eps_schwarz)
THEN
1767 p2 = (p1 + l - 1)*ncob
1769 p3 = (p2 + j - 1)*ncoa
1772 work2(i, j, k, l) = work(p4)
1779 a = pgf_product_list(i)%ra
1780 b = pgf_product_list(i)%rb
1781 c = pgf_product_list(i)%rc
1782 d = pgf_product_list(i)%rd
1783 rho = pgf_product_list(i)%Rho
1784 rhoinv = pgf_product_list(i)%RhoInv
1785 p = pgf_product_list(i)%P
1786 q = pgf_product_list(i)%Q
1787 w = pgf_product_list(i)%W
1788 ab = pgf_product_list(i)%AB
1789 cd = pgf_product_list(i)%CD
1790 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1791 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1793 CALL build_quartet_data(libint, d, c, a, b, &
1794 etainv, zetainv, zetapetainv, rho, &
1798 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1799 neris = neris + mysize
1802 tmp_max = max(tmp_max, abs(work(i)))
1804 tmp_max = tmp_max*max_contraction
1805 IF (tmp_max < eps_schwarz)
THEN
1812 p2 = (p1 + k - 1)*ncoa
1814 p3 = (p2 + i - 1)*ncob
1817 work2(i, j, k, l) = work(p4)
1824 a = pgf_product_list(i)%ra
1825 b = pgf_product_list(i)%rb
1826 c = pgf_product_list(i)%rc
1827 d = pgf_product_list(i)%rd
1828 rho = pgf_product_list(i)%Rho
1829 rhoinv = pgf_product_list(i)%RhoInv
1830 p = pgf_product_list(i)%P
1831 q = pgf_product_list(i)%Q
1832 w = pgf_product_list(i)%W
1833 ab = pgf_product_list(i)%AB
1834 cd = pgf_product_list(i)%CD
1835 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1836 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1838 CALL build_quartet_data(libint, d, c, b, a, &
1839 etainv, zetainv, zetapetainv, rho, &
1843 work(1:mysize) = work(1:mysize) + p_work(1:mysize)
1844 neris = neris + mysize
1847 tmp_max = max(tmp_max, abs(work(i)))
1849 tmp_max = tmp_max*max_contraction
1850 IF (tmp_max < eps_schwarz)
THEN
1857 p2 = (p1 + k - 1)*ncob
1859 p3 = (p2 + j - 1)*ncoa
1862 work2(i, j, k, l) = work(p4)
1870 a = pgf_product_list(i)%ra
1871 b = pgf_product_list(i)%rb
1872 c = pgf_product_list(i)%rc
1873 d = pgf_product_list(i)%rd
1874 rho = pgf_product_list(i)%Rho
1875 rhoinv = pgf_product_list(i)%RhoInv
1876 p = pgf_product_list(i)%P
1877 q = pgf_product_list(i)%Q
1878 w = pgf_product_list(i)%W
1879 zetapetainv = pgf_product_list(i)%ZetapEtaInv
1880 f(1:m_max + 1) = pgf_product_list(i)%Fm(1:m_max + 1)
1882 CALL build_quartet_data(libint, a, b, c, d, &
1883 zetainv, etainv, zetapetainv, rho, &
1885 work(1) = work(1) + f(1)
1886 neris = neris + mysize
1888 work2(1, 1, 1, 1) = work(1)
1889 tmp_max = max_contraction*abs(work(1))
1890 IF (tmp_max < eps_schwarz)
RETURN
1893 IF (tmp_max < eps_schwarz)
RETURN
1894 primitives_tmp = 0.0_dp
1896 CALL contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, &
1897 n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work2, &
1905 primitives(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1906 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1907 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1908 s_offset_d + 1:s_offset_d + nsod*nl_d) = &
1909 primitives(s_offset_a + 1:s_offset_a + nsoa*nl_a, &
1910 s_offset_b + 1:s_offset_b + nsob*nl_b, &
1911 s_offset_c + 1:s_offset_c + nsoc*nl_c, &
1912 s_offset_d + 1:s_offset_d + nsod*nl_d) + primitives_tmp(:, :, :, :)
1936 SUBROUTINE build_quartet_data(libint, A, B, C, D, &
1937 ZetaInv, EtaInv, ZetapEtaInv, Rho, &
1940 TYPE(cp_libint_t) :: libint
1941 REAL(kind=
dp),
INTENT(IN) :: a(3), b(3), c(3), d(3)
1942 REAL(
dp),
INTENT(IN) :: zetainv, etainv, zetapetainv, rho, p(3), &
1944 INTEGER,
INTENT(IN) :: m_max
1945 REAL(kind=
dp),
DIMENSION(:) :: f
1947 CALL cp_libint_set_params_eri(libint, a, b, c, d, zetainv, etainv, zetapetainv, rho, p, q, w, m_max, f)
1948 END SUBROUTINE build_quartet_data
1951 Handles all functions related to the CELL.
subroutine, public real_to_scaled(s, r, cell)
Transform real to scaled cell coordinates. s=h_inv*r.
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....
Contains routines for contraction without dgemms. PLEASE DO NOT MODIFY. \notes Contains specific rout...
subroutine, public contract(ncoa, ncob, ncoc, ncod, nsoa, nsob, nsoc, nsod, n_a, n_b, n_c, n_d, nl_a, nl_b, nl_c, nl_d, work, sphi_a, sphi_b, sphi_c, sphi_d, primitives, buffer1, buffer2)
...
Interface to the Libint-Library.
subroutine, public evaluate_deriv_eri(deriv, nproducts, pgf_product_list, n_a, n_b, n_c, n_d, ncoa, ncob, ncoc, ncod, nsgfa, nsgfb, nsgfc, nsgfd, primitives, max_contraction, tmp_max_all, eps_schwarz, neris, Zeta_A, Zeta_B, Zeta_C, Zeta_D, ZetaInv, EtaInv, s_offset_a, s_offset_b, s_offset_c, s_offset_d, nl_a, nl_b, nl_c, nl_d, nsoa, nsob, nsoc, nsod, sphi_a, sphi_b, sphi_c, sphi_d, work, work2, work_forces, buffer1, buffer2, primitives_tmp, use_virial, work_virial, work2_virial, primitives_tmp_virial, primitives_virial, cell, tmp_max_all_virial)
Evaluates derivatives of electron repulsion integrals for a primitive quartet.
subroutine, public evaluate_eri_screen(libint, A, B, C, D, Zeta_A, Zeta_B, Zeta_C, Zeta_D, n_a, n_b, n_c, n_d, max_val, potential_parameter, R1, R2, p_work)
Evaluates max-abs values of electron repulsion integrals for a primitive quartet.
subroutine, public evaluate_eri(libint, nproducts, pgf_product_list, n_a, n_b, n_c, n_d, ncoa, ncob, ncoc, ncod, nsgfa, nsgfb, nsgfc, nsgfd, primitives, max_contraction, tmp_max, eps_schwarz, neris, ZetaInv, EtaInv, s_offset_a, s_offset_b, s_offset_c, s_offset_d, nl_a, nl_b, nl_c, nl_d, nsoa, nsob, nsoc, nsod, sphi_a, sphi_b, sphi_c, sphi_d, work, work2, buffer1, buffer2, primitives_tmp, p_work)
Evaluate electron repulsion integrals for a primitive quartet.
Types and set/get functions for HFX.
Defines the basic variable types.
integer, parameter, public int_8
integer, parameter, public dp
Interface to the Libint-Library or a c++ wrapper.
subroutine, public cp_libint_set_params_eri_deriv(libint, A, B, C, D, P, Q, W, zeta_A, zeta_B, zeta_C, zeta_D, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
subroutine, public cp_libint_get_eris(n_d, n_c, n_b, n_a, lib, p_work, a_mysize)
...
real(kind=dp) function, public get_ssss_f_val(lib)
integer, parameter, public prim_data_f_size
subroutine, public cp_libint_set_params_eri_screen(libint, A, B, C, D, P, Q, W, ZetaInv, EtaInv, ZetapEtaInv, Rho, m_max, F)
subroutine, public cp_libint_get_derivs(n_d, n_c, n_b, n_a, lib, work_forces, a_mysize)
...
subroutine, public cp_libint_set_params_eri(libint, A, B, C, D, ZetaInv, EtaInv, ZetapEtaInv, Rho, P, Q, W, m_max, F)
Definition of mathematical constants and functions.
real(kind=dp), parameter, public pi
Provides Cartesian and spherical orbital pointers and indices.
integer, dimension(:), allocatable, public nco
This module computes the basic integrals for the truncated coulomb operator.
subroutine, public t_c_g0_n(RES, use_gamma, R, T, NDERIV)
...