56#include "./base/base_uses.f90"
62 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
63 LOGICAL,
PRIVATE,
PARAMETER :: debug_r_space = .false.
64 LOGICAL,
PRIVATE,
PARAMETER :: debug_g_space = .false.
65 LOGICAL,
PRIVATE,
PARAMETER :: debug_e_field = .false.
66 LOGICAL,
PRIVATE,
PARAMETER :: debug_e_field_en = .false.
67 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'ewalds_multipole'
117 cell, particle_set, local_particles, energy_local, energy_glob, e_neut, e_self, &
118 task, do_correction_bonded, do_forces, do_stress, &
119 do_efield, radii, charges, dipoles, &
120 quadrupoles, forces_local, forces_glob, pv_local, pv_glob, efield0, efield1, &
121 efield2, iw, do_debug, atomic_kind_set, mm_section)
128 REAL(kind=
dp),
INTENT(INOUT) :: energy_local, energy_glob
129 REAL(kind=
dp),
INTENT(OUT) :: e_neut, e_self
130 LOGICAL,
DIMENSION(3),
INTENT(IN) :: task
131 LOGICAL,
INTENT(IN) :: do_correction_bonded, do_forces, &
133 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: radii, charges
134 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
135 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
136 POINTER :: quadrupoles
137 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
138 OPTIONAL :: forces_local, forces_glob, pv_local, &
140 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT),
OPTIONAL :: efield0
141 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(OUT), &
142 OPTIONAL :: efield1, efield2
143 INTEGER,
INTENT(IN) :: iw
144 LOGICAL,
INTENT(IN) :: do_debug
146 POINTER :: atomic_kind_set
149 CHARACTER(len=*),
PARAMETER :: routinen =
'ewald_multipole_evaluate'
151 INTEGER :: handle, i, j, size1, size2
152 LOGICAL :: check_debug, check_efield, check_forces, &
154 LOGICAL,
DIMENSION(3, 3) :: my_task
155 REAL(kind=
dp) :: e_bonded, e_bonded_t, e_rspace, &
156 e_rspace_t, energy_glob_t
157 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0_lr, efield0_sr
158 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1_lr, efield1_sr, efield2_lr, &
164 CALL timeset(routinen, handle)
165 cpassert(
ASSOCIATED(nonbond_env))
166 check_debug = (debug_this_module .OR. debug_r_space .OR. debug_g_space .OR. debug_e_field .OR. debug_e_field_en) &
167 .EQV. debug_this_module
168 cpassert(check_debug)
169 check_forces = do_forces .EQV. (
PRESENT(forces_local) .AND.
PRESENT(forces_glob))
170 cpassert(check_forces)
171 check_efield = do_efield .EQV. (
PRESENT(efield0) .OR.
PRESENT(efield1) .OR.
PRESENT(efield2))
172 cpassert(check_efield)
174 IF (debug_this_module .AND. do_debug)
THEN
176 IF (debug_r_space)
THEN
177 CALL debug_ewald_multipoles(ewald_env, ewald_pw, nonbond_env, cell, &
178 particle_set, local_particles, iw, debug_r_space)
179 cpabort(
"Debug Multipole Requested: Real Part!")
182 IF (debug_e_field)
THEN
183 cpassert(
PRESENT(atomic_kind_set))
184 cpassert(
PRESENT(mm_section))
185 CALL debug_ewald_multipoles_fields(ewald_env, ewald_pw, nonbond_env, &
186 cell, particle_set, local_particles, radii, charges, dipoles, &
187 quadrupoles, task, iw, atomic_kind_set, mm_section)
188 cpabort(
"Debug Multipole Requested: POT+EFIELDS+GRAD!")
192 IF (debug_e_field_en)
THEN
193 CALL debug_ewald_multipoles_fields2(ewald_env, ewald_pw, nonbond_env, &
194 cell, particle_set, local_particles, radii, charges, dipoles, &
195 quadrupoles, task, iw)
196 cpabort(
"Debug Multipole Requested: POT+EFIELDS+GRAD to give the correct energy!")
206 do_task(1) = any(charges /= 0.0_dp)
208 do_task(2) = any(dipoles /= 0.0_dp)
210 do_task(3) = any(quadrupoles /= 0.0_dp)
216 my_task(j, i) = do_task(i) .AND. do_task(j)
217 my_task(i, j) = my_task(j, i)
222 NULLIFY (efield0_sr, efield0_lr, efield1_sr, efield1_lr, efield2_sr, efield2_lr)
224 IF (
PRESENT(efield0))
THEN
225 size1 =
SIZE(efield0)
226 ALLOCATE (efield0_sr(size1))
227 ALLOCATE (efield0_lr(size1))
231 IF (
PRESENT(efield1))
THEN
232 size1 =
SIZE(efield1, 1)
233 size2 =
SIZE(efield1, 2)
234 ALLOCATE (efield1_sr(size1, size2))
235 ALLOCATE (efield1_lr(size1, size2))
239 IF (
PRESENT(efield2))
THEN
240 size1 =
SIZE(efield2, 1)
241 size2 =
SIZE(efield2, 2)
242 ALLOCATE (efield2_sr(size1, size2))
243 ALLOCATE (efield2_lr(size1, size2))
251 IF ((.NOT. debug_g_space) .AND. (nonbond_env%do_nonbonded))
THEN
255 CALL ewald_multipole_sr(nonbond_env, ewald_env, atomic_kind_set, &
256 particle_set, cell, e_rspace, my_task, &
257 do_forces, do_efield, do_stress, radii, charges, dipoles, quadrupoles, &
258 forces_glob, pv_glob, efield0_sr, efield1_sr, efield2_sr)
259 energy_glob = energy_glob + e_rspace
261 IF (do_correction_bonded)
THEN
264 CALL ewald_multipole_bonded(nonbond_env, particle_set, ewald_env, &
265 cell, e_bonded, my_task, do_forces, do_efield, do_stress, &
266 charges, dipoles, quadrupoles, forces_glob, pv_glob, &
267 efield0_sr, efield1_sr, efield2_sr)
268 energy_glob = energy_glob + e_bonded
274 energy_local = 0.0_dp
275 IF (.NOT. debug_r_space)
THEN
277 CALL ewald_multipole_lr(ewald_env, ewald_pw, cell, particle_set, &
278 local_particles, energy_local, my_task, do_forces, do_efield, do_stress, &
279 charges, dipoles, quadrupoles, forces_local, pv_local, efield0_lr, efield1_lr, &
283 CALL ewald_multipole_self(ewald_env, cell, local_particles, e_self, &
284 e_neut, my_task, do_efield, radii, charges, dipoles, quadrupoles, &
285 efield0_lr, efield1_lr, efield2_lr)
290 energy_glob_t = energy_glob
291 e_rspace_t = e_rspace
292 e_bonded_t = e_bonded
293 CALL group%sum(energy_glob_t)
294 CALL group%sum(e_rspace_t)
295 CALL group%sum(e_bonded_t)
297 CALL ewald_multipole_print(iw, energy_local, e_rspace_t, e_bonded_t, e_self, e_neut)
301 IF (
PRESENT(efield0))
THEN
302 efield0 = efield0_sr + efield0_lr
303 CALL group%sum(efield0)
304 DEALLOCATE (efield0_sr)
305 DEALLOCATE (efield0_lr)
307 IF (
PRESENT(efield1))
THEN
308 efield1 = efield1_sr + efield1_lr
309 CALL group%sum(efield1)
310 DEALLOCATE (efield1_sr)
311 DEALLOCATE (efield1_lr)
313 IF (
PRESENT(efield2))
THEN
314 efield2 = efield2_sr + efield2_lr
315 CALL group%sum(efield2)
316 DEALLOCATE (efield2_sr)
317 DEALLOCATE (efield2_lr)
320 CALL timestop(handle)
347 SUBROUTINE ewald_multipole_sr(nonbond_env, ewald_env, atomic_kind_set, &
348 particle_set, cell, energy, task, &
349 do_forces, do_efield, do_stress, radii, charges, dipoles, quadrupoles, &
350 forces, pv, efield0, efield1, efield2)
354 POINTER :: atomic_kind_set
357 REAL(kind=
dp),
INTENT(INOUT) :: energy
358 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
359 LOGICAL,
INTENT(IN) :: do_forces, do_efield, do_stress
360 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: radii, charges
361 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
362 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
363 POINTER :: quadrupoles
364 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
365 OPTIONAL :: forces, pv
366 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
367 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1, efield2
369 CHARACTER(len=*),
PARAMETER :: routinen =
'ewald_multipole_SR'
371 INTEGER :: a, atom_a, atom_b, b, c, d, e, handle, i, iend, igrp, ikind, ilist, ipair, &
372 istart, itype_ij, itype_ji, jkind, k, kind_a, kind_b, kk, nkdamp_ij, nkdamp_ji, nkinds, &
374 INTEGER,
DIMENSION(:, :),
POINTER ::
list
375 LOGICAL :: do_efield0, do_efield1, do_efield2, &
377 REAL(kind=
dp) :: alpha, beta, ch_i, ch_j, dampa_ij, dampa_ji, dampaexpi, dampaexpj, &
378 dampfac_ij, dampfac_ji, dampfuncdiffi, dampfuncdiffj, dampfunci, dampfuncj, dampsumfi, &
379 dampsumfj, ef0_i, ef0_j, eloc,
fac, fac_ij, factorial, ir, irab2, ptens11, ptens12, &
380 ptens13, ptens21, ptens22, ptens23, ptens31, ptens32, ptens33, r, rab2, rab2_max, radius, &
381 rcut, tij, tmp, tmp1, tmp11, tmp12, tmp13, tmp2, tmp21, tmp22, tmp23, tmp31, tmp32, &
382 tmp33, tmp_ij, tmp_ji, xf
383 REAL(kind=
dp),
DIMENSION(0:5) :: f
384 REAL(kind=
dp),
DIMENSION(3) :: cell_v, cvi, damptij_a, damptji_a, dp_i, &
385 dp_j, ef1_i, ef1_j, fr, rab, tij_a
386 REAL(kind=
dp),
DIMENSION(3, 3) :: damptij_ab, damptji_ab, ef2_i, ef2_j, &
388 REAL(kind=
dp),
DIMENSION(3, 3, 3) :: tij_abc
389 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3) :: tij_abcd
390 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3, 3) :: tij_abcde
394 TYPE(
pos_type),
DIMENSION(:),
POINTER :: r_last_update, r_last_update_pbc
396 CALL timeset(routinen, handle)
397 NULLIFY (nonbonded, r_last_update, r_last_update_pbc)
398 do_efield0 = do_efield .AND.
ASSOCIATED(efield0)
399 do_efield1 = do_efield .AND.
ASSOCIATED(efield1)
400 do_efield2 = do_efield .AND.
ASSOCIATED(efield2)
402 ptens11 = 0.0_dp; ptens12 = 0.0_dp; ptens13 = 0.0_dp
403 ptens21 = 0.0_dp; ptens22 = 0.0_dp; ptens23 = 0.0_dp
404 ptens31 = 0.0_dp; ptens32 = 0.0_dp; ptens33 = 0.0_dp
408 r_last_update=r_last_update, r_last_update_pbc=r_last_update_pbc)
411 IF (debug_r_space)
THEN
412 rab2_max = huge(0.0_dp)
415 lists:
DO ilist = 1, nonbonded%nlists
416 neighbor_kind_pair => nonbonded%neighbor_kind_pairs(ilist)
417 npairs = neighbor_kind_pair%npairs
418 IF (npairs == 0) cycle
419 list => neighbor_kind_pair%list
420 cvi = neighbor_kind_pair%cell_vector
421 cell_v = matmul(cell%hmat, cvi)
422 kind_group_loop:
DO igrp = 1, neighbor_kind_pair%ngrp_kind
423 istart = neighbor_kind_pair%grp_kind_start(igrp)
424 iend = neighbor_kind_pair%grp_kind_end(igrp)
425 ikind = neighbor_kind_pair%ij_kind(1, igrp)
426 jkind = neighbor_kind_pair%ij_kind(2, igrp)
437 IF (
PRESENT(atomic_kind_set))
THEN
438 IF (
ASSOCIATED(atomic_kind_set(jkind)%damping))
THEN
439 damping_ij = atomic_kind_set(jkind)%damping%damp(ikind)
440 itype_ij = damping_ij%itype
441 nkdamp_ij = damping_ij%order
442 dampa_ij = damping_ij%bij
443 dampfac_ij = damping_ij%cij
446 IF (
ASSOCIATED(atomic_kind_set(ikind)%damping))
THEN
447 damping_ji = atomic_kind_set(ikind)%damping%damp(jkind)
448 itype_ji = damping_ji%itype
449 nkdamp_ji = damping_ji%order
450 dampa_ji = damping_ji%bij
451 dampfac_ji = damping_ji%cij
455 pairs:
DO ipair = istart, iend
456 IF (ipair <= neighbor_kind_pair%nscale)
THEN
459 fac_ij = neighbor_kind_pair%ei_scale(ipair)
460 IF (fac_ij <= 0) cycle
464 atom_a =
list(1, ipair)
465 atom_b =
list(2, ipair)
466 kind_a = particle_set(atom_a)%atomic_kind%kind_number
467 kind_b = particle_set(atom_b)%atomic_kind%kind_number
468 IF (atom_a == atom_b) fac_ij = 0.5_dp
469 rab = r_last_update_pbc(atom_b)%r - r_last_update_pbc(atom_a)%r
471 rab2 = rab(1)**2 + rab(2)**2 + rab(3)**2
472 IF (rab2 <= rab2_max)
THEN
473 IF (
PRESENT(radii))
THEN
474 radius = sqrt(radii(atom_a)*radii(atom_a) + radii(atom_b)*radii(atom_b))
478 IF (radius > 0.0_dp)
THEN
484 tij_ab = huge(0.0_dp)
485 tij_abc = huge(0.0_dp)
486 tij_abcd = huge(0.0_dp)
487 tij_abcde = huge(0.0_dp)
494 IF (debug_this_module .AND. debug_r_space .AND. (.NOT. debug_g_space))
THEN
499 f(0) = erf(beta*r)*ir - erf(alpha*r)*ir
506 f(i) = irab2*(f(i - 1) + tmp1*((2.0_dp*alpha**2)**i)/(
fac*alpha) - tmp2*((2.0_dp*beta**2)**i)/(
fac*beta))
511 force_eval = do_stress
514 force_eval = do_forces .OR. do_efield1
516 IF (task(2, 2)) force_eval = force_eval .OR. do_efield0
517 IF (task(1, 2) .OR. force_eval)
THEN
518 force_eval = do_stress
519 tij_a = -rab*f(1)*fac_ij
520 IF (task(1, 2)) force_eval = force_eval .OR. do_forces
522 IF (task(1, 1)) force_eval = force_eval .OR. do_efield2
523 IF (task(3, 3)) force_eval = force_eval .OR. do_efield0
524 IF (task(2, 2) .OR. task(3, 1) .OR. force_eval)
THEN
525 force_eval = do_stress
528 tmp = rab(a)*rab(b)*fac_ij
529 tij_ab(a, b) = 3.0_dp*tmp*f(2)
530 IF (a == b) tij_ab(a, b) = tij_ab(a, b) - f(1)*fac_ij
533 IF (task(2, 2) .OR. task(3, 1)) force_eval = force_eval .OR. do_forces
535 IF (task(2, 2)) force_eval = force_eval .OR. do_efield2
536 IF (task(3, 3)) force_eval = force_eval .OR. do_efield1
537 IF (task(3, 2) .OR. force_eval)
THEN
538 force_eval = do_stress
542 tmp = rab(a)*rab(b)*rab(c)*fac_ij
543 tij_abc(a, b, c) = -15.0_dp*tmp*f(3)
544 tmp = 3.0_dp*f(2)*fac_ij
545 IF (a == b) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(c)
546 IF (a == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(b)
547 IF (b == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(a)
551 IF (task(3, 2)) force_eval = force_eval .OR. do_forces
553 IF (task(3, 3) .OR. force_eval)
THEN
554 force_eval = do_stress
559 tmp = rab(a)*rab(b)*rab(c)*rab(d)*fac_ij
560 tij_abcd(a, b, c, d) = 105.0_dp*tmp*f(4)
561 tmp1 = 15.0_dp*f(3)*fac_ij
562 tmp2 = 3.0_dp*f(2)*fac_ij
564 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(c)*rab(d)
565 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
568 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(d)
569 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
571 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(c)
573 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(d)
574 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
576 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(c)
577 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(b)
582 IF (task(3, 3)) force_eval = force_eval .OR. do_forces
585 force_eval = do_stress
591 tmp = rab(a)*rab(b)*rab(c)*rab(d)*rab(e)*fac_ij
592 tij_abcde(a, b, c, d, e) = -945.0_dp*tmp*f(5)
593 tmp1 = 105.0_dp*f(4)*fac_ij
594 tmp2 = 15.0_dp*f(3)*fac_ij
596 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(c)*rab(d)*rab(e)
597 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
598 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
599 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
602 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(d)*rab(e)
603 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
604 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
605 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
608 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(e)
609 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
610 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
611 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
614 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(d)
615 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
616 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
617 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
620 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(d)*rab(e)
621 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
624 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(e)
625 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
628 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(d)
629 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
631 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(e)
632 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(d)
633 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(c)
651 IF (debug_this_module)
THEN
659 IF (any(task(1, :)))
THEN
660 ch_j = charges(atom_a)
661 ch_i = charges(atom_b)
663 IF (any(task(2, :)))
THEN
664 dp_j = dipoles(:, atom_a)
665 dp_i = dipoles(:, atom_b)
667 IF (any(task(3, :)))
THEN
668 qp_j = quadrupoles(:, :, atom_a)
669 qp_i = quadrupoles(:, :, atom_b)
673 eloc = eloc + ch_i*tij*ch_j
675 IF (do_forces .OR. do_stress)
THEN
676 fr(1) = fr(1) - ch_j*tij_a(1)*ch_i
677 fr(2) = fr(2) - ch_j*tij_a(2)*ch_i
678 fr(3) = fr(3) - ch_j*tij_a(3)*ch_i
684 ef0_i = ef0_i + tij*ch_j
686 ef0_j = ef0_j + tij*ch_i
690 ef1_i(1) = ef1_i(1) - tij_a(1)*ch_j
691 ef1_i(2) = ef1_i(2) - tij_a(2)*ch_j
692 ef1_i(3) = ef1_i(3) - tij_a(3)*ch_j
694 ef1_j(1) = ef1_j(1) + tij_a(1)*ch_i
695 ef1_j(2) = ef1_j(2) + tij_a(2)*ch_i
696 ef1_j(3) = ef1_j(3) + tij_a(3)*ch_i
702 ef2_i(1, 1) = ef2_i(1, 1) - tij_ab(1, 1)*ch_j
703 ef2_i(2, 1) = ef2_i(2, 1) - tij_ab(2, 1)*ch_j
704 ef2_i(3, 1) = ef2_i(3, 1) - tij_ab(3, 1)*ch_j
705 ef2_i(1, 2) = ef2_i(1, 2) - tij_ab(1, 2)*ch_j
706 ef2_i(2, 2) = ef2_i(2, 2) - tij_ab(2, 2)*ch_j
707 ef2_i(3, 2) = ef2_i(3, 2) - tij_ab(3, 2)*ch_j
708 ef2_i(1, 3) = ef2_i(1, 3) - tij_ab(1, 3)*ch_j
709 ef2_i(2, 3) = ef2_i(2, 3) - tij_ab(2, 3)*ch_j
710 ef2_i(3, 3) = ef2_i(3, 3) - tij_ab(3, 3)*ch_j
712 ef2_j(1, 1) = ef2_j(1, 1) - tij_ab(1, 1)*ch_i
713 ef2_j(2, 1) = ef2_j(2, 1) - tij_ab(2, 1)*ch_i
714 ef2_j(3, 1) = ef2_j(3, 1) - tij_ab(3, 1)*ch_i
715 ef2_j(1, 2) = ef2_j(1, 2) - tij_ab(1, 2)*ch_i
716 ef2_j(2, 2) = ef2_j(2, 2) - tij_ab(2, 2)*ch_i
717 ef2_j(3, 2) = ef2_j(3, 2) - tij_ab(3, 2)*ch_i
718 ef2_j(1, 3) = ef2_j(1, 3) - tij_ab(1, 3)*ch_i
719 ef2_j(2, 3) = ef2_j(2, 3) - tij_ab(2, 3)*ch_i
720 ef2_j(3, 3) = ef2_j(3, 3) - tij_ab(3, 3)*ch_i
726 tmp = -(dp_i(1)*(tij_ab(1, 1)*dp_j(1) + &
727 tij_ab(2, 1)*dp_j(2) + &
728 tij_ab(3, 1)*dp_j(3)) + &
729 dp_i(2)*(tij_ab(1, 2)*dp_j(1) + &
730 tij_ab(2, 2)*dp_j(2) + &
731 tij_ab(3, 2)*dp_j(3)) + &
732 dp_i(3)*(tij_ab(1, 3)*dp_j(1) + &
733 tij_ab(2, 3)*dp_j(2) + &
734 tij_ab(3, 3)*dp_j(3)))
737 IF (do_forces .OR. do_stress)
THEN
739 fr(k) = fr(k) + dp_i(1)*(tij_abc(1, 1, k)*dp_j(1) + &
740 tij_abc(2, 1, k)*dp_j(2) + &
741 tij_abc(3, 1, k)*dp_j(3)) &
742 + dp_i(2)*(tij_abc(1, 2, k)*dp_j(1) + &
743 tij_abc(2, 2, k)*dp_j(2) + &
744 tij_abc(3, 2, k)*dp_j(3)) &
745 + dp_i(3)*(tij_abc(1, 3, k)*dp_j(1) + &
746 tij_abc(2, 3, k)*dp_j(2) + &
747 tij_abc(3, 3, k)*dp_j(3))
754 ef0_i = ef0_i - (tij_a(1)*dp_j(1) + &
758 ef0_j = ef0_j + (tij_a(1)*dp_i(1) + &
764 ef1_i(1) = ef1_i(1) + (tij_ab(1, 1)*dp_j(1) + &
765 tij_ab(2, 1)*dp_j(2) + &
766 tij_ab(3, 1)*dp_j(3))
767 ef1_i(2) = ef1_i(2) + (tij_ab(1, 2)*dp_j(1) + &
768 tij_ab(2, 2)*dp_j(2) + &
769 tij_ab(3, 2)*dp_j(3))
770 ef1_i(3) = ef1_i(3) + (tij_ab(1, 3)*dp_j(1) + &
771 tij_ab(2, 3)*dp_j(2) + &
772 tij_ab(3, 3)*dp_j(3))
774 ef1_j(1) = ef1_j(1) + (tij_ab(1, 1)*dp_i(1) + &
775 tij_ab(2, 1)*dp_i(2) + &
776 tij_ab(3, 1)*dp_i(3))
777 ef1_j(2) = ef1_j(2) + (tij_ab(1, 2)*dp_i(1) + &
778 tij_ab(2, 2)*dp_i(2) + &
779 tij_ab(3, 2)*dp_i(3))
780 ef1_j(3) = ef1_j(3) + (tij_ab(1, 3)*dp_i(1) + &
781 tij_ab(2, 3)*dp_i(2) + &
782 tij_ab(3, 3)*dp_i(3))
786 ef2_i(1, 1) = ef2_i(1, 1) + (tij_abc(1, 1, 1)*dp_j(1) + &
787 tij_abc(2, 1, 1)*dp_j(2) + &
788 tij_abc(3, 1, 1)*dp_j(3))
789 ef2_i(1, 2) = ef2_i(1, 2) + (tij_abc(1, 1, 2)*dp_j(1) + &
790 tij_abc(2, 1, 2)*dp_j(2) + &
791 tij_abc(3, 1, 2)*dp_j(3))
792 ef2_i(1, 3) = ef2_i(1, 3) + (tij_abc(1, 1, 3)*dp_j(1) + &
793 tij_abc(2, 1, 3)*dp_j(2) + &
794 tij_abc(3, 1, 3)*dp_j(3))
795 ef2_i(2, 1) = ef2_i(2, 1) + (tij_abc(1, 2, 1)*dp_j(1) + &
796 tij_abc(2, 2, 1)*dp_j(2) + &
797 tij_abc(3, 2, 1)*dp_j(3))
798 ef2_i(2, 2) = ef2_i(2, 2) + (tij_abc(1, 2, 2)*dp_j(1) + &
799 tij_abc(2, 2, 2)*dp_j(2) + &
800 tij_abc(3, 2, 2)*dp_j(3))
801 ef2_i(2, 3) = ef2_i(2, 3) + (tij_abc(1, 2, 3)*dp_j(1) + &
802 tij_abc(2, 2, 3)*dp_j(2) + &
803 tij_abc(3, 2, 3)*dp_j(3))
804 ef2_i(3, 1) = ef2_i(3, 1) + (tij_abc(1, 3, 1)*dp_j(1) + &
805 tij_abc(2, 3, 1)*dp_j(2) + &
806 tij_abc(3, 3, 1)*dp_j(3))
807 ef2_i(3, 2) = ef2_i(3, 2) + (tij_abc(1, 3, 2)*dp_j(1) + &
808 tij_abc(2, 3, 2)*dp_j(2) + &
809 tij_abc(3, 3, 2)*dp_j(3))
810 ef2_i(3, 3) = ef2_i(3, 3) + (tij_abc(1, 3, 3)*dp_j(1) + &
811 tij_abc(2, 3, 3)*dp_j(2) + &
812 tij_abc(3, 3, 3)*dp_j(3))
814 ef2_j(1, 1) = ef2_j(1, 1) - (tij_abc(1, 1, 1)*dp_i(1) + &
815 tij_abc(2, 1, 1)*dp_i(2) + &
816 tij_abc(3, 1, 1)*dp_i(3))
817 ef2_j(1, 2) = ef2_j(1, 2) - (tij_abc(1, 1, 2)*dp_i(1) + &
818 tij_abc(2, 1, 2)*dp_i(2) + &
819 tij_abc(3, 1, 2)*dp_i(3))
820 ef2_j(1, 3) = ef2_j(1, 3) - (tij_abc(1, 1, 3)*dp_i(1) + &
821 tij_abc(2, 1, 3)*dp_i(2) + &
822 tij_abc(3, 1, 3)*dp_i(3))
823 ef2_j(2, 1) = ef2_j(2, 1) - (tij_abc(1, 2, 1)*dp_i(1) + &
824 tij_abc(2, 2, 1)*dp_i(2) + &
825 tij_abc(3, 2, 1)*dp_i(3))
826 ef2_j(2, 2) = ef2_j(2, 2) - (tij_abc(1, 2, 2)*dp_i(1) + &
827 tij_abc(2, 2, 2)*dp_i(2) + &
828 tij_abc(3, 2, 2)*dp_i(3))
829 ef2_j(2, 3) = ef2_j(2, 3) - (tij_abc(1, 2, 3)*dp_i(1) + &
830 tij_abc(2, 2, 3)*dp_i(2) + &
831 tij_abc(3, 2, 3)*dp_i(3))
832 ef2_j(3, 1) = ef2_j(3, 1) - (tij_abc(1, 3, 1)*dp_i(1) + &
833 tij_abc(2, 3, 1)*dp_i(2) + &
834 tij_abc(3, 3, 1)*dp_i(3))
835 ef2_j(3, 2) = ef2_j(3, 2) - (tij_abc(1, 3, 2)*dp_i(1) + &
836 tij_abc(2, 3, 2)*dp_i(2) + &
837 tij_abc(3, 3, 2)*dp_i(3))
838 ef2_j(3, 3) = ef2_j(3, 3) - (tij_abc(1, 3, 3)*dp_i(1) + &
839 tij_abc(2, 3, 3)*dp_i(2) + &
840 tij_abc(3, 3, 3)*dp_i(3))
846 tmp = ch_j*(tij_a(1)*dp_i(1) + &
849 - ch_i*(tij_a(1)*dp_j(1) + &
854 IF (do_forces .OR. do_stress)
THEN
856 fr(k) = fr(k) - ch_j*(tij_ab(1, k)*dp_i(1) + &
857 tij_ab(2, k)*dp_i(2) + &
858 tij_ab(3, k)*dp_i(3)) &
859 + ch_i*(tij_ab(1, k)*dp_j(1) + &
860 tij_ab(2, k)*dp_j(2) + &
861 tij_ab(3, k)*dp_j(3))
868 tmp11 = qp_i(1, 1)*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
869 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
870 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
871 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
872 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
873 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
874 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
875 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
876 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
877 tmp21 = qp_i(2, 1)*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
878 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
879 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
880 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
881 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
882 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
883 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
884 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
885 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
886 tmp31 = qp_i(3, 1)*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
887 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
888 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
889 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
890 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
891 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
892 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
893 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
894 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
895 tmp22 = qp_i(2, 2)*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
896 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
897 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
898 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
899 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
900 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
901 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
902 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
903 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
904 tmp32 = qp_i(3, 2)*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
905 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
906 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
907 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
908 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
909 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
910 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
911 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
912 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
913 tmp33 = qp_i(3, 3)*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
914 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
915 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
916 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
917 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
918 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
919 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
920 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
921 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
925 tmp = tmp11 + tmp12 + tmp13 + &
926 tmp21 + tmp22 + tmp23 + &
927 tmp31 + tmp32 + tmp33
929 eloc = eloc +
fac*tmp
931 IF (do_forces .OR. do_stress)
THEN
933 tmp11 = qp_i(1, 1)*(tij_abcde(1, 1, 1, 1, k)*qp_j(1, 1) + &
934 tij_abcde(2, 1, 1, 1, k)*qp_j(2, 1) + &
935 tij_abcde(3, 1, 1, 1, k)*qp_j(3, 1) + &
936 tij_abcde(1, 2, 1, 1, k)*qp_j(1, 2) + &
937 tij_abcde(2, 2, 1, 1, k)*qp_j(2, 2) + &
938 tij_abcde(3, 2, 1, 1, k)*qp_j(3, 2) + &
939 tij_abcde(1, 3, 1, 1, k)*qp_j(1, 3) + &
940 tij_abcde(2, 3, 1, 1, k)*qp_j(2, 3) + &
941 tij_abcde(3, 3, 1, 1, k)*qp_j(3, 3))
942 tmp21 = qp_i(2, 1)*(tij_abcde(1, 1, 2, 1, k)*qp_j(1, 1) + &
943 tij_abcde(2, 1, 2, 1, k)*qp_j(2, 1) + &
944 tij_abcde(3, 1, 2, 1, k)*qp_j(3, 1) + &
945 tij_abcde(1, 2, 2, 1, k)*qp_j(1, 2) + &
946 tij_abcde(2, 2, 2, 1, k)*qp_j(2, 2) + &
947 tij_abcde(3, 2, 2, 1, k)*qp_j(3, 2) + &
948 tij_abcde(1, 3, 2, 1, k)*qp_j(1, 3) + &
949 tij_abcde(2, 3, 2, 1, k)*qp_j(2, 3) + &
950 tij_abcde(3, 3, 2, 1, k)*qp_j(3, 3))
951 tmp31 = qp_i(3, 1)*(tij_abcde(1, 1, 3, 1, k)*qp_j(1, 1) + &
952 tij_abcde(2, 1, 3, 1, k)*qp_j(2, 1) + &
953 tij_abcde(3, 1, 3, 1, k)*qp_j(3, 1) + &
954 tij_abcde(1, 2, 3, 1, k)*qp_j(1, 2) + &
955 tij_abcde(2, 2, 3, 1, k)*qp_j(2, 2) + &
956 tij_abcde(3, 2, 3, 1, k)*qp_j(3, 2) + &
957 tij_abcde(1, 3, 3, 1, k)*qp_j(1, 3) + &
958 tij_abcde(2, 3, 3, 1, k)*qp_j(2, 3) + &
959 tij_abcde(3, 3, 3, 1, k)*qp_j(3, 3))
960 tmp22 = qp_i(2, 2)*(tij_abcde(1, 1, 2, 2, k)*qp_j(1, 1) + &
961 tij_abcde(2, 1, 2, 2, k)*qp_j(2, 1) + &
962 tij_abcde(3, 1, 2, 2, k)*qp_j(3, 1) + &
963 tij_abcde(1, 2, 2, 2, k)*qp_j(1, 2) + &
964 tij_abcde(2, 2, 2, 2, k)*qp_j(2, 2) + &
965 tij_abcde(3, 2, 2, 2, k)*qp_j(3, 2) + &
966 tij_abcde(1, 3, 2, 2, k)*qp_j(1, 3) + &
967 tij_abcde(2, 3, 2, 2, k)*qp_j(2, 3) + &
968 tij_abcde(3, 3, 2, 2, k)*qp_j(3, 3))
969 tmp32 = qp_i(3, 2)*(tij_abcde(1, 1, 3, 2, k)*qp_j(1, 1) + &
970 tij_abcde(2, 1, 3, 2, k)*qp_j(2, 1) + &
971 tij_abcde(3, 1, 3, 2, k)*qp_j(3, 1) + &
972 tij_abcde(1, 2, 3, 2, k)*qp_j(1, 2) + &
973 tij_abcde(2, 2, 3, 2, k)*qp_j(2, 2) + &
974 tij_abcde(3, 2, 3, 2, k)*qp_j(3, 2) + &
975 tij_abcde(1, 3, 3, 2, k)*qp_j(1, 3) + &
976 tij_abcde(2, 3, 3, 2, k)*qp_j(2, 3) + &
977 tij_abcde(3, 3, 3, 2, k)*qp_j(3, 3))
978 tmp33 = qp_i(3, 3)*(tij_abcde(1, 1, 3, 3, k)*qp_j(1, 1) + &
979 tij_abcde(2, 1, 3, 3, k)*qp_j(2, 1) + &
980 tij_abcde(3, 1, 3, 3, k)*qp_j(3, 1) + &
981 tij_abcde(1, 2, 3, 3, k)*qp_j(1, 2) + &
982 tij_abcde(2, 2, 3, 3, k)*qp_j(2, 2) + &
983 tij_abcde(3, 2, 3, 3, k)*qp_j(3, 2) + &
984 tij_abcde(1, 3, 3, 3, k)*qp_j(1, 3) + &
985 tij_abcde(2, 3, 3, 3, k)*qp_j(2, 3) + &
986 tij_abcde(3, 3, 3, 3, k)*qp_j(3, 3))
990 fr(k) = fr(k) -
fac*(tmp11 + tmp12 + tmp13 + &
991 tmp21 + tmp22 + tmp23 + &
992 tmp31 + tmp32 + tmp33)
1000 ef0_i = ef0_i +
fac*(tij_ab(1, 1)*qp_j(1, 1) + &
1001 tij_ab(2, 1)*qp_j(2, 1) + &
1002 tij_ab(3, 1)*qp_j(3, 1) + &
1003 tij_ab(1, 2)*qp_j(1, 2) + &
1004 tij_ab(2, 2)*qp_j(2, 2) + &
1005 tij_ab(3, 2)*qp_j(3, 2) + &
1006 tij_ab(1, 3)*qp_j(1, 3) + &
1007 tij_ab(2, 3)*qp_j(2, 3) + &
1008 tij_ab(3, 3)*qp_j(3, 3))
1010 ef0_j = ef0_j +
fac*(tij_ab(1, 1)*qp_i(1, 1) + &
1011 tij_ab(2, 1)*qp_i(2, 1) + &
1012 tij_ab(3, 1)*qp_i(3, 1) + &
1013 tij_ab(1, 2)*qp_i(1, 2) + &
1014 tij_ab(2, 2)*qp_i(2, 2) + &
1015 tij_ab(3, 2)*qp_i(3, 2) + &
1016 tij_ab(1, 3)*qp_i(1, 3) + &
1017 tij_ab(2, 3)*qp_i(2, 3) + &
1018 tij_ab(3, 3)*qp_i(3, 3))
1021 IF (do_efield1)
THEN
1022 ef1_i(1) = ef1_i(1) -
fac*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
1023 tij_abc(2, 1, 1)*qp_j(2, 1) + &
1024 tij_abc(3, 1, 1)*qp_j(3, 1) + &
1025 tij_abc(1, 2, 1)*qp_j(1, 2) + &
1026 tij_abc(2, 2, 1)*qp_j(2, 2) + &
1027 tij_abc(3, 2, 1)*qp_j(3, 2) + &
1028 tij_abc(1, 3, 1)*qp_j(1, 3) + &
1029 tij_abc(2, 3, 1)*qp_j(2, 3) + &
1030 tij_abc(3, 3, 1)*qp_j(3, 3))
1031 ef1_i(2) = ef1_i(2) -
fac*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
1032 tij_abc(2, 1, 2)*qp_j(2, 1) + &
1033 tij_abc(3, 1, 2)*qp_j(3, 1) + &
1034 tij_abc(1, 2, 2)*qp_j(1, 2) + &
1035 tij_abc(2, 2, 2)*qp_j(2, 2) + &
1036 tij_abc(3, 2, 2)*qp_j(3, 2) + &
1037 tij_abc(1, 3, 2)*qp_j(1, 3) + &
1038 tij_abc(2, 3, 2)*qp_j(2, 3) + &
1039 tij_abc(3, 3, 2)*qp_j(3, 3))
1040 ef1_i(3) = ef1_i(3) -
fac*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
1041 tij_abc(2, 1, 3)*qp_j(2, 1) + &
1042 tij_abc(3, 1, 3)*qp_j(3, 1) + &
1043 tij_abc(1, 2, 3)*qp_j(1, 2) + &
1044 tij_abc(2, 2, 3)*qp_j(2, 2) + &
1045 tij_abc(3, 2, 3)*qp_j(3, 2) + &
1046 tij_abc(1, 3, 3)*qp_j(1, 3) + &
1047 tij_abc(2, 3, 3)*qp_j(2, 3) + &
1048 tij_abc(3, 3, 3)*qp_j(3, 3))
1050 ef1_j(1) = ef1_j(1) +
fac*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
1051 tij_abc(2, 1, 1)*qp_i(2, 1) + &
1052 tij_abc(3, 1, 1)*qp_i(3, 1) + &
1053 tij_abc(1, 2, 1)*qp_i(1, 2) + &
1054 tij_abc(2, 2, 1)*qp_i(2, 2) + &
1055 tij_abc(3, 2, 1)*qp_i(3, 2) + &
1056 tij_abc(1, 3, 1)*qp_i(1, 3) + &
1057 tij_abc(2, 3, 1)*qp_i(2, 3) + &
1058 tij_abc(3, 3, 1)*qp_i(3, 3))
1059 ef1_j(2) = ef1_j(2) +
fac*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
1060 tij_abc(2, 1, 2)*qp_i(2, 1) + &
1061 tij_abc(3, 1, 2)*qp_i(3, 1) + &
1062 tij_abc(1, 2, 2)*qp_i(1, 2) + &
1063 tij_abc(2, 2, 2)*qp_i(2, 2) + &
1064 tij_abc(3, 2, 2)*qp_i(3, 2) + &
1065 tij_abc(1, 3, 2)*qp_i(1, 3) + &
1066 tij_abc(2, 3, 2)*qp_i(2, 3) + &
1067 tij_abc(3, 3, 2)*qp_i(3, 3))
1068 ef1_j(3) = ef1_j(3) +
fac*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
1069 tij_abc(2, 1, 3)*qp_i(2, 1) + &
1070 tij_abc(3, 1, 3)*qp_i(3, 1) + &
1071 tij_abc(1, 2, 3)*qp_i(1, 2) + &
1072 tij_abc(2, 2, 3)*qp_i(2, 2) + &
1073 tij_abc(3, 2, 3)*qp_i(3, 2) + &
1074 tij_abc(1, 3, 3)*qp_i(1, 3) + &
1075 tij_abc(2, 3, 3)*qp_i(2, 3) + &
1076 tij_abc(3, 3, 3)*qp_i(3, 3))
1079 IF (do_efield2)
THEN
1080 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
1081 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
1082 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
1083 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
1084 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
1085 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
1086 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
1087 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
1088 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
1089 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
1090 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
1091 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
1092 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
1093 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
1094 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
1095 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
1096 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
1097 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
1098 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
1099 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
1100 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
1101 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
1102 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
1103 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
1104 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
1105 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
1106 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
1107 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
1108 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
1109 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
1110 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
1111 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
1112 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
1113 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
1114 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
1115 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
1116 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
1117 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
1118 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
1119 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
1120 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
1121 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
1122 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
1123 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
1124 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
1125 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
1126 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
1127 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
1128 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
1129 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
1130 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
1131 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
1132 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
1133 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
1135 ef2_i(1, 1) = ef2_i(1, 1) - tmp11
1136 ef2_i(1, 2) = ef2_i(1, 2) - tmp12
1137 ef2_i(1, 3) = ef2_i(1, 3) - tmp13
1138 ef2_i(2, 1) = ef2_i(2, 1) - tmp12
1139 ef2_i(2, 2) = ef2_i(2, 2) - tmp22
1140 ef2_i(2, 3) = ef2_i(2, 3) - tmp23
1141 ef2_i(3, 1) = ef2_i(3, 1) - tmp13
1142 ef2_i(3, 2) = ef2_i(3, 2) - tmp23
1143 ef2_i(3, 3) = ef2_i(3, 3) - tmp33
1145 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_i(1, 1) + &
1146 tij_abcd(2, 1, 1, 1)*qp_i(2, 1) + &
1147 tij_abcd(3, 1, 1, 1)*qp_i(3, 1) + &
1148 tij_abcd(1, 2, 1, 1)*qp_i(1, 2) + &
1149 tij_abcd(2, 2, 1, 1)*qp_i(2, 2) + &
1150 tij_abcd(3, 2, 1, 1)*qp_i(3, 2) + &
1151 tij_abcd(1, 3, 1, 1)*qp_i(1, 3) + &
1152 tij_abcd(2, 3, 1, 1)*qp_i(2, 3) + &
1153 tij_abcd(3, 3, 1, 1)*qp_i(3, 3))
1154 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_i(1, 1) + &
1155 tij_abcd(2, 1, 1, 2)*qp_i(2, 1) + &
1156 tij_abcd(3, 1, 1, 2)*qp_i(3, 1) + &
1157 tij_abcd(1, 2, 1, 2)*qp_i(1, 2) + &
1158 tij_abcd(2, 2, 1, 2)*qp_i(2, 2) + &
1159 tij_abcd(3, 2, 1, 2)*qp_i(3, 2) + &
1160 tij_abcd(1, 3, 1, 2)*qp_i(1, 3) + &
1161 tij_abcd(2, 3, 1, 2)*qp_i(2, 3) + &
1162 tij_abcd(3, 3, 1, 2)*qp_i(3, 3))
1163 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_i(1, 1) + &
1164 tij_abcd(2, 1, 1, 3)*qp_i(2, 1) + &
1165 tij_abcd(3, 1, 1, 3)*qp_i(3, 1) + &
1166 tij_abcd(1, 2, 1, 3)*qp_i(1, 2) + &
1167 tij_abcd(2, 2, 1, 3)*qp_i(2, 2) + &
1168 tij_abcd(3, 2, 1, 3)*qp_i(3, 2) + &
1169 tij_abcd(1, 3, 1, 3)*qp_i(1, 3) + &
1170 tij_abcd(2, 3, 1, 3)*qp_i(2, 3) + &
1171 tij_abcd(3, 3, 1, 3)*qp_i(3, 3))
1172 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_i(1, 1) + &
1173 tij_abcd(2, 1, 2, 2)*qp_i(2, 1) + &
1174 tij_abcd(3, 1, 2, 2)*qp_i(3, 1) + &
1175 tij_abcd(1, 2, 2, 2)*qp_i(1, 2) + &
1176 tij_abcd(2, 2, 2, 2)*qp_i(2, 2) + &
1177 tij_abcd(3, 2, 2, 2)*qp_i(3, 2) + &
1178 tij_abcd(1, 3, 2, 2)*qp_i(1, 3) + &
1179 tij_abcd(2, 3, 2, 2)*qp_i(2, 3) + &
1180 tij_abcd(3, 3, 2, 2)*qp_i(3, 3))
1181 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_i(1, 1) + &
1182 tij_abcd(2, 1, 2, 3)*qp_i(2, 1) + &
1183 tij_abcd(3, 1, 2, 3)*qp_i(3, 1) + &
1184 tij_abcd(1, 2, 2, 3)*qp_i(1, 2) + &
1185 tij_abcd(2, 2, 2, 3)*qp_i(2, 2) + &
1186 tij_abcd(3, 2, 2, 3)*qp_i(3, 2) + &
1187 tij_abcd(1, 3, 2, 3)*qp_i(1, 3) + &
1188 tij_abcd(2, 3, 2, 3)*qp_i(2, 3) + &
1189 tij_abcd(3, 3, 2, 3)*qp_i(3, 3))
1190 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_i(1, 1) + &
1191 tij_abcd(2, 1, 3, 3)*qp_i(2, 1) + &
1192 tij_abcd(3, 1, 3, 3)*qp_i(3, 1) + &
1193 tij_abcd(1, 2, 3, 3)*qp_i(1, 2) + &
1194 tij_abcd(2, 2, 3, 3)*qp_i(2, 2) + &
1195 tij_abcd(3, 2, 3, 3)*qp_i(3, 2) + &
1196 tij_abcd(1, 3, 3, 3)*qp_i(1, 3) + &
1197 tij_abcd(2, 3, 3, 3)*qp_i(2, 3) + &
1198 tij_abcd(3, 3, 3, 3)*qp_i(3, 3))
1200 ef2_j(1, 1) = ef2_j(1, 1) - tmp11
1201 ef2_j(1, 2) = ef2_j(1, 2) - tmp12
1202 ef2_j(1, 3) = ef2_j(1, 3) - tmp13
1203 ef2_j(2, 1) = ef2_j(2, 1) - tmp12
1204 ef2_j(2, 2) = ef2_j(2, 2) - tmp22
1205 ef2_j(2, 3) = ef2_j(2, 3) - tmp23
1206 ef2_j(3, 1) = ef2_j(3, 1) - tmp13
1207 ef2_j(3, 2) = ef2_j(3, 2) - tmp23
1208 ef2_j(3, 3) = ef2_j(3, 3) - tmp33
1212 IF (task(3, 2))
THEN
1216 tmp_ij = dp_i(1)*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
1217 tij_abc(2, 1, 1)*qp_j(2, 1) + &
1218 tij_abc(3, 1, 1)*qp_j(3, 1) + &
1219 tij_abc(1, 2, 1)*qp_j(1, 2) + &
1220 tij_abc(2, 2, 1)*qp_j(2, 2) + &
1221 tij_abc(3, 2, 1)*qp_j(3, 2) + &
1222 tij_abc(1, 3, 1)*qp_j(1, 3) + &
1223 tij_abc(2, 3, 1)*qp_j(2, 3) + &
1224 tij_abc(3, 3, 1)*qp_j(3, 3)) + &
1225 dp_i(2)*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
1226 tij_abc(2, 1, 2)*qp_j(2, 1) + &
1227 tij_abc(3, 1, 2)*qp_j(3, 1) + &
1228 tij_abc(1, 2, 2)*qp_j(1, 2) + &
1229 tij_abc(2, 2, 2)*qp_j(2, 2) + &
1230 tij_abc(3, 2, 2)*qp_j(3, 2) + &
1231 tij_abc(1, 3, 2)*qp_j(1, 3) + &
1232 tij_abc(2, 3, 2)*qp_j(2, 3) + &
1233 tij_abc(3, 3, 2)*qp_j(3, 3)) + &
1234 dp_i(3)*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
1235 tij_abc(2, 1, 3)*qp_j(2, 1) + &
1236 tij_abc(3, 1, 3)*qp_j(3, 1) + &
1237 tij_abc(1, 2, 3)*qp_j(1, 2) + &
1238 tij_abc(2, 2, 3)*qp_j(2, 2) + &
1239 tij_abc(3, 2, 3)*qp_j(3, 2) + &
1240 tij_abc(1, 3, 3)*qp_j(1, 3) + &
1241 tij_abc(2, 3, 3)*qp_j(2, 3) + &
1242 tij_abc(3, 3, 3)*qp_j(3, 3))
1245 tmp_ji = dp_j(1)*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
1246 tij_abc(2, 1, 1)*qp_i(2, 1) + &
1247 tij_abc(3, 1, 1)*qp_i(3, 1) + &
1248 tij_abc(1, 2, 1)*qp_i(1, 2) + &
1249 tij_abc(2, 2, 1)*qp_i(2, 2) + &
1250 tij_abc(3, 2, 1)*qp_i(3, 2) + &
1251 tij_abc(1, 3, 1)*qp_i(1, 3) + &
1252 tij_abc(2, 3, 1)*qp_i(2, 3) + &
1253 tij_abc(3, 3, 1)*qp_i(3, 3)) + &
1254 dp_j(2)*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
1255 tij_abc(2, 1, 2)*qp_i(2, 1) + &
1256 tij_abc(3, 1, 2)*qp_i(3, 1) + &
1257 tij_abc(1, 2, 2)*qp_i(1, 2) + &
1258 tij_abc(2, 2, 2)*qp_i(2, 2) + &
1259 tij_abc(3, 2, 2)*qp_i(3, 2) + &
1260 tij_abc(1, 3, 2)*qp_i(1, 3) + &
1261 tij_abc(2, 3, 2)*qp_i(2, 3) + &
1262 tij_abc(3, 3, 2)*qp_i(3, 3)) + &
1263 dp_j(3)*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
1264 tij_abc(2, 1, 3)*qp_i(2, 1) + &
1265 tij_abc(3, 1, 3)*qp_i(3, 1) + &
1266 tij_abc(1, 2, 3)*qp_i(1, 2) + &
1267 tij_abc(2, 2, 3)*qp_i(2, 2) + &
1268 tij_abc(3, 2, 3)*qp_i(3, 2) + &
1269 tij_abc(1, 3, 3)*qp_i(1, 3) + &
1270 tij_abc(2, 3, 3)*qp_i(2, 3) + &
1271 tij_abc(3, 3, 3)*qp_i(3, 3))
1273 tmp =
fac*(tmp_ij - tmp_ji)
1275 IF (do_forces .OR. do_stress)
THEN
1278 tmp_ij = dp_i(1)*(tij_abcd(1, 1, 1, k)*qp_j(1, 1) + &
1279 tij_abcd(2, 1, 1, k)*qp_j(2, 1) + &
1280 tij_abcd(3, 1, 1, k)*qp_j(3, 1) + &
1281 tij_abcd(1, 2, 1, k)*qp_j(1, 2) + &
1282 tij_abcd(2, 2, 1, k)*qp_j(2, 2) + &
1283 tij_abcd(3, 2, 1, k)*qp_j(3, 2) + &
1284 tij_abcd(1, 3, 1, k)*qp_j(1, 3) + &
1285 tij_abcd(2, 3, 1, k)*qp_j(2, 3) + &
1286 tij_abcd(3, 3, 1, k)*qp_j(3, 3)) + &
1287 dp_i(2)*(tij_abcd(1, 1, 2, k)*qp_j(1, 1) + &
1288 tij_abcd(2, 1, 2, k)*qp_j(2, 1) + &
1289 tij_abcd(3, 1, 2, k)*qp_j(3, 1) + &
1290 tij_abcd(1, 2, 2, k)*qp_j(1, 2) + &
1291 tij_abcd(2, 2, 2, k)*qp_j(2, 2) + &
1292 tij_abcd(3, 2, 2, k)*qp_j(3, 2) + &
1293 tij_abcd(1, 3, 2, k)*qp_j(1, 3) + &
1294 tij_abcd(2, 3, 2, k)*qp_j(2, 3) + &
1295 tij_abcd(3, 3, 2, k)*qp_j(3, 3)) + &
1296 dp_i(3)*(tij_abcd(1, 1, 3, k)*qp_j(1, 1) + &
1297 tij_abcd(2, 1, 3, k)*qp_j(2, 1) + &
1298 tij_abcd(3, 1, 3, k)*qp_j(3, 1) + &
1299 tij_abcd(1, 2, 3, k)*qp_j(1, 2) + &
1300 tij_abcd(2, 2, 3, k)*qp_j(2, 2) + &
1301 tij_abcd(3, 2, 3, k)*qp_j(3, 2) + &
1302 tij_abcd(1, 3, 3, k)*qp_j(1, 3) + &
1303 tij_abcd(2, 3, 3, k)*qp_j(2, 3) + &
1304 tij_abcd(3, 3, 3, k)*qp_j(3, 3))
1307 tmp_ji = dp_j(1)*(tij_abcd(1, 1, 1, k)*qp_i(1, 1) + &
1308 tij_abcd(2, 1, 1, k)*qp_i(2, 1) + &
1309 tij_abcd(3, 1, 1, k)*qp_i(3, 1) + &
1310 tij_abcd(1, 2, 1, k)*qp_i(1, 2) + &
1311 tij_abcd(2, 2, 1, k)*qp_i(2, 2) + &
1312 tij_abcd(3, 2, 1, k)*qp_i(3, 2) + &
1313 tij_abcd(1, 3, 1, k)*qp_i(1, 3) + &
1314 tij_abcd(2, 3, 1, k)*qp_i(2, 3) + &
1315 tij_abcd(3, 3, 1, k)*qp_i(3, 3)) + &
1316 dp_j(2)*(tij_abcd(1, 1, 2, k)*qp_i(1, 1) + &
1317 tij_abcd(2, 1, 2, k)*qp_i(2, 1) + &
1318 tij_abcd(3, 1, 2, k)*qp_i(3, 1) + &
1319 tij_abcd(1, 2, 2, k)*qp_i(1, 2) + &
1320 tij_abcd(2, 2, 2, k)*qp_i(2, 2) + &
1321 tij_abcd(3, 2, 2, k)*qp_i(3, 2) + &
1322 tij_abcd(1, 3, 2, k)*qp_i(1, 3) + &
1323 tij_abcd(2, 3, 2, k)*qp_i(2, 3) + &
1324 tij_abcd(3, 3, 2, k)*qp_i(3, 3)) + &
1325 dp_j(3)*(tij_abcd(1, 1, 3, k)*qp_i(1, 1) + &
1326 tij_abcd(2, 1, 3, k)*qp_i(2, 1) + &
1327 tij_abcd(3, 1, 3, k)*qp_i(3, 1) + &
1328 tij_abcd(1, 2, 3, k)*qp_i(1, 2) + &
1329 tij_abcd(2, 2, 3, k)*qp_i(2, 2) + &
1330 tij_abcd(3, 2, 3, k)*qp_i(3, 2) + &
1331 tij_abcd(1, 3, 3, k)*qp_i(1, 3) + &
1332 tij_abcd(2, 3, 3, k)*qp_i(2, 3) + &
1333 tij_abcd(3, 3, 3, k)*qp_i(3, 3))
1335 fr(k) = fr(k) -
fac*(tmp_ij - tmp_ji)
1339 IF (task(3, 1))
THEN
1344 tmp_ij = ch_i*(tij_ab(1, 1)*qp_j(1, 1) + &
1345 tij_ab(2, 1)*qp_j(2, 1) + &
1346 tij_ab(3, 1)*qp_j(3, 1) + &
1347 tij_ab(1, 2)*qp_j(1, 2) + &
1348 tij_ab(2, 2)*qp_j(2, 2) + &
1349 tij_ab(3, 2)*qp_j(3, 2) + &
1350 tij_ab(1, 3)*qp_j(1, 3) + &
1351 tij_ab(2, 3)*qp_j(2, 3) + &
1352 tij_ab(3, 3)*qp_j(3, 3))
1355 tmp_ji = ch_j*(tij_ab(1, 1)*qp_i(1, 1) + &
1356 tij_ab(2, 1)*qp_i(2, 1) + &
1357 tij_ab(3, 1)*qp_i(3, 1) + &
1358 tij_ab(1, 2)*qp_i(1, 2) + &
1359 tij_ab(2, 2)*qp_i(2, 2) + &
1360 tij_ab(3, 2)*qp_i(3, 2) + &
1361 tij_ab(1, 3)*qp_i(1, 3) + &
1362 tij_ab(2, 3)*qp_i(2, 3) + &
1363 tij_ab(3, 3)*qp_i(3, 3))
1365 eloc = eloc +
fac*(tmp_ij + tmp_ji)
1366 IF (do_forces .OR. do_stress)
THEN
1369 tmp_ij = ch_i*(tij_abc(1, 1, k)*qp_j(1, 1) + &
1370 tij_abc(2, 1, k)*qp_j(2, 1) + &
1371 tij_abc(3, 1, k)*qp_j(3, 1) + &
1372 tij_abc(1, 2, k)*qp_j(1, 2) + &
1373 tij_abc(2, 2, k)*qp_j(2, 2) + &
1374 tij_abc(3, 2, k)*qp_j(3, 2) + &
1375 tij_abc(1, 3, k)*qp_j(1, 3) + &
1376 tij_abc(2, 3, k)*qp_j(2, 3) + &
1377 tij_abc(3, 3, k)*qp_j(3, 3))
1380 tmp_ji = ch_j*(tij_abc(1, 1, k)*qp_i(1, 1) + &
1381 tij_abc(2, 1, k)*qp_i(2, 1) + &
1382 tij_abc(3, 1, k)*qp_i(3, 1) + &
1383 tij_abc(1, 2, k)*qp_i(1, 2) + &
1384 tij_abc(2, 2, k)*qp_i(2, 2) + &
1385 tij_abc(3, 2, k)*qp_i(3, 2) + &
1386 tij_abc(1, 3, k)*qp_i(1, 3) + &
1387 tij_abc(2, 3, k)*qp_i(2, 3) + &
1388 tij_abc(3, 3, k)*qp_i(3, 3))
1390 fr(k) = fr(k) -
fac*(tmp_ij + tmp_ji)
1394 energy = energy + eloc
1396 forces(1, atom_a) = forces(1, atom_a) - fr(1)
1397 forces(2, atom_a) = forces(2, atom_a) - fr(2)
1398 forces(3, atom_a) = forces(3, atom_a) - fr(3)
1399 forces(1, atom_b) = forces(1, atom_b) + fr(1)
1400 forces(2, atom_b) = forces(2, atom_b) + fr(2)
1401 forces(3, atom_b) = forces(3, atom_b) + fr(3)
1406 IF (do_efield0)
THEN
1407 efield0(atom_a) = efield0(atom_a) + ef0_j
1409 efield0(atom_b) = efield0(atom_b) + ef0_i
1412 IF (do_efield1)
THEN
1413 efield1(1, atom_a) = efield1(1, atom_a) + ef1_j(1)
1414 efield1(2, atom_a) = efield1(2, atom_a) + ef1_j(2)
1415 efield1(3, atom_a) = efield1(3, atom_a) + ef1_j(3)
1417 efield1(1, atom_b) = efield1(1, atom_b) + ef1_i(1)
1418 efield1(2, atom_b) = efield1(2, atom_b) + ef1_i(2)
1419 efield1(3, atom_b) = efield1(3, atom_b) + ef1_i(3)
1422 IF (do_efield2)
THEN
1423 efield2(1, atom_a) = efield2(1, atom_a) + ef2_j(1, 1)
1424 efield2(2, atom_a) = efield2(2, atom_a) + ef2_j(1, 2)
1425 efield2(3, atom_a) = efield2(3, atom_a) + ef2_j(1, 3)
1426 efield2(4, atom_a) = efield2(4, atom_a) + ef2_j(2, 1)
1427 efield2(5, atom_a) = efield2(5, atom_a) + ef2_j(2, 2)
1428 efield2(6, atom_a) = efield2(6, atom_a) + ef2_j(2, 3)
1429 efield2(7, atom_a) = efield2(7, atom_a) + ef2_j(3, 1)
1430 efield2(8, atom_a) = efield2(8, atom_a) + ef2_j(3, 2)
1431 efield2(9, atom_a) = efield2(9, atom_a) + ef2_j(3, 3)
1433 efield2(1, atom_b) = efield2(1, atom_b) + ef2_i(1, 1)
1434 efield2(2, atom_b) = efield2(2, atom_b) + ef2_i(1, 2)
1435 efield2(3, atom_b) = efield2(3, atom_b) + ef2_i(1, 3)
1436 efield2(4, atom_b) = efield2(4, atom_b) + ef2_i(2, 1)
1437 efield2(5, atom_b) = efield2(5, atom_b) + ef2_i(2, 2)
1438 efield2(6, atom_b) = efield2(6, atom_b) + ef2_i(2, 3)
1439 efield2(7, atom_b) = efield2(7, atom_b) + ef2_i(3, 1)
1440 efield2(8, atom_b) = efield2(8, atom_b) + ef2_i(3, 2)
1441 efield2(9, atom_b) = efield2(9, atom_b) + ef2_i(3, 3)
1445 ptens11 = ptens11 + rab(1)*fr(1)
1446 ptens21 = ptens21 + rab(2)*fr(1)
1447 ptens31 = ptens31 + rab(3)*fr(1)
1448 ptens12 = ptens12 + rab(1)*fr(2)
1449 ptens22 = ptens22 + rab(2)*fr(2)
1450 ptens32 = ptens32 + rab(3)*fr(2)
1451 ptens13 = ptens13 + rab(1)*fr(3)
1452 ptens23 = ptens23 + rab(2)*fr(3)
1453 ptens33 = ptens33 + rab(3)*fr(3)
1460 tij_a = huge(0.0_dp)
1461 tij_ab = huge(0.0_dp)
1462 tij_abc = huge(0.0_dp)
1463 tij_abcd = huge(0.0_dp)
1464 tij_abcde = huge(0.0_dp)
1471 IF (debug_this_module .AND. debug_r_space .AND. (.NOT. debug_g_space))
THEN
1475 f(0) = erfc(alpha*r)*ir
1481 f(i) = irab2*(f(i - 1) + tmp*((2.0_dp*alpha**2)**i)/(
fac*alpha))
1486 force_eval = do_stress
1487 IF (task(1, 1))
THEN
1489 force_eval = do_forces .OR. do_efield1
1491 IF (task(2, 2)) force_eval = force_eval .OR. do_efield0
1492 IF (task(1, 2) .OR. force_eval)
THEN
1493 force_eval = do_stress
1494 tij_a = -rab*f(1)*fac_ij
1495 IF (task(1, 2)) force_eval = force_eval .OR. do_forces
1497 IF (task(1, 1)) force_eval = force_eval .OR. do_efield2
1498 IF (task(3, 3)) force_eval = force_eval .OR. do_efield0
1499 IF (task(2, 2) .OR. task(3, 1) .OR. force_eval)
THEN
1500 force_eval = do_stress
1503 tmp = rab(a)*rab(b)*fac_ij
1504 tij_ab(a, b) = 3.0_dp*tmp*f(2)
1505 IF (a == b) tij_ab(a, b) = tij_ab(a, b) - f(1)*fac_ij
1508 IF (task(2, 2) .OR. task(3, 1)) force_eval = force_eval .OR. do_forces
1510 IF (task(2, 2)) force_eval = force_eval .OR. do_efield2
1511 IF (task(3, 3)) force_eval = force_eval .OR. do_efield1
1512 IF (task(3, 2) .OR. force_eval)
THEN
1513 force_eval = do_stress
1517 tmp = rab(a)*rab(b)*rab(c)*fac_ij
1518 tij_abc(a, b, c) = -15.0_dp*tmp*f(3)
1519 tmp = 3.0_dp*f(2)*fac_ij
1520 IF (a == b) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(c)
1521 IF (a == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(b)
1522 IF (b == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(a)
1526 IF (task(3, 2)) force_eval = force_eval .OR. do_forces
1528 IF (task(3, 3) .OR. force_eval)
THEN
1529 force_eval = do_stress
1534 tmp = rab(a)*rab(b)*rab(c)*rab(d)*fac_ij
1535 tij_abcd(a, b, c, d) = 105.0_dp*tmp*f(4)
1536 tmp1 = 15.0_dp*f(3)*fac_ij
1537 tmp2 = 3.0_dp*f(2)*fac_ij
1539 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(c)*rab(d)
1540 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1543 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(d)
1544 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1546 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(c)
1548 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(d)
1549 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
1551 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(c)
1552 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(b)
1557 IF (task(3, 3)) force_eval = force_eval .OR. do_forces
1559 IF (force_eval)
THEN
1560 force_eval = do_stress
1566 tmp = rab(a)*rab(b)*rab(c)*rab(d)*rab(e)*fac_ij
1567 tij_abcde(a, b, c, d, e) = -945.0_dp*tmp*f(5)
1568 tmp1 = 105.0_dp*f(4)*fac_ij
1569 tmp2 = 15.0_dp*f(3)*fac_ij
1571 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(c)*rab(d)*rab(e)
1572 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1573 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1574 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1577 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(d)*rab(e)
1578 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1579 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1580 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1583 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(e)
1584 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
1585 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1586 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1589 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(d)
1590 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
1591 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
1592 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
1595 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(d)*rab(e)
1596 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1599 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(e)
1600 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1603 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(d)
1604 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
1606 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(e)
1607 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(d)
1608 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(c)
1626 IF (kind_a == ikind)
THEN
1628 SELECT CASE (itype_ij)
1633 DO kk = 1, nkdamp_ij
1635 factorial = factorial*real(kk, kind=
dp)
1636 dampsumfi = dampsumfi + (xf/factorial)
1638 dampaexpi = dexp(-dampa_ij*r)
1639 dampfunci = dampsumfi*dampaexpi*dampfac_ij
1640 dampfuncdiffi = -dampa_ij*dampaexpi* &
1641 dampfac_ij*(((dampa_ij*r)**nkdamp_ij)/ &
1645 dampfuncdiffi = 0.0_dp
1649 SELECT CASE (itype_ji)
1654 DO kk = 1, nkdamp_ji
1656 factorial = factorial*real(kk, kind=
dp)
1657 dampsumfj = dampsumfj + (xf/factorial)
1659 dampaexpj = dexp(-dampa_ji*r)
1660 dampfuncj = dampsumfj*dampaexpj*dampfac_ji
1661 dampfuncdiffj = -dampa_ji*dampaexpj* &
1662 dampfac_ji*(((dampa_ji*r)**nkdamp_ji)/ &
1666 dampfuncdiffj = 0.0_dp
1669 SELECT CASE (itype_ij)
1674 DO kk = 1, nkdamp_ij
1676 factorial = factorial*real(kk, kind=
dp)
1677 dampsumfj = dampsumfj + (xf/factorial)
1679 dampaexpj = dexp(-dampa_ij*r)
1680 dampfuncj = dampsumfj*dampaexpj*dampfac_ij
1681 dampfuncdiffj = -dampa_ij*dampaexpj* &
1682 dampfac_ij*(((dampa_ij*r)**nkdamp_ij)/ &
1686 dampfuncdiffj = 0.0_dp
1690 SELECT CASE (itype_ji)
1695 DO kk = 1, nkdamp_ji
1697 factorial = factorial*real(kk, kind=
dp)
1698 dampsumfi = dampsumfi + (xf/factorial)
1700 dampaexpi = dexp(-dampa_ji*r)
1701 dampfunci = dampsumfi*dampaexpi*dampfac_ji
1702 dampfuncdiffi = -dampa_ji*dampaexpi* &
1703 dampfac_ji*(((dampa_ji*r)**nkdamp_ji)/ &
1707 dampfuncdiffi = 0.0_dp
1711 damptij_a = -rab*dampfunci*fac_ij*irab2*ir
1712 damptji_a = -rab*dampfuncj*fac_ij*irab2*ir
1715 tmp = rab(a)*rab(b)*fac_ij
1716 damptij_ab(a, b) = tmp*(-dampfuncdiffi*irab2*irab2 + 3.0_dp*dampfunci*irab2*irab2*ir)
1717 damptji_ab(a, b) = tmp*(-dampfuncdiffj*irab2*irab2 + 3.0_dp*dampfuncj*irab2*irab2*ir)
1718 IF (a == b) damptij_ab(a, b) = damptij_ab(a, b) - dampfunci*fac_ij*irab2*ir
1719 IF (a == b) damptji_ab(a, b) = damptji_ab(a, b) - dampfuncj*fac_ij*irab2*ir
1725 IF (debug_this_module)
THEN
1733 IF (any(task(1, :)))
THEN
1734 ch_j = charges(atom_a)
1735 ch_i = charges(atom_b)
1737 IF (any(task(2, :)))
THEN
1738 dp_j = dipoles(:, atom_a)
1739 dp_i = dipoles(:, atom_b)
1741 IF (any(task(3, :)))
THEN
1742 qp_j = quadrupoles(:, :, atom_a)
1743 qp_i = quadrupoles(:, :, atom_b)
1745 IF (task(1, 1))
THEN
1747 eloc = eloc + ch_i*tij*ch_j
1749 IF (do_forces .OR. do_stress)
THEN
1750 fr(1) = fr(1) - ch_j*tij_a(1)*ch_i
1751 fr(2) = fr(2) - ch_j*tij_a(2)*ch_i
1752 fr(3) = fr(3) - ch_j*tij_a(3)*ch_i
1757 IF (do_efield0)
THEN
1758 ef0_i = ef0_i + tij*ch_j
1760 ef0_j = ef0_j + tij*ch_i
1763 IF (do_efield1)
THEN
1764 ef1_i(1) = ef1_i(1) - tij_a(1)*ch_j
1765 ef1_i(2) = ef1_i(2) - tij_a(2)*ch_j
1766 ef1_i(3) = ef1_i(3) - tij_a(3)*ch_j
1768 ef1_j(1) = ef1_j(1) + tij_a(1)*ch_i
1769 ef1_j(2) = ef1_j(2) + tij_a(2)*ch_i
1770 ef1_j(3) = ef1_j(3) + tij_a(3)*ch_i
1772 ef1_i(1) = ef1_i(1) + damptij_a(1)*ch_j
1773 ef1_i(2) = ef1_i(2) + damptij_a(2)*ch_j
1774 ef1_i(3) = ef1_i(3) + damptij_a(3)*ch_j
1776 ef1_j(1) = ef1_j(1) - damptji_a(1)*ch_i
1777 ef1_j(2) = ef1_j(2) - damptji_a(2)*ch_i
1778 ef1_j(3) = ef1_j(3) - damptji_a(3)*ch_i
1782 IF (do_efield2)
THEN
1783 ef2_i(1, 1) = ef2_i(1, 1) - tij_ab(1, 1)*ch_j
1784 ef2_i(2, 1) = ef2_i(2, 1) - tij_ab(2, 1)*ch_j
1785 ef2_i(3, 1) = ef2_i(3, 1) - tij_ab(3, 1)*ch_j
1786 ef2_i(1, 2) = ef2_i(1, 2) - tij_ab(1, 2)*ch_j
1787 ef2_i(2, 2) = ef2_i(2, 2) - tij_ab(2, 2)*ch_j
1788 ef2_i(3, 2) = ef2_i(3, 2) - tij_ab(3, 2)*ch_j
1789 ef2_i(1, 3) = ef2_i(1, 3) - tij_ab(1, 3)*ch_j
1790 ef2_i(2, 3) = ef2_i(2, 3) - tij_ab(2, 3)*ch_j
1791 ef2_i(3, 3) = ef2_i(3, 3) - tij_ab(3, 3)*ch_j
1793 ef2_j(1, 1) = ef2_j(1, 1) - tij_ab(1, 1)*ch_i
1794 ef2_j(2, 1) = ef2_j(2, 1) - tij_ab(2, 1)*ch_i
1795 ef2_j(3, 1) = ef2_j(3, 1) - tij_ab(3, 1)*ch_i
1796 ef2_j(1, 2) = ef2_j(1, 2) - tij_ab(1, 2)*ch_i
1797 ef2_j(2, 2) = ef2_j(2, 2) - tij_ab(2, 2)*ch_i
1798 ef2_j(3, 2) = ef2_j(3, 2) - tij_ab(3, 2)*ch_i
1799 ef2_j(1, 3) = ef2_j(1, 3) - tij_ab(1, 3)*ch_i
1800 ef2_j(2, 3) = ef2_j(2, 3) - tij_ab(2, 3)*ch_i
1801 ef2_j(3, 3) = ef2_j(3, 3) - tij_ab(3, 3)*ch_i
1805 IF (task(2, 2))
THEN
1807 tmp = -(dp_i(1)*(tij_ab(1, 1)*dp_j(1) + &
1808 tij_ab(2, 1)*dp_j(2) + &
1809 tij_ab(3, 1)*dp_j(3)) + &
1810 dp_i(2)*(tij_ab(1, 2)*dp_j(1) + &
1811 tij_ab(2, 2)*dp_j(2) + &
1812 tij_ab(3, 2)*dp_j(3)) + &
1813 dp_i(3)*(tij_ab(1, 3)*dp_j(1) + &
1814 tij_ab(2, 3)*dp_j(2) + &
1815 tij_ab(3, 3)*dp_j(3)))
1818 IF (do_forces .OR. do_stress)
THEN
1820 fr(k) = fr(k) + dp_i(1)*(tij_abc(1, 1, k)*dp_j(1) + &
1821 tij_abc(2, 1, k)*dp_j(2) + &
1822 tij_abc(3, 1, k)*dp_j(3)) &
1823 + dp_i(2)*(tij_abc(1, 2, k)*dp_j(1) + &
1824 tij_abc(2, 2, k)*dp_j(2) + &
1825 tij_abc(3, 2, k)*dp_j(3)) &
1826 + dp_i(3)*(tij_abc(1, 3, k)*dp_j(1) + &
1827 tij_abc(2, 3, k)*dp_j(2) + &
1828 tij_abc(3, 3, k)*dp_j(3))
1834 IF (do_efield0)
THEN
1835 ef0_i = ef0_i - (tij_a(1)*dp_j(1) + &
1836 tij_a(2)*dp_j(2) + &
1839 ef0_j = ef0_j + (tij_a(1)*dp_i(1) + &
1840 tij_a(2)*dp_i(2) + &
1844 IF (do_efield1)
THEN
1845 ef1_i(1) = ef1_i(1) + (tij_ab(1, 1)*dp_j(1) + &
1846 tij_ab(2, 1)*dp_j(2) + &
1847 tij_ab(3, 1)*dp_j(3))
1848 ef1_i(2) = ef1_i(2) + (tij_ab(1, 2)*dp_j(1) + &
1849 tij_ab(2, 2)*dp_j(2) + &
1850 tij_ab(3, 2)*dp_j(3))
1851 ef1_i(3) = ef1_i(3) + (tij_ab(1, 3)*dp_j(1) + &
1852 tij_ab(2, 3)*dp_j(2) + &
1853 tij_ab(3, 3)*dp_j(3))
1855 ef1_j(1) = ef1_j(1) + (tij_ab(1, 1)*dp_i(1) + &
1856 tij_ab(2, 1)*dp_i(2) + &
1857 tij_ab(3, 1)*dp_i(3))
1858 ef1_j(2) = ef1_j(2) + (tij_ab(1, 2)*dp_i(1) + &
1859 tij_ab(2, 2)*dp_i(2) + &
1860 tij_ab(3, 2)*dp_i(3))
1861 ef1_j(3) = ef1_j(3) + (tij_ab(1, 3)*dp_i(1) + &
1862 tij_ab(2, 3)*dp_i(2) + &
1863 tij_ab(3, 3)*dp_i(3))
1866 IF (do_efield2)
THEN
1867 ef2_i(1, 1) = ef2_i(1, 1) + (tij_abc(1, 1, 1)*dp_j(1) + &
1868 tij_abc(2, 1, 1)*dp_j(2) + &
1869 tij_abc(3, 1, 1)*dp_j(3))
1870 ef2_i(1, 2) = ef2_i(1, 2) + (tij_abc(1, 1, 2)*dp_j(1) + &
1871 tij_abc(2, 1, 2)*dp_j(2) + &
1872 tij_abc(3, 1, 2)*dp_j(3))
1873 ef2_i(1, 3) = ef2_i(1, 3) + (tij_abc(1, 1, 3)*dp_j(1) + &
1874 tij_abc(2, 1, 3)*dp_j(2) + &
1875 tij_abc(3, 1, 3)*dp_j(3))
1876 ef2_i(2, 1) = ef2_i(2, 1) + (tij_abc(1, 2, 1)*dp_j(1) + &
1877 tij_abc(2, 2, 1)*dp_j(2) + &
1878 tij_abc(3, 2, 1)*dp_j(3))
1879 ef2_i(2, 2) = ef2_i(2, 2) + (tij_abc(1, 2, 2)*dp_j(1) + &
1880 tij_abc(2, 2, 2)*dp_j(2) + &
1881 tij_abc(3, 2, 2)*dp_j(3))
1882 ef2_i(2, 3) = ef2_i(2, 3) + (tij_abc(1, 2, 3)*dp_j(1) + &
1883 tij_abc(2, 2, 3)*dp_j(2) + &
1884 tij_abc(3, 2, 3)*dp_j(3))
1885 ef2_i(3, 1) = ef2_i(3, 1) + (tij_abc(1, 3, 1)*dp_j(1) + &
1886 tij_abc(2, 3, 1)*dp_j(2) + &
1887 tij_abc(3, 3, 1)*dp_j(3))
1888 ef2_i(3, 2) = ef2_i(3, 2) + (tij_abc(1, 3, 2)*dp_j(1) + &
1889 tij_abc(2, 3, 2)*dp_j(2) + &
1890 tij_abc(3, 3, 2)*dp_j(3))
1891 ef2_i(3, 3) = ef2_i(3, 3) + (tij_abc(1, 3, 3)*dp_j(1) + &
1892 tij_abc(2, 3, 3)*dp_j(2) + &
1893 tij_abc(3, 3, 3)*dp_j(3))
1895 ef2_j(1, 1) = ef2_j(1, 1) - (tij_abc(1, 1, 1)*dp_i(1) + &
1896 tij_abc(2, 1, 1)*dp_i(2) + &
1897 tij_abc(3, 1, 1)*dp_i(3))
1898 ef2_j(1, 2) = ef2_j(1, 2) - (tij_abc(1, 1, 2)*dp_i(1) + &
1899 tij_abc(2, 1, 2)*dp_i(2) + &
1900 tij_abc(3, 1, 2)*dp_i(3))
1901 ef2_j(1, 3) = ef2_j(1, 3) - (tij_abc(1, 1, 3)*dp_i(1) + &
1902 tij_abc(2, 1, 3)*dp_i(2) + &
1903 tij_abc(3, 1, 3)*dp_i(3))
1904 ef2_j(2, 1) = ef2_j(2, 1) - (tij_abc(1, 2, 1)*dp_i(1) + &
1905 tij_abc(2, 2, 1)*dp_i(2) + &
1906 tij_abc(3, 2, 1)*dp_i(3))
1907 ef2_j(2, 2) = ef2_j(2, 2) - (tij_abc(1, 2, 2)*dp_i(1) + &
1908 tij_abc(2, 2, 2)*dp_i(2) + &
1909 tij_abc(3, 2, 2)*dp_i(3))
1910 ef2_j(2, 3) = ef2_j(2, 3) - (tij_abc(1, 2, 3)*dp_i(1) + &
1911 tij_abc(2, 2, 3)*dp_i(2) + &
1912 tij_abc(3, 2, 3)*dp_i(3))
1913 ef2_j(3, 1) = ef2_j(3, 1) - (tij_abc(1, 3, 1)*dp_i(1) + &
1914 tij_abc(2, 3, 1)*dp_i(2) + &
1915 tij_abc(3, 3, 1)*dp_i(3))
1916 ef2_j(3, 2) = ef2_j(3, 2) - (tij_abc(1, 3, 2)*dp_i(1) + &
1917 tij_abc(2, 3, 2)*dp_i(2) + &
1918 tij_abc(3, 3, 2)*dp_i(3))
1919 ef2_j(3, 3) = ef2_j(3, 3) - (tij_abc(1, 3, 3)*dp_i(1) + &
1920 tij_abc(2, 3, 3)*dp_i(2) + &
1921 tij_abc(3, 3, 3)*dp_i(3))
1925 IF (task(2, 1))
THEN
1927 tmp = ch_j*(tij_a(1)*dp_i(1) + &
1928 tij_a(2)*dp_i(2) + &
1930 - ch_i*(tij_a(1)*dp_j(1) + &
1931 tij_a(2)*dp_j(2) + &
1933 tmp = tmp - ch_j*(damptij_a(1)*dp_i(1) + &
1934 damptij_a(2)*dp_i(2) + &
1935 damptij_a(3)*dp_i(3)) &
1936 + ch_i*(damptji_a(1)*dp_j(1) + &
1937 damptji_a(2)*dp_j(2) + &
1938 damptji_a(3)*dp_j(3))
1941 IF (do_forces .OR. do_stress)
THEN
1943 fr(k) = fr(k) - ch_j*(tij_ab(1, k)*dp_i(1) + &
1944 tij_ab(2, k)*dp_i(2) + &
1945 tij_ab(3, k)*dp_i(3)) &
1946 + ch_i*(tij_ab(1, k)*dp_j(1) + &
1947 tij_ab(2, k)*dp_j(2) + &
1948 tij_ab(3, k)*dp_j(3))
1949 fr(k) = fr(k) + ch_j*(damptij_ab(1, k)*dp_i(1) + &
1950 damptij_ab(2, k)*dp_i(2) + &
1951 damptij_ab(3, k)*dp_i(3)) &
1952 - ch_i*(damptji_ab(1, k)*dp_j(1) + &
1953 damptji_ab(2, k)*dp_j(2) + &
1954 damptji_ab(3, k)*dp_j(3))
1958 IF (task(3, 3))
THEN
1961 tmp11 = qp_i(1, 1)*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
1962 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
1963 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
1964 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
1965 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
1966 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
1967 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
1968 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
1969 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
1970 tmp21 = qp_i(2, 1)*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
1971 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
1972 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
1973 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
1974 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
1975 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
1976 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
1977 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
1978 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
1979 tmp31 = qp_i(3, 1)*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
1980 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
1981 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
1982 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
1983 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
1984 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
1985 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
1986 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
1987 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
1988 tmp22 = qp_i(2, 2)*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
1989 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
1990 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
1991 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
1992 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
1993 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
1994 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
1995 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
1996 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
1997 tmp32 = qp_i(3, 2)*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
1998 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
1999 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
2000 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
2001 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
2002 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
2003 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
2004 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
2005 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
2006 tmp33 = qp_i(3, 3)*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
2007 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
2008 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
2009 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
2010 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
2011 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
2012 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
2013 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
2014 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
2018 tmp = tmp11 + tmp12 + tmp13 + &
2019 tmp21 + tmp22 + tmp23 + &
2020 tmp31 + tmp32 + tmp33
2022 eloc = eloc +
fac*tmp
2024 IF (do_forces .OR. do_stress)
THEN
2026 tmp11 = qp_i(1, 1)*(tij_abcde(1, 1, 1, 1, k)*qp_j(1, 1) + &
2027 tij_abcde(2, 1, 1, 1, k)*qp_j(2, 1) + &
2028 tij_abcde(3, 1, 1, 1, k)*qp_j(3, 1) + &
2029 tij_abcde(1, 2, 1, 1, k)*qp_j(1, 2) + &
2030 tij_abcde(2, 2, 1, 1, k)*qp_j(2, 2) + &
2031 tij_abcde(3, 2, 1, 1, k)*qp_j(3, 2) + &
2032 tij_abcde(1, 3, 1, 1, k)*qp_j(1, 3) + &
2033 tij_abcde(2, 3, 1, 1, k)*qp_j(2, 3) + &
2034 tij_abcde(3, 3, 1, 1, k)*qp_j(3, 3))
2035 tmp21 = qp_i(2, 1)*(tij_abcde(1, 1, 2, 1, k)*qp_j(1, 1) + &
2036 tij_abcde(2, 1, 2, 1, k)*qp_j(2, 1) + &
2037 tij_abcde(3, 1, 2, 1, k)*qp_j(3, 1) + &
2038 tij_abcde(1, 2, 2, 1, k)*qp_j(1, 2) + &
2039 tij_abcde(2, 2, 2, 1, k)*qp_j(2, 2) + &
2040 tij_abcde(3, 2, 2, 1, k)*qp_j(3, 2) + &
2041 tij_abcde(1, 3, 2, 1, k)*qp_j(1, 3) + &
2042 tij_abcde(2, 3, 2, 1, k)*qp_j(2, 3) + &
2043 tij_abcde(3, 3, 2, 1, k)*qp_j(3, 3))
2044 tmp31 = qp_i(3, 1)*(tij_abcde(1, 1, 3, 1, k)*qp_j(1, 1) + &
2045 tij_abcde(2, 1, 3, 1, k)*qp_j(2, 1) + &
2046 tij_abcde(3, 1, 3, 1, k)*qp_j(3, 1) + &
2047 tij_abcde(1, 2, 3, 1, k)*qp_j(1, 2) + &
2048 tij_abcde(2, 2, 3, 1, k)*qp_j(2, 2) + &
2049 tij_abcde(3, 2, 3, 1, k)*qp_j(3, 2) + &
2050 tij_abcde(1, 3, 3, 1, k)*qp_j(1, 3) + &
2051 tij_abcde(2, 3, 3, 1, k)*qp_j(2, 3) + &
2052 tij_abcde(3, 3, 3, 1, k)*qp_j(3, 3))
2053 tmp22 = qp_i(2, 2)*(tij_abcde(1, 1, 2, 2, k)*qp_j(1, 1) + &
2054 tij_abcde(2, 1, 2, 2, k)*qp_j(2, 1) + &
2055 tij_abcde(3, 1, 2, 2, k)*qp_j(3, 1) + &
2056 tij_abcde(1, 2, 2, 2, k)*qp_j(1, 2) + &
2057 tij_abcde(2, 2, 2, 2, k)*qp_j(2, 2) + &
2058 tij_abcde(3, 2, 2, 2, k)*qp_j(3, 2) + &
2059 tij_abcde(1, 3, 2, 2, k)*qp_j(1, 3) + &
2060 tij_abcde(2, 3, 2, 2, k)*qp_j(2, 3) + &
2061 tij_abcde(3, 3, 2, 2, k)*qp_j(3, 3))
2062 tmp32 = qp_i(3, 2)*(tij_abcde(1, 1, 3, 2, k)*qp_j(1, 1) + &
2063 tij_abcde(2, 1, 3, 2, k)*qp_j(2, 1) + &
2064 tij_abcde(3, 1, 3, 2, k)*qp_j(3, 1) + &
2065 tij_abcde(1, 2, 3, 2, k)*qp_j(1, 2) + &
2066 tij_abcde(2, 2, 3, 2, k)*qp_j(2, 2) + &
2067 tij_abcde(3, 2, 3, 2, k)*qp_j(3, 2) + &
2068 tij_abcde(1, 3, 3, 2, k)*qp_j(1, 3) + &
2069 tij_abcde(2, 3, 3, 2, k)*qp_j(2, 3) + &
2070 tij_abcde(3, 3, 3, 2, k)*qp_j(3, 3))
2071 tmp33 = qp_i(3, 3)*(tij_abcde(1, 1, 3, 3, k)*qp_j(1, 1) + &
2072 tij_abcde(2, 1, 3, 3, k)*qp_j(2, 1) + &
2073 tij_abcde(3, 1, 3, 3, k)*qp_j(3, 1) + &
2074 tij_abcde(1, 2, 3, 3, k)*qp_j(1, 2) + &
2075 tij_abcde(2, 2, 3, 3, k)*qp_j(2, 2) + &
2076 tij_abcde(3, 2, 3, 3, k)*qp_j(3, 2) + &
2077 tij_abcde(1, 3, 3, 3, k)*qp_j(1, 3) + &
2078 tij_abcde(2, 3, 3, 3, k)*qp_j(2, 3) + &
2079 tij_abcde(3, 3, 3, 3, k)*qp_j(3, 3))
2083 fr(k) = fr(k) -
fac*(tmp11 + tmp12 + tmp13 + &
2084 tmp21 + tmp22 + tmp23 + &
2085 tmp31 + tmp32 + tmp33)
2092 IF (do_efield0)
THEN
2093 ef0_i = ef0_i +
fac*(tij_ab(1, 1)*qp_j(1, 1) + &
2094 tij_ab(2, 1)*qp_j(2, 1) + &
2095 tij_ab(3, 1)*qp_j(3, 1) + &
2096 tij_ab(1, 2)*qp_j(1, 2) + &
2097 tij_ab(2, 2)*qp_j(2, 2) + &
2098 tij_ab(3, 2)*qp_j(3, 2) + &
2099 tij_ab(1, 3)*qp_j(1, 3) + &
2100 tij_ab(2, 3)*qp_j(2, 3) + &
2101 tij_ab(3, 3)*qp_j(3, 3))
2103 ef0_j = ef0_j +
fac*(tij_ab(1, 1)*qp_i(1, 1) + &
2104 tij_ab(2, 1)*qp_i(2, 1) + &
2105 tij_ab(3, 1)*qp_i(3, 1) + &
2106 tij_ab(1, 2)*qp_i(1, 2) + &
2107 tij_ab(2, 2)*qp_i(2, 2) + &
2108 tij_ab(3, 2)*qp_i(3, 2) + &
2109 tij_ab(1, 3)*qp_i(1, 3) + &
2110 tij_ab(2, 3)*qp_i(2, 3) + &
2111 tij_ab(3, 3)*qp_i(3, 3))
2114 IF (do_efield1)
THEN
2115 ef1_i(1) = ef1_i(1) -
fac*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
2116 tij_abc(2, 1, 1)*qp_j(2, 1) + &
2117 tij_abc(3, 1, 1)*qp_j(3, 1) + &
2118 tij_abc(1, 2, 1)*qp_j(1, 2) + &
2119 tij_abc(2, 2, 1)*qp_j(2, 2) + &
2120 tij_abc(3, 2, 1)*qp_j(3, 2) + &
2121 tij_abc(1, 3, 1)*qp_j(1, 3) + &
2122 tij_abc(2, 3, 1)*qp_j(2, 3) + &
2123 tij_abc(3, 3, 1)*qp_j(3, 3))
2124 ef1_i(2) = ef1_i(2) -
fac*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
2125 tij_abc(2, 1, 2)*qp_j(2, 1) + &
2126 tij_abc(3, 1, 2)*qp_j(3, 1) + &
2127 tij_abc(1, 2, 2)*qp_j(1, 2) + &
2128 tij_abc(2, 2, 2)*qp_j(2, 2) + &
2129 tij_abc(3, 2, 2)*qp_j(3, 2) + &
2130 tij_abc(1, 3, 2)*qp_j(1, 3) + &
2131 tij_abc(2, 3, 2)*qp_j(2, 3) + &
2132 tij_abc(3, 3, 2)*qp_j(3, 3))
2133 ef1_i(3) = ef1_i(3) -
fac*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
2134 tij_abc(2, 1, 3)*qp_j(2, 1) + &
2135 tij_abc(3, 1, 3)*qp_j(3, 1) + &
2136 tij_abc(1, 2, 3)*qp_j(1, 2) + &
2137 tij_abc(2, 2, 3)*qp_j(2, 2) + &
2138 tij_abc(3, 2, 3)*qp_j(3, 2) + &
2139 tij_abc(1, 3, 3)*qp_j(1, 3) + &
2140 tij_abc(2, 3, 3)*qp_j(2, 3) + &
2141 tij_abc(3, 3, 3)*qp_j(3, 3))
2143 ef1_j(1) = ef1_j(1) +
fac*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
2144 tij_abc(2, 1, 1)*qp_i(2, 1) + &
2145 tij_abc(3, 1, 1)*qp_i(3, 1) + &
2146 tij_abc(1, 2, 1)*qp_i(1, 2) + &
2147 tij_abc(2, 2, 1)*qp_i(2, 2) + &
2148 tij_abc(3, 2, 1)*qp_i(3, 2) + &
2149 tij_abc(1, 3, 1)*qp_i(1, 3) + &
2150 tij_abc(2, 3, 1)*qp_i(2, 3) + &
2151 tij_abc(3, 3, 1)*qp_i(3, 3))
2152 ef1_j(2) = ef1_j(2) +
fac*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
2153 tij_abc(2, 1, 2)*qp_i(2, 1) + &
2154 tij_abc(3, 1, 2)*qp_i(3, 1) + &
2155 tij_abc(1, 2, 2)*qp_i(1, 2) + &
2156 tij_abc(2, 2, 2)*qp_i(2, 2) + &
2157 tij_abc(3, 2, 2)*qp_i(3, 2) + &
2158 tij_abc(1, 3, 2)*qp_i(1, 3) + &
2159 tij_abc(2, 3, 2)*qp_i(2, 3) + &
2160 tij_abc(3, 3, 2)*qp_i(3, 3))
2161 ef1_j(3) = ef1_j(3) +
fac*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
2162 tij_abc(2, 1, 3)*qp_i(2, 1) + &
2163 tij_abc(3, 1, 3)*qp_i(3, 1) + &
2164 tij_abc(1, 2, 3)*qp_i(1, 2) + &
2165 tij_abc(2, 2, 3)*qp_i(2, 2) + &
2166 tij_abc(3, 2, 3)*qp_i(3, 2) + &
2167 tij_abc(1, 3, 3)*qp_i(1, 3) + &
2168 tij_abc(2, 3, 3)*qp_i(2, 3) + &
2169 tij_abc(3, 3, 3)*qp_i(3, 3))
2172 IF (do_efield2)
THEN
2173 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
2174 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
2175 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
2176 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
2177 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
2178 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
2179 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
2180 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
2181 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
2182 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
2183 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
2184 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
2185 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
2186 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
2187 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
2188 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
2189 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
2190 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
2191 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
2192 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
2193 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
2194 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
2195 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
2196 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
2197 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
2198 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
2199 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
2200 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
2201 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
2202 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
2203 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
2204 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
2205 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
2206 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
2207 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
2208 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
2209 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
2210 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
2211 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
2212 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
2213 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
2214 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
2215 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
2216 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
2217 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
2218 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
2219 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
2220 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
2221 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
2222 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
2223 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
2224 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
2225 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
2226 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
2228 ef2_i(1, 1) = ef2_i(1, 1) - tmp11
2229 ef2_i(1, 2) = ef2_i(1, 2) - tmp12
2230 ef2_i(1, 3) = ef2_i(1, 3) - tmp13
2231 ef2_i(2, 1) = ef2_i(2, 1) - tmp12
2232 ef2_i(2, 2) = ef2_i(2, 2) - tmp22
2233 ef2_i(2, 3) = ef2_i(2, 3) - tmp23
2234 ef2_i(3, 1) = ef2_i(3, 1) - tmp13
2235 ef2_i(3, 2) = ef2_i(3, 2) - tmp23
2236 ef2_i(3, 3) = ef2_i(3, 3) - tmp33
2238 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_i(1, 1) + &
2239 tij_abcd(2, 1, 1, 1)*qp_i(2, 1) + &
2240 tij_abcd(3, 1, 1, 1)*qp_i(3, 1) + &
2241 tij_abcd(1, 2, 1, 1)*qp_i(1, 2) + &
2242 tij_abcd(2, 2, 1, 1)*qp_i(2, 2) + &
2243 tij_abcd(3, 2, 1, 1)*qp_i(3, 2) + &
2244 tij_abcd(1, 3, 1, 1)*qp_i(1, 3) + &
2245 tij_abcd(2, 3, 1, 1)*qp_i(2, 3) + &
2246 tij_abcd(3, 3, 1, 1)*qp_i(3, 3))
2247 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_i(1, 1) + &
2248 tij_abcd(2, 1, 1, 2)*qp_i(2, 1) + &
2249 tij_abcd(3, 1, 1, 2)*qp_i(3, 1) + &
2250 tij_abcd(1, 2, 1, 2)*qp_i(1, 2) + &
2251 tij_abcd(2, 2, 1, 2)*qp_i(2, 2) + &
2252 tij_abcd(3, 2, 1, 2)*qp_i(3, 2) + &
2253 tij_abcd(1, 3, 1, 2)*qp_i(1, 3) + &
2254 tij_abcd(2, 3, 1, 2)*qp_i(2, 3) + &
2255 tij_abcd(3, 3, 1, 2)*qp_i(3, 3))
2256 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_i(1, 1) + &
2257 tij_abcd(2, 1, 1, 3)*qp_i(2, 1) + &
2258 tij_abcd(3, 1, 1, 3)*qp_i(3, 1) + &
2259 tij_abcd(1, 2, 1, 3)*qp_i(1, 2) + &
2260 tij_abcd(2, 2, 1, 3)*qp_i(2, 2) + &
2261 tij_abcd(3, 2, 1, 3)*qp_i(3, 2) + &
2262 tij_abcd(1, 3, 1, 3)*qp_i(1, 3) + &
2263 tij_abcd(2, 3, 1, 3)*qp_i(2, 3) + &
2264 tij_abcd(3, 3, 1, 3)*qp_i(3, 3))
2265 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_i(1, 1) + &
2266 tij_abcd(2, 1, 2, 2)*qp_i(2, 1) + &
2267 tij_abcd(3, 1, 2, 2)*qp_i(3, 1) + &
2268 tij_abcd(1, 2, 2, 2)*qp_i(1, 2) + &
2269 tij_abcd(2, 2, 2, 2)*qp_i(2, 2) + &
2270 tij_abcd(3, 2, 2, 2)*qp_i(3, 2) + &
2271 tij_abcd(1, 3, 2, 2)*qp_i(1, 3) + &
2272 tij_abcd(2, 3, 2, 2)*qp_i(2, 3) + &
2273 tij_abcd(3, 3, 2, 2)*qp_i(3, 3))
2274 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_i(1, 1) + &
2275 tij_abcd(2, 1, 2, 3)*qp_i(2, 1) + &
2276 tij_abcd(3, 1, 2, 3)*qp_i(3, 1) + &
2277 tij_abcd(1, 2, 2, 3)*qp_i(1, 2) + &
2278 tij_abcd(2, 2, 2, 3)*qp_i(2, 2) + &
2279 tij_abcd(3, 2, 2, 3)*qp_i(3, 2) + &
2280 tij_abcd(1, 3, 2, 3)*qp_i(1, 3) + &
2281 tij_abcd(2, 3, 2, 3)*qp_i(2, 3) + &
2282 tij_abcd(3, 3, 2, 3)*qp_i(3, 3))
2283 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_i(1, 1) + &
2284 tij_abcd(2, 1, 3, 3)*qp_i(2, 1) + &
2285 tij_abcd(3, 1, 3, 3)*qp_i(3, 1) + &
2286 tij_abcd(1, 2, 3, 3)*qp_i(1, 2) + &
2287 tij_abcd(2, 2, 3, 3)*qp_i(2, 2) + &
2288 tij_abcd(3, 2, 3, 3)*qp_i(3, 2) + &
2289 tij_abcd(1, 3, 3, 3)*qp_i(1, 3) + &
2290 tij_abcd(2, 3, 3, 3)*qp_i(2, 3) + &
2291 tij_abcd(3, 3, 3, 3)*qp_i(3, 3))
2293 ef2_j(1, 1) = ef2_j(1, 1) - tmp11
2294 ef2_j(1, 2) = ef2_j(1, 2) - tmp12
2295 ef2_j(1, 3) = ef2_j(1, 3) - tmp13
2296 ef2_j(2, 1) = ef2_j(2, 1) - tmp12
2297 ef2_j(2, 2) = ef2_j(2, 2) - tmp22
2298 ef2_j(2, 3) = ef2_j(2, 3) - tmp23
2299 ef2_j(3, 1) = ef2_j(3, 1) - tmp13
2300 ef2_j(3, 2) = ef2_j(3, 2) - tmp23
2301 ef2_j(3, 3) = ef2_j(3, 3) - tmp33
2305 IF (task(3, 2))
THEN
2309 tmp_ij = dp_i(1)*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
2310 tij_abc(2, 1, 1)*qp_j(2, 1) + &
2311 tij_abc(3, 1, 1)*qp_j(3, 1) + &
2312 tij_abc(1, 2, 1)*qp_j(1, 2) + &
2313 tij_abc(2, 2, 1)*qp_j(2, 2) + &
2314 tij_abc(3, 2, 1)*qp_j(3, 2) + &
2315 tij_abc(1, 3, 1)*qp_j(1, 3) + &
2316 tij_abc(2, 3, 1)*qp_j(2, 3) + &
2317 tij_abc(3, 3, 1)*qp_j(3, 3)) + &
2318 dp_i(2)*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
2319 tij_abc(2, 1, 2)*qp_j(2, 1) + &
2320 tij_abc(3, 1, 2)*qp_j(3, 1) + &
2321 tij_abc(1, 2, 2)*qp_j(1, 2) + &
2322 tij_abc(2, 2, 2)*qp_j(2, 2) + &
2323 tij_abc(3, 2, 2)*qp_j(3, 2) + &
2324 tij_abc(1, 3, 2)*qp_j(1, 3) + &
2325 tij_abc(2, 3, 2)*qp_j(2, 3) + &
2326 tij_abc(3, 3, 2)*qp_j(3, 3)) + &
2327 dp_i(3)*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
2328 tij_abc(2, 1, 3)*qp_j(2, 1) + &
2329 tij_abc(3, 1, 3)*qp_j(3, 1) + &
2330 tij_abc(1, 2, 3)*qp_j(1, 2) + &
2331 tij_abc(2, 2, 3)*qp_j(2, 2) + &
2332 tij_abc(3, 2, 3)*qp_j(3, 2) + &
2333 tij_abc(1, 3, 3)*qp_j(1, 3) + &
2334 tij_abc(2, 3, 3)*qp_j(2, 3) + &
2335 tij_abc(3, 3, 3)*qp_j(3, 3))
2338 tmp_ji = dp_j(1)*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
2339 tij_abc(2, 1, 1)*qp_i(2, 1) + &
2340 tij_abc(3, 1, 1)*qp_i(3, 1) + &
2341 tij_abc(1, 2, 1)*qp_i(1, 2) + &
2342 tij_abc(2, 2, 1)*qp_i(2, 2) + &
2343 tij_abc(3, 2, 1)*qp_i(3, 2) + &
2344 tij_abc(1, 3, 1)*qp_i(1, 3) + &
2345 tij_abc(2, 3, 1)*qp_i(2, 3) + &
2346 tij_abc(3, 3, 1)*qp_i(3, 3)) + &
2347 dp_j(2)*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
2348 tij_abc(2, 1, 2)*qp_i(2, 1) + &
2349 tij_abc(3, 1, 2)*qp_i(3, 1) + &
2350 tij_abc(1, 2, 2)*qp_i(1, 2) + &
2351 tij_abc(2, 2, 2)*qp_i(2, 2) + &
2352 tij_abc(3, 2, 2)*qp_i(3, 2) + &
2353 tij_abc(1, 3, 2)*qp_i(1, 3) + &
2354 tij_abc(2, 3, 2)*qp_i(2, 3) + &
2355 tij_abc(3, 3, 2)*qp_i(3, 3)) + &
2356 dp_j(3)*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
2357 tij_abc(2, 1, 3)*qp_i(2, 1) + &
2358 tij_abc(3, 1, 3)*qp_i(3, 1) + &
2359 tij_abc(1, 2, 3)*qp_i(1, 2) + &
2360 tij_abc(2, 2, 3)*qp_i(2, 2) + &
2361 tij_abc(3, 2, 3)*qp_i(3, 2) + &
2362 tij_abc(1, 3, 3)*qp_i(1, 3) + &
2363 tij_abc(2, 3, 3)*qp_i(2, 3) + &
2364 tij_abc(3, 3, 3)*qp_i(3, 3))
2366 tmp =
fac*(tmp_ij - tmp_ji)
2368 IF (do_forces .OR. do_stress)
THEN
2371 tmp_ij = dp_i(1)*(tij_abcd(1, 1, 1, k)*qp_j(1, 1) + &
2372 tij_abcd(2, 1, 1, k)*qp_j(2, 1) + &
2373 tij_abcd(3, 1, 1, k)*qp_j(3, 1) + &
2374 tij_abcd(1, 2, 1, k)*qp_j(1, 2) + &
2375 tij_abcd(2, 2, 1, k)*qp_j(2, 2) + &
2376 tij_abcd(3, 2, 1, k)*qp_j(3, 2) + &
2377 tij_abcd(1, 3, 1, k)*qp_j(1, 3) + &
2378 tij_abcd(2, 3, 1, k)*qp_j(2, 3) + &
2379 tij_abcd(3, 3, 1, k)*qp_j(3, 3)) + &
2380 dp_i(2)*(tij_abcd(1, 1, 2, k)*qp_j(1, 1) + &
2381 tij_abcd(2, 1, 2, k)*qp_j(2, 1) + &
2382 tij_abcd(3, 1, 2, k)*qp_j(3, 1) + &
2383 tij_abcd(1, 2, 2, k)*qp_j(1, 2) + &
2384 tij_abcd(2, 2, 2, k)*qp_j(2, 2) + &
2385 tij_abcd(3, 2, 2, k)*qp_j(3, 2) + &
2386 tij_abcd(1, 3, 2, k)*qp_j(1, 3) + &
2387 tij_abcd(2, 3, 2, k)*qp_j(2, 3) + &
2388 tij_abcd(3, 3, 2, k)*qp_j(3, 3)) + &
2389 dp_i(3)*(tij_abcd(1, 1, 3, k)*qp_j(1, 1) + &
2390 tij_abcd(2, 1, 3, k)*qp_j(2, 1) + &
2391 tij_abcd(3, 1, 3, k)*qp_j(3, 1) + &
2392 tij_abcd(1, 2, 3, k)*qp_j(1, 2) + &
2393 tij_abcd(2, 2, 3, k)*qp_j(2, 2) + &
2394 tij_abcd(3, 2, 3, k)*qp_j(3, 2) + &
2395 tij_abcd(1, 3, 3, k)*qp_j(1, 3) + &
2396 tij_abcd(2, 3, 3, k)*qp_j(2, 3) + &
2397 tij_abcd(3, 3, 3, k)*qp_j(3, 3))
2400 tmp_ji = dp_j(1)*(tij_abcd(1, 1, 1, k)*qp_i(1, 1) + &
2401 tij_abcd(2, 1, 1, k)*qp_i(2, 1) + &
2402 tij_abcd(3, 1, 1, k)*qp_i(3, 1) + &
2403 tij_abcd(1, 2, 1, k)*qp_i(1, 2) + &
2404 tij_abcd(2, 2, 1, k)*qp_i(2, 2) + &
2405 tij_abcd(3, 2, 1, k)*qp_i(3, 2) + &
2406 tij_abcd(1, 3, 1, k)*qp_i(1, 3) + &
2407 tij_abcd(2, 3, 1, k)*qp_i(2, 3) + &
2408 tij_abcd(3, 3, 1, k)*qp_i(3, 3)) + &
2409 dp_j(2)*(tij_abcd(1, 1, 2, k)*qp_i(1, 1) + &
2410 tij_abcd(2, 1, 2, k)*qp_i(2, 1) + &
2411 tij_abcd(3, 1, 2, k)*qp_i(3, 1) + &
2412 tij_abcd(1, 2, 2, k)*qp_i(1, 2) + &
2413 tij_abcd(2, 2, 2, k)*qp_i(2, 2) + &
2414 tij_abcd(3, 2, 2, k)*qp_i(3, 2) + &
2415 tij_abcd(1, 3, 2, k)*qp_i(1, 3) + &
2416 tij_abcd(2, 3, 2, k)*qp_i(2, 3) + &
2417 tij_abcd(3, 3, 2, k)*qp_i(3, 3)) + &
2418 dp_j(3)*(tij_abcd(1, 1, 3, k)*qp_i(1, 1) + &
2419 tij_abcd(2, 1, 3, k)*qp_i(2, 1) + &
2420 tij_abcd(3, 1, 3, k)*qp_i(3, 1) + &
2421 tij_abcd(1, 2, 3, k)*qp_i(1, 2) + &
2422 tij_abcd(2, 2, 3, k)*qp_i(2, 2) + &
2423 tij_abcd(3, 2, 3, k)*qp_i(3, 2) + &
2424 tij_abcd(1, 3, 3, k)*qp_i(1, 3) + &
2425 tij_abcd(2, 3, 3, k)*qp_i(2, 3) + &
2426 tij_abcd(3, 3, 3, k)*qp_i(3, 3))
2428 fr(k) = fr(k) -
fac*(tmp_ij - tmp_ji)
2432 IF (task(3, 1))
THEN
2437 tmp_ij = ch_i*(tij_ab(1, 1)*qp_j(1, 1) + &
2438 tij_ab(2, 1)*qp_j(2, 1) + &
2439 tij_ab(3, 1)*qp_j(3, 1) + &
2440 tij_ab(1, 2)*qp_j(1, 2) + &
2441 tij_ab(2, 2)*qp_j(2, 2) + &
2442 tij_ab(3, 2)*qp_j(3, 2) + &
2443 tij_ab(1, 3)*qp_j(1, 3) + &
2444 tij_ab(2, 3)*qp_j(2, 3) + &
2445 tij_ab(3, 3)*qp_j(3, 3))
2448 tmp_ji = ch_j*(tij_ab(1, 1)*qp_i(1, 1) + &
2449 tij_ab(2, 1)*qp_i(2, 1) + &
2450 tij_ab(3, 1)*qp_i(3, 1) + &
2451 tij_ab(1, 2)*qp_i(1, 2) + &
2452 tij_ab(2, 2)*qp_i(2, 2) + &
2453 tij_ab(3, 2)*qp_i(3, 2) + &
2454 tij_ab(1, 3)*qp_i(1, 3) + &
2455 tij_ab(2, 3)*qp_i(2, 3) + &
2456 tij_ab(3, 3)*qp_i(3, 3))
2458 eloc = eloc +
fac*(tmp_ij + tmp_ji)
2459 IF (do_forces .OR. do_stress)
THEN
2462 tmp_ij = ch_i*(tij_abc(1, 1, k)*qp_j(1, 1) + &
2463 tij_abc(2, 1, k)*qp_j(2, 1) + &
2464 tij_abc(3, 1, k)*qp_j(3, 1) + &
2465 tij_abc(1, 2, k)*qp_j(1, 2) + &
2466 tij_abc(2, 2, k)*qp_j(2, 2) + &
2467 tij_abc(3, 2, k)*qp_j(3, 2) + &
2468 tij_abc(1, 3, k)*qp_j(1, 3) + &
2469 tij_abc(2, 3, k)*qp_j(2, 3) + &
2470 tij_abc(3, 3, k)*qp_j(3, 3))
2473 tmp_ji = ch_j*(tij_abc(1, 1, k)*qp_i(1, 1) + &
2474 tij_abc(2, 1, k)*qp_i(2, 1) + &
2475 tij_abc(3, 1, k)*qp_i(3, 1) + &
2476 tij_abc(1, 2, k)*qp_i(1, 2) + &
2477 tij_abc(2, 2, k)*qp_i(2, 2) + &
2478 tij_abc(3, 2, k)*qp_i(3, 2) + &
2479 tij_abc(1, 3, k)*qp_i(1, 3) + &
2480 tij_abc(2, 3, k)*qp_i(2, 3) + &
2481 tij_abc(3, 3, k)*qp_i(3, 3))
2483 fr(k) = fr(k) -
fac*(tmp_ij + tmp_ji)
2487 energy = energy + eloc
2489 forces(1, atom_a) = forces(1, atom_a) - fr(1)
2490 forces(2, atom_a) = forces(2, atom_a) - fr(2)
2491 forces(3, atom_a) = forces(3, atom_a) - fr(3)
2492 forces(1, atom_b) = forces(1, atom_b) + fr(1)
2493 forces(2, atom_b) = forces(2, atom_b) + fr(2)
2494 forces(3, atom_b) = forces(3, atom_b) + fr(3)
2499 IF (do_efield0)
THEN
2500 efield0(atom_a) = efield0(atom_a) + ef0_j
2502 efield0(atom_b) = efield0(atom_b) + ef0_i
2505 IF (do_efield1)
THEN
2506 efield1(1, atom_a) = efield1(1, atom_a) + ef1_j(1)
2507 efield1(2, atom_a) = efield1(2, atom_a) + ef1_j(2)
2508 efield1(3, atom_a) = efield1(3, atom_a) + ef1_j(3)
2510 efield1(1, atom_b) = efield1(1, atom_b) + ef1_i(1)
2511 efield1(2, atom_b) = efield1(2, atom_b) + ef1_i(2)
2512 efield1(3, atom_b) = efield1(3, atom_b) + ef1_i(3)
2515 IF (do_efield2)
THEN
2516 efield2(1, atom_a) = efield2(1, atom_a) + ef2_j(1, 1)
2517 efield2(2, atom_a) = efield2(2, atom_a) + ef2_j(1, 2)
2518 efield2(3, atom_a) = efield2(3, atom_a) + ef2_j(1, 3)
2519 efield2(4, atom_a) = efield2(4, atom_a) + ef2_j(2, 1)
2520 efield2(5, atom_a) = efield2(5, atom_a) + ef2_j(2, 2)
2521 efield2(6, atom_a) = efield2(6, atom_a) + ef2_j(2, 3)
2522 efield2(7, atom_a) = efield2(7, atom_a) + ef2_j(3, 1)
2523 efield2(8, atom_a) = efield2(8, atom_a) + ef2_j(3, 2)
2524 efield2(9, atom_a) = efield2(9, atom_a) + ef2_j(3, 3)
2526 efield2(1, atom_b) = efield2(1, atom_b) + ef2_i(1, 1)
2527 efield2(2, atom_b) = efield2(2, atom_b) + ef2_i(1, 2)
2528 efield2(3, atom_b) = efield2(3, atom_b) + ef2_i(1, 3)
2529 efield2(4, atom_b) = efield2(4, atom_b) + ef2_i(2, 1)
2530 efield2(5, atom_b) = efield2(5, atom_b) + ef2_i(2, 2)
2531 efield2(6, atom_b) = efield2(6, atom_b) + ef2_i(2, 3)
2532 efield2(7, atom_b) = efield2(7, atom_b) + ef2_i(3, 1)
2533 efield2(8, atom_b) = efield2(8, atom_b) + ef2_i(3, 2)
2534 efield2(9, atom_b) = efield2(9, atom_b) + ef2_i(3, 3)
2538 ptens11 = ptens11 + rab(1)*fr(1)
2539 ptens21 = ptens21 + rab(2)*fr(1)
2540 ptens31 = ptens31 + rab(3)*fr(1)
2541 ptens12 = ptens12 + rab(1)*fr(2)
2542 ptens22 = ptens22 + rab(2)*fr(2)
2543 ptens32 = ptens32 + rab(3)*fr(2)
2544 ptens13 = ptens13 + rab(1)*fr(3)
2545 ptens23 = ptens23 + rab(2)*fr(3)
2546 ptens33 = ptens33 + rab(3)*fr(3)
2552 END DO kind_group_loop
2555 pv(1, 1) = pv(1, 1) + ptens11
2556 pv(1, 2) = pv(1, 2) + (ptens12 + ptens21)*0.5_dp
2557 pv(1, 3) = pv(1, 3) + (ptens13 + ptens31)*0.5_dp
2559 pv(2, 2) = pv(2, 2) + ptens22
2560 pv(2, 3) = pv(2, 3) + (ptens23 + ptens32)*0.5_dp
2563 pv(3, 3) = pv(3, 3) + ptens33
2566 CALL timestop(handle)
2567 END SUBROUTINE ewald_multipole_sr
2591 SUBROUTINE ewald_multipole_bonded(nonbond_env, particle_set, ewald_env, &
2592 cell, energy, task, do_forces, do_efield, do_stress, charges, &
2593 dipoles, quadrupoles, forces, pv, efield0, efield1, efield2)
2599 REAL(kind=
dp),
INTENT(INOUT) :: energy
2600 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
2601 LOGICAL,
INTENT(IN) :: do_forces, do_efield, do_stress
2602 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: charges
2603 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
2604 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
2605 POINTER :: quadrupoles
2606 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
2607 OPTIONAL :: forces, pv
2608 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
2609 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1, efield2
2611 CHARACTER(len=*),
PARAMETER :: routinen =
'ewald_multipole_bonded'
2613 INTEGER :: a, atom_a, atom_b, b, c, d, e, handle, &
2614 i, iend, igrp, ilist, ipair, istart, &
2616 INTEGER,
DIMENSION(:, :),
POINTER ::
list
2617 LOGICAL :: do_efield0, do_efield1, do_efield2, &
2619 REAL(kind=
dp) :: alpha, ch_i, ch_j, ef0_i, ef0_j, eloc,
fac, fac_ij, ir, irab2, ptens11, &
2620 ptens12, ptens13, ptens21, ptens22, ptens23, ptens31, ptens32, ptens33, r, rab2, tij, &
2621 tmp, tmp1, tmp11, tmp12, tmp13, tmp2, tmp21, tmp22, tmp23, tmp31, tmp32, tmp33, tmp_ij, &
2623 REAL(kind=
dp),
DIMENSION(0:5) :: f
2624 REAL(kind=
dp),
DIMENSION(3) :: dp_i, dp_j, ef1_i, ef1_j, fr, rab, tij_a
2625 REAL(kind=
dp),
DIMENSION(3, 3) :: ef2_i, ef2_j, qp_i, qp_j, tij_ab
2626 REAL(kind=
dp),
DIMENSION(3, 3, 3) :: tij_abc
2627 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3) :: tij_abcd
2628 REAL(kind=
dp),
DIMENSION(3, 3, 3, 3, 3) :: tij_abcde
2632 CALL timeset(routinen, handle)
2633 do_efield0 = do_efield .AND.
ASSOCIATED(efield0)
2634 do_efield1 = do_efield .AND.
ASSOCIATED(efield1)
2635 do_efield2 = do_efield .AND.
ASSOCIATED(efield2)
2637 ptens11 = 0.0_dp; ptens12 = 0.0_dp; ptens13 = 0.0_dp
2638 ptens21 = 0.0_dp; ptens22 = 0.0_dp; ptens23 = 0.0_dp
2639 ptens31 = 0.0_dp; ptens32 = 0.0_dp; ptens33 = 0.0_dp
2645 lists:
DO ilist = 1, nonbonded%nlists
2646 neighbor_kind_pair => nonbonded%neighbor_kind_pairs(ilist)
2647 nscale = neighbor_kind_pair%nscale
2648 IF (nscale == 0) cycle
2649 list => neighbor_kind_pair%list
2650 kind_group_loop:
DO igrp = 1, neighbor_kind_pair%ngrp_kind
2651 istart = neighbor_kind_pair%grp_kind_start(igrp)
2652 IF (istart > nscale) cycle
2653 iend = min(neighbor_kind_pair%grp_kind_end(igrp), nscale)
2654 pairs:
DO ipair = istart, iend
2656 fac_ij = -1.0_dp + neighbor_kind_pair%ei_scale(ipair)
2657 IF (fac_ij >= 0) cycle
2659 atom_a =
list(1, ipair)
2660 atom_b =
list(2, ipair)
2662 rab = particle_set(atom_b)%r - particle_set(atom_a)%r
2663 rab =
pbc(rab, cell)
2664 rab2 = rab(1)**2 + rab(2)**2 + rab(3)**2
2668 tij_a = huge(0.0_dp)
2669 tij_ab = huge(0.0_dp)
2670 tij_abc = huge(0.0_dp)
2671 tij_abcd = huge(0.0_dp)
2672 tij_abcde = huge(0.0_dp)
2678 IF (debug_this_module .AND. debug_r_space .AND. (.NOT. debug_g_space))
THEN
2682 f(0) = erf(alpha*r)*ir
2688 f(i) = irab2*(f(i - 1) - tmp*((2.0_dp*alpha**2)**i)/(
fac*alpha))
2693 force_eval = do_stress
2694 IF (task(1, 1))
THEN
2696 force_eval = do_forces .OR. do_efield1
2698 IF (task(2, 2)) force_eval = force_eval .OR. do_efield0
2699 IF (task(1, 2) .OR. force_eval)
THEN
2700 force_eval = do_stress
2701 tij_a = -rab*f(1)*fac_ij
2702 IF (task(1, 2)) force_eval = force_eval .OR. do_forces
2704 IF (task(1, 1)) force_eval = force_eval .OR. do_efield2
2705 IF (task(3, 3)) force_eval = force_eval .OR. do_efield0
2706 IF (task(2, 2) .OR. task(3, 1) .OR. force_eval)
THEN
2707 force_eval = do_stress
2710 tmp = rab(a)*rab(b)*fac_ij
2711 tij_ab(a, b) = 3.0_dp*tmp*f(2)
2712 IF (a == b) tij_ab(a, b) = tij_ab(a, b) - f(1)*fac_ij
2715 IF (task(2, 2) .OR. task(3, 1)) force_eval = force_eval .OR. do_forces
2717 IF (task(2, 2)) force_eval = force_eval .OR. do_efield2
2718 IF (task(3, 3)) force_eval = force_eval .OR. do_efield1
2719 IF (task(3, 2) .OR. force_eval)
THEN
2720 force_eval = do_stress
2724 tmp = rab(a)*rab(b)*rab(c)*fac_ij
2725 tij_abc(a, b, c) = -15.0_dp*tmp*f(3)
2726 tmp = 3.0_dp*f(2)*fac_ij
2727 IF (a == b) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(c)
2728 IF (a == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(b)
2729 IF (b == c) tij_abc(a, b, c) = tij_abc(a, b, c) + tmp*rab(a)
2733 IF (task(3, 2)) force_eval = force_eval .OR. do_forces
2735 IF (task(3, 3) .OR. force_eval)
THEN
2736 force_eval = do_stress
2741 tmp = rab(a)*rab(b)*rab(c)*rab(d)*fac_ij
2742 tij_abcd(a, b, c, d) = 105.0_dp*tmp*f(4)
2743 tmp1 = 15.0_dp*f(3)*fac_ij
2744 tmp2 = 3.0_dp*f(2)*fac_ij
2746 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(c)*rab(d)
2747 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
2750 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(d)
2751 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
2753 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(b)*rab(c)
2755 tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(d)
2756 IF (a == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) + tmp2
2758 IF (b == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(c)
2759 IF (c == d) tij_abcd(a, b, c, d) = tij_abcd(a, b, c, d) - tmp1*rab(a)*rab(b)
2764 IF (task(3, 3)) force_eval = force_eval .OR. do_forces
2766 IF (force_eval)
THEN
2767 force_eval = do_stress
2773 tmp = rab(a)*rab(b)*rab(c)*rab(d)*rab(e)*fac_ij
2774 tij_abcde(a, b, c, d, e) = -945.0_dp*tmp*f(5)
2775 tmp1 = 105.0_dp*f(4)*fac_ij
2776 tmp2 = 15.0_dp*f(3)*fac_ij
2778 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(c)*rab(d)*rab(e)
2779 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
2780 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
2781 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
2784 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(d)*rab(e)
2785 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
2786 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
2787 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
2790 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(e)
2791 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(e)
2792 IF (b == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
2793 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
2796 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(b)*rab(c)*rab(d)
2797 IF (b == c) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(d)
2798 IF (b == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(c)
2799 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(b)
2802 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(d)*rab(e)
2803 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
2806 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(e)
2807 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
2810 tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(c)*rab(d)
2811 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) - tmp2*rab(a)
2813 IF (c == d) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(e)
2814 IF (c == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(d)
2815 IF (d == e) tij_abcde(a, b, c, d, e) = tij_abcde(a, b, c, d, e) + tmp1*rab(a)*rab(b)*rab(c)
2833 IF (debug_this_module)
THEN
2841 IF (any(task(1, :)))
THEN
2842 ch_j = charges(atom_a)
2843 ch_i = charges(atom_b)
2845 IF (any(task(2, :)))
THEN
2846 dp_j = dipoles(:, atom_a)
2847 dp_i = dipoles(:, atom_b)
2849 IF (any(task(3, :)))
THEN
2850 qp_j = quadrupoles(:, :, atom_a)
2851 qp_i = quadrupoles(:, :, atom_b)
2853 IF (task(1, 1))
THEN
2855 eloc = eloc + ch_i*tij*ch_j
2857 IF (do_forces .OR. do_stress)
THEN
2858 fr(1) = fr(1) - ch_j*tij_a(1)*ch_i
2859 fr(2) = fr(2) - ch_j*tij_a(2)*ch_i
2860 fr(3) = fr(3) - ch_j*tij_a(3)*ch_i
2865 IF (do_efield0)
THEN
2866 ef0_i = ef0_i + tij*ch_j
2868 ef0_j = ef0_j + tij*ch_i
2871 IF (do_efield1)
THEN
2872 ef1_i(1) = ef1_i(1) - tij_a(1)*ch_j
2873 ef1_i(2) = ef1_i(2) - tij_a(2)*ch_j
2874 ef1_i(3) = ef1_i(3) - tij_a(3)*ch_j
2876 ef1_j(1) = ef1_j(1) + tij_a(1)*ch_i
2877 ef1_j(2) = ef1_j(2) + tij_a(2)*ch_i
2878 ef1_j(3) = ef1_j(3) + tij_a(3)*ch_i
2883 IF (do_efield2)
THEN
2884 ef2_i(1, 1) = ef2_i(1, 1) - tij_ab(1, 1)*ch_j
2885 ef2_i(2, 1) = ef2_i(2, 1) - tij_ab(2, 1)*ch_j
2886 ef2_i(3, 1) = ef2_i(3, 1) - tij_ab(3, 1)*ch_j
2887 ef2_i(1, 2) = ef2_i(1, 2) - tij_ab(1, 2)*ch_j
2888 ef2_i(2, 2) = ef2_i(2, 2) - tij_ab(2, 2)*ch_j
2889 ef2_i(3, 2) = ef2_i(3, 2) - tij_ab(3, 2)*ch_j
2890 ef2_i(1, 3) = ef2_i(1, 3) - tij_ab(1, 3)*ch_j
2891 ef2_i(2, 3) = ef2_i(2, 3) - tij_ab(2, 3)*ch_j
2892 ef2_i(3, 3) = ef2_i(3, 3) - tij_ab(3, 3)*ch_j
2894 ef2_j(1, 1) = ef2_j(1, 1) - tij_ab(1, 1)*ch_i
2895 ef2_j(2, 1) = ef2_j(2, 1) - tij_ab(2, 1)*ch_i
2896 ef2_j(3, 1) = ef2_j(3, 1) - tij_ab(3, 1)*ch_i
2897 ef2_j(1, 2) = ef2_j(1, 2) - tij_ab(1, 2)*ch_i
2898 ef2_j(2, 2) = ef2_j(2, 2) - tij_ab(2, 2)*ch_i
2899 ef2_j(3, 2) = ef2_j(3, 2) - tij_ab(3, 2)*ch_i
2900 ef2_j(1, 3) = ef2_j(1, 3) - tij_ab(1, 3)*ch_i
2901 ef2_j(2, 3) = ef2_j(2, 3) - tij_ab(2, 3)*ch_i
2902 ef2_j(3, 3) = ef2_j(3, 3) - tij_ab(3, 3)*ch_i
2906 IF (task(2, 2))
THEN
2908 tmp = -(dp_i(1)*(tij_ab(1, 1)*dp_j(1) + &
2909 tij_ab(2, 1)*dp_j(2) + &
2910 tij_ab(3, 1)*dp_j(3)) + &
2911 dp_i(2)*(tij_ab(1, 2)*dp_j(1) + &
2912 tij_ab(2, 2)*dp_j(2) + &
2913 tij_ab(3, 2)*dp_j(3)) + &
2914 dp_i(3)*(tij_ab(1, 3)*dp_j(1) + &
2915 tij_ab(2, 3)*dp_j(2) + &
2916 tij_ab(3, 3)*dp_j(3)))
2919 IF (do_forces .OR. do_stress)
THEN
2921 fr(k) = fr(k) + dp_i(1)*(tij_abc(1, 1, k)*dp_j(1) + &
2922 tij_abc(2, 1, k)*dp_j(2) + &
2923 tij_abc(3, 1, k)*dp_j(3)) &
2924 + dp_i(2)*(tij_abc(1, 2, k)*dp_j(1) + &
2925 tij_abc(2, 2, k)*dp_j(2) + &
2926 tij_abc(3, 2, k)*dp_j(3)) &
2927 + dp_i(3)*(tij_abc(1, 3, k)*dp_j(1) + &
2928 tij_abc(2, 3, k)*dp_j(2) + &
2929 tij_abc(3, 3, k)*dp_j(3))
2935 IF (do_efield0)
THEN
2936 ef0_i = ef0_i - (tij_a(1)*dp_j(1) + &
2937 tij_a(2)*dp_j(2) + &
2940 ef0_j = ef0_j + (tij_a(1)*dp_i(1) + &
2941 tij_a(2)*dp_i(2) + &
2945 IF (do_efield1)
THEN
2946 ef1_i(1) = ef1_i(1) + (tij_ab(1, 1)*dp_j(1) + &
2947 tij_ab(2, 1)*dp_j(2) + &
2948 tij_ab(3, 1)*dp_j(3))
2949 ef1_i(2) = ef1_i(2) + (tij_ab(1, 2)*dp_j(1) + &
2950 tij_ab(2, 2)*dp_j(2) + &
2951 tij_ab(3, 2)*dp_j(3))
2952 ef1_i(3) = ef1_i(3) + (tij_ab(1, 3)*dp_j(1) + &
2953 tij_ab(2, 3)*dp_j(2) + &
2954 tij_ab(3, 3)*dp_j(3))
2956 ef1_j(1) = ef1_j(1) + (tij_ab(1, 1)*dp_i(1) + &
2957 tij_ab(2, 1)*dp_i(2) + &
2958 tij_ab(3, 1)*dp_i(3))
2959 ef1_j(2) = ef1_j(2) + (tij_ab(1, 2)*dp_i(1) + &
2960 tij_ab(2, 2)*dp_i(2) + &
2961 tij_ab(3, 2)*dp_i(3))
2962 ef1_j(3) = ef1_j(3) + (tij_ab(1, 3)*dp_i(1) + &
2963 tij_ab(2, 3)*dp_i(2) + &
2964 tij_ab(3, 3)*dp_i(3))
2967 IF (do_efield2)
THEN
2968 ef2_i(1, 1) = ef2_i(1, 1) + (tij_abc(1, 1, 1)*dp_j(1) + &
2969 tij_abc(2, 1, 1)*dp_j(2) + &
2970 tij_abc(3, 1, 1)*dp_j(3))
2971 ef2_i(1, 2) = ef2_i(1, 2) + (tij_abc(1, 1, 2)*dp_j(1) + &
2972 tij_abc(2, 1, 2)*dp_j(2) + &
2973 tij_abc(3, 1, 2)*dp_j(3))
2974 ef2_i(1, 3) = ef2_i(1, 3) + (tij_abc(1, 1, 3)*dp_j(1) + &
2975 tij_abc(2, 1, 3)*dp_j(2) + &
2976 tij_abc(3, 1, 3)*dp_j(3))
2977 ef2_i(2, 1) = ef2_i(2, 1) + (tij_abc(1, 2, 1)*dp_j(1) + &
2978 tij_abc(2, 2, 1)*dp_j(2) + &
2979 tij_abc(3, 2, 1)*dp_j(3))
2980 ef2_i(2, 2) = ef2_i(2, 2) + (tij_abc(1, 2, 2)*dp_j(1) + &
2981 tij_abc(2, 2, 2)*dp_j(2) + &
2982 tij_abc(3, 2, 2)*dp_j(3))
2983 ef2_i(2, 3) = ef2_i(2, 3) + (tij_abc(1, 2, 3)*dp_j(1) + &
2984 tij_abc(2, 2, 3)*dp_j(2) + &
2985 tij_abc(3, 2, 3)*dp_j(3))
2986 ef2_i(3, 1) = ef2_i(3, 1) + (tij_abc(1, 3, 1)*dp_j(1) + &
2987 tij_abc(2, 3, 1)*dp_j(2) + &
2988 tij_abc(3, 3, 1)*dp_j(3))
2989 ef2_i(3, 2) = ef2_i(3, 2) + (tij_abc(1, 3, 2)*dp_j(1) + &
2990 tij_abc(2, 3, 2)*dp_j(2) + &
2991 tij_abc(3, 3, 2)*dp_j(3))
2992 ef2_i(3, 3) = ef2_i(3, 3) + (tij_abc(1, 3, 3)*dp_j(1) + &
2993 tij_abc(2, 3, 3)*dp_j(2) + &
2994 tij_abc(3, 3, 3)*dp_j(3))
2996 ef2_j(1, 1) = ef2_j(1, 1) - (tij_abc(1, 1, 1)*dp_i(1) + &
2997 tij_abc(2, 1, 1)*dp_i(2) + &
2998 tij_abc(3, 1, 1)*dp_i(3))
2999 ef2_j(1, 2) = ef2_j(1, 2) - (tij_abc(1, 1, 2)*dp_i(1) + &
3000 tij_abc(2, 1, 2)*dp_i(2) + &
3001 tij_abc(3, 1, 2)*dp_i(3))
3002 ef2_j(1, 3) = ef2_j(1, 3) - (tij_abc(1, 1, 3)*dp_i(1) + &
3003 tij_abc(2, 1, 3)*dp_i(2) + &
3004 tij_abc(3, 1, 3)*dp_i(3))
3005 ef2_j(2, 1) = ef2_j(2, 1) - (tij_abc(1, 2, 1)*dp_i(1) + &
3006 tij_abc(2, 2, 1)*dp_i(2) + &
3007 tij_abc(3, 2, 1)*dp_i(3))
3008 ef2_j(2, 2) = ef2_j(2, 2) - (tij_abc(1, 2, 2)*dp_i(1) + &
3009 tij_abc(2, 2, 2)*dp_i(2) + &
3010 tij_abc(3, 2, 2)*dp_i(3))
3011 ef2_j(2, 3) = ef2_j(2, 3) - (tij_abc(1, 2, 3)*dp_i(1) + &
3012 tij_abc(2, 2, 3)*dp_i(2) + &
3013 tij_abc(3, 2, 3)*dp_i(3))
3014 ef2_j(3, 1) = ef2_j(3, 1) - (tij_abc(1, 3, 1)*dp_i(1) + &
3015 tij_abc(2, 3, 1)*dp_i(2) + &
3016 tij_abc(3, 3, 1)*dp_i(3))
3017 ef2_j(3, 2) = ef2_j(3, 2) - (tij_abc(1, 3, 2)*dp_i(1) + &
3018 tij_abc(2, 3, 2)*dp_i(2) + &
3019 tij_abc(3, 3, 2)*dp_i(3))
3020 ef2_j(3, 3) = ef2_j(3, 3) - (tij_abc(1, 3, 3)*dp_i(1) + &
3021 tij_abc(2, 3, 3)*dp_i(2) + &
3022 tij_abc(3, 3, 3)*dp_i(3))
3026 IF (task(2, 1))
THEN
3028 tmp = ch_j*(tij_a(1)*dp_i(1) + &
3029 tij_a(2)*dp_i(2) + &
3031 - ch_i*(tij_a(1)*dp_j(1) + &
3032 tij_a(2)*dp_j(2) + &
3036 IF (do_forces .OR. do_stress)
THEN
3038 fr(k) = fr(k) - ch_j*(tij_ab(1, k)*dp_i(1) + &
3039 tij_ab(2, k)*dp_i(2) + &
3040 tij_ab(3, k)*dp_i(3)) &
3041 + ch_i*(tij_ab(1, k)*dp_j(1) + &
3042 tij_ab(2, k)*dp_j(2) + &
3043 tij_ab(3, k)*dp_j(3))
3047 IF (task(3, 3))
THEN
3050 tmp11 = qp_i(1, 1)*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
3051 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
3052 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
3053 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
3054 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
3055 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
3056 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
3057 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
3058 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
3059 tmp21 = qp_i(2, 1)*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
3060 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
3061 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
3062 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
3063 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
3064 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
3065 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
3066 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
3067 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
3068 tmp31 = qp_i(3, 1)*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
3069 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
3070 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
3071 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
3072 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
3073 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
3074 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
3075 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
3076 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
3077 tmp22 = qp_i(2, 2)*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
3078 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
3079 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
3080 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
3081 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
3082 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
3083 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
3084 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
3085 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
3086 tmp32 = qp_i(3, 2)*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
3087 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
3088 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
3089 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
3090 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
3091 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
3092 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
3093 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
3094 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
3095 tmp33 = qp_i(3, 3)*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
3096 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
3097 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
3098 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
3099 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
3100 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
3101 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
3102 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
3103 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
3107 tmp = tmp11 + tmp12 + tmp13 + &
3108 tmp21 + tmp22 + tmp23 + &
3109 tmp31 + tmp32 + tmp33
3111 eloc = eloc +
fac*tmp
3113 IF (do_forces .OR. do_stress)
THEN
3115 tmp11 = qp_i(1, 1)*(tij_abcde(1, 1, 1, 1, k)*qp_j(1, 1) + &
3116 tij_abcde(2, 1, 1, 1, k)*qp_j(2, 1) + &
3117 tij_abcde(3, 1, 1, 1, k)*qp_j(3, 1) + &
3118 tij_abcde(1, 2, 1, 1, k)*qp_j(1, 2) + &
3119 tij_abcde(2, 2, 1, 1, k)*qp_j(2, 2) + &
3120 tij_abcde(3, 2, 1, 1, k)*qp_j(3, 2) + &
3121 tij_abcde(1, 3, 1, 1, k)*qp_j(1, 3) + &
3122 tij_abcde(2, 3, 1, 1, k)*qp_j(2, 3) + &
3123 tij_abcde(3, 3, 1, 1, k)*qp_j(3, 3))
3124 tmp21 = qp_i(2, 1)*(tij_abcde(1, 1, 2, 1, k)*qp_j(1, 1) + &
3125 tij_abcde(2, 1, 2, 1, k)*qp_j(2, 1) + &
3126 tij_abcde(3, 1, 2, 1, k)*qp_j(3, 1) + &
3127 tij_abcde(1, 2, 2, 1, k)*qp_j(1, 2) + &
3128 tij_abcde(2, 2, 2, 1, k)*qp_j(2, 2) + &
3129 tij_abcde(3, 2, 2, 1, k)*qp_j(3, 2) + &
3130 tij_abcde(1, 3, 2, 1, k)*qp_j(1, 3) + &
3131 tij_abcde(2, 3, 2, 1, k)*qp_j(2, 3) + &
3132 tij_abcde(3, 3, 2, 1, k)*qp_j(3, 3))
3133 tmp31 = qp_i(3, 1)*(tij_abcde(1, 1, 3, 1, k)*qp_j(1, 1) + &
3134 tij_abcde(2, 1, 3, 1, k)*qp_j(2, 1) + &
3135 tij_abcde(3, 1, 3, 1, k)*qp_j(3, 1) + &
3136 tij_abcde(1, 2, 3, 1, k)*qp_j(1, 2) + &
3137 tij_abcde(2, 2, 3, 1, k)*qp_j(2, 2) + &
3138 tij_abcde(3, 2, 3, 1, k)*qp_j(3, 2) + &
3139 tij_abcde(1, 3, 3, 1, k)*qp_j(1, 3) + &
3140 tij_abcde(2, 3, 3, 1, k)*qp_j(2, 3) + &
3141 tij_abcde(3, 3, 3, 1, k)*qp_j(3, 3))
3142 tmp22 = qp_i(2, 2)*(tij_abcde(1, 1, 2, 2, k)*qp_j(1, 1) + &
3143 tij_abcde(2, 1, 2, 2, k)*qp_j(2, 1) + &
3144 tij_abcde(3, 1, 2, 2, k)*qp_j(3, 1) + &
3145 tij_abcde(1, 2, 2, 2, k)*qp_j(1, 2) + &
3146 tij_abcde(2, 2, 2, 2, k)*qp_j(2, 2) + &
3147 tij_abcde(3, 2, 2, 2, k)*qp_j(3, 2) + &
3148 tij_abcde(1, 3, 2, 2, k)*qp_j(1, 3) + &
3149 tij_abcde(2, 3, 2, 2, k)*qp_j(2, 3) + &
3150 tij_abcde(3, 3, 2, 2, k)*qp_j(3, 3))
3151 tmp32 = qp_i(3, 2)*(tij_abcde(1, 1, 3, 2, k)*qp_j(1, 1) + &
3152 tij_abcde(2, 1, 3, 2, k)*qp_j(2, 1) + &
3153 tij_abcde(3, 1, 3, 2, k)*qp_j(3, 1) + &
3154 tij_abcde(1, 2, 3, 2, k)*qp_j(1, 2) + &
3155 tij_abcde(2, 2, 3, 2, k)*qp_j(2, 2) + &
3156 tij_abcde(3, 2, 3, 2, k)*qp_j(3, 2) + &
3157 tij_abcde(1, 3, 3, 2, k)*qp_j(1, 3) + &
3158 tij_abcde(2, 3, 3, 2, k)*qp_j(2, 3) + &
3159 tij_abcde(3, 3, 3, 2, k)*qp_j(3, 3))
3160 tmp33 = qp_i(3, 3)*(tij_abcde(1, 1, 3, 3, k)*qp_j(1, 1) + &
3161 tij_abcde(2, 1, 3, 3, k)*qp_j(2, 1) + &
3162 tij_abcde(3, 1, 3, 3, k)*qp_j(3, 1) + &
3163 tij_abcde(1, 2, 3, 3, k)*qp_j(1, 2) + &
3164 tij_abcde(2, 2, 3, 3, k)*qp_j(2, 2) + &
3165 tij_abcde(3, 2, 3, 3, k)*qp_j(3, 2) + &
3166 tij_abcde(1, 3, 3, 3, k)*qp_j(1, 3) + &
3167 tij_abcde(2, 3, 3, 3, k)*qp_j(2, 3) + &
3168 tij_abcde(3, 3, 3, 3, k)*qp_j(3, 3))
3172 fr(k) = fr(k) -
fac*(tmp11 + tmp12 + tmp13 + &
3173 tmp21 + tmp22 + tmp23 + &
3174 tmp31 + tmp32 + tmp33)
3181 IF (do_efield0)
THEN
3182 ef0_i = ef0_i +
fac*(tij_ab(1, 1)*qp_j(1, 1) + &
3183 tij_ab(2, 1)*qp_j(2, 1) + &
3184 tij_ab(3, 1)*qp_j(3, 1) + &
3185 tij_ab(1, 2)*qp_j(1, 2) + &
3186 tij_ab(2, 2)*qp_j(2, 2) + &
3187 tij_ab(3, 2)*qp_j(3, 2) + &
3188 tij_ab(1, 3)*qp_j(1, 3) + &
3189 tij_ab(2, 3)*qp_j(2, 3) + &
3190 tij_ab(3, 3)*qp_j(3, 3))
3192 ef0_j = ef0_j +
fac*(tij_ab(1, 1)*qp_i(1, 1) + &
3193 tij_ab(2, 1)*qp_i(2, 1) + &
3194 tij_ab(3, 1)*qp_i(3, 1) + &
3195 tij_ab(1, 2)*qp_i(1, 2) + &
3196 tij_ab(2, 2)*qp_i(2, 2) + &
3197 tij_ab(3, 2)*qp_i(3, 2) + &
3198 tij_ab(1, 3)*qp_i(1, 3) + &
3199 tij_ab(2, 3)*qp_i(2, 3) + &
3200 tij_ab(3, 3)*qp_i(3, 3))
3203 IF (do_efield1)
THEN
3204 ef1_i(1) = ef1_i(1) -
fac*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
3205 tij_abc(2, 1, 1)*qp_j(2, 1) + &
3206 tij_abc(3, 1, 1)*qp_j(3, 1) + &
3207 tij_abc(1, 2, 1)*qp_j(1, 2) + &
3208 tij_abc(2, 2, 1)*qp_j(2, 2) + &
3209 tij_abc(3, 2, 1)*qp_j(3, 2) + &
3210 tij_abc(1, 3, 1)*qp_j(1, 3) + &
3211 tij_abc(2, 3, 1)*qp_j(2, 3) + &
3212 tij_abc(3, 3, 1)*qp_j(3, 3))
3213 ef1_i(2) = ef1_i(2) -
fac*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
3214 tij_abc(2, 1, 2)*qp_j(2, 1) + &
3215 tij_abc(3, 1, 2)*qp_j(3, 1) + &
3216 tij_abc(1, 2, 2)*qp_j(1, 2) + &
3217 tij_abc(2, 2, 2)*qp_j(2, 2) + &
3218 tij_abc(3, 2, 2)*qp_j(3, 2) + &
3219 tij_abc(1, 3, 2)*qp_j(1, 3) + &
3220 tij_abc(2, 3, 2)*qp_j(2, 3) + &
3221 tij_abc(3, 3, 2)*qp_j(3, 3))
3222 ef1_i(3) = ef1_i(3) -
fac*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
3223 tij_abc(2, 1, 3)*qp_j(2, 1) + &
3224 tij_abc(3, 1, 3)*qp_j(3, 1) + &
3225 tij_abc(1, 2, 3)*qp_j(1, 2) + &
3226 tij_abc(2, 2, 3)*qp_j(2, 2) + &
3227 tij_abc(3, 2, 3)*qp_j(3, 2) + &
3228 tij_abc(1, 3, 3)*qp_j(1, 3) + &
3229 tij_abc(2, 3, 3)*qp_j(2, 3) + &
3230 tij_abc(3, 3, 3)*qp_j(3, 3))
3232 ef1_j(1) = ef1_j(1) +
fac*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
3233 tij_abc(2, 1, 1)*qp_i(2, 1) + &
3234 tij_abc(3, 1, 1)*qp_i(3, 1) + &
3235 tij_abc(1, 2, 1)*qp_i(1, 2) + &
3236 tij_abc(2, 2, 1)*qp_i(2, 2) + &
3237 tij_abc(3, 2, 1)*qp_i(3, 2) + &
3238 tij_abc(1, 3, 1)*qp_i(1, 3) + &
3239 tij_abc(2, 3, 1)*qp_i(2, 3) + &
3240 tij_abc(3, 3, 1)*qp_i(3, 3))
3241 ef1_j(2) = ef1_j(2) +
fac*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
3242 tij_abc(2, 1, 2)*qp_i(2, 1) + &
3243 tij_abc(3, 1, 2)*qp_i(3, 1) + &
3244 tij_abc(1, 2, 2)*qp_i(1, 2) + &
3245 tij_abc(2, 2, 2)*qp_i(2, 2) + &
3246 tij_abc(3, 2, 2)*qp_i(3, 2) + &
3247 tij_abc(1, 3, 2)*qp_i(1, 3) + &
3248 tij_abc(2, 3, 2)*qp_i(2, 3) + &
3249 tij_abc(3, 3, 2)*qp_i(3, 3))
3250 ef1_j(3) = ef1_j(3) +
fac*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
3251 tij_abc(2, 1, 3)*qp_i(2, 1) + &
3252 tij_abc(3, 1, 3)*qp_i(3, 1) + &
3253 tij_abc(1, 2, 3)*qp_i(1, 2) + &
3254 tij_abc(2, 2, 3)*qp_i(2, 2) + &
3255 tij_abc(3, 2, 3)*qp_i(3, 2) + &
3256 tij_abc(1, 3, 3)*qp_i(1, 3) + &
3257 tij_abc(2, 3, 3)*qp_i(2, 3) + &
3258 tij_abc(3, 3, 3)*qp_i(3, 3))
3261 IF (do_efield2)
THEN
3262 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_j(1, 1) + &
3263 tij_abcd(2, 1, 1, 1)*qp_j(2, 1) + &
3264 tij_abcd(3, 1, 1, 1)*qp_j(3, 1) + &
3265 tij_abcd(1, 2, 1, 1)*qp_j(1, 2) + &
3266 tij_abcd(2, 2, 1, 1)*qp_j(2, 2) + &
3267 tij_abcd(3, 2, 1, 1)*qp_j(3, 2) + &
3268 tij_abcd(1, 3, 1, 1)*qp_j(1, 3) + &
3269 tij_abcd(2, 3, 1, 1)*qp_j(2, 3) + &
3270 tij_abcd(3, 3, 1, 1)*qp_j(3, 3))
3271 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_j(1, 1) + &
3272 tij_abcd(2, 1, 1, 2)*qp_j(2, 1) + &
3273 tij_abcd(3, 1, 1, 2)*qp_j(3, 1) + &
3274 tij_abcd(1, 2, 1, 2)*qp_j(1, 2) + &
3275 tij_abcd(2, 2, 1, 2)*qp_j(2, 2) + &
3276 tij_abcd(3, 2, 1, 2)*qp_j(3, 2) + &
3277 tij_abcd(1, 3, 1, 2)*qp_j(1, 3) + &
3278 tij_abcd(2, 3, 1, 2)*qp_j(2, 3) + &
3279 tij_abcd(3, 3, 1, 2)*qp_j(3, 3))
3280 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_j(1, 1) + &
3281 tij_abcd(2, 1, 1, 3)*qp_j(2, 1) + &
3282 tij_abcd(3, 1, 1, 3)*qp_j(3, 1) + &
3283 tij_abcd(1, 2, 1, 3)*qp_j(1, 2) + &
3284 tij_abcd(2, 2, 1, 3)*qp_j(2, 2) + &
3285 tij_abcd(3, 2, 1, 3)*qp_j(3, 2) + &
3286 tij_abcd(1, 3, 1, 3)*qp_j(1, 3) + &
3287 tij_abcd(2, 3, 1, 3)*qp_j(2, 3) + &
3288 tij_abcd(3, 3, 1, 3)*qp_j(3, 3))
3289 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_j(1, 1) + &
3290 tij_abcd(2, 1, 2, 2)*qp_j(2, 1) + &
3291 tij_abcd(3, 1, 2, 2)*qp_j(3, 1) + &
3292 tij_abcd(1, 2, 2, 2)*qp_j(1, 2) + &
3293 tij_abcd(2, 2, 2, 2)*qp_j(2, 2) + &
3294 tij_abcd(3, 2, 2, 2)*qp_j(3, 2) + &
3295 tij_abcd(1, 3, 2, 2)*qp_j(1, 3) + &
3296 tij_abcd(2, 3, 2, 2)*qp_j(2, 3) + &
3297 tij_abcd(3, 3, 2, 2)*qp_j(3, 3))
3298 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_j(1, 1) + &
3299 tij_abcd(2, 1, 2, 3)*qp_j(2, 1) + &
3300 tij_abcd(3, 1, 2, 3)*qp_j(3, 1) + &
3301 tij_abcd(1, 2, 2, 3)*qp_j(1, 2) + &
3302 tij_abcd(2, 2, 2, 3)*qp_j(2, 2) + &
3303 tij_abcd(3, 2, 2, 3)*qp_j(3, 2) + &
3304 tij_abcd(1, 3, 2, 3)*qp_j(1, 3) + &
3305 tij_abcd(2, 3, 2, 3)*qp_j(2, 3) + &
3306 tij_abcd(3, 3, 2, 3)*qp_j(3, 3))
3307 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_j(1, 1) + &
3308 tij_abcd(2, 1, 3, 3)*qp_j(2, 1) + &
3309 tij_abcd(3, 1, 3, 3)*qp_j(3, 1) + &
3310 tij_abcd(1, 2, 3, 3)*qp_j(1, 2) + &
3311 tij_abcd(2, 2, 3, 3)*qp_j(2, 2) + &
3312 tij_abcd(3, 2, 3, 3)*qp_j(3, 2) + &
3313 tij_abcd(1, 3, 3, 3)*qp_j(1, 3) + &
3314 tij_abcd(2, 3, 3, 3)*qp_j(2, 3) + &
3315 tij_abcd(3, 3, 3, 3)*qp_j(3, 3))
3317 ef2_i(1, 1) = ef2_i(1, 1) - tmp11
3318 ef2_i(1, 2) = ef2_i(1, 2) - tmp12
3319 ef2_i(1, 3) = ef2_i(1, 3) - tmp13
3320 ef2_i(2, 1) = ef2_i(2, 1) - tmp12
3321 ef2_i(2, 2) = ef2_i(2, 2) - tmp22
3322 ef2_i(2, 3) = ef2_i(2, 3) - tmp23
3323 ef2_i(3, 1) = ef2_i(3, 1) - tmp13
3324 ef2_i(3, 2) = ef2_i(3, 2) - tmp23
3325 ef2_i(3, 3) = ef2_i(3, 3) - tmp33
3327 tmp11 =
fac*(tij_abcd(1, 1, 1, 1)*qp_i(1, 1) + &
3328 tij_abcd(2, 1, 1, 1)*qp_i(2, 1) + &
3329 tij_abcd(3, 1, 1, 1)*qp_i(3, 1) + &
3330 tij_abcd(1, 2, 1, 1)*qp_i(1, 2) + &
3331 tij_abcd(2, 2, 1, 1)*qp_i(2, 2) + &
3332 tij_abcd(3, 2, 1, 1)*qp_i(3, 2) + &
3333 tij_abcd(1, 3, 1, 1)*qp_i(1, 3) + &
3334 tij_abcd(2, 3, 1, 1)*qp_i(2, 3) + &
3335 tij_abcd(3, 3, 1, 1)*qp_i(3, 3))
3336 tmp12 =
fac*(tij_abcd(1, 1, 1, 2)*qp_i(1, 1) + &
3337 tij_abcd(2, 1, 1, 2)*qp_i(2, 1) + &
3338 tij_abcd(3, 1, 1, 2)*qp_i(3, 1) + &
3339 tij_abcd(1, 2, 1, 2)*qp_i(1, 2) + &
3340 tij_abcd(2, 2, 1, 2)*qp_i(2, 2) + &
3341 tij_abcd(3, 2, 1, 2)*qp_i(3, 2) + &
3342 tij_abcd(1, 3, 1, 2)*qp_i(1, 3) + &
3343 tij_abcd(2, 3, 1, 2)*qp_i(2, 3) + &
3344 tij_abcd(3, 3, 1, 2)*qp_i(3, 3))
3345 tmp13 =
fac*(tij_abcd(1, 1, 1, 3)*qp_i(1, 1) + &
3346 tij_abcd(2, 1, 1, 3)*qp_i(2, 1) + &
3347 tij_abcd(3, 1, 1, 3)*qp_i(3, 1) + &
3348 tij_abcd(1, 2, 1, 3)*qp_i(1, 2) + &
3349 tij_abcd(2, 2, 1, 3)*qp_i(2, 2) + &
3350 tij_abcd(3, 2, 1, 3)*qp_i(3, 2) + &
3351 tij_abcd(1, 3, 1, 3)*qp_i(1, 3) + &
3352 tij_abcd(2, 3, 1, 3)*qp_i(2, 3) + &
3353 tij_abcd(3, 3, 1, 3)*qp_i(3, 3))
3354 tmp22 =
fac*(tij_abcd(1, 1, 2, 2)*qp_i(1, 1) + &
3355 tij_abcd(2, 1, 2, 2)*qp_i(2, 1) + &
3356 tij_abcd(3, 1, 2, 2)*qp_i(3, 1) + &
3357 tij_abcd(1, 2, 2, 2)*qp_i(1, 2) + &
3358 tij_abcd(2, 2, 2, 2)*qp_i(2, 2) + &
3359 tij_abcd(3, 2, 2, 2)*qp_i(3, 2) + &
3360 tij_abcd(1, 3, 2, 2)*qp_i(1, 3) + &
3361 tij_abcd(2, 3, 2, 2)*qp_i(2, 3) + &
3362 tij_abcd(3, 3, 2, 2)*qp_i(3, 3))
3363 tmp23 =
fac*(tij_abcd(1, 1, 2, 3)*qp_i(1, 1) + &
3364 tij_abcd(2, 1, 2, 3)*qp_i(2, 1) + &
3365 tij_abcd(3, 1, 2, 3)*qp_i(3, 1) + &
3366 tij_abcd(1, 2, 2, 3)*qp_i(1, 2) + &
3367 tij_abcd(2, 2, 2, 3)*qp_i(2, 2) + &
3368 tij_abcd(3, 2, 2, 3)*qp_i(3, 2) + &
3369 tij_abcd(1, 3, 2, 3)*qp_i(1, 3) + &
3370 tij_abcd(2, 3, 2, 3)*qp_i(2, 3) + &
3371 tij_abcd(3, 3, 2, 3)*qp_i(3, 3))
3372 tmp33 =
fac*(tij_abcd(1, 1, 3, 3)*qp_i(1, 1) + &
3373 tij_abcd(2, 1, 3, 3)*qp_i(2, 1) + &
3374 tij_abcd(3, 1, 3, 3)*qp_i(3, 1) + &
3375 tij_abcd(1, 2, 3, 3)*qp_i(1, 2) + &
3376 tij_abcd(2, 2, 3, 3)*qp_i(2, 2) + &
3377 tij_abcd(3, 2, 3, 3)*qp_i(3, 2) + &
3378 tij_abcd(1, 3, 3, 3)*qp_i(1, 3) + &
3379 tij_abcd(2, 3, 3, 3)*qp_i(2, 3) + &
3380 tij_abcd(3, 3, 3, 3)*qp_i(3, 3))
3382 ef2_j(1, 1) = ef2_j(1, 1) - tmp11
3383 ef2_j(1, 2) = ef2_j(1, 2) - tmp12
3384 ef2_j(1, 3) = ef2_j(1, 3) - tmp13
3385 ef2_j(2, 1) = ef2_j(2, 1) - tmp12
3386 ef2_j(2, 2) = ef2_j(2, 2) - tmp22
3387 ef2_j(2, 3) = ef2_j(2, 3) - tmp23
3388 ef2_j(3, 1) = ef2_j(3, 1) - tmp13
3389 ef2_j(3, 2) = ef2_j(3, 2) - tmp23
3390 ef2_j(3, 3) = ef2_j(3, 3) - tmp33
3394 IF (task(3, 2))
THEN
3398 tmp_ij = dp_i(1)*(tij_abc(1, 1, 1)*qp_j(1, 1) + &
3399 tij_abc(2, 1, 1)*qp_j(2, 1) + &
3400 tij_abc(3, 1, 1)*qp_j(3, 1) + &
3401 tij_abc(1, 2, 1)*qp_j(1, 2) + &
3402 tij_abc(2, 2, 1)*qp_j(2, 2) + &
3403 tij_abc(3, 2, 1)*qp_j(3, 2) + &
3404 tij_abc(1, 3, 1)*qp_j(1, 3) + &
3405 tij_abc(2, 3, 1)*qp_j(2, 3) + &
3406 tij_abc(3, 3, 1)*qp_j(3, 3)) + &
3407 dp_i(2)*(tij_abc(1, 1, 2)*qp_j(1, 1) + &
3408 tij_abc(2, 1, 2)*qp_j(2, 1) + &
3409 tij_abc(3, 1, 2)*qp_j(3, 1) + &
3410 tij_abc(1, 2, 2)*qp_j(1, 2) + &
3411 tij_abc(2, 2, 2)*qp_j(2, 2) + &
3412 tij_abc(3, 2, 2)*qp_j(3, 2) + &
3413 tij_abc(1, 3, 2)*qp_j(1, 3) + &
3414 tij_abc(2, 3, 2)*qp_j(2, 3) + &
3415 tij_abc(3, 3, 2)*qp_j(3, 3)) + &
3416 dp_i(3)*(tij_abc(1, 1, 3)*qp_j(1, 1) + &
3417 tij_abc(2, 1, 3)*qp_j(2, 1) + &
3418 tij_abc(3, 1, 3)*qp_j(3, 1) + &
3419 tij_abc(1, 2, 3)*qp_j(1, 2) + &
3420 tij_abc(2, 2, 3)*qp_j(2, 2) + &
3421 tij_abc(3, 2, 3)*qp_j(3, 2) + &
3422 tij_abc(1, 3, 3)*qp_j(1, 3) + &
3423 tij_abc(2, 3, 3)*qp_j(2, 3) + &
3424 tij_abc(3, 3, 3)*qp_j(3, 3))
3427 tmp_ji = dp_j(1)*(tij_abc(1, 1, 1)*qp_i(1, 1) + &
3428 tij_abc(2, 1, 1)*qp_i(2, 1) + &
3429 tij_abc(3, 1, 1)*qp_i(3, 1) + &
3430 tij_abc(1, 2, 1)*qp_i(1, 2) + &
3431 tij_abc(2, 2, 1)*qp_i(2, 2) + &
3432 tij_abc(3, 2, 1)*qp_i(3, 2) + &
3433 tij_abc(1, 3, 1)*qp_i(1, 3) + &
3434 tij_abc(2, 3, 1)*qp_i(2, 3) + &
3435 tij_abc(3, 3, 1)*qp_i(3, 3)) + &
3436 dp_j(2)*(tij_abc(1, 1, 2)*qp_i(1, 1) + &
3437 tij_abc(2, 1, 2)*qp_i(2, 1) + &
3438 tij_abc(3, 1, 2)*qp_i(3, 1) + &
3439 tij_abc(1, 2, 2)*qp_i(1, 2) + &
3440 tij_abc(2, 2, 2)*qp_i(2, 2) + &
3441 tij_abc(3, 2, 2)*qp_i(3, 2) + &
3442 tij_abc(1, 3, 2)*qp_i(1, 3) + &
3443 tij_abc(2, 3, 2)*qp_i(2, 3) + &
3444 tij_abc(3, 3, 2)*qp_i(3, 3)) + &
3445 dp_j(3)*(tij_abc(1, 1, 3)*qp_i(1, 1) + &
3446 tij_abc(2, 1, 3)*qp_i(2, 1) + &
3447 tij_abc(3, 1, 3)*qp_i(3, 1) + &
3448 tij_abc(1, 2, 3)*qp_i(1, 2) + &
3449 tij_abc(2, 2, 3)*qp_i(2, 2) + &
3450 tij_abc(3, 2, 3)*qp_i(3, 2) + &
3451 tij_abc(1, 3, 3)*qp_i(1, 3) + &
3452 tij_abc(2, 3, 3)*qp_i(2, 3) + &
3453 tij_abc(3, 3, 3)*qp_i(3, 3))
3455 tmp =
fac*(tmp_ij - tmp_ji)
3457 IF (do_forces .OR. do_stress)
THEN
3460 tmp_ij = dp_i(1)*(tij_abcd(1, 1, 1, k)*qp_j(1, 1) + &
3461 tij_abcd(2, 1, 1, k)*qp_j(2, 1) + &
3462 tij_abcd(3, 1, 1, k)*qp_j(3, 1) + &
3463 tij_abcd(1, 2, 1, k)*qp_j(1, 2) + &
3464 tij_abcd(2, 2, 1, k)*qp_j(2, 2) + &
3465 tij_abcd(3, 2, 1, k)*qp_j(3, 2) + &
3466 tij_abcd(1, 3, 1, k)*qp_j(1, 3) + &
3467 tij_abcd(2, 3, 1, k)*qp_j(2, 3) + &
3468 tij_abcd(3, 3, 1, k)*qp_j(3, 3)) + &
3469 dp_i(2)*(tij_abcd(1, 1, 2, k)*qp_j(1, 1) + &
3470 tij_abcd(2, 1, 2, k)*qp_j(2, 1) + &
3471 tij_abcd(3, 1, 2, k)*qp_j(3, 1) + &
3472 tij_abcd(1, 2, 2, k)*qp_j(1, 2) + &
3473 tij_abcd(2, 2, 2, k)*qp_j(2, 2) + &
3474 tij_abcd(3, 2, 2, k)*qp_j(3, 2) + &
3475 tij_abcd(1, 3, 2, k)*qp_j(1, 3) + &
3476 tij_abcd(2, 3, 2, k)*qp_j(2, 3) + &
3477 tij_abcd(3, 3, 2, k)*qp_j(3, 3)) + &
3478 dp_i(3)*(tij_abcd(1, 1, 3, k)*qp_j(1, 1) + &
3479 tij_abcd(2, 1, 3, k)*qp_j(2, 1) + &
3480 tij_abcd(3, 1, 3, k)*qp_j(3, 1) + &
3481 tij_abcd(1, 2, 3, k)*qp_j(1, 2) + &
3482 tij_abcd(2, 2, 3, k)*qp_j(2, 2) + &
3483 tij_abcd(3, 2, 3, k)*qp_j(3, 2) + &
3484 tij_abcd(1, 3, 3, k)*qp_j(1, 3) + &
3485 tij_abcd(2, 3, 3, k)*qp_j(2, 3) + &
3486 tij_abcd(3, 3, 3, k)*qp_j(3, 3))
3489 tmp_ji = dp_j(1)*(tij_abcd(1, 1, 1, k)*qp_i(1, 1) + &
3490 tij_abcd(2, 1, 1, k)*qp_i(2, 1) + &
3491 tij_abcd(3, 1, 1, k)*qp_i(3, 1) + &
3492 tij_abcd(1, 2, 1, k)*qp_i(1, 2) + &
3493 tij_abcd(2, 2, 1, k)*qp_i(2, 2) + &
3494 tij_abcd(3, 2, 1, k)*qp_i(3, 2) + &
3495 tij_abcd(1, 3, 1, k)*qp_i(1, 3) + &
3496 tij_abcd(2, 3, 1, k)*qp_i(2, 3) + &
3497 tij_abcd(3, 3, 1, k)*qp_i(3, 3)) + &
3498 dp_j(2)*(tij_abcd(1, 1, 2, k)*qp_i(1, 1) + &
3499 tij_abcd(2, 1, 2, k)*qp_i(2, 1) + &
3500 tij_abcd(3, 1, 2, k)*qp_i(3, 1) + &
3501 tij_abcd(1, 2, 2, k)*qp_i(1, 2) + &
3502 tij_abcd(2, 2, 2, k)*qp_i(2, 2) + &
3503 tij_abcd(3, 2, 2, k)*qp_i(3, 2) + &
3504 tij_abcd(1, 3, 2, k)*qp_i(1, 3) + &
3505 tij_abcd(2, 3, 2, k)*qp_i(2, 3) + &
3506 tij_abcd(3, 3, 2, k)*qp_i(3, 3)) + &
3507 dp_j(3)*(tij_abcd(1, 1, 3, k)*qp_i(1, 1) + &
3508 tij_abcd(2, 1, 3, k)*qp_i(2, 1) + &
3509 tij_abcd(3, 1, 3, k)*qp_i(3, 1) + &
3510 tij_abcd(1, 2, 3, k)*qp_i(1, 2) + &
3511 tij_abcd(2, 2, 3, k)*qp_i(2, 2) + &
3512 tij_abcd(3, 2, 3, k)*qp_i(3, 2) + &
3513 tij_abcd(1, 3, 3, k)*qp_i(1, 3) + &
3514 tij_abcd(2, 3, 3, k)*qp_i(2, 3) + &
3515 tij_abcd(3, 3, 3, k)*qp_i(3, 3))
3517 fr(k) = fr(k) -
fac*(tmp_ij - tmp_ji)
3521 IF (task(3, 1))
THEN
3526 tmp_ij = ch_i*(tij_ab(1, 1)*qp_j(1, 1) + &
3527 tij_ab(2, 1)*qp_j(2, 1) + &
3528 tij_ab(3, 1)*qp_j(3, 1) + &
3529 tij_ab(1, 2)*qp_j(1, 2) + &
3530 tij_ab(2, 2)*qp_j(2, 2) + &
3531 tij_ab(3, 2)*qp_j(3, 2) + &
3532 tij_ab(1, 3)*qp_j(1, 3) + &
3533 tij_ab(2, 3)*qp_j(2, 3) + &
3534 tij_ab(3, 3)*qp_j(3, 3))
3537 tmp_ji = ch_j*(tij_ab(1, 1)*qp_i(1, 1) + &
3538 tij_ab(2, 1)*qp_i(2, 1) + &
3539 tij_ab(3, 1)*qp_i(3, 1) + &
3540 tij_ab(1, 2)*qp_i(1, 2) + &
3541 tij_ab(2, 2)*qp_i(2, 2) + &
3542 tij_ab(3, 2)*qp_i(3, 2) + &
3543 tij_ab(1, 3)*qp_i(1, 3) + &
3544 tij_ab(2, 3)*qp_i(2, 3) + &
3545 tij_ab(3, 3)*qp_i(3, 3))
3547 eloc = eloc +
fac*(tmp_ij + tmp_ji)
3548 IF (do_forces .OR. do_stress)
THEN
3551 tmp_ij = ch_i*(tij_abc(1, 1, k)*qp_j(1, 1) + &
3552 tij_abc(2, 1, k)*qp_j(2, 1) + &
3553 tij_abc(3, 1, k)*qp_j(3, 1) + &
3554 tij_abc(1, 2, k)*qp_j(1, 2) + &
3555 tij_abc(2, 2, k)*qp_j(2, 2) + &
3556 tij_abc(3, 2, k)*qp_j(3, 2) + &
3557 tij_abc(1, 3, k)*qp_j(1, 3) + &
3558 tij_abc(2, 3, k)*qp_j(2, 3) + &
3559 tij_abc(3, 3, k)*qp_j(3, 3))
3562 tmp_ji = ch_j*(tij_abc(1, 1, k)*qp_i(1, 1) + &
3563 tij_abc(2, 1, k)*qp_i(2, 1) + &
3564 tij_abc(3, 1, k)*qp_i(3, 1) + &
3565 tij_abc(1, 2, k)*qp_i(1, 2) + &
3566 tij_abc(2, 2, k)*qp_i(2, 2) + &
3567 tij_abc(3, 2, k)*qp_i(3, 2) + &
3568 tij_abc(1, 3, k)*qp_i(1, 3) + &
3569 tij_abc(2, 3, k)*qp_i(2, 3) + &
3570 tij_abc(3, 3, k)*qp_i(3, 3))
3572 fr(k) = fr(k) -
fac*(tmp_ij + tmp_ji)
3576 energy = energy + eloc
3578 forces(1, atom_a) = forces(1, atom_a) - fr(1)
3579 forces(2, atom_a) = forces(2, atom_a) - fr(2)
3580 forces(3, atom_a) = forces(3, atom_a) - fr(3)
3581 forces(1, atom_b) = forces(1, atom_b) + fr(1)
3582 forces(2, atom_b) = forces(2, atom_b) + fr(2)
3583 forces(3, atom_b) = forces(3, atom_b) + fr(3)
3588 IF (do_efield0)
THEN
3589 efield0(atom_a) = efield0(atom_a) + ef0_j
3591 efield0(atom_b) = efield0(atom_b) + ef0_i
3594 IF (do_efield1)
THEN
3595 efield1(1, atom_a) = efield1(1, atom_a) + ef1_j(1)
3596 efield1(2, atom_a) = efield1(2, atom_a) + ef1_j(2)
3597 efield1(3, atom_a) = efield1(3, atom_a) + ef1_j(3)
3599 efield1(1, atom_b) = efield1(1, atom_b) + ef1_i(1)
3600 efield1(2, atom_b) = efield1(2, atom_b) + ef1_i(2)
3601 efield1(3, atom_b) = efield1(3, atom_b) + ef1_i(3)
3604 IF (do_efield2)
THEN
3605 efield2(1, atom_a) = efield2(1, atom_a) + ef2_j(1, 1)
3606 efield2(2, atom_a) = efield2(2, atom_a) + ef2_j(1, 2)
3607 efield2(3, atom_a) = efield2(3, atom_a) + ef2_j(1, 3)
3608 efield2(4, atom_a) = efield2(4, atom_a) + ef2_j(2, 1)
3609 efield2(5, atom_a) = efield2(5, atom_a) + ef2_j(2, 2)
3610 efield2(6, atom_a) = efield2(6, atom_a) + ef2_j(2, 3)
3611 efield2(7, atom_a) = efield2(7, atom_a) + ef2_j(3, 1)
3612 efield2(8, atom_a) = efield2(8, atom_a) + ef2_j(3, 2)
3613 efield2(9, atom_a) = efield2(9, atom_a) + ef2_j(3, 3)
3615 efield2(1, atom_b) = efield2(1, atom_b) + ef2_i(1, 1)
3616 efield2(2, atom_b) = efield2(2, atom_b) + ef2_i(1, 2)
3617 efield2(3, atom_b) = efield2(3, atom_b) + ef2_i(1, 3)
3618 efield2(4, atom_b) = efield2(4, atom_b) + ef2_i(2, 1)
3619 efield2(5, atom_b) = efield2(5, atom_b) + ef2_i(2, 2)
3620 efield2(6, atom_b) = efield2(6, atom_b) + ef2_i(2, 3)
3621 efield2(7, atom_b) = efield2(7, atom_b) + ef2_i(3, 1)
3622 efield2(8, atom_b) = efield2(8, atom_b) + ef2_i(3, 2)
3623 efield2(9, atom_b) = efield2(9, atom_b) + ef2_i(3, 3)
3627 ptens11 = ptens11 + rab(1)*fr(1)
3628 ptens21 = ptens21 + rab(2)*fr(1)
3629 ptens31 = ptens31 + rab(3)*fr(1)
3630 ptens12 = ptens12 + rab(1)*fr(2)
3631 ptens22 = ptens22 + rab(2)*fr(2)
3632 ptens32 = ptens32 + rab(3)*fr(2)
3633 ptens13 = ptens13 + rab(1)*fr(3)
3634 ptens23 = ptens23 + rab(2)*fr(3)
3635 ptens33 = ptens33 + rab(3)*fr(3)
3639 END DO kind_group_loop
3642 pv(1, 1) = pv(1, 1) + ptens11
3643 pv(1, 2) = pv(1, 2) + (ptens12 + ptens21)*0.5_dp
3644 pv(1, 3) = pv(1, 3) + (ptens13 + ptens31)*0.5_dp
3646 pv(2, 2) = pv(2, 2) + ptens22
3647 pv(2, 3) = pv(2, 3) + (ptens23 + ptens32)*0.5_dp
3650 pv(3, 3) = pv(3, 3) + ptens33
3653 CALL timestop(handle)
3654 END SUBROUTINE ewald_multipole_bonded
3679 SUBROUTINE ewald_multipole_lr(ewald_env, ewald_pw, cell, particle_set, &
3680 local_particles, energy, task, do_forces, do_efield, do_stress, &
3681 charges, dipoles, quadrupoles, forces, pv, efield0, efield1, efield2)
3687 REAL(kind=
dp),
INTENT(INOUT) :: energy
3688 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
3689 LOGICAL,
INTENT(IN) :: do_forces, do_efield, do_stress
3690 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: charges
3691 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
3692 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
3693 POINTER :: quadrupoles
3694 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT), &
3695 OPTIONAL :: forces, pv
3696 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
3697 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1, efield2
3699 CHARACTER(len=*),
PARAMETER :: routinen =
'ewald_multipole_LR'
3701 COMPLEX(KIND=dp) :: atm_factor, atm_factor_st(3), cnjg_fac, &
3703 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:) :: summe_ef
3704 COMPLEX(KIND=dp),
ALLOCATABLE,
DIMENSION(:, :) :: summe_st
3705 INTEGER :: gpt, handle, iparticle, iparticle_kind, iparticle_local, lp, mp, nnodes, &
3706 node, np, nparticle_kind, nparticle_local
3707 INTEGER,
DIMENSION(:, :),
POINTER :: bds
3708 LOGICAL :: do_efield0, do_efield1, do_efield2
3709 REAL(kind=
dp) :: alpha, denom, dipole_t(3), f0, factor, &
3710 four_alpha_sq, gauss, pref, q_t, tmp, &
3712 REAL(kind=
dp),
DIMENSION(3) :: tmp_v, vec
3713 REAL(kind=
dp),
DIMENSION(3, 3) :: pv_tmp
3714 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: rho0
3722 CALL timeset(routinen, handle)
3723 do_efield0 = do_efield .AND.
ASSOCIATED(efield0)
3724 do_efield1 = do_efield .AND.
ASSOCIATED(efield1)
3725 do_efield2 = do_efield .AND.
ASSOCIATED(efield2)
3729 CALL ewald_pw_get(ewald_pw, pw_big_pool=pw_pool, dg=dg)
3730 CALL dg_get(dg, dg_rho0=dg_rho0)
3731 rho0 => dg_rho0%density%array
3732 pw_grid => pw_pool%pw_grid
3733 bds => pw_grid%bounds
3736 nparticle_kind =
SIZE(local_particles%n_el)
3738 DO iparticle_kind = 1, nparticle_kind
3739 nnodes = nnodes + local_particles%n_el(iparticle_kind)
3743 ALLOCATE (summe_ef(1:pw_grid%ngpts_cut))
3744 summe_ef = cmplx(0.0_dp, 0.0_dp, kind=
dp)
3748 ALLOCATE (summe_st(3, 1:pw_grid%ngpts_cut))
3749 summe_st = cmplx(0.0_dp, 0.0_dp, kind=
dp)
3753 four_alpha_sq = 4.0_dp*alpha**2
3759 DO iparticle_kind = 1, nparticle_kind
3760 nparticle_local = local_particles%n_el(iparticle_kind)
3761 DO iparticle_local = 1, nparticle_local
3763 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
3764 vec = matmul(cell%h_inv, particle_set(iparticle)%r)
3766 exp_igr%ex(:, node), exp_igr%ey(:, node), exp_igr%ez(:, node))
3769 IF (any(task(1, :)))
THEN
3770 q_t = q_t + charges(iparticle)
3772 IF (any(task(2, :)))
THEN
3773 dipole_t = dipole_t + dipoles(:, iparticle)
3775 IF (any(task(3, :)))
THEN
3776 trq_t = trq_t + quadrupoles(1, 1, iparticle) + &
3777 quadrupoles(2, 2, iparticle) + &
3778 quadrupoles(3, 3, iparticle)
3784 DO gpt = 1, pw_grid%ngpts_cut_local
3785 lp = pw_grid%mapl%pos(pw_grid%g_hat(1, gpt))
3786 mp = pw_grid%mapm%pos(pw_grid%g_hat(2, gpt))
3787 np = pw_grid%mapn%pos(pw_grid%g_hat(3, gpt))
3795 DO iparticle_kind = 1, nparticle_kind
3796 nparticle_local = local_particles%n_el(iparticle_kind)
3797 DO iparticle_local = 1, nparticle_local
3799 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
3801 CALL get_atom_factor(atm_factor, pw_grid, gpt, iparticle, task, charges, &
3802 dipoles, quadrupoles)
3803 summe_tmp = exp_igr%ex(lp, node)*exp_igr%ey(mp, node)*exp_igr%ez(np, node)
3804 summe_ef(gpt) = summe_ef(gpt) + atm_factor*summe_tmp
3808 CALL get_atom_factor_stress(atm_factor_st, pw_grid, gpt, iparticle, task, &
3809 dipoles, quadrupoles)
3810 summe_st(1:3, gpt) = summe_st(1:3, gpt) + atm_factor_st(1:3)*summe_tmp
3816 CALL group%sum(dipole_t)
3817 CALL group%sum(trq_t)
3818 CALL group%sum(summe_ef)
3819 IF (do_stress)
CALL group%sum(summe_st)
3822 DO gpt = 1, pw_grid%ngpts_cut_local
3824 lp = pw_grid%mapl%pos(pw_grid%g_hat(1, gpt))
3825 mp = pw_grid%mapm%pos(pw_grid%g_hat(2, gpt))
3826 np = pw_grid%mapn%pos(pw_grid%g_hat(3, gpt))
3832 IF (pw_grid%gsq(gpt) == 0.0_dp)
THEN
3834 energy = energy + (1.0_dp/6.0_dp)*dot_product(dipole_t, dipole_t) &
3835 - (1.0_dp/9.0_dp)*q_t*trq_t
3838 pv_tmp(1, 1) = pv_tmp(1, 1) + (1.0_dp/6.0_dp)*dot_product(dipole_t, dipole_t)
3839 pv_tmp(2, 2) = pv_tmp(2, 2) + (1.0_dp/6.0_dp)*dot_product(dipole_t, dipole_t)
3840 pv_tmp(3, 3) = pv_tmp(3, 3) + (1.0_dp/6.0_dp)*dot_product(dipole_t, dipole_t)
3843 IF (do_efield .AND. (debug_e_field_en .OR. (.NOT. debug_this_module)))
THEN
3848 DO iparticle_kind = 1, nparticle_kind
3849 nparticle_local = local_particles%n_el(iparticle_kind)
3850 DO iparticle_local = 1, nparticle_local
3852 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
3855 IF (do_efield0)
THEN
3856 efield0(iparticle) = efield0(iparticle)
3859 IF (do_efield1)
THEN
3860 efield1(1:3, iparticle) = efield1(1:3, iparticle) - (1.0_dp/6.0_dp)*dipole_t(1:3)
3863 IF (do_efield2)
THEN
3864 efield2(1, iparticle) = efield2(1, iparticle) - (1.0_dp/(18.0_dp))*q_t
3865 efield2(5, iparticle) = efield2(5, iparticle) - (1.0_dp/(18.0_dp))*q_t
3866 efield2(9, iparticle) = efield2(9, iparticle) - (1.0_dp/(18.0_dp))*q_t
3873 gauss = (rho0(lp, mp, np)*pw_grid%vol)**2/pw_grid%gsq(gpt)
3874 factor = gauss*real(summe_ef(gpt)*conjg(summe_ef(gpt)), kind=
dp)
3875 energy = energy + factor
3877 IF (do_forces .OR. do_efield)
THEN
3879 DO iparticle_kind = 1, nparticle_kind
3880 nparticle_local = local_particles%n_el(iparticle_kind)
3881 DO iparticle_local = 1, nparticle_local
3883 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
3884 fac = exp_igr%ex(lp, node)*exp_igr%ey(mp, node)*exp_igr%ez(np, node)
3885 cnjg_fac = conjg(
fac)
3889 CALL get_atom_factor(atm_factor, pw_grid, gpt, iparticle, task, charges, &
3890 dipoles, quadrupoles)
3892 tmp = gauss*aimag(summe_ef(gpt)*(cnjg_fac*conjg(atm_factor)))
3893 forces(1, node) = forces(1, node) + tmp*pw_grid%g(1, gpt)
3894 forces(2, node) = forces(2, node) + tmp*pw_grid%g(2, gpt)
3895 forces(3, node) = forces(3, node) + tmp*pw_grid%g(3, gpt)
3901 IF (do_efield0)
THEN
3902 efield0(iparticle) = efield0(iparticle) + gauss*real(
fac*conjg(summe_ef(gpt)), kind=
dp)
3905 IF (do_efield1)
THEN
3906 tmp = aimag(
fac*conjg(summe_ef(gpt)))*gauss
3907 efield1(1, iparticle) = efield1(1, iparticle) - tmp*pw_grid%g(1, gpt)
3908 efield1(2, iparticle) = efield1(2, iparticle) - tmp*pw_grid%g(2, gpt)
3909 efield1(3, iparticle) = efield1(3, iparticle) - tmp*pw_grid%g(3, gpt)
3912 IF (do_efield2)
THEN
3913 tmp_v(1) = real(
fac*conjg(summe_ef(gpt)), kind=
dp)*pw_grid%g(1, gpt)*gauss
3914 tmp_v(2) = real(
fac*conjg(summe_ef(gpt)), kind=
dp)*pw_grid%g(2, gpt)*gauss
3915 tmp_v(3) = real(
fac*conjg(summe_ef(gpt)), kind=
dp)*pw_grid%g(3, gpt)*gauss
3917 efield2(1, iparticle) = efield2(1, iparticle) + tmp_v(1)*pw_grid%g(1, gpt)
3918 efield2(2, iparticle) = efield2(2, iparticle) + tmp_v(1)*pw_grid%g(2, gpt)
3919 efield2(3, iparticle) = efield2(3, iparticle) + tmp_v(1)*pw_grid%g(3, gpt)
3920 efield2(4, iparticle) = efield2(4, iparticle) + tmp_v(2)*pw_grid%g(1, gpt)
3921 efield2(5, iparticle) = efield2(5, iparticle) + tmp_v(2)*pw_grid%g(2, gpt)
3922 efield2(6, iparticle) = efield2(6, iparticle) + tmp_v(2)*pw_grid%g(3, gpt)
3923 efield2(7, iparticle) = efield2(7, iparticle) + tmp_v(3)*pw_grid%g(1, gpt)
3924 efield2(8, iparticle) = efield2(8, iparticle) + tmp_v(3)*pw_grid%g(2, gpt)
3925 efield2(9, iparticle) = efield2(9, iparticle) + tmp_v(3)*pw_grid%g(3, gpt)
3936 denom = 1.0_dp/four_alpha_sq + 1.0_dp/pw_grid%gsq(gpt)
3937 pv_tmp(1, 1) = pv_tmp(1, 1) + factor*(1.0_dp - 2.0_dp*pw_grid%g(1, gpt)*pw_grid%g(1, gpt)*denom)
3938 pv_tmp(1, 2) = pv_tmp(1, 2) - factor*(2.0_dp*pw_grid%g(1, gpt)*pw_grid%g(2, gpt)*denom)
3939 pv_tmp(1, 3) = pv_tmp(1, 3) - factor*(2.0_dp*pw_grid%g(1, gpt)*pw_grid%g(3, gpt)*denom)
3940 pv_tmp(2, 1) = pv_tmp(2, 1) - factor*(2.0_dp*pw_grid%g(2, gpt)*pw_grid%g(1, gpt)*denom)
3941 pv_tmp(2, 2) = pv_tmp(2, 2) + factor*(1.0_dp - 2.0_dp*pw_grid%g(2, gpt)*pw_grid%g(2, gpt)*denom)
3942 pv_tmp(2, 3) = pv_tmp(2, 3) - factor*(2.0_dp*pw_grid%g(2, gpt)*pw_grid%g(3, gpt)*denom)
3943 pv_tmp(3, 1) = pv_tmp(3, 1) - factor*(2.0_dp*pw_grid%g(3, gpt)*pw_grid%g(1, gpt)*denom)
3944 pv_tmp(3, 2) = pv_tmp(3, 2) - factor*(2.0_dp*pw_grid%g(3, gpt)*pw_grid%g(2, gpt)*denom)
3945 pv_tmp(3, 3) = pv_tmp(3, 3) + factor*(1.0_dp - 2.0_dp*pw_grid%g(3, gpt)*pw_grid%g(3, gpt)*denom)
3948 pv_tmp(1, 1) = pv_tmp(1, 1) + f0*pw_grid%g(1, gpt)*real(summe_st(1, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3949 pv_tmp(1, 2) = pv_tmp(1, 2) + f0*pw_grid%g(1, gpt)*real(summe_st(2, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3950 pv_tmp(1, 3) = pv_tmp(1, 3) + f0*pw_grid%g(1, gpt)*real(summe_st(3, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3951 pv_tmp(2, 1) = pv_tmp(2, 1) + f0*pw_grid%g(2, gpt)*real(summe_st(1, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3952 pv_tmp(2, 2) = pv_tmp(2, 2) + f0*pw_grid%g(2, gpt)*real(summe_st(2, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3953 pv_tmp(2, 3) = pv_tmp(2, 3) + f0*pw_grid%g(2, gpt)*real(summe_st(3, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3954 pv_tmp(3, 1) = pv_tmp(3, 1) + f0*pw_grid%g(3, gpt)*real(summe_st(1, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3955 pv_tmp(3, 2) = pv_tmp(3, 2) + f0*pw_grid%g(3, gpt)*real(summe_st(2, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3956 pv_tmp(3, 3) = pv_tmp(3, 3) + f0*pw_grid%g(3, gpt)*real(summe_st(3, gpt)*conjg(summe_ef(gpt)), kind=
dp)
3959 pref =
fourpi/pw_grid%vol
3960 energy = energy*pref
3963 DEALLOCATE (summe_ef)
3965 pv_tmp = pv_tmp*pref
3967 pv(1, 1) = pv(1, 1) + pv_tmp(1, 1)
3968 pv(1, 2) = pv(1, 2) + (pv_tmp(1, 2) + pv_tmp(2, 1))*0.5_dp
3969 pv(1, 3) = pv(1, 3) + (pv_tmp(1, 3) + pv_tmp(3, 1))*0.5_dp
3971 pv(2, 2) = pv(2, 2) + pv_tmp(2, 2)
3972 pv(2, 3) = pv(2, 3) + (pv_tmp(2, 3) + pv_tmp(3, 2))*0.5_dp
3975 pv(3, 3) = pv(3, 3) + pv_tmp(3, 3)
3976 DEALLOCATE (summe_st)
3979 forces = 2.0_dp*forces*pref
3981 IF (do_efield0)
THEN
3982 efield0 = 2.0_dp*efield0*pref
3984 IF (do_efield1)
THEN
3985 efield1 = 2.0_dp*efield1*pref
3987 IF (do_efield2)
THEN
3988 efield2 = 2.0_dp*efield2*pref
3990 CALL timestop(handle)
3992 END SUBROUTINE ewald_multipole_lr
4008 SUBROUTINE get_atom_factor(atm_factor, pw_grid, gpt, iparticle, task, charges, &
4009 dipoles, quadrupoles)
4010 COMPLEX(KIND=dp),
INTENT(OUT) :: atm_factor
4012 INTEGER,
INTENT(IN) :: gpt
4013 INTEGER :: iparticle
4014 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
4015 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: charges
4016 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
4017 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
4018 POINTER :: quadrupoles
4020 COMPLEX(KIND=dp) :: tmp
4023 atm_factor = cmplx(0.0_dp, 0.0_dp, kind=
dp)
4024 IF (task(1, 1))
THEN
4026 atm_factor = atm_factor + charges(iparticle)
4028 IF (task(2, 2))
THEN
4030 tmp = cmplx(0.0_dp, 0.0_dp, kind=
dp)
4032 tmp = tmp + dipoles(i, iparticle)*pw_grid%g(i, gpt)
4034 atm_factor = atm_factor + tmp*cmplx(0.0_dp, -1.0_dp, kind=
dp)
4036 IF (task(3, 3))
THEN
4038 tmp = cmplx(0.0_dp, 0.0_dp, kind=
dp)
4041 tmp = tmp + quadrupoles(j, i, iparticle)*pw_grid%g(j, gpt)*pw_grid%g(i, gpt)
4044 atm_factor = atm_factor - 1.0_dp/3.0_dp*tmp
4047 END SUBROUTINE get_atom_factor
4062 SUBROUTINE get_atom_factor_stress(atm_factor, pw_grid, gpt, iparticle, task, &
4063 dipoles, quadrupoles)
4064 COMPLEX(KIND=dp),
INTENT(OUT) :: atm_factor(3)
4066 INTEGER,
INTENT(IN) :: gpt
4067 INTEGER :: iparticle
4068 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
4069 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
4070 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
4071 POINTER :: quadrupoles
4075 atm_factor = cmplx(0.0_dp, 0.0_dp, kind=
dp)
4076 IF (any(task(2, :)))
THEN
4078 atm_factor = dipoles(:, iparticle)*cmplx(0.0_dp, -1.0_dp, kind=
dp)
4080 IF (any(task(3, :)))
THEN
4083 atm_factor(1) = atm_factor(1) - 1.0_dp/3.0_dp* &
4084 (quadrupoles(1, i, iparticle)*pw_grid%g(i, gpt) + &
4085 quadrupoles(i, 1, iparticle)*pw_grid%g(i, gpt))
4086 atm_factor(2) = atm_factor(2) - 1.0_dp/3.0_dp* &
4087 (quadrupoles(2, i, iparticle)*pw_grid%g(i, gpt) + &
4088 quadrupoles(i, 2, iparticle)*pw_grid%g(i, gpt))
4089 atm_factor(3) = atm_factor(3) - 1.0_dp/3.0_dp* &
4090 (quadrupoles(3, i, iparticle)*pw_grid%g(i, gpt) + &
4091 quadrupoles(i, 3, iparticle)*pw_grid%g(i, gpt))
4095 END SUBROUTINE get_atom_factor_stress
4116 SUBROUTINE ewald_multipole_self(ewald_env, cell, local_particles, e_self, &
4117 e_neut, task, do_efield, radii, charges, dipoles, quadrupoles, efield0, &
4122 REAL(kind=
dp),
INTENT(OUT) :: e_self, e_neut
4123 LOGICAL,
DIMENSION(3, 3),
INTENT(IN) :: task
4124 LOGICAL,
INTENT(IN) :: do_efield
4125 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: radii, charges
4126 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
4127 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
4128 POINTER :: quadrupoles
4129 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
4130 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: efield1, efield2
4132 REAL(kind=
dp),
PARAMETER :: f23 = 2.0_dp/3.0_dp, &
4133 f415 = 4.0_dp/15.0_dp
4135 INTEGER :: ewald_type, i, iparticle, &
4136 iparticle_kind, iparticle_local, j, &
4138 LOGICAL :: do_efield0, do_efield1, do_efield2, &
4140 REAL(kind=
dp) :: alpha, ch_qu_self, ch_qu_self_tmp, &
4141 dipole_self, fac1, fac2, fac3, fac4, &
4142 q, q_neutg, q_self, q_sum, qu_qu_self, &
4146 CALL ewald_env_get(ewald_env, ewald_type=ewald_type, alpha=alpha, &
4149 do_efield0 = do_efield .AND.
ASSOCIATED(efield0)
4150 do_efield1 = do_efield .AND.
ASSOCIATED(efield1)
4151 do_efield2 = do_efield .AND.
ASSOCIATED(efield2)
4154 dipole_self = 0.0_dp
4158 fac2 = 6.0_dp*(f23**2)*(alpha**3)*
oorootpi
4159 fac3 = (2.0_dp*
oorootpi)*f23*alpha**3
4160 fac4 = (4.0_dp*
oorootpi)*f415*alpha**5
4161 lradii =
PRESENT(radii)
4164 DO iparticle_kind = 1,
SIZE(local_particles%n_el)
4165 nparticle_local = local_particles%n_el(iparticle_kind)
4166 DO iparticle_local = 1, nparticle_local
4167 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
4168 IF (any(task(1, :)))
THEN
4170 q = charges(iparticle)
4171 IF (lradii) radius = radii(iparticle)
4172 IF (radius > 0)
THEN
4173 q_neutg = q_neutg + 2.0_dp*q*radius**2
4175 q_self = q_self + q*q
4178 IF (do_efield0)
THEN
4179 efield0(iparticle) = efield0(iparticle) - q*fac1
4182 IF (task(1, 3))
THEN
4184 ch_qu_self_tmp = 0.0_dp
4186 ch_qu_self_tmp = ch_qu_self_tmp + quadrupoles(i, i, iparticle)*q
4188 ch_qu_self = ch_qu_self + ch_qu_self_tmp
4190 IF (do_efield2)
THEN
4191 efield2(1, iparticle) = efield2(1, iparticle) + fac2*q
4192 efield2(5, iparticle) = efield2(5, iparticle) + fac2*q
4193 efield2(9, iparticle) = efield2(9, iparticle) + fac2*q
4197 IF (any(task(2, :)))
THEN
4200 dipole_self = dipole_self + dipoles(i, iparticle)**2
4203 IF (do_efield1)
THEN
4204 efield1(1, iparticle) = efield1(1, iparticle) + fac3*dipoles(1, iparticle)
4205 efield1(2, iparticle) = efield1(2, iparticle) + fac3*dipoles(2, iparticle)
4206 efield1(3, iparticle) = efield1(3, iparticle) + fac3*dipoles(3, iparticle)
4209 IF (any(task(3, :)))
THEN
4213 qu_qu_self = qu_qu_self + quadrupoles(j, i, iparticle)**2
4217 IF (do_efield2)
THEN
4218 efield2(1, iparticle) = efield2(1, iparticle) + fac4*quadrupoles(1, 1, iparticle)
4219 efield2(2, iparticle) = efield2(2, iparticle) + fac4*quadrupoles(2, 1, iparticle)
4220 efield2(3, iparticle) = efield2(3, iparticle) + fac4*quadrupoles(3, 1, iparticle)
4221 efield2(4, iparticle) = efield2(4, iparticle) + fac4*quadrupoles(1, 2, iparticle)
4222 efield2(5, iparticle) = efield2(5, iparticle) + fac4*quadrupoles(2, 2, iparticle)
4223 efield2(6, iparticle) = efield2(6, iparticle) + fac4*quadrupoles(3, 2, iparticle)
4224 efield2(7, iparticle) = efield2(7, iparticle) + fac4*quadrupoles(1, 3, iparticle)
4225 efield2(8, iparticle) = efield2(8, iparticle) + fac4*quadrupoles(2, 3, iparticle)
4226 efield2(9, iparticle) = efield2(9, iparticle) + fac4*quadrupoles(3, 3, iparticle)
4232 CALL group%sum(q_neutg)
4233 CALL group%sum(q_self)
4234 CALL group%sum(q_sum)
4235 CALL group%sum(dipole_self)
4236 CALL group%sum(ch_qu_self)
4237 CALL group%sum(qu_qu_self)
4239 e_self = -(q_self + f23*(dipole_self - f23*ch_qu_self + f415*qu_qu_self*alpha**2)*alpha**2)*alpha*
oorootpi
4240 fac1 =
pi/(2.0_dp*cell%deth)
4241 e_neut = -q_sum*fac1*(q_sum/alpha**2 - q_neutg)
4244 DO iparticle_kind = 1,
SIZE(local_particles%n_el)
4245 nparticle_local = local_particles%n_el(iparticle_kind)
4246 DO iparticle_local = 1, nparticle_local
4247 iparticle = local_particles%list(iparticle_kind)%array(iparticle_local)
4248 IF (any(task(1, :)))
THEN
4250 IF (do_efield0)
THEN
4251 efield0(iparticle) = efield0(iparticle) - q_sum*2.0_dp*fac1/alpha**2
4252 IF (lradii) radius = radii(iparticle)
4253 IF (radius > 0)
THEN
4254 q = charges(iparticle)
4255 efield0(iparticle) = efield0(iparticle) + fac1*radius**2*(q_sum + q)
4262 END SUBROUTINE ewald_multipole_self
4274 SUBROUTINE ewald_multipole_print(iw, e_gspace, e_rspace, e_bonded, e_self, e_neut)
4276 INTEGER,
INTENT(IN) :: iw
4277 REAL(kind=
dp),
INTENT(IN) :: e_gspace, e_rspace, e_bonded, e_self, &
4281 WRITE (iw,
'( A, A )')
' *********************************', &
4282 '**********************************************'
4283 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' INITIAL GSPACE ENERGY', &
4284 '[hartree]',
'= ', e_gspace
4285 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' INITIAL RSPACE ENERGY', &
4286 '[hartree]',
'= ', e_rspace
4287 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' BONDED CORRECTION', &
4288 '[hartree]',
'= ', e_bonded
4289 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' SELF ENERGY CORRECTION', &
4290 '[hartree]',
'= ', e_self
4291 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' NEUTRALIZ. BCKGR. ENERGY', &
4292 '[hartree]',
'= ', e_neut
4293 WRITE (iw,
'( A, A, T35, A, T56, E25.15 )')
' TOTAL ELECTROSTATIC EN.', &
4294 '[hartree]',
'= ', e_rspace + e_bonded + e_gspace + e_self + e_neut
4295 WRITE (iw,
'( A, A )')
' *********************************', &
4296 '**********************************************'
4298 END SUBROUTINE ewald_multipole_print
4313 SUBROUTINE debug_ewald_multipoles(ewald_env, ewald_pw, nonbond_env, cell, &
4314 particle_set, local_particles, iw, debug_r_space)
4315 TYPE charge_mono_type
4316 REAL(kind=
dp),
DIMENSION(:), &
4318 REAL(kind=
dp),
DIMENSION(:, :), &
4320 END TYPE charge_mono_type
4321 TYPE multi_charge_type
4322 TYPE(charge_mono_type),
DIMENSION(:), &
4323 POINTER :: charge_typ
4324 END TYPE multi_charge_type
4330 POINTER :: particle_set
4332 INTEGER,
INTENT(IN) :: iw
4333 LOGICAL,
INTENT(IN) :: debug_r_space
4335 INTEGER :: nparticles
4336 LOGICAL,
DIMENSION(3) :: task
4337 REAL(kind=
dp) :: e_neut, e_self, g_energy, &
4338 r_energy, debug_energy
4339 REAL(kind=
dp),
POINTER,
DIMENSION(:) :: charges
4340 REAL(kind=
dp),
POINTER, &
4341 DIMENSION(:, :) :: dipoles, g_forces, g_pv, &
4342 r_forces, r_pv, e_field1, &
4344 REAL(kind=
dp),
POINTER, &
4345 DIMENSION(:, :, :) :: quadrupoles
4347 TYPE(multi_charge_type),
DIMENSION(:), &
4348 POINTER :: multipoles
4350 NULLIFY (multipoles, charges, dipoles, g_forces, g_pv, &
4351 r_forces, r_pv, e_field1, e_field2)
4356 nparticles =
SIZE(particle_set)
4359 ALLOCATE (charges(nparticles))
4360 ALLOCATE (dipoles(3, nparticles))
4361 ALLOCATE (quadrupoles(3, 3, nparticles))
4364 ALLOCATE (r_forces(3, nparticles))
4365 ALLOCATE (g_forces(3, nparticles))
4366 ALLOCATE (e_field1(3, nparticles))
4367 ALLOCATE (e_field2(3, nparticles))
4368 ALLOCATE (g_pv(3, 3))
4369 ALLOCATE (r_pv(3, 3))
4375 quadrupoles = 0.0_dp
4387 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"CHARGE", echarge=-1.0_dp, &
4388 random_stream=random_stream, charges=charges)
4389 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"CHARGE", echarge=1.0_dp, &
4390 random_stream=random_stream, charges=charges)
4391 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4394 WRITE (iw, *)
"DEBUG ENERGY (CHARGE-CHARGE): ", debug_energy
4396 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4397 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4398 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4399 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4400 CALL release_multi_type(multipoles)
4407 quadrupoles = 0.0_dp
4419 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"CHARGE", echarge=-1.0_dp, &
4420 random_stream=random_stream, charges=charges)
4421 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"DIPOLE", echarge=0.5_dp, &
4422 random_stream=random_stream, dipoles=dipoles)
4423 WRITE (iw,
'("CHARGES",F15.9)') charges
4424 WRITE (iw,
'("DIPOLES",3F15.9)') dipoles
4425 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4428 WRITE (iw, *)
"DEBUG ENERGY (CHARGE-DIPOLE): ", debug_energy
4430 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4431 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4432 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4433 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4434 CALL release_multi_type(multipoles)
4440 quadrupoles = 0.0_dp
4452 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"DIPOLE", echarge=10000.0_dp, &
4453 random_stream=random_stream, dipoles=dipoles)
4454 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"DIPOLE", echarge=20000._dp, &
4455 random_stream=random_stream, dipoles=dipoles)
4456 WRITE (iw,
'("DIPOLES",3F15.9)') dipoles
4457 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4460 WRITE (iw, *)
"DEBUG ENERGY (DIPOLE-DIPOLE): ", debug_energy
4462 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4463 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4464 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4465 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4466 CALL release_multi_type(multipoles)
4473 quadrupoles = 0.0_dp
4485 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"CHARGE", echarge=-1.0_dp, &
4486 random_stream=random_stream, charges=charges)
4487 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"QUADRUPOLE", echarge=10.0_dp, &
4488 random_stream=random_stream, quadrupoles=quadrupoles)
4489 WRITE (iw,
'("CHARGES",F15.9)') charges
4490 WRITE (iw,
'("QUADRUPOLES",9F15.9)') quadrupoles
4491 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4494 WRITE (iw, *)
"DEBUG ENERGY (CHARGE-QUADRUPOLE): ", debug_energy
4496 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4497 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4498 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4499 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4500 CALL release_multi_type(multipoles)
4507 quadrupoles = 0.0_dp
4519 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"DIPOLE", echarge=10000.0_dp, &
4520 random_stream=random_stream, dipoles=dipoles)
4521 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"QUADRUPOLE", echarge=10000.0_dp, &
4522 random_stream=random_stream, quadrupoles=quadrupoles)
4523 WRITE (iw,
'("DIPOLES",3F15.9)') dipoles
4524 WRITE (iw,
'("QUADRUPOLES",9F15.9)') quadrupoles
4525 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4528 WRITE (iw, *)
"DEBUG ENERGY (DIPOLE-QUADRUPOLE): ", debug_energy
4530 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4531 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4532 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4533 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4534 CALL release_multi_type(multipoles)
4540 quadrupoles = 0.0_dp
4552 CALL create_multi_type(multipoles, nparticles, 1, nparticles/2,
"QUADRUPOLE", echarge=-20000.0_dp, &
4553 random_stream=random_stream, quadrupoles=quadrupoles)
4554 CALL create_multi_type(multipoles, nparticles, nparticles/2 + 1, nparticles,
"QUADRUPOLE", echarge=10000.0_dp, &
4555 random_stream=random_stream, quadrupoles=quadrupoles)
4556 WRITE (iw,
'("QUADRUPOLES",9F15.9)') quadrupoles
4557 CALL debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, debug_energy, &
4560 WRITE (iw, *)
"DEBUG ENERGY (QUADRUPOLE-QUADRUPOLE): ", debug_energy
4562 particle_set, local_particles, g_energy, r_energy, e_neut, e_self, &
4563 task, do_correction_bonded=.false., do_forces=.true., do_stress=.true., do_efield=.false., &
4564 charges=charges, dipoles=dipoles, quadrupoles=quadrupoles, forces_local=g_forces, &
4565 forces_glob=r_forces, pv_local=g_pv, pv_glob=r_pv, iw=iw, do_debug=.false.)
4566 CALL release_multi_type(multipoles)
4568 DEALLOCATE (charges)
4569 DEALLOCATE (dipoles)
4570 DEALLOCATE (quadrupoles)
4571 DEALLOCATE (r_forces)
4572 DEALLOCATE (g_forces)
4573 DEALLOCATE (e_field1)
4574 DEALLOCATE (e_field2)
4590 SUBROUTINE debug_ewald_multipole_low(particle_set, cell, nonbond_env, multipoles, &
4591 energy, debug_r_space)
4595 TYPE(multi_charge_type),
DIMENSION(:),
POINTER :: multipoles
4596 REAL(kind=
dp),
INTENT(OUT) :: energy
4597 LOGICAL,
INTENT(IN) :: debug_r_space
4599 INTEGER :: atom_a, atom_b, icell, iend, igrp, &
4600 ikind, ilist, ipair, istart, jcell, &
4601 jkind, k, k1, kcell, l, l1, ncells, &
4603 INTEGER,
DIMENSION(:, :),
POINTER ::
list
4604 REAL(kind=
dp) :: fac_ij, q, r, rab2, rab2_max
4605 REAL(kind=
dp),
DIMENSION(3) :: cell_v, cvi, rab, rab0, rm
4608 TYPE(
pos_type),
DIMENSION(:),
POINTER :: r_last_update, r_last_update_pbc
4612 r_last_update=r_last_update, r_last_update_pbc=r_last_update_pbc)
4613 rab2_max = huge(0.0_dp)
4614 IF (debug_r_space)
THEN
4617 lists:
DO ilist = 1, nonbonded%nlists
4618 neighbor_kind_pair => nonbonded%neighbor_kind_pairs(ilist)
4619 npairs = neighbor_kind_pair%npairs
4620 IF (npairs == 0) cycle
4621 list => neighbor_kind_pair%list
4622 cvi = neighbor_kind_pair%cell_vector
4623 cell_v = matmul(cell%hmat, cvi)
4624 kind_group_loop:
DO igrp = 1, neighbor_kind_pair%ngrp_kind
4625 istart = neighbor_kind_pair%grp_kind_start(igrp)
4626 iend = neighbor_kind_pair%grp_kind_end(igrp)
4627 ikind = neighbor_kind_pair%ij_kind(1, igrp)
4628 jkind = neighbor_kind_pair%ij_kind(2, igrp)
4629 pairs:
DO ipair = istart, iend
4631 atom_a =
list(1, ipair)
4632 atom_b =
list(2, ipair)
4633 IF (atom_a == atom_b) fac_ij = 0.5_dp
4634 rab = r_last_update_pbc(atom_b)%r - r_last_update_pbc(atom_a)%r
4636 rab2 = rab(1)**2 + rab(2)**2 + rab(3)**2
4637 IF (rab2 <= rab2_max)
THEN
4639 DO k = 1,
SIZE(multipoles(atom_a)%charge_typ)
4640 DO k1 = 1,
SIZE(multipoles(atom_a)%charge_typ(k)%charge)
4642 DO l = 1,
SIZE(multipoles(atom_b)%charge_typ)
4643 DO l1 = 1,
SIZE(multipoles(atom_b)%charge_typ(l)%charge)
4645 rm = rab + multipoles(atom_b)%charge_typ(l)%pos(:, l1) - multipoles(atom_a)%charge_typ(k)%pos(:, k1)
4646 r = sqrt(dot_product(rm, rm))
4647 q = multipoles(atom_b)%charge_typ(l)%charge(l1)*multipoles(atom_a)%charge_typ(k)%charge(k1)
4648 energy = energy + q/r*fac_ij
4657 END DO kind_group_loop
4663 DO atom_a = 1,
SIZE(particle_set)
4664 DO atom_b = atom_a,
SIZE(particle_set)
4666 IF (atom_a == atom_b) fac_ij = 0.5_dp
4667 rab0 = r_last_update_pbc(atom_b)%r - r_last_update_pbc(atom_a)%r
4669 DO icell = -ncells, ncells
4670 DO jcell = -ncells, ncells
4671 DO kcell = -ncells, ncells
4672 cell_v = matmul(cell%hmat, real((/icell, jcell, kcell/), kind=
dp))
4673 IF (all(cell_v == 0.0_dp) .AND. (atom_a == atom_b)) cycle
4675 rab2 = rab(1)**2 + rab(2)**2 + rab(3)**2
4676 IF (rab2 <= rab2_max)
THEN
4678 DO k = 1,
SIZE(multipoles(atom_a)%charge_typ)
4679 DO k1 = 1,
SIZE(multipoles(atom_a)%charge_typ(k)%charge)
4681 DO l = 1,
SIZE(multipoles(atom_b)%charge_typ)
4682 DO l1 = 1,
SIZE(multipoles(atom_b)%charge_typ(l)%charge)
4684 rm = rab + multipoles(atom_b)%charge_typ(l)%pos(:, l1) - multipoles(atom_a)%charge_typ(k)%pos(:, k1)
4685 r = sqrt(dot_product(rm, rm))
4686 q = multipoles(atom_b)%charge_typ(l)%charge(l1)*multipoles(atom_a)%charge_typ(k)%charge(k1)
4687 energy = energy + q/r*fac_ij
4701 END SUBROUTINE debug_ewald_multipole_low
4718 SUBROUTINE create_multi_type(multipoles, idim, istart, iend, label, echarge, &
4719 random_stream, charges, dipoles, quadrupoles)
4720 TYPE(multi_charge_type),
DIMENSION(:),
POINTER :: multipoles
4721 INTEGER,
INTENT(IN) :: idim, istart, iend
4722 CHARACTER(LEN=*),
INTENT(IN) :: label
4723 REAL(kind=
dp),
INTENT(IN) :: echarge
4725 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: charges
4726 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
4727 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
4728 POINTER :: quadrupoles
4730 INTEGER :: i, isize, k, l, m
4731 REAL(kind=
dp) :: dx, r2, rvec(3), rvec1(3), rvec2(3)
4733 IF (
ASSOCIATED(multipoles))
THEN
4734 cpassert(
SIZE(multipoles) == idim)
4736 ALLOCATE (multipoles(idim))
4738 NULLIFY (multipoles(i)%charge_typ)
4742 IF (
ASSOCIATED(multipoles(i)%charge_typ))
THEN
4744 isize =
SIZE(multipoles(i)%charge_typ) + 1
4748 CALL reallocate_charge_type(multipoles(i)%charge_typ, 1, isize)
4751 cpassert(
PRESENT(charges))
4752 cpassert(
ASSOCIATED(charges))
4753 ALLOCATE (multipoles(i)%charge_typ(isize)%charge(1))
4754 ALLOCATE (multipoles(i)%charge_typ(isize)%pos(3, 1))
4756 multipoles(i)%charge_typ(isize)%charge(1) = echarge
4757 multipoles(i)%charge_typ(isize)%pos(1:3, 1) = 0.0_dp
4758 charges(i) = charges(i) + echarge
4761 cpassert(
PRESENT(dipoles))
4762 cpassert(
ASSOCIATED(dipoles))
4763 ALLOCATE (multipoles(i)%charge_typ(isize)%charge(2))
4764 ALLOCATE (multipoles(i)%charge_typ(isize)%pos(3, 2))
4765 CALL random_stream%fill(rvec)
4766 rvec = rvec/(2.0_dp*sqrt(dot_product(rvec, rvec)))*dx
4767 multipoles(i)%charge_typ(isize)%charge(1) = echarge
4768 multipoles(i)%charge_typ(isize)%pos(1:3, 1) = rvec
4769 multipoles(i)%charge_typ(isize)%charge(2) = -echarge
4770 multipoles(i)%charge_typ(isize)%pos(1:3, 2) = -rvec
4772 dipoles(:, i) = dipoles(:, i) + 2.0_dp*echarge*rvec
4775 cpassert(
PRESENT(quadrupoles))
4776 cpassert(
ASSOCIATED(quadrupoles))
4777 ALLOCATE (multipoles(i)%charge_typ(isize)%charge(4))
4778 ALLOCATE (multipoles(i)%charge_typ(isize)%pos(3, 4))
4779 CALL random_stream%fill(rvec1)
4780 CALL random_stream%fill(rvec2)
4781 rvec1 = rvec1/sqrt(dot_product(rvec1, rvec1))
4782 rvec2 = rvec2 - dot_product(rvec2, rvec1)*rvec1
4783 rvec2 = rvec2/sqrt(dot_product(rvec2, rvec2))
4785 rvec1 = rvec1/2.0_dp*dx
4786 rvec2 = rvec2/2.0_dp*dx
4794 multipoles(i)%charge_typ(isize)%charge(1) = -echarge
4795 multipoles(i)%charge_typ(isize)%pos(1:3, 1) = rvec1 + rvec2
4796 multipoles(i)%charge_typ(isize)%charge(2) = echarge
4797 multipoles(i)%charge_typ(isize)%pos(1:3, 2) = rvec1 - rvec2
4798 multipoles(i)%charge_typ(isize)%charge(3) = -echarge
4799 multipoles(i)%charge_typ(isize)%pos(1:3, 3) = -rvec1 - rvec2
4800 multipoles(i)%charge_typ(isize)%charge(4) = echarge
4801 multipoles(i)%charge_typ(isize)%pos(1:3, 4) = -rvec1 + rvec2
4804 r2 = dot_product(multipoles(i)%charge_typ(isize)%pos(:, k), multipoles(i)%charge_typ(isize)%pos(:, k))
4807 quadrupoles(m, l, i) = quadrupoles(m, l, i) + 3.0_dp*0.5_dp*multipoles(i)%charge_typ(isize)%charge(k)* &
4808 multipoles(i)%charge_typ(isize)%pos(l, k)* &
4809 multipoles(i)%charge_typ(isize)%pos(m, k)
4810 IF (m == l) quadrupoles(m, l, i) = quadrupoles(m, l, i) - 0.5_dp*multipoles(i)%charge_typ(isize)%charge(k)*r2
4817 END SUBROUTINE create_multi_type
4825 SUBROUTINE release_multi_type(multipoles)
4826 TYPE(multi_charge_type),
DIMENSION(:),
POINTER :: multipoles
4830 IF (
ASSOCIATED(multipoles))
THEN
4831 DO i = 1,
SIZE(multipoles)
4832 DO j = 1,
SIZE(multipoles(i)%charge_typ)
4833 DEALLOCATE (multipoles(i)%charge_typ(j)%charge)
4834 DEALLOCATE (multipoles(i)%charge_typ(j)%pos)
4836 DEALLOCATE (multipoles(i)%charge_typ)
4839 END SUBROUTINE release_multi_type
4849 SUBROUTINE reallocate_charge_type(charge_typ, istart, iend)
4850 TYPE(charge_mono_type),
DIMENSION(:),
POINTER :: charge_typ
4851 INTEGER,
INTENT(IN) :: istart, iend
4853 INTEGER :: i, isize, j, jsize, jsize1, jsize2
4854 TYPE(charge_mono_type),
DIMENSION(:),
POINTER :: charge_typ_bk
4856 IF (
ASSOCIATED(charge_typ))
THEN
4857 isize =
SIZE(charge_typ)
4858 ALLOCATE (charge_typ_bk(1:isize))
4860 jsize =
SIZE(charge_typ(j)%charge)
4861 ALLOCATE (charge_typ_bk(j)%charge(jsize))
4862 jsize1 =
SIZE(charge_typ(j)%pos, 1)
4863 jsize2 =
SIZE(charge_typ(j)%pos, 2)
4864 ALLOCATE (charge_typ_bk(j)%pos(jsize1, jsize2))
4865 charge_typ_bk(j)%pos = charge_typ(j)%pos
4866 charge_typ_bk(j)%charge = charge_typ(j)%charge
4868 DO j = 1,
SIZE(charge_typ)
4869 DEALLOCATE (charge_typ(j)%charge)
4870 DEALLOCATE (charge_typ(j)%pos)
4872 DEALLOCATE (charge_typ)
4874 ALLOCATE (charge_typ_bk(istart:iend))
4875 DO i = istart, isize
4876 jsize =
SIZE(charge_typ_bk(j)%charge)
4877 ALLOCATE (charge_typ(j)%charge(jsize))
4878 jsize1 =
SIZE(charge_typ_bk(j)%pos, 1)
4879 jsize2 =
SIZE(charge_typ_bk(j)%pos, 2)
4880 ALLOCATE (charge_typ(j)%pos(jsize1, jsize2))
4881 charge_typ(j)%pos = charge_typ_bk(j)%pos
4882 charge_typ(j)%charge = charge_typ_bk(j)%charge
4884 DO j = 1,
SIZE(charge_typ_bk)
4885 DEALLOCATE (charge_typ_bk(j)%charge)
4886 DEALLOCATE (charge_typ_bk(j)%pos)
4888 DEALLOCATE (charge_typ_bk)
4890 ALLOCATE (charge_typ(istart:iend))
4893 END SUBROUTINE reallocate_charge_type
4895 END SUBROUTINE debug_ewald_multipoles
4916 SUBROUTINE debug_ewald_multipoles_fields(ewald_env, ewald_pw, nonbond_env, cell, &
4917 particle_set, local_particles, radii, charges, dipoles, quadrupoles, task, iw, &
4918 atomic_kind_set, mm_section)
4925 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: radii, charges
4926 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
4927 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
4928 POINTER :: quadrupoles
4929 LOGICAL,
DIMENSION(3),
INTENT(IN) :: task
4930 INTEGER,
INTENT(IN) :: iw
4934 INTEGER :: i, iparticle_kind, j, k, &
4935 nparticle_local, nparticles
4936 REAL(kind=
dp) :: coord(3), dq, e_neut, e_self, efield1n(3), efield2n(3, 3), ene(2), &
4937 energy_glob, energy_local, enev(3, 2), o_tot_ene, pot, pv_glob(3, 3), pv_local(3, 3), &
4939 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: efield1, efield2, forces_glob, &
4941 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0, lcharges
4943 TYPE(
particle_type),
DIMENSION(:),
POINTER :: core_particle_set, shell_particle_set
4945 NULLIFY (lcharges, shell_particle_set, core_particle_set)
4949 nparticles =
SIZE(particle_set)
4951 DO iparticle_kind = 1,
SIZE(local_particles%n_el)
4952 nparticle_local = nparticle_local + local_particles%n_el(iparticle_kind)
4954 ALLOCATE (lcharges(nparticles))
4955 ALLOCATE (forces_glob(3, nparticles))
4956 ALLOCATE (forces_local(3, nparticle_local))
4957 ALLOCATE (efield0(nparticles))
4958 ALLOCATE (efield1(3, nparticles))
4959 ALLOCATE (efield2(9, nparticles))
4960 forces_glob = 0.0_dp
4961 forces_local = 0.0_dp
4967 energy_glob = 0.0_dp
4968 energy_local = 0.0_dp
4972 local_particles, energy_local, energy_glob, e_neut, e_self, task, .false., .true., .true., &
4973 .true., radii, charges, dipoles, quadrupoles, forces_local, forces_glob, pv_local, pv_glob, &
4974 efield0, efield1, efield2, iw, do_debug=.false.)
4975 o_tot_ene = energy_local + energy_glob + e_neut + e_self
4976 WRITE (iw, *)
"TOTAL ENERGY :: ========>", o_tot_ene
4980 DO i = 1, nparticles
4983 lcharges(i) = charges(i) + (-1.0_dp)**k*dq
4984 forces_glob = 0.0_dp
4985 forces_local = 0.0_dp
4988 energy_glob = 0.0_dp
4989 energy_local = 0.0_dp
4993 local_particles, energy_local, energy_glob, e_neut, e_self, &
4994 task, .false., .false., .false., .false., radii, &
4995 lcharges, dipoles, quadrupoles, iw=iw, do_debug=.false.)
4996 ene(k) = energy_local + energy_glob + e_neut + e_self
4998 pot = (ene(2) - ene(1))/(2.0_dp*dq)
4999 WRITE (iw,
'(A,I8,3(A,F15.9))')
"POTENTIAL FOR ATOM: ", i,
" NUMERICAL: ", pot,
" ANALYTICAL: ", efield0(i), &
5000 " ERROR: ", pot - efield0(i)
5001 tot_ene = tot_ene + 0.5_dp*efield0(i)*charges(i)
5003 WRITE (iw, *)
"ENERGIES: ", o_tot_ene, tot_ene, o_tot_ene - tot_ene
5004 WRITE (iw,
'(/,/,/)')
5007 DO i = 1, nparticles
5008 coord = particle_set(i)%r
5011 particle_set(i)%r(j) = coord(j) + (-1.0_dp)**k*dq
5014 CALL list_control(atomic_kind_set, particle_set, local_particles, &
5015 cell, nonbond_env, logger%para_env, mm_section, &
5016 shell_particle_set, core_particle_set)
5018 forces_glob = 0.0_dp
5019 forces_local = 0.0_dp
5022 energy_glob = 0.0_dp
5023 energy_local = 0.0_dp
5028 local_particles, energy_local, energy_glob, e_neut, e_self, &
5029 task, .false., .true., .true., .true., radii, &
5030 charges, dipoles, quadrupoles, forces_local, forces_glob, &
5031 pv_local, pv_glob, efield0, iw=iw, do_debug=.false.)
5033 particle_set(i)%r(j) = coord(j)
5035 efield1n(j) = -(ene(2) - ene(1))/(2.0_dp*dq)
5037 WRITE (iw,
'(/,A,I8)')
"FIELD FOR ATOM: ", i
5038 WRITE (iw,
'(A,3F15.9)')
" NUMERICAL: ", efield1n,
" ANALYTICAL: ", efield1(:, i), &
5039 " ERROR: ", efield1n - efield1(:, i)
5041 tot_ene = tot_ene - 0.5_dp*dot_product(efield1(:, i), dipoles(:, i))
5044 WRITE (iw, *)
"ENERGIES: ", o_tot_ene, tot_ene, o_tot_ene - tot_ene
5048 DO i = 1, nparticles
5049 coord = particle_set(i)%r
5052 particle_set(i)%r(j) = coord(j) + (-1.0_dp)**k*dq
5055 CALL list_control(atomic_kind_set, particle_set, local_particles, &
5056 cell, nonbond_env, logger%para_env, mm_section, &
5057 shell_particle_set, core_particle_set)
5059 forces_glob = 0.0_dp
5060 forces_local = 0.0_dp
5063 energy_glob = 0.0_dp
5064 energy_local = 0.0_dp
5069 local_particles, energy_local, energy_glob, e_neut, e_self, &
5070 task, .false., .true., .true., .true., radii, &
5071 charges, dipoles, quadrupoles, forces_local, forces_glob, &
5072 pv_local, pv_glob, efield1=efield1, iw=iw, do_debug=.false.)
5073 enev(:, k) = efield1(:, i)
5074 particle_set(i)%r(j) = coord(j)
5076 efield2n(:, j) = (enev(:, 2) - enev(:, 1))/(2.0_dp*dq)
5078 WRITE (iw,
'(/,A,I8)')
"FIELD GRADIENT FOR ATOM: ", i
5079 WRITE (iw,
'(A,9F15.9)')
" NUMERICAL: ", efield2n, &
5080 " ANALYTICAL: ", efield2(:, i), &
5081 " ERROR: ", reshape(efield2n, (/9/)) - efield2(:, i)
5083 END SUBROUTINE debug_ewald_multipoles_fields
5102 SUBROUTINE debug_ewald_multipoles_fields2(ewald_env, ewald_pw, nonbond_env, cell, &
5103 particle_set, local_particles, radii, charges, dipoles, quadrupoles, task, iw)
5110 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: radii, charges
5111 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: dipoles
5112 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
5113 POINTER :: quadrupoles
5114 LOGICAL,
DIMENSION(3),
INTENT(IN) :: task
5115 INTEGER,
INTENT(IN) :: iw
5117 INTEGER :: i, ind, iparticle_kind, j, k, &
5118 nparticle_local, nparticles
5119 REAL(kind=
dp) :: e_neut, e_self, energy_glob, &
5120 energy_local, o_tot_ene, prod, &
5121 pv_glob(3, 3), pv_local(3, 3), tot_ene
5122 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: efield1, efield2, forces_glob, &
5124 REAL(kind=
dp),
DIMENSION(:),
POINTER :: efield0
5130 nparticles =
SIZE(particle_set)
5132 DO iparticle_kind = 1,
SIZE(local_particles%n_el)
5133 nparticle_local = nparticle_local + local_particles%n_el(iparticle_kind)
5135 ALLOCATE (forces_glob(3, nparticles))
5136 ALLOCATE (forces_local(3, nparticle_local))
5137 ALLOCATE (efield0(nparticles))
5138 ALLOCATE (efield1(3, nparticles))
5139 ALLOCATE (efield2(9, nparticles))
5140 forces_glob = 0.0_dp
5141 forces_local = 0.0_dp
5147 energy_glob = 0.0_dp
5148 energy_local = 0.0_dp
5152 local_particles, energy_local, energy_glob, e_neut, e_self, task, .false., .true., .true., &
5153 .true., radii, charges, dipoles, quadrupoles, forces_local, forces_glob, pv_local, pv_glob, &
5154 efield0, efield1, efield2, iw, do_debug=.false.)
5155 o_tot_ene = energy_local + energy_glob + e_neut + e_self
5156 WRITE (iw, *)
"TOTAL ENERGY :: ========>", o_tot_ene
5161 DO i = 1, nparticles
5162 tot_ene = tot_ene + 0.5_dp*efield0(i)*charges(i)
5164 WRITE (iw, *)
"ENERGIES: ", o_tot_ene, tot_ene, o_tot_ene - tot_ene
5165 WRITE (iw,
'(/,/,/)')
5170 DO i = 1, nparticles
5171 tot_ene = tot_ene - 0.5_dp*dot_product(efield1(:, i), dipoles(:, i))
5173 WRITE (iw, *)
"ENERGIES: ", o_tot_ene, tot_ene, o_tot_ene - tot_ene
5174 WRITE (iw,
'(/,/,/)')
5179 DO i = 1, nparticles
5185 prod = prod + efield2(ind, i)*quadrupoles(j, k, i)
5188 tot_ene = tot_ene - 0.5_dp*(1.0_dp/3.0_dp)*prod
5190 WRITE (iw, *)
"ENERGIES: ", o_tot_ene, tot_ene, o_tot_ene - tot_ene
5191 WRITE (iw,
'(/,/,/)')
5194 END SUBROUTINE debug_ewald_multipoles_fields2
Define the atomic kind types and their sub types.
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public aguado2003
integer, save, public laino2008
Handles all functions related to the CELL.
various routines to log and control the output. The idea is that decisions about where to log should ...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
integer, parameter, public tang_toennies
integer, parameter, public no_damping
subroutine, public dg_get(dg, dg_rho0)
Get the dg_type.
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
subroutine, public ewald_env_get(ewald_env, ewald_type, alpha, eps_pol, epsilon, gmax, ns_max, o_spline, group, para_env, poisson_section, precs, rcut, do_multipoles, max_multipole, do_ipol, max_ipol_iter, interaction_cutoffs, cell_hmat)
Purpose: Get the EWALD environment.
subroutine, public ewald_pw_get(ewald_pw, pw_big_pool, pw_small_pool, rs_desc, poisson_env, dg)
get the ewald_pw environment to the correct program.
Treats the electrostatic for multipoles (up to quadrupoles)
recursive subroutine, public ewald_multipole_evaluate(ewald_env, ewald_pw, nonbond_env, cell, particle_set, local_particles, energy_local, energy_glob, e_neut, e_self, task, do_correction_bonded, do_forces, do_stress, do_efield, radii, charges, dipoles, quadrupoles, forces_local, forces_glob, pv_local, pv_glob, efield0, efield1, efield2, iw, do_debug, atomic_kind_set, mm_section)
Computes the potential and the force for a lattice sum of multipoles (up to quadrupole)
subroutine, public list_control(atomic_kind_set, particle_set, local_particles, cell, fist_nonbond_env, para_env, mm_section, shell_particle_set, core_particle_set, force_update, exclusions)
...
Define the neighbor list data types and the corresponding functionality.
subroutine, public fist_nonbond_env_get(fist_nonbond_env, potparm14, potparm, nonbonded, rlist_cut, rlist_lowsq, aup, lup, ei_scale14, vdw_scale14, shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, rcore_last_update_pbc, cell_last_update, num_update, last_update, counter, natom_types, long_range_correction, ij_kind_full_fac, eam_data, quip_data, nequip_data, allegro_data, deepmd_data, charges)
sets a fist_nonbond_env
Defines the basic variable types.
integer, parameter, public dp
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition of mathematical constants and functions.
real(kind=dp), parameter, public oorootpi
real(kind=dp), parameter, public pi
real(kind=dp), parameter, public sqrthalf
real(kind=dp), parameter, public fourpi
real(kind=dp), dimension(0:maxfac), parameter, public fac
Interface to the message passing library MPI.
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
integer, parameter, public uniform
Define the data structure for the particle information.
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
subroutine, public structure_factor_deallocate(exp_igr)
...
subroutine, public structure_factor_allocate(bds, nparts, exp_igr, allocate_centre, allocate_shell_e, allocate_shell_centre, nshell)
...
subroutine, public structure_factor_evaluate(delta, lb, ex, ey, ez)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Type for Gaussian Densities type = type of gaussian (PME) grid = grid number gcc = Gaussian contracti...
structure to store local (to a processor) ordered lists of integers.
to build arrays of pointers
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...