30 #include "./base/base_uses.f90"
36 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'se_fock_matrix_integrals'
37 LOGICAL,
PARAMETER,
PRIVATE :: debug_this_module = .false.
63 SUBROUTINE fock2_1el(sepi, sepj, rij, ksi_block, ksj_block, pi_block, pj_block, &
64 ecore, itype, anag, se_int_control, se_taper, store_int_env)
65 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
66 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
67 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ksi_block, ksj_block
69 DIMENSION(sepi%natorb, sepi%natorb),
INTENT(IN) :: pi_block
71 DIMENSION(sepj%natorb, sepj%natorb),
INTENT(IN) :: pj_block
72 REAL(kind=
dp),
DIMENSION(2),
INTENT(INOUT) :: ecore
73 INTEGER,
INTENT(IN) :: itype
74 LOGICAL,
INTENT(IN) :: anag
75 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
76 TYPE(se_taper_type),
POINTER :: se_taper
77 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
79 INTEGER :: i1, i1l, i2, j1, j1l
80 REAL(kind=
dp),
DIMENSION(45) :: e1b, e2a
84 CALL rotnuc(sepi, sepj, rij, e1b=e1b, e2a=e2a, itype=itype, anag=anag, &
85 se_int_control=se_int_control, se_taper=se_taper, store_int_env=store_int_env)
90 DO i1l = 1, sepi%natorb
95 ksi_block(i1, j1) = ksi_block(i1, j1) + e1b(i2)
96 ksi_block(j1, i1) = ksi_block(i1, j1)
97 ecore(1) = ecore(1) + 2.0_dp*e1b(i2)*pi_block(i1, j1)
101 ksi_block(i1, j1) = ksi_block(i1, j1) + e1b(i2)
102 ecore(1) = ecore(1) + e1b(i2)*pi_block(i1, j1)
108 DO i1l = 1, sepj%natorb
113 ksj_block(i1, j1) = ksj_block(i1, j1) + e2a(i2)
114 ksj_block(j1, i1) = ksj_block(i1, j1)
115 ecore(2) = ecore(2) + 2.0_dp*e2a(i2)*pj_block(i1, j1)
119 ksj_block(i1, j1) = ksj_block(i1, j1) + e2a(i2)
120 ecore(2) = ecore(2) + e2a(i2)*pj_block(i1, j1)
141 SUBROUTINE dfock2_1el(sepi, sepj, rij, pi_block, pj_block, itype, anag, &
142 se_int_control, se_taper, force, delta)
143 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
144 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
146 DIMENSION(sepi%natorb, sepi%natorb),
INTENT(IN) :: pi_block
148 DIMENSION(sepj%natorb, sepj%natorb),
INTENT(IN) :: pj_block
149 INTEGER,
INTENT(IN) :: itype
150 LOGICAL,
INTENT(IN) :: anag
151 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
152 TYPE(se_taper_type),
POINTER :: se_taper
153 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force
154 REAL(kind=
dp),
INTENT(IN) :: delta
156 INTEGER :: i1, i1l, i2, j1, j1l
158 REAL(kind=
dp),
DIMENSION(3, 45) :: de1b, de2a
162 CALL drotnuc(sepi, sepj, rij, de1b=de1b, de2a=de2a, itype=itype, anag=anag, &
163 se_int_control=se_int_control, se_taper=se_taper, delta=delta)
168 DO i1l = 1, sepi%natorb
173 tmp = 2.0_dp*pi_block(i1, j1)
174 force(1) = force(1) + de1b(1, i2)*tmp
175 force(2) = force(2) + de1b(2, i2)*tmp
176 force(3) = force(3) + de1b(3, i2)*tmp
180 force(1) = force(1) + de1b(1, i2)*pi_block(i1, j1)
181 force(2) = force(2) + de1b(2, i2)*pi_block(i1, j1)
182 force(3) = force(3) + de1b(3, i2)*pi_block(i1, j1)
188 DO i1l = 1, sepj%natorb
193 tmp = 2.0_dp*pj_block(i1, j1)
194 force(1) = force(1) + de2a(1, i2)*tmp
195 force(2) = force(2) + de2a(2, i2)*tmp
196 force(3) = force(3) + de2a(3, i2)*tmp
200 force(1) = force(1) + de2a(1, i2)*pj_block(i1, j1)
201 force(2) = force(2) + de2a(2, i2)*pj_block(i1, j1)
202 force(3) = force(3) + de2a(3, i2)*pj_block(i1, j1)
218 TYPE(semi_empirical_type),
POINTER :: sep
219 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: p_tot
220 REAL(kind=
dp),
DIMENSION(sep%natorb, sep%natorb), &
222 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: f_mat
223 REAL(kind=
dp),
INTENT(IN) :: factor
225 INTEGER :: i, ijw, ikw, il, im, j, jl, jlw, jm, k, &
235 DO il = 1, sep%natorb
241 ijw = (il*(il - 1))/2 + jl
243 DO kl = 1, sep%natorb
245 DO ll = 1, sep%natorb
251 klw = (im*(im - 1))/2 + jm
256 ikw = (im*(im - 1))/2 + jm
261 jlw = (im*(im - 1))/2 + jm
263 sum = sum + p_tot(k, l)*sep%w(ijw, klw) - p_mat(k, l)*sep%w(ikw, jlw)
266 f_mat(i, j) = f_mat(i, j) + factor*sum
267 f_mat(j, i) = f_mat(i, j)
287 SUBROUTINE fock2_1el_ew(sep, rij, ks_block, p_block, ecore, itype, anag, &
288 se_int_control, se_taper, store_int_env)
289 TYPE(semi_empirical_type),
POINTER :: sep
290 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
291 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ks_block
292 REAL(kind=
dp),
DIMENSION(sep%natorb, sep%natorb), &
293 INTENT(IN) :: p_block
294 REAL(kind=
dp),
INTENT(INOUT) :: ecore
295 INTEGER,
INTENT(IN) :: itype
296 LOGICAL,
INTENT(IN) :: anag
297 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
298 TYPE(se_taper_type),
POINTER :: se_taper
299 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
301 INTEGER :: i1, i1l, i2, j1, j1l, n
302 REAL(kind=
dp),
DIMENSION(45) :: e1b, e2a
306 CALL rotnuc(sep, sep, rij, e1b=e1b, e2a=e2a, itype=itype, anag=anag, &
307 se_int_control=se_int_control, se_taper=se_taper, store_int_env=store_int_env)
312 n = (sep%natorb*(sep%natorb + 1))/2
314 DO i1l = 1, sep%natorb
319 ks_block(i1, j1) = ks_block(i1, j1) + e1b(i2)
320 ks_block(j1, i1) = ks_block(i1, j1)
321 ecore = ecore + 2._dp*e1b(i2)*p_block(i1, j1)
325 ks_block(i1, i1) = ks_block(i1, i1) + e1b(i2)
326 ecore = ecore + e1b(i2)*p_block(i1, i1)
345 SUBROUTINE fock2c_ew(sep, rij, p_tot, f_mat, factor, anag, se_int_control, &
346 se_taper, store_int_env)
347 TYPE(semi_empirical_type),
POINTER :: sep
348 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
349 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: p_tot
350 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: f_mat
351 REAL(kind=
dp),
INTENT(IN) :: factor
352 LOGICAL,
INTENT(IN) :: anag
353 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
354 TYPE(se_taper_type),
POINTER :: se_taper
355 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
357 INTEGER :: i, il, j, jl, k, kl, kr, l, ll, natorb
358 REAL(kind=
dp) :: a, aa, bb
359 REAL(kind=
dp),
DIMENSION(2025) :: w
363 CALL rotint(sep, sep, rij, w, anag=anag, se_int_control=se_int_control, &
364 se_taper=se_taper, store_int_env=store_int_env)
384 a = 0.5_dp*w(kr)*factor
386 f_mat(i, j) = f_mat(i, j) + bb*a*p_tot(k, l)
387 f_mat(k, l) = f_mat(k, l) + aa*a*p_tot(i, j)
388 f_mat(j, i) = f_mat(i, j)
389 f_mat(l, k) = f_mat(k, l)
415 SUBROUTINE fock2c(sepi, sepj, rij, switch, pi_tot, fi_mat, pj_tot, fj_mat, &
416 factor, anag, se_int_control, se_taper, store_int_env)
417 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
418 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
419 LOGICAL,
INTENT(IN) :: switch
420 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pi_tot
421 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fi_mat
422 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pj_tot
423 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fj_mat
424 REAL(kind=
dp),
INTENT(IN) :: factor
425 LOGICAL,
INTENT(IN) :: anag
426 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
427 TYPE(se_taper_type),
POINTER :: se_taper
428 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
430 INTEGER :: i, il, j, jl, k, kl, kr, l, ll, natorb(2)
431 REAL(kind=
dp) :: a, aa, bb, irij(3)
432 REAL(kind=
dp),
DIMENSION(2025) :: w
436 IF (.NOT. switch)
THEN
437 CALL rotint(sepi, sepj, rij, w, anag=anag, se_int_control=se_int_control, &
438 se_taper=se_taper, store_int_env=store_int_env)
441 CALL rotint(sepj, sepi, irij, w, anag=anag, se_int_control=se_int_control, &
442 se_taper=se_taper, store_int_env=store_int_env)
445 natorb(1) = sepi%natorb
446 natorb(2) = sepj%natorb
448 natorb(1) = sepj%natorb
449 natorb(2) = sepi%natorb
470 IF (.NOT. switch)
THEN
471 fi_mat(i, j) = fi_mat(i, j) + bb*a*pj_tot(k, l)
472 fj_mat(k, l) = fj_mat(k, l) + aa*a*pi_tot(i, j)
473 fi_mat(j, i) = fi_mat(i, j)
474 fj_mat(l, k) = fj_mat(k, l)
476 fj_mat(i, j) = fj_mat(i, j) + bb*a*pi_tot(k, l)
477 fi_mat(k, l) = fi_mat(k, l) + aa*a*pj_tot(i, j)
478 fj_mat(j, i) = fj_mat(i, j)
479 fi_mat(l, k) = fi_mat(k, l)
505 SUBROUTINE dfock2c(sepi, sepj, rij, switch, pi_tot, pj_tot, factor, anag, &
506 se_int_control, se_taper, force, delta)
507 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
508 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
509 LOGICAL,
INTENT(IN) :: switch
510 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pi_tot, pj_tot
511 REAL(kind=
dp),
INTENT(IN) :: factor
512 LOGICAL,
INTENT(IN) :: anag
513 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
514 TYPE(se_taper_type),
POINTER :: se_taper
515 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force
516 REAL(kind=
dp),
INTENT(IN) :: delta
518 INTEGER :: i, il, j, jl, k, kl, kr, l, ll, natorb(2)
519 REAL(kind=
dp) :: aa, bb, tmp
520 REAL(kind=
dp),
DIMENSION(3) :: a, irij
521 REAL(kind=
dp),
DIMENSION(3, 2025) :: dw
525 IF (.NOT. switch)
THEN
526 CALL drotint(sepi, sepj, rij, dw, delta, anag=anag, se_int_control=se_int_control, &
530 CALL drotint(sepj, sepi, irij, dw, delta, anag=anag, se_int_control=se_int_control, &
535 natorb(1) = sepi%natorb
536 natorb(2) = sepj%natorb
538 natorb(1) = sepj%natorb
539 natorb(2) = sepi%natorb
558 a(1) = dw(1, kr)*factor
559 a(2) = dw(2, kr)*factor
560 a(3) = dw(3, kr)*factor
562 IF (.NOT. switch)
THEN
563 tmp = bb*aa*pj_tot(k, l)*pi_tot(i, j)
565 tmp = bb*aa*pi_tot(k, l)*pj_tot(i, j)
567 force(1) = force(1) + a(1)*tmp
568 force(2) = force(2) + a(2)*tmp
569 force(3) = force(3) + a(3)*tmp
593 SUBROUTINE fock2e(sepi, sepj, rij, switch, isize, pi_mat, fi_mat, factor, &
594 anag, se_int_control, se_taper, store_int_env)
595 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
596 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
597 LOGICAL,
INTENT(IN) :: switch
598 INTEGER,
DIMENSION(2),
INTENT(IN) :: isize
599 REAL(kind=
dp),
DIMENSION(isize(1), isize(2)), &
601 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fi_mat
602 REAL(kind=
dp),
INTENT(IN) :: factor
603 LOGICAL,
INTENT(IN) :: anag
604 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
605 TYPE(se_taper_type),
POINTER :: se_taper
606 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
608 INTEGER :: i, il, j, jl, k, kl, kr, l, ll, natorb(2)
609 REAL(kind=
dp) :: a, aa, bb, irij(3)
610 REAL(kind=
dp),
DIMENSION(2025) :: w
614 IF (.NOT. switch)
THEN
615 CALL rotint(sepi, sepj, rij, w, anag=anag, se_int_control=se_int_control, &
616 se_taper=se_taper, store_int_env=store_int_env)
619 CALL rotint(sepj, sepi, irij, w, anag=anag, se_int_control=se_int_control, &
620 se_taper=se_taper, store_int_env=store_int_env)
623 natorb(1) = sepi%natorb
624 natorb(2) = sepj%natorb
626 natorb(1) = sepj%natorb
627 natorb(2) = sepi%natorb
649 fi_mat(i, k) = fi_mat(i, k) - a*pi_mat(j, l)
650 fi_mat(i, l) = fi_mat(i, l) - a*pi_mat(j, k)
651 fi_mat(j, k) = fi_mat(j, k) - a*pi_mat(i, l)
652 fi_mat(j, l) = fi_mat(j, l) - a*pi_mat(i, k)
677 SUBROUTINE dfock2e(sepi, sepj, rij, switch, isize, pi_mat, factor, anag, &
678 se_int_control, se_taper, force, delta)
679 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
680 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rij
681 LOGICAL,
INTENT(IN) :: switch
682 INTEGER,
DIMENSION(2),
INTENT(IN) :: isize
683 REAL(kind=
dp),
DIMENSION(isize(1), isize(2)), &
685 REAL(kind=
dp),
INTENT(IN) :: factor
686 LOGICAL,
INTENT(IN) :: anag
687 TYPE(se_int_control_type),
INTENT(IN) :: se_int_control
688 TYPE(se_taper_type),
POINTER :: se_taper
689 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force
690 REAL(kind=
dp),
INTENT(IN) :: delta
692 INTEGER :: i, il, j, jl, k, kl, kr, l, ll, natorb(2)
693 REAL(kind=
dp) :: aa, bb, tmp, tmp1, tmp2, tmp3, tmp4
694 REAL(kind=
dp),
DIMENSION(3) :: a, irij
695 REAL(kind=
dp),
DIMENSION(3, 2025) :: dw
699 IF (.NOT. switch)
THEN
700 CALL drotint(sepi, sepj, rij, dw, delta, anag=anag, se_int_control=se_int_control, &
704 CALL drotint(sepj, sepi, irij, dw, delta, anag=anag, se_int_control=se_int_control, &
709 natorb(1) = sepi%natorb
710 natorb(2) = sepj%natorb
712 natorb(1) = sepj%natorb
713 natorb(2) = sepi%natorb
732 tmp = factor*aa*bb*0.25_dp
737 tmp1 = pi_mat(j, l)*pi_mat(i, k)
738 tmp2 = pi_mat(j, k)*pi_mat(i, l)
739 tmp3 = pi_mat(i, l)*pi_mat(j, k)
740 tmp4 = pi_mat(i, k)*pi_mat(j, l)
742 force(1) = force(1) - a(1)*tmp1
743 force(1) = force(1) - a(1)*tmp2
744 force(1) = force(1) - a(1)*tmp3
745 force(1) = force(1) - a(1)*tmp4
747 force(2) = force(2) - a(2)*tmp1
748 force(2) = force(2) - a(2)*tmp2
749 force(2) = force(2) - a(2)*tmp3
750 force(2) = force(2) - a(2)*tmp4
752 force(3) = force(3) - a(3)*tmp1
753 force(3) = force(3) - a(3)*tmp2
754 force(3) = force(3) - a(3)*tmp3
755 force(3) = force(3) - a(3)*tmp4
778 SUBROUTINE fock2_1el_r3(sepi, sepj, ksi_block, ksj_block, pi_block, pj_block, &
780 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
781 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: ksi_block, ksj_block
783 DIMENSION(sepi%natorb, sepi%natorb),
INTENT(IN) :: pi_block
785 DIMENSION(sepj%natorb, sepj%natorb),
INTENT(IN) :: pj_block
786 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: e1b, e2a
787 REAL(kind=
dp),
DIMENSION(2),
INTENT(INOUT) :: ecore
788 REAL(kind=
dp),
INTENT(IN) :: rp
790 INTEGER :: i1, i1l, i2
797 DO i1l = 1, sepi%natorb
800 ksi_block(i1, i1) = ksi_block(i1, i1) + e1b(i2)*rp
801 ecore(1) = ecore(1) + e1b(i2)*rp*pi_block(i1, i1)
807 DO i1l = 1, sepj%natorb
810 ksj_block(i1, i1) = ksj_block(i1, i1) + e2a(i2)*rp
811 ecore(2) = ecore(2) + e2a(i2)*rp*pj_block(i1, i1)
830 SUBROUTINE dfock2_1el_r3(sepi, sepj, drp, pi_block, pj_block, force, e1b, e2a)
831 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
832 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: drp
834 DIMENSION(sepi%natorb, sepi%natorb),
INTENT(IN) :: pi_block
836 DIMENSION(sepj%natorb, sepj%natorb),
INTENT(IN) :: pj_block
837 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force
838 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: e1b, e2a
840 INTEGER :: i1, i1l, i2
848 DO i1l = 1, sepi%natorb
851 tmp = e1b(i2)*pi_block(i1, i1)
852 force(1) = force(1) + tmp*drp(1)
853 force(2) = force(2) + tmp*drp(2)
854 force(3) = force(3) + tmp*drp(3)
860 DO i1l = 1, sepj%natorb
863 tmp = e2a(i2)*pj_block(i1, i1)
864 force(1) = force(1) + tmp*drp(1)
865 force(2) = force(2) + tmp*drp(2)
866 force(3) = force(3) + tmp*drp(3)
887 SUBROUTINE fock2c_r3(sepi, sepj, switch, pi_tot, fi_mat, pj_tot, fj_mat, &
889 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
890 LOGICAL,
INTENT(IN) :: switch
891 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pi_tot
892 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fi_mat
893 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pj_tot
894 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: fj_mat
895 REAL(kind=
dp),
INTENT(IN) :: factor
896 REAL(kind=
dp),
DIMENSION(81),
INTENT(IN) :: w
897 REAL(kind=
dp),
INTENT(IN) :: rp
899 INTEGER :: i, il, ind, j, k, kl, kr, natorb(2)
900 REAL(kind=
dp) :: a, w_l(81)
902 natorb(1) = sepi%natorb
903 natorb(2) = sepj%natorb
905 natorb(1) = sepj%natorb
906 natorb(2) = sepi%natorb
909 DO i = 1, sepj%natorb
910 DO j = 1, sepi%natorb
912 ind = (j - 1)*sepj%natorb + i
927 a = w_l(kr)*factor*rp
929 IF (.NOT. switch)
THEN
930 fi_mat(i, i) = fi_mat(i, i) + a*pj_tot(k, k)
931 fj_mat(k, k) = fj_mat(k, k) + a*pi_tot(i, i)
933 fj_mat(i, i) = fj_mat(i, i) + a*pi_tot(k, k)
934 fi_mat(k, k) = fi_mat(k, k) + a*pj_tot(i, i)
956 SUBROUTINE dfock2c_r3(sepi, sepj, switch, pi_tot, pj_tot, factor, w, drp, &
958 TYPE(semi_empirical_type),
POINTER :: sepi, sepj
959 LOGICAL,
INTENT(IN) :: switch
960 REAL(kind=
dp),
DIMENSION(45, 45),
INTENT(IN) :: pi_tot, pj_tot
961 REAL(kind=
dp),
INTENT(IN) :: factor
962 REAL(kind=
dp),
DIMENSION(81),
INTENT(IN) :: w
963 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: drp
964 REAL(kind=
dp),
DIMENSION(3),
INTENT(INOUT) :: force
966 INTEGER :: i, il, ind, j, k, kl, kr, natorb(2)
967 REAL(kind=
dp) :: a(3), tmp, w_l(81)
969 natorb(1) = sepi%natorb
970 natorb(2) = sepj%natorb
972 natorb(1) = sepj%natorb
973 natorb(2) = sepi%natorb
976 DO i = 1, sepj%natorb
977 DO j = 1, sepi%natorb
979 ind = (j - 1)*sepj%natorb + i
999 IF (.NOT. switch)
THEN
1000 tmp = pj_tot(k, k)*pi_tot(i, i)
1002 tmp = pi_tot(k, k)*pj_tot(i, i)
1004 force(1) = force(1) + a(1)*tmp
1005 force(2) = force(2) + a(2)*tmp
1006 force(3) = force(3) + a(3)*tmp
1043 do_stress, charges, dipoles, quadrupoles, force_ab, efield0, efield1, efield2, &
1044 rab2, rab, integral_value, ptens11, ptens12, ptens13, ptens21, ptens22, ptens23, &
1045 ptens31, ptens32, ptens33)
1046 INTEGER,
INTENT(IN) :: atom_a, atom_b
1047 LOGICAL,
DIMENSION(3) :: my_task
1048 LOGICAL,
INTENT(IN) :: do_forces, do_efield, do_stress
1049 REAL(kind=
dp),
DIMENSION(:),
POINTER :: charges
1050 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: dipoles
1051 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: quadrupoles
1052 REAL(kind=
dp),
DIMENSION(3),
INTENT(OUT) :: force_ab
1053 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
1054 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1, efield2
1055 REAL(kind=
dp),
INTENT(IN) :: rab2
1056 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: rab
1057 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: integral_value
1058 REAL(kind=
dp),
INTENT(INOUT) :: ptens11, ptens12, ptens13, ptens21, &
1059 ptens22, ptens23, ptens31, ptens32, &
1062 INTEGER :: a, b, c, d, e, i, j, k
1063 LOGICAL :: do_efield0, do_efield1, do_efield2, &
1065 LOGICAL,
DIMENSION(3) :: do_task
1066 LOGICAL,
DIMENSION(3, 3) :: task
1067 REAL(kind=
dp) :: ch_i, ch_j, ef0_i, ef0_j, eloc, energy,
fac, fac_ij, ir, irab2, r, tij, &
1068 tmp, tmp1, tmp11, tmp12, tmp13, tmp2, tmp21, tmp22, tmp23, tmp31, tmp32, tmp33, tmp_ij, &
1070 REAL(kind=
dp),
DIMENSION(0:5) :: f
1071 REAL(kind=
dp),
DIMENSION(3) :: dp_i, dp_j, ef1_i, ef1_j, fr, tij_a
1072 REAL(kind=
dp),
DIMENSION(3, 3) :: ef2_i, ef2_j, qp_i, qp_j, tij_ab
1073 REAL(kind=
dp),
DIMENSION(3, 3, 3) :: tij_abc
1074 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3) :: tij_abcd
1075 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3, 3) :: tij_abcde
1080 IF (do_task(i))
THEN
1083 do_task(1) = (charges(atom_a) /= 0.0_dp) .OR. (charges(atom_b) /= 0.0_dp)
1085 do_task(2) = (any(dipoles(:, atom_a) /= 0.0_dp)) .OR. (any(dipoles(:, atom_b) /= 0.0_dp))
1087 do_task(3) = (any(quadrupoles(:, :, atom_a) /= 0.0_dp)) .OR. (any(quadrupoles(:, :, atom_b) /= 0.0_dp))
1093 task(j, i) = do_task(i) .AND. do_task(j)
1094 task(i, j) = task(j, i)
1097 do_efield0 = do_efield .AND.
ASSOCIATED(efield0)
1098 do_efield1 = do_efield .AND.
ASSOCIATED(efield1)
1099 do_efield2 = do_efield .AND.
ASSOCIATED(efield2)
1102 IF (atom_a == atom_b) fac_ij = 0.5_dp
1105 IF (debug_this_module)
THEN
1108 tij_a = huge(0.0_dp)
1109 tij_ab = huge(0.0_dp)
1110 tij_abc = huge(0.0_dp)
1111 tij_abcd = huge(0.0_dp)
1112 tij_abcde = huge(0.0_dp)
1122 f(i) = irab2*f(i - 1)
1127 force_eval = do_stress
1128 IF (task(1, 1))
THEN
1130 force_eval = do_forces .OR. do_efield1
1132 IF (task(2, 2)) force_eval = force_eval .OR. do_efield0
1133 IF (task(1, 2) .OR. force_eval)
THEN
1134 force_eval = do_stress
1135 tij_a = -rab*f(1)*fac_ij
1136 IF (task(1, 2)) force_eval = force_eval .OR. do_forces
1138 IF (task(1, 1)) force_eval = force_eval .OR. do_efield2
1139 IF (task(3, 3)) force_eval = force_eval .OR. do_efield0
1140 IF (task(2, 2) .OR. task(3, 1) .OR. force_eval)
THEN
1141 force_eval = do_stress
1144 tmp = rab(a)*rab(b)*fac_ij
1145 tij_ab(a, b) = 3.0_dp*tmp*f(2)
1146 IF (a == b) tij_ab(a, b) = tij_ab(a, b) - f(1)*fac_ij
1149 IF (task(2, 2) .OR. task(3, 1)) force_eval = force_eval .OR. do_forces
1151 IF (task(2, 2)) force_eval = force_eval .OR. do_efield2
1152 IF (task(3, 3)) force_eval = force_eval .OR. do_efield1
1153 IF (task(3, 2) .OR. force_eval)
THEN
1154 force_eval = do_stress
1158 tmp = rab(a)*rab(b)*rab(c)*fac_ij
1159 tij_abc(a, b, c) = -15.0_dp*tmp*f(3)
1160 tmp = 3.0_dp*f(2)*fac_ij
1161 IF (a == b) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(c)
1162 IF (a == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(b)
1163 IF (b == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(a)
1167 IF (task(3, 2)) force_eval = force_eval .OR. do_forces
1169 IF (task(3, 3) .OR. force_eval)
THEN
1170 force_eval = do_stress
1175 tmp = rab(a)*rab(b)*rab(c)*rab(d)*fac_ij
1176 tij_abcd(a, b, c, d) = 105.0_dp*tmp*f(4)
1177 tmp1 = 15.0_dp*f(3)*fac_ij
1178 tmp2 = 3.0_dp*f(2)*fac_ij
1180 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(c)*rab(d)
1181 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1184 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(d)
1185 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1187 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(c)
1189 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(d)
1190 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1192 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(c)
1193 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(b)
1198 IF (task(3, 3)) force_eval = force_eval .OR. do_forces
1200 IF (force_eval)
THEN
1201 force_eval = do_stress
1207 tmp = rab(a)*rab(b)*rab(c)*rab(d)*rab(e)*fac_ij
1208 tij_abcde(a, b, c, d, e) = -945.0_dp*tmp*f(5)
1209 tmp1 = 105.0_dp*f(4)*fac_ij
1210 tmp2 = 15.0_dp*f(3)*fac_ij
1212 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(c)*rab(d)*rab(e)
1213 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1214 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1215 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1218 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(d)*rab(e)
1219 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1220 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1221 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1224 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(e)
1225 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1226 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1227 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1230 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(d)
1231 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1232 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1233 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1236 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(d)*rab(e)
1237 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1240 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(e)
1241 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1244 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(d)
1245 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1247 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(e)
1248 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(d)
1249 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(c)
1267 IF (debug_this_module)
THEN
1275 IF (any(task(1, :)))
THEN
1276 ch_j = charges(atom_a)
1277 ch_i = charges(atom_b)
1279 IF (any(task(2, :)))
THEN
1280 dp_j = dipoles(:, atom_a)
1281 dp_i = dipoles(:, atom_b)
1283 IF (any(task(3, :)))
THEN
1284 qp_j = quadrupoles(:, :, atom_a)
1285 qp_i = quadrupoles(:, :, atom_b)
1287 IF (task(1, 1))
THEN
1289 eloc = eloc + ch_i*tij*ch_j
1291 IF (do_forces .OR. do_stress)
THEN
1292 fr(1) = fr(1) - ch_j*tij_a(1)*ch_i
1293 fr(2) = fr(2) - ch_j*tij_a(2)*ch_i
1294 fr(3) = fr(3) - ch_j*tij_a(3)*ch_i
1299 IF (do_efield0)
THEN
1300 ef0_i = ef0_i + tij*ch_j
1302 ef0_j = ef0_j + tij*ch_i
1305 IF (do_efield1)
THEN
1306 ef1_i(1) = ef1_i(1) - tij_a(1)*ch_j
1307 ef1_i(2) = ef1_i(2) - tij_a(2)*ch_j
1308 ef1_i(3) = ef1_i(3) - tij_a(3)*ch_j
1310 ef1_j(1) = ef1_j(1) + tij_a(1)*ch_i
1311 ef1_j(2) = ef1_j(2) + tij_a(2)*ch_i
1312 ef1_j(3) = ef1_j(3) + tij_a(3)*ch_i
1317 IF (do_efield2)
THEN
1318 ef2_i(1, 1) = ef2_i(1, 1) - tij_ab(1, 1)*ch_j
1319 ef2_i(2, 1) = ef2_i(2, 1) - tij_ab(2, 1)*ch_j
1320 ef2_i(3, 1) = ef2_i(3, 1) - tij_ab(3, 1)*ch_j
1321 ef2_i(1, 2) = ef2_i(1, 2) - tij_ab(1, 2)*ch_j
1322 ef2_i(2, 2) = ef2_i(2, 2) - tij_ab(2, 2)*ch_j
1323 ef2_i(3, 2) = ef2_i(3, 2) - tij_ab(3, 2)*ch_j
1324 ef2_i(1, 3) = ef2_i(1, 3) - tij_ab(1, 3)*ch_j
1325 ef2_i(2, 3) = ef2_i(2, 3) - tij_ab(2, 3)*ch_j
1326 ef2_i(3, 3) = ef2_i(3, 3) - tij_ab(3, 3)*ch_j
1328 ef2_j(1, 1) = ef2_j(1, 1) - tij_ab(1, 1)*ch_i
1329 ef2_j(2, 1) = ef2_j(2, 1) - tij_ab(2, 1)*ch_i
1330 ef2_j(3, 1) = ef2_j(3, 1) - tij_ab(3, 1)*ch_i
1331 ef2_j(1, 2) = ef2_j(1, 2) - tij_ab(1, 2)*ch_i
1332 ef2_j(2, 2) = ef2_j(2, 2) - tij_ab(2, 2)*ch_i
1333 ef2_j(3, 2) = ef2_j(3, 2) - tij_ab(3, 2)*ch_i
1334 ef2_j(1, 3) = ef2_j(1, 3) - tij_ab(1, 3)*ch_i
1335 ef2_j(2, 3) = ef2_j(2, 3) - tij_ab(2, 3)*ch_i
1336 ef2_j(3, 3) = ef2_j(3, 3) - tij_ab(3, 3)*ch_i
1340 IF (task(2, 2))
THEN
1342 tmp = -(dp_i(1)*(tij_ab(1, 1)*dp_j(1) + &
1343 tij_ab(2, 1)*dp_j(2) + &
1344 tij_ab(3, 1)*dp_j(3)) + &
1345 dp_i(2)*(tij_ab(1, 2)*dp_j(1) + &
1346 tij_ab(2, 2)*dp_j(2) + &
1347 tij_ab(3, 2)*dp_j(3)) + &
1348 dp_i(3)*(tij_ab(1, 3)*dp_j(1) + &
1349 tij_ab(2, 3)*dp_j(2) + &
1350 tij_ab(3, 3)*dp_j(3)))
1353 IF (do_forces .OR. do_stress)
THEN
1355 fr(k) = fr(k) + dp_i(1)*(tij_abc(1, 1, k)*dp_j(1) + &
1356 tij_abc(2, 1, k)*dp_j(2) + &
1357 tij_abc(3, 1, k)*dp_j(3)) &
1358 + dp_i(2)*(tij_abc(1, 2, k)*dp_j(1) + &
1359 tij_abc(2, 2, k)*dp_j(2) + &
1360 tij_abc(3, 2, k)*dp_j(3)) &
1361 + dp_i(3)*(tij_abc(1, 3, k)*dp_j(1) + &
1362 tij_abc(2, 3, k)*dp_j(2) + &
1363 tij_abc(3, 3, k)*dp_j(3))
1369 IF (do_efield0)
THEN
1370 ef0_i = ef0_i - (tij_a(1)*dp_j(1) + &
1371 tij_a(2)*dp_j(2) + &
1374 ef0_j = ef0_j + (tij_a(1)*dp_i(1) + &
1375 tij_a(2)*dp_i(2) + &
1379 IF (do_efield1)
THEN
1380 ef1_i(1) = ef1_i(1) + (tij_ab(1, 1)*dp_j(1) + &
1381 tij_ab(2, 1)*dp_j(2) + &
1382 tij_ab(3, 1)*dp_j(3))
1383 ef1_i(2) = ef1_i(2) + (tij_ab(1, 2)*dp_j(1) + &
1384 tij_ab(2, 2)*dp_j(2) + &
1385 tij_ab(3, 2)*dp_j(3))
1386 ef1_i(3) = ef1_i(3) + (tij_ab(1, 3)*dp_j(1) + &
1387 tij_ab(2, 3)*dp_j(2) + &
1388 tij_ab(3, 3)*dp_j(3))
1390 ef1_j(1) = ef1_j(1) + (tij_ab(1, 1)*dp_i(1) + &
1391 tij_ab(2, 1)*dp_i(2) + &
1392 tij_ab(3, 1)*dp_i(3))
1393 ef1_j(2) = ef1_j(2) + (tij_ab(1, 2)*dp_i(1) + &
1394 tij_ab(2, 2)*dp_i(2) + &
1395 tij_ab(3, 2)*dp_i(3))
1396 ef1_j(3) = ef1_j(3) + (tij_ab(1, 3)*dp_i(1) + &
1397 tij_ab(2, 3)*dp_i(2) + &
1398 tij_ab(3, 3)*dp_i(3))
1401 IF (do_efield2)
THEN
1402 ef2_i(1, 1) = ef2_i(1, 1) + (tij_abc(1, 1, 1)*dp_j(1) + &
1403 tij_abc(2, 1, 1)*dp_j(2) + &
1404 tij_abc(3, 1, 1)*dp_j(3))
1405 ef2_i(1, 2) = ef2_i(1, 2) + (tij_abc(1, 1, 2)*dp_j(1) + &
1406 tij_abc(2, 1, 2)*dp_j(2) + &
1407 tij_abc(3, 1, 2)*dp_j(3))
1408 ef2_i(1, 3) = ef2_i(1, 3) + (tij_abc(1, 1, 3)*dp_j(1) + &
1409 tij_abc(2, 1, 3)*dp_j(2) + &
1410 tij_abc(3, 1, 3)*dp_j(3))
1411 ef2_i(2, 1) = ef2_i(2, 1) + (tij_abc(1, 2, 1)*dp_j(1) + &
1412 tij_abc(2, 2, 1)*dp_j(2) + &
1413 tij_abc(3, 2, 1)*dp_j(3))
1414 ef2_i(2, 2) = ef2_i(2, 2) + (tij_abc(1, 2, 2)*dp_j(1) + &
1415 tij_abc(2, 2, 2)*dp_j(2) + &
1416 tij_abc(3, 2, 2)*dp_j(3))
1417 ef2_i(2, 3) = ef2_i(2, 3) + (tij_abc(1, 2, 3)*dp_j(1) + &
1418 tij_abc(2, 2, 3)*dp_j(2) + &
1419 tij_abc(3, 2, 3)*dp_j(3))
1420 ef2_i(3, 1) = ef2_i(3, 1) + (tij_abc(1, 3, 1)*dp_j(1) + &
1421 tij_abc(2, 3, 1)*dp_j(2) + &
1422 tij_abc(3, 3, 1)*dp_j(3))
1423 ef2_i(3, 2) = ef2_i(3, 2) + (tij_abc(1, 3, 2)*dp_j(1) + &
1424 tij_abc(2, 3, 2)*dp_j(2) + &
1425 tij_abc(3, 3, 2)*dp_j(3))
1426 ef2_i(3, 3) = ef2_i(3, 3) + (tij_abc(1, 3, 3)*dp_j(1) + &
1427 tij_abc(2, 3, 3)*dp_j(2) + &
1428 tij_abc(3, 3, 3)*dp_j(3))
1430 ef2_j(1, 1) = ef2_j(1, 1) - (tij_abc(1, 1, 1)*dp_i(1) + &
1431 tij_abc(2, 1, 1)*dp_i(2) + &
1432 tij_abc(3, 1, 1)*dp_i(3))
1433 ef2_j(1, 2) = ef2_j(1, 2) - (tij_abc(1, 1, 2)*dp_i(1) + &
1434 tij_abc(2, 1, 2)*dp_i(2) + &
1435 tij_abc(3, 1, 2)*dp_i(3))
1436 ef2_j(1, 3) = ef2_j(1, 3) - (tij_abc(1, 1, 3)*dp_i(1) + &
1437 tij_abc(2, 1, 3)*dp_i(2) + &
1438 tij_abc(3, 1, 3)*dp_i(3))
1439 ef2_j(2, 1) = ef2_j(2, 1) - (tij_abc(1, 2, 1)*dp_i(1) + &
1440 tij_abc(2, 2, 1)*dp_i(2) + &
1441 tij_abc(3, 2, 1)*dp_i(3))
1442 ef2_j(2, 2) = ef2_j(2, 2) - (tij_abc(1, 2, 2)*dp_i(1) + &
1443 tij_abc(2, 2, 2)*dp_i(2) + &
1444 tij_abc(3, 2, 2)*dp_i(3))
1445 ef2_j(2, 3) = ef2_j(2, 3) - (tij_abc(1, 2, 3)*dp_i(1) + &
1446 tij_abc(2, 2, 3)*dp_i(2) + &
1447 tij_abc(3, 2, 3)*dp_i(3))
1448 ef2_j(3, 1) = ef2_j(3, 1) - (tij_abc(1, 3, 1)*dp_i(1) + &
1449 tij_abc(2, 3, 1)*dp_i(2) + &
1450 tij_abc(3, 3, 1)*dp_i(3))
1451 ef2_j(3, 2) = ef2_j(3, 2) - (tij_abc(1, 3, 2)*dp_i(1) + &
1452 tij_abc(2, 3, 2)*dp_i(2) + &
1453 tij_abc(3, 3, 2)*dp_i(3))
1454 ef2_j(3, 3) = ef2_j(3, 3) - (tij_abc(1, 3, 3)*dp_i(1) + &
1455 tij_abc(2, 3, 3)*dp_i(2) + &
1456 tij_abc(3, 3, 3)*dp_i(3))
1460 IF (task(2, 1))
THEN
1462 tmp = ch_j*(tij_a(1)*dp_i(1) + &
1463 tij_a(2)*dp_i(2) + &
1465 - ch_i*(tij_a(1)*dp_j(1) + &
1466 tij_a(2)*dp_j(2) + &
1470 IF (do_forces .OR. do_stress)
THEN
1472 fr(k) = fr(k) - ch_j*(tij_ab(1, k)*dp_i(1) + &
1473 tij_ab(2, k)*dp_i(2) + &
1474 tij_ab(3, k)*dp_i(3)) &
1475 + ch_i*(tij_ab(1, k)*dp_j(1) + &
1476 tij_ab(2, k)*dp_j(2) + &
1477 tij_ab(3, k)*dp_j(3))
1481 IF (task(3, 3))
THEN
1484 tmp11 = qp_i(1, 1)*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
1485 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
1486 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
1487 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
1488 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
1489 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
1490 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
1491 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
1492 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
1493 tmp21 = qp_i(2, 1)*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
1494 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
1495 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
1496 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
1497 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
1498 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
1499 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
1500 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
1501 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
1502 tmp31 = qp_i(3, 1)*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
1503 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
1504 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
1505 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
1506 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
1507 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
1508 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
1509 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
1510 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
1511 tmp22 = qp_i(2, 2)*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
1512 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
1513 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
1514 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
1515 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
1516 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
1517 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
1518 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
1519 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
1520 tmp32 = qp_i(3, 2)*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
1521 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
1522 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
1523 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
1524 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
1525 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
1526 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
1527 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
1528 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
1529 tmp33 = qp_i(3, 3)*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
1530 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
1531 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
1532 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
1533 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
1534 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
1535 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
1536 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
1537 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
1541 tmp = tmp11 + tmp12 + tmp13 + &
1542 tmp21 + tmp22 + tmp23 + &
1543 tmp31 + tmp32 + tmp33
1545 eloc = eloc +
fac*tmp
1547 IF (do_forces .OR. do_stress)
THEN
1549 tmp11 = qp_i(1, 1)*(tij_abcde(1, 1, 1, 1, k)*qp_j(1, 1) + &
1550 tij_abcde(2, 1, 1, 1, k)*qp_j(2, 1) + &
1551 tij_abcde(3, 1, 1, 1, k)*qp_j(3, 1) + &
1552 tij_abcde(1, 2, 1, 1, k)*qp_j(1, 2) + &
1553 tij_abcde(2, 2, 1, 1, k)*qp_j(2, 2) + &
1554 tij_abcde(3, 2, 1, 1, k)*qp_j(3, 2) + &
1555 tij_abcde(1, 3, 1, 1, k)*qp_j(1, 3) + &
1556 tij_abcde(2, 3, 1, 1, k)*qp_j(2, 3) + &
1557 tij_abcde(3, 3, 1, 1, k)*qp_j(3, 3))
1558 tmp21 = qp_i(2, 1)*(tij_abcde(1, 1, 2, 1, k)*qp_j(1, 1) + &
1559 tij_abcde(2, 1, 2, 1, k)*qp_j(2, 1) + &
1560 tij_abcde(3, 1, 2, 1, k)*qp_j(3, 1) + &
1561 tij_abcde(1, 2, 2, 1, k)*qp_j(1, 2) + &
1562 tij_abcde(2, 2, 2, 1, k)*qp_j(2, 2) + &
1563 tij_abcde(3, 2, 2, 1, k)*qp_j(3, 2) + &
1564 tij_abcde(1, 3, 2, 1, k)*qp_j(1, 3) + &
1565 tij_abcde(2, 3, 2, 1, k)*qp_j(2, 3) + &
1566 tij_abcde(3, 3, 2, 1, k)*qp_j(3, 3))
1567 tmp31 = qp_i(3, 1)*(tij_abcde(1, 1, 3, 1, k)*qp_j(1, 1) + &
1568 tij_abcde(2, 1, 3, 1, k)*qp_j(2, 1) + &
1569 tij_abcde(3, 1, 3, 1, k)*qp_j(3, 1) + &
1570 tij_abcde(1, 2, 3, 1, k)*qp_j(1, 2) + &
1571 tij_abcde(2, 2, 3, 1, k)*qp_j(2, 2) + &
1572 tij_abcde(3, 2, 3, 1, k)*qp_j(3, 2) + &
1573 tij_abcde(1, 3, 3, 1, k)*qp_j(1, 3) + &
1574 tij_abcde(2, 3, 3, 1, k)*qp_j(2, 3) + &
1575 tij_abcde(3, 3, 3, 1, k)*qp_j(3, 3))
1576 tmp22 = qp_i(2, 2)*(tij_abcde(1, 1, 2, 2, k)*qp_j(1, 1) + &
1577 tij_abcde(2, 1, 2, 2, k)*qp_j(2, 1) + &
1578 tij_abcde(3, 1, 2, 2, k)*qp_j(3, 1) + &
1579 tij_abcde(1, 2, 2, 2, k)*qp_j(1, 2) + &
1580 tij_abcde(2, 2, 2, 2, k)*qp_j(2, 2) + &
1581 tij_abcde(3, 2, 2, 2, k)*qp_j(3, 2) + &
1582 tij_abcde(1, 3, 2, 2, k)*qp_j(1, 3) + &
1583 tij_abcde(2, 3, 2, 2, k)*qp_j(2, 3) + &
1584 tij_abcde(3, 3, 2, 2, k)*qp_j(3, 3))
1585 tmp32 = qp_i(3, 2)*(tij_abcde(1, 1, 3, 2, k)*qp_j(1, 1) + &
1586 tij_abcde(2, 1, 3, 2, k)*qp_j(2, 1) + &
1587 tij_abcde(3, 1, 3, 2, k)*qp_j(3, 1) + &
1588 tij_abcde(1, 2, 3, 2, k)*qp_j(1, 2) + &
1589 tij_abcde(2, 2, 3, 2, k)*qp_j(2, 2) + &
1590 tij_abcde(3, 2, 3, 2, k)*qp_j(3, 2) + &
1591 tij_abcde(1, 3, 3, 2, k)*qp_j(1, 3) + &
1592 tij_abcde(2, 3, 3, 2, k)*qp_j(2, 3) + &
1593 tij_abcde(3, 3, 3, 2, k)*qp_j(3, 3))
1594 tmp33 = qp_i(3, 3)*(tij_abcde(1, 1, 3, 3, k)*qp_j(1, 1) + &
1595 tij_abcde(2, 1, 3, 3, k)*qp_j(2, 1) + &
1596 tij_abcde(3, 1, 3, 3, k)*qp_j(3, 1) + &
1597 tij_abcde(1, 2, 3, 3, k)*qp_j(1, 2) + &
1598 tij_abcde(2, 2, 3, 3, k)*qp_j(2, 2) + &
1599 tij_abcde(3, 2, 3, 3, k)*qp_j(3, 2) + &
1600 tij_abcde(1, 3, 3, 3, k)*qp_j(1, 3) + &
1601 tij_abcde(2, 3, 3, 3, k)*qp_j(2, 3) + &
1602 tij_abcde(3, 3, 3, 3, k)*qp_j(3, 3))
1606 fr(k) = fr(k) -
fac*(tmp11 + tmp12 + tmp13 + &
1607 tmp21 + tmp22 + tmp23 + &
1608 tmp31 + tmp32 + tmp33)
1615 IF (do_efield0)
THEN
1616 ef0_i = ef0_i +
fac*(tij_ab(1, 1)*qp_j(1, 1) + &
1617 tij_ab(2, 1)*qp_j(2, 1) + &
1618 tij_ab(3, 1)*qp_j(3, 1) + &
1619 tij_ab(1, 2)*qp_j(1, 2) + &
1620 tij_ab(2, 2)*qp_j(2, 2) + &
1621 tij_ab(3, 2)*qp_j(3, 2) + &
1622 tij_ab(1, 3)*qp_j(1, 3) + &
1623 tij_ab(2, 3)*qp_j(2, 3) + &
1624 tij_ab(3, 3)*qp_j(3, 3))
1626 ef0_j = ef0_j +
fac*(tij_ab(1, 1)*qp_i(1, 1) + &
1627 tij_ab(2, 1)*qp_i(2, 1) + &
1628 tij_ab(3, 1)*qp_i(3, 1) + &
1629 tij_ab(1, 2)*qp_i(1, 2) + &
1630 tij_ab(2, 2)*qp_i(2, 2) + &
1631 tij_ab(3, 2)*qp_i(3, 2) + &
1632 tij_ab(1, 3)*qp_i(1, 3) + &
1633 tij_ab(2, 3)*qp_i(2, 3) + &
1634 tij_ab(3, 3)*qp_i(3, 3))
1637 IF (do_efield1)
THEN
1638 ef1_i(1) = ef1_i(1) -
fac*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
1639 tij_abc(2, 1, 1)*qp_j(2, 1) + &
1640 tij_abc(3, 1, 1)*qp_j(3, 1) + &
1641 tij_abc(1, 2, 1)*qp_j(1, 2) + &
1642 tij_abc(2, 2, 1)*qp_j(2, 2) + &
1643 tij_abc(3, 2, 1)*qp_j(3, 2) + &
1644 tij_abc(1, 3, 1)*qp_j(1, 3) + &
1645 tij_abc(2, 3, 1)*qp_j(2, 3) + &
1646 tij_abc(3, 3, 1)*qp_j(3, 3))
1647 ef1_i(2) = ef1_i(2) -
fac*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
1648 tij_abc(2, 1, 2)*qp_j(2, 1) + &
1649 tij_abc(3, 1, 2)*qp_j(3, 1) + &
1650 tij_abc(1, 2, 2)*qp_j(1, 2) + &
1651 tij_abc(2, 2, 2)*qp_j(2, 2) + &
1652 tij_abc(3, 2, 2)*qp_j(3, 2) + &
1653 tij_abc(1, 3, 2)*qp_j(1, 3) + &
1654 tij_abc(2, 3, 2)*qp_j(2, 3) + &
1655 tij_abc(3, 3, 2)*qp_j(3, 3))
1656 ef1_i(3) = ef1_i(3) -
fac*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
1657 tij_abc(2, 1, 3)*qp_j(2, 1) + &
1658 tij_abc(3, 1, 3)*qp_j(3, 1) + &
1659 tij_abc(1, 2, 3)*qp_j(1, 2) + &
1660 tij_abc(2, 2, 3)*qp_j(2, 2) + &
1661 tij_abc(3, 2, 3)*qp_j(3, 2) + &
1662 tij_abc(1, 3, 3)*qp_j(1, 3) + &
1663 tij_abc(2, 3, 3)*qp_j(2, 3) + &
1664 tij_abc(3, 3, 3)*qp_j(3, 3))
1666 ef1_j(1) = ef1_j(1) +
fac*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
1667 tij_abc(2, 1, 1)*qp_i(2, 1) + &
1668 tij_abc(3, 1, 1)*qp_i(3, 1) + &
1669 tij_abc(1, 2, 1)*qp_i(1, 2) + &
1670 tij_abc(2, 2, 1)*qp_i(2, 2) + &
1671 tij_abc(3, 2, 1)*qp_i(3, 2) + &
1672 tij_abc(1, 3, 1)*qp_i(1, 3) + &
1673 tij_abc(2, 3, 1)*qp_i(2, 3) + &
1674 tij_abc(3, 3, 1)*qp_i(3, 3))
1675 ef1_j(2) = ef1_j(2) +
fac*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
1676 tij_abc(2, 1, 2)*qp_i(2, 1) + &
1677 tij_abc(3, 1, 2)*qp_i(3, 1) + &
1678 tij_abc(1, 2, 2)*qp_i(1, 2) + &
1679 tij_abc(2, 2, 2)*qp_i(2, 2) + &
1680 tij_abc(3, 2, 2)*qp_i(3, 2) + &
1681 tij_abc(1, 3, 2)*qp_i(1, 3) + &
1682 tij_abc(2, 3, 2)*qp_i(2, 3) + &
1683 tij_abc(3, 3, 2)*qp_i(3, 3))
1684 ef1_j(3) = ef1_j(3) +
fac*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
1685 tij_abc(2, 1, 3)*qp_i(2, 1) + &
1686 tij_abc(3, 1, 3)*qp_i(3, 1) + &
1687 tij_abc(1, 2, 3)*qp_i(1, 2) + &
1688 tij_abc(2, 2, 3)*qp_i(2, 2) + &
1689 tij_abc(3, 2, 3)*qp_i(3, 2) + &
1690 tij_abc(1, 3, 3)*qp_i(1, 3) + &
1691 tij_abc(2, 3, 3)*qp_i(2, 3) + &
1692 tij_abc(3, 3, 3)*qp_i(3, 3))
1695 IF (do_efield2)
THEN
1696 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
1697 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
1698 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
1699 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
1700 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
1701 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
1702 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
1703 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
1704 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
1705 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
1706 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
1707 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
1708 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
1709 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
1710 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
1711 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
1712 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
1713 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
1714 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
1715 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
1716 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
1717 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
1718 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
1719 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
1720 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
1721 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
1722 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
1723 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
1724 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
1725 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
1726 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
1727 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
1728 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
1729 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
1730 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
1731 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
1732 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
1733 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
1734 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
1735 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
1736 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
1737 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
1738 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
1739 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
1740 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
1741 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
1742 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
1743 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
1744 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
1745 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
1746 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
1747 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
1748 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
1749 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
1751 ef2_i(1, 1) = ef2_i(1, 1) - tmp11
1752 ef2_i(1, 2) = ef2_i(1, 2) - tmp12
1753 ef2_i(1, 3) = ef2_i(1, 3) - tmp13
1754 ef2_i(2, 1) = ef2_i(2, 1) - tmp12
1755 ef2_i(2, 2) = ef2_i(2, 2) - tmp22
1756 ef2_i(2, 3) = ef2_i(2, 3) - tmp23
1757 ef2_i(3, 1) = ef2_i(3, 1) - tmp13
1758 ef2_i(3, 2) = ef2_i(3, 2) - tmp23
1759 ef2_i(3, 3) = ef2_i(3, 3) - tmp33
1761 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_i(1, 1) + &
1762 tij_abcd(2, 1, 1, 1)*qp_i(2, 1) + &
1763 tij_abcd(3, 1, 1, 1)*qp_i(3, 1) + &
1764 tij_abcd(1, 2, 1, 1)*qp_i(1, 2) + &
1765 tij_abcd(2, 2, 1, 1)*qp_i(2, 2) + &
1766 tij_abcd(3, 2, 1, 1)*qp_i(3, 2) + &
1767 tij_abcd(1, 3, 1, 1)*qp_i(1, 3) + &
1768 tij_abcd(2, 3, 1, 1)*qp_i(2, 3) + &
1769 tij_abcd(3, 3, 1, 1)*qp_i(3, 3))
1770 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_i(1, 1) + &
1771 tij_abcd(2, 1, 1, 2)*qp_i(2, 1) + &
1772 tij_abcd(3, 1, 1, 2)*qp_i(3, 1) + &
1773 tij_abcd(1, 2, 1, 2)*qp_i(1, 2) + &
1774 tij_abcd(2, 2, 1, 2)*qp_i(2, 2) + &
1775 tij_abcd(3, 2, 1, 2)*qp_i(3, 2) + &
1776 tij_abcd(1, 3, 1, 2)*qp_i(1, 3) + &
1777 tij_abcd(2, 3, 1, 2)*qp_i(2, 3) + &
1778 tij_abcd(3, 3, 1, 2)*qp_i(3, 3))
1779 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_i(1, 1) + &
1780 tij_abcd(2, 1, 1, 3)*qp_i(2, 1) + &
1781 tij_abcd(3, 1, 1, 3)*qp_i(3, 1) + &
1782 tij_abcd(1, 2, 1, 3)*qp_i(1, 2) + &
1783 tij_abcd(2, 2, 1, 3)*qp_i(2, 2) + &
1784 tij_abcd(3, 2, 1, 3)*qp_i(3, 2) + &
1785 tij_abcd(1, 3, 1, 3)*qp_i(1, 3) + &
1786 tij_abcd(2, 3, 1, 3)*qp_i(2, 3) + &
1787 tij_abcd(3, 3, 1, 3)*qp_i(3, 3))
1788 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_i(1, 1) + &
1789 tij_abcd(2, 1, 2, 2)*qp_i(2, 1) + &
1790 tij_abcd(3, 1, 2, 2)*qp_i(3, 1) + &
1791 tij_abcd(1, 2, 2, 2)*qp_i(1, 2) + &
1792 tij_abcd(2, 2, 2, 2)*qp_i(2, 2) + &
1793 tij_abcd(3, 2, 2, 2)*qp_i(3, 2) + &
1794 tij_abcd(1, 3, 2, 2)*qp_i(1, 3) + &
1795 tij_abcd(2, 3, 2, 2)*qp_i(2, 3) + &
1796 tij_abcd(3, 3, 2, 2)*qp_i(3, 3))
1797 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_i(1, 1) + &
1798 tij_abcd(2, 1, 2, 3)*qp_i(2, 1) + &
1799 tij_abcd(3, 1, 2, 3)*qp_i(3, 1) + &
1800 tij_abcd(1, 2, 2, 3)*qp_i(1, 2) + &
1801 tij_abcd(2, 2, 2, 3)*qp_i(2, 2) + &
1802 tij_abcd(3, 2, 2, 3)*qp_i(3, 2) + &
1803 tij_abcd(1, 3, 2, 3)*qp_i(1, 3) + &
1804 tij_abcd(2, 3, 2, 3)*qp_i(2, 3) + &
1805 tij_abcd(3, 3, 2, 3)*qp_i(3, 3))
1806 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_i(1, 1) + &
1807 tij_abcd(2, 1, 3, 3)*qp_i(2, 1) + &
1808 tij_abcd(3, 1, 3, 3)*qp_i(3, 1) + &
1809 tij_abcd(1, 2, 3, 3)*qp_i(1, 2) + &
1810 tij_abcd(2, 2, 3, 3)*qp_i(2, 2) + &
1811 tij_abcd(3, 2, 3, 3)*qp_i(3, 2) + &
1812 tij_abcd(1, 3, 3, 3)*qp_i(1, 3) + &
1813 tij_abcd(2, 3, 3, 3)*qp_i(2, 3) + &
1814 tij_abcd(3, 3, 3, 3)*qp_i(3, 3))
1816 ef2_j(1, 1) = ef2_j(1, 1) - tmp11
1817 ef2_j(1, 2) = ef2_j(1, 2) - tmp12
1818 ef2_j(1, 3) = ef2_j(1, 3) - tmp13
1819 ef2_j(2, 1) = ef2_j(2, 1) - tmp12
1820 ef2_j(2, 2) = ef2_j(2, 2) - tmp22
1821 ef2_j(2, 3) = ef2_j(2, 3) - tmp23
1822 ef2_j(3, 1) = ef2_j(3, 1) - tmp13
1823 ef2_j(3, 2) = ef2_j(3, 2) - tmp23
1824 ef2_j(3, 3) = ef2_j(3, 3) - tmp33
1828 IF (task(3, 2))
THEN
1832 tmp_ij = dp_i(1)*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
1833 tij_abc(2, 1, 1)*qp_j(2, 1) + &
1834 tij_abc(3, 1, 1)*qp_j(3, 1) + &
1835 tij_abc(1, 2, 1)*qp_j(1, 2) + &
1836 tij_abc(2, 2, 1)*qp_j(2, 2) + &
1837 tij_abc(3, 2, 1)*qp_j(3, 2) + &
1838 tij_abc(1, 3, 1)*qp_j(1, 3) + &
1839 tij_abc(2, 3, 1)*qp_j(2, 3) + &
1840 tij_abc(3, 3, 1)*qp_j(3, 3)) + &
1841 dp_i(2)*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
1842 tij_abc(2, 1, 2)*qp_j(2, 1) + &
1843 tij_abc(3, 1, 2)*qp_j(3, 1) + &
1844 tij_abc(1, 2, 2)*qp_j(1, 2) + &
1845 tij_abc(2, 2, 2)*qp_j(2, 2) + &
1846 tij_abc(3, 2, 2)*qp_j(3, 2) + &
1847 tij_abc(1, 3, 2)*qp_j(1, 3) + &
1848 tij_abc(2, 3, 2)*qp_j(2, 3) + &
1849 tij_abc(3, 3, 2)*qp_j(3, 3)) + &
1850 dp_i(3)*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
1851 tij_abc(2, 1, 3)*qp_j(2, 1) + &
1852 tij_abc(3, 1, 3)*qp_j(3, 1) + &
1853 tij_abc(1, 2, 3)*qp_j(1, 2) + &
1854 tij_abc(2, 2, 3)*qp_j(2, 2) + &
1855 tij_abc(3, 2, 3)*qp_j(3, 2) + &
1856 tij_abc(1, 3, 3)*qp_j(1, 3) + &
1857 tij_abc(2, 3, 3)*qp_j(2, 3) + &
1858 tij_abc(3, 3, 3)*qp_j(3, 3))
1861 tmp_ji = dp_j(1)*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
1862 tij_abc(2, 1, 1)*qp_i(2, 1) + &
1863 tij_abc(3, 1, 1)*qp_i(3, 1) + &
1864 tij_abc(1, 2, 1)*qp_i(1, 2) + &
1865 tij_abc(2, 2, 1)*qp_i(2, 2) + &
1866 tij_abc(3, 2, 1)*qp_i(3, 2) + &
1867 tij_abc(1, 3, 1)*qp_i(1, 3) + &
1868 tij_abc(2, 3, 1)*qp_i(2, 3) + &
1869 tij_abc(3, 3, 1)*qp_i(3, 3)) + &
1870 dp_j(2)*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
1871 tij_abc(2, 1, 2)*qp_i(2, 1) + &
1872 tij_abc(3, 1, 2)*qp_i(3, 1) + &
1873 tij_abc(1, 2, 2)*qp_i(1, 2) + &
1874 tij_abc(2, 2, 2)*qp_i(2, 2) + &
1875 tij_abc(3, 2, 2)*qp_i(3, 2) + &
1876 tij_abc(1, 3, 2)*qp_i(1, 3) + &
1877 tij_abc(2, 3, 2)*qp_i(2, 3) + &
1878 tij_abc(3, 3, 2)*qp_i(3, 3)) + &
1879 dp_j(3)*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
1880 tij_abc(2, 1, 3)*qp_i(2, 1) + &
1881 tij_abc(3, 1, 3)*qp_i(3, 1) + &
1882 tij_abc(1, 2, 3)*qp_i(1, 2) + &
1883 tij_abc(2, 2, 3)*qp_i(2, 2) + &
1884 tij_abc(3, 2, 3)*qp_i(3, 2) + &
1885 tij_abc(1, 3, 3)*qp_i(1, 3) + &
1886 tij_abc(2, 3, 3)*qp_i(2, 3) + &
1887 tij_abc(3, 3, 3)*qp_i(3, 3))
1889 tmp =
fac*(tmp_ij - tmp_ji)
1891 IF (do_forces .OR. do_stress)
THEN
1894 tmp_ij = dp_i(1)*(tij_abcd(1, 1, 1, k)*qp_j(1, 1) + &
1895 tij_abcd(2, 1, 1, k)*qp_j(2, 1) + &
1896 tij_abcd(3, 1, 1, k)*qp_j(3, 1) + &
1897 tij_abcd(1, 2, 1, k)*qp_j(1, 2) + &
1898 tij_abcd(2, 2, 1, k)*qp_j(2, 2) + &
1899 tij_abcd(3, 2, 1, k)*qp_j(3, 2) + &
1900 tij_abcd(1, 3, 1, k)*qp_j(1, 3) + &
1901 tij_abcd(2, 3, 1, k)*qp_j(2, 3) + &
1902 tij_abcd(3, 3, 1, k)*qp_j(3, 3)) + &
1903 dp_i(2)*(tij_abcd(1, 1, 2, k)*qp_j(1, 1) + &
1904 tij_abcd(2, 1, 2, k)*qp_j(2, 1) + &
1905 tij_abcd(3, 1, 2, k)*qp_j(3, 1) + &
1906 tij_abcd(1, 2, 2, k)*qp_j(1, 2) + &
1907 tij_abcd(2, 2, 2, k)*qp_j(2, 2) + &
1908 tij_abcd(3, 2, 2, k)*qp_j(3, 2) + &
1909 tij_abcd(1, 3, 2, k)*qp_j(1, 3) + &
1910 tij_abcd(2, 3, 2, k)*qp_j(2, 3) + &
1911 tij_abcd(3, 3, 2, k)*qp_j(3, 3)) + &
1912 dp_i(3)*(tij_abcd(1, 1, 3, k)*qp_j(1, 1) + &
1913 tij_abcd(2, 1, 3, k)*qp_j(2, 1) + &
1914 tij_abcd(3, 1, 3, k)*qp_j(3, 1) + &
1915 tij_abcd(1, 2, 3, k)*qp_j(1, 2) + &
1916 tij_abcd(2, 2, 3, k)*qp_j(2, 2) + &
1917 tij_abcd(3, 2, 3, k)*qp_j(3, 2) + &
1918 tij_abcd(1, 3, 3, k)*qp_j(1, 3) + &
1919 tij_abcd(2, 3, 3, k)*qp_j(2, 3) + &
1920 tij_abcd(3, 3, 3, k)*qp_j(3, 3))
1923 tmp_ji = dp_j(1)*(tij_abcd(1, 1, 1, k)*qp_i(1, 1) + &
1924 tij_abcd(2, 1, 1, k)*qp_i(2, 1) + &
1925 tij_abcd(3, 1, 1, k)*qp_i(3, 1) + &
1926 tij_abcd(1, 2, 1, k)*qp_i(1, 2) + &
1927 tij_abcd(2, 2, 1, k)*qp_i(2, 2) + &
1928 tij_abcd(3, 2, 1, k)*qp_i(3, 2) + &
1929 tij_abcd(1, 3, 1, k)*qp_i(1, 3) + &
1930 tij_abcd(2, 3, 1, k)*qp_i(2, 3) + &
1931 tij_abcd(3, 3, 1, k)*qp_i(3, 3)) + &
1932 dp_j(2)*(tij_abcd(1, 1, 2, k)*qp_i(1, 1) + &
1933 tij_abcd(2, 1, 2, k)*qp_i(2, 1) + &
1934 tij_abcd(3, 1, 2, k)*qp_i(3, 1) + &
1935 tij_abcd(1, 2, 2, k)*qp_i(1, 2) + &
1936 tij_abcd(2, 2, 2, k)*qp_i(2, 2) + &
1937 tij_abcd(3, 2, 2, k)*qp_i(3, 2) + &
1938 tij_abcd(1, 3, 2, k)*qp_i(1, 3) + &
1939 tij_abcd(2, 3, 2, k)*qp_i(2, 3) + &
1940 tij_abcd(3, 3, 2, k)*qp_i(3, 3)) + &
1941 dp_j(3)*(tij_abcd(1, 1, 3, k)*qp_i(1, 1) + &
1942 tij_abcd(2, 1, 3, k)*qp_i(2, 1) + &
1943 tij_abcd(3, 1, 3, k)*qp_i(3, 1) + &
1944 tij_abcd(1, 2, 3, k)*qp_i(1, 2) + &
1945 tij_abcd(2, 2, 3, k)*qp_i(2, 2) + &
1946 tij_abcd(3, 2, 3, k)*qp_i(3, 2) + &
1947 tij_abcd(1, 3, 3, k)*qp_i(1, 3) + &
1948 tij_abcd(2, 3, 3, k)*qp_i(2, 3) + &
1949 tij_abcd(3, 3, 3, k)*qp_i(3, 3))
1951 fr(k) = fr(k) -
fac*(tmp_ij - tmp_ji)
1955 IF (task(3, 1))
THEN
1960 tmp_ij = ch_i*(tij_ab(1, 1)*qp_j(1, 1) + &
1961 tij_ab(2, 1)*qp_j(2, 1) + &
1962 tij_ab(3, 1)*qp_j(3, 1) + &
1963 tij_ab(1, 2)*qp_j(1, 2) + &
1964 tij_ab(2, 2)*qp_j(2, 2) + &
1965 tij_ab(3, 2)*qp_j(3, 2) + &
1966 tij_ab(1, 3)*qp_j(1, 3) + &
1967 tij_ab(2, 3)*qp_j(2, 3) + &
1968 tij_ab(3, 3)*qp_j(3, 3))
1971 tmp_ji = ch_j*(tij_ab(1, 1)*qp_i(1, 1) + &
1972 tij_ab(2, 1)*qp_i(2, 1) + &
1973 tij_ab(3, 1)*qp_i(3, 1) + &
1974 tij_ab(1, 2)*qp_i(1, 2) + &
1975 tij_ab(2, 2)*qp_i(2, 2) + &
1976 tij_ab(3, 2)*qp_i(3, 2) + &
1977 tij_ab(1, 3)*qp_i(1, 3) + &
1978 tij_ab(2, 3)*qp_i(2, 3) + &
1979 tij_ab(3, 3)*qp_i(3, 3))
1981 eloc = eloc +
fac*(tmp_ij + tmp_ji)
1982 IF (do_forces .OR. do_stress)
THEN
1985 tmp_ij = ch_i*(tij_abc(1, 1, k)*qp_j(1, 1) + &
1986 tij_abc(2, 1, k)*qp_j(2, 1) + &
1987 tij_abc(3, 1, k)*qp_j(3, 1) + &
1988 tij_abc(1, 2, k)*qp_j(1, 2) + &
1989 tij_abc(2, 2, k)*qp_j(2, 2) + &
1990 tij_abc(3, 2, k)*qp_j(3, 2) + &
1991 tij_abc(1, 3, k)*qp_j(1, 3) + &
1992 tij_abc(2, 3, k)*qp_j(2, 3) + &
1993 tij_abc(3, 3, k)*qp_j(3, 3))
1996 tmp_ji = ch_j*(tij_abc(1, 1, k)*qp_i(1, 1) + &
1997 tij_abc(2, 1, k)*qp_i(2, 1) + &
1998 tij_abc(3, 1, k)*qp_i(3, 1) + &
1999 tij_abc(1, 2, k)*qp_i(1, 2) + &
2000 tij_abc(2, 2, k)*qp_i(2, 2) + &
2001 tij_abc(3, 2, k)*qp_i(3, 2) + &
2002 tij_abc(1, 3, k)*qp_i(1, 3) + &
2003 tij_abc(2, 3, k)*qp_i(2, 3) + &
2004 tij_abc(3, 3, k)*qp_i(3, 3))
2006 fr(k) = fr(k) -
fac*(tmp_ij + tmp_ji)
2013 IF (do_efield0)
THEN
2014 efield0(atom_a) = efield0(atom_a) + ef0_j
2016 efield0(atom_b) = efield0(atom_b) + ef0_i
2019 IF (do_efield1)
THEN
2020 efield1(1, atom_a) = efield1(1, atom_a) + ef1_j(1)
2021 efield1(2, atom_a) = efield1(2, atom_a) + ef1_j(2)
2022 efield1(3, atom_a) = efield1(3, atom_a) + ef1_j(3)
2024 efield1(1, atom_b) = efield1(1, atom_b) + ef1_i(1)
2025 efield1(2, atom_b) = efield1(2, atom_b) + ef1_i(2)
2026 efield1(3, atom_b) = efield1(3, atom_b) + ef1_i(3)
2029 IF (do_efield2)
THEN
2030 efield2(1, atom_a) = efield2(1, atom_a) + ef2_j(1, 1)
2031 efield2(2, atom_a) = efield2(2, atom_a) + ef2_j(1, 2)
2032 efield2(3, atom_a) = efield2(3, atom_a) + ef2_j(1, 3)
2033 efield2(4, atom_a) = efield2(4, atom_a) + ef2_j(2, 1)
2034 efield2(5, atom_a) = efield2(5, atom_a) + ef2_j(2, 2)
2035 efield2(6, atom_a) = efield2(6, atom_a) + ef2_j(2, 3)
2036 efield2(7, atom_a) = efield2(7, atom_a) + ef2_j(3, 1)
2037 efield2(8, atom_a) = efield2(8, atom_a) + ef2_j(3, 2)
2038 efield2(9, atom_a) = efield2(9, atom_a) + ef2_j(3, 3)
2040 efield2(1, atom_b) = efield2(1, atom_b) + ef2_i(1, 1)
2041 efield2(2, atom_b) = efield2(2, atom_b) + ef2_i(1, 2)
2042 efield2(3, atom_b) = efield2(3, atom_b) + ef2_i(1, 3)
2043 efield2(4, atom_b) = efield2(4, atom_b) + ef2_i(2, 1)
2044 efield2(5, atom_b) = efield2(5, atom_b) + ef2_i(2, 2)
2045 efield2(6, atom_b) = efield2(6, atom_b) + ef2_i(2, 3)
2046 efield2(7, atom_b) = efield2(7, atom_b) + ef2_i(3, 1)
2047 efield2(8, atom_b) = efield2(8, atom_b) + ef2_i(3, 2)
2048 efield2(9, atom_b) = efield2(9, atom_b) + ef2_i(3, 3)
2052 ptens11 = ptens11 + rab(1)*fr(1)
2053 ptens21 = ptens21 + rab(2)*fr(1)
2054 ptens31 = ptens31 + rab(3)*fr(1)
2055 ptens12 = ptens12 + rab(1)*fr(2)
2056 ptens22 = ptens22 + rab(2)*fr(2)
2057 ptens32 = ptens32 + rab(3)*fr(2)
2058 ptens13 = ptens13 + rab(1)*fr(3)
2059 ptens23 = ptens23 + rab(2)*fr(3)
2060 ptens33 = ptens33 + rab(3)*fr(3)
2064 IF (
PRESENT(integral_value))
THEN
2065 integral_value = eloc
static GRID_HOST_DEVICE double fac(const int i)
Factorial function, e.g. fac(5) = 5! = 120.
Defines the basic variable types.
integer, parameter, public dp
Provides the low level routines to build both the exchange and the Coulomb Fock matrices....
subroutine, public fock2c_r3(sepi, sepj, switch, pi_tot, fi_mat, pj_tot, fj_mat, factor, w, rp)
Construction of 2-center Fock Matrix - Coulomb Terms for the residual (1/R^3) integral part.
subroutine, public fock2_1el_ew(sep, rij, ks_block, p_block, ecore, itype, anag, se_int_control, se_taper, store_int_env)
Construction of 2-center 1-electron Fock Matrix (Ewald self term)
subroutine, public dfock2c(sepi, sepj, rij, switch, pi_tot, pj_tot, factor, anag, se_int_control, se_taper, force, delta)
Derivatives of 2-center Fock Matrix - Coulomb Terms.
subroutine, public fock2_1el_r3(sepi, sepj, ksi_block, ksj_block, pi_block, pj_block, e1b, e2a, ecore, rp)
Construction of 2-center 1-electron Fock Matrix for the residual (1/R^3) integral part.
subroutine, public dfock2c_r3(sepi, sepj, switch, pi_tot, pj_tot, factor, w, drp, force)
Derivatives of 2-center Fock Matrix - Coulomb Terms for the residual (1/R^3) integral part.
subroutine, public dfock2e(sepi, sepj, rij, switch, isize, pi_mat, factor, anag, se_int_control, se_taper, force, delta)
Derivatives of 2-center Fock Matrix - General Driver.
subroutine, public fock2c(sepi, sepj, rij, switch, pi_tot, fi_mat, pj_tot, fj_mat, factor, anag, se_int_control, se_taper, store_int_env)
Construction of 2-center Fock Matrix - Coulomb Terms.
subroutine, public fock1_2el(sep, p_tot, p_mat, f_mat, factor)
Construction of 1-center 2-electron Fock Matrix.
subroutine, public se_coulomb_ij_interaction(atom_a, atom_b, my_task, do_forces, do_efield, do_stress, charges, dipoles, quadrupoles, force_ab, efield0, efield1, efield2, rab2, rab, integral_value, ptens11, ptens12, ptens13, ptens21, ptens22, ptens23, ptens31, ptens32, ptens33)
Coulomb interaction multipolar correction.
subroutine, public dfock2_1el_r3(sepi, sepj, drp, pi_block, pj_block, force, e1b, e2a)
Derivatives of 2-center 1-electron Fock Matrix residual (1/R^3) integral part.
subroutine, public fock2_1el(sepi, sepj, rij, ksi_block, ksj_block, pi_block, pj_block, ecore, itype, anag, se_int_control, se_taper, store_int_env)
Construction of 2-center 1-electron Fock Matrix.
subroutine, public fock2e(sepi, sepj, rij, switch, isize, pi_mat, fi_mat, factor, anag, se_int_control, se_taper, store_int_env)
Construction of 2-center Fock Matrix - General Driver.
subroutine, public dfock2_1el(sepi, sepj, rij, pi_block, pj_block, itype, anag, se_int_control, se_taper, force, delta)
Derivatives of 2-center 1-electron Fock Matrix.
subroutine, public fock2c_ew(sep, rij, p_tot, f_mat, factor, anag, se_int_control, se_taper, store_int_env)
Construction of 2-center Fock Matrix - Coulomb Self Terms (Ewald)
Arrays of parameters used in the semi-empirical calculations \References Everywhere in this module TC...
integer, dimension(9), public se_orbital_pointer
Set of wrappers for semi-empirical analytical/numerical Integrals routines.
subroutine, public rotnuc(sepi, sepj, rij, e1b, e2a, itype, anag, se_int_control, se_taper, store_int_env)
wrapper for numerical/analytical 1 center 1 electron integrals
subroutine, public drotint(sepi, sepj, rij, dw, delta, anag, se_int_control, se_taper)
wrapper for numerical/analytical routines
subroutine, public rotint(sepi, sepj, rij, w, anag, se_int_control, se_taper, store_int_env)
wrapper for numerical/analytical 2 center 2 electrons integrals routines with possibility of incore s...
subroutine, public drotnuc(sepi, sepj, rij, de1b, de2a, itype, delta, anag, se_int_control, se_taper)
wrapper for numerical/analytical routines
Type to store integrals for semi-empirical calculations.
Definition of the semi empirical parameter types.