This subroutine computes the potential generated by the static multipoles to a set of arbitrary coordinates, without applying any screening rules.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ommp_electrostatics_type), | intent(in) | :: | eel |
Electrostatics data structure |
||
real(kind=rp), | intent(in) | :: | cpt(:,:) |
Coordinates at which the electric field is requested |
||
real(kind=rp), | intent(inout) | :: | E(:,:) |
Electric field (results will be added) |
subroutine field_D2E(eel, cpt, E)
!! This subroutine computes the potential generated by the static
!! multipoles to a set of arbitrary coordinates, without applying
!! any screening rules.
implicit none
type(ommp_electrostatics_type), intent(in) :: eel
!! Electrostatics data structure
real(rp), intent(inout) :: E(:,:)
!! Electric field (results will be added)
real(rp), intent(in) :: cpt(:,:)
!! Coordinates at which the electric field is requested
integer(ip) :: i, j, n_cpt
real(rp) :: kernel(5), dr(3), tmpV, tmpE(3), tmpEgr(6), tmpHE(10)
if(eel%pol_atoms < 1) return
if(.not. eel%ipd_done) call fatal_error("IPD should be computed before&
& computing D2E field.")
n_cpt = size(cpt, 2)
if(eel%amoeba) then
!$omp parallel do default(shared) schedule(dynamic) &
!$omp private(i,j,dr,kernel,tmpV,tmpE,tmpEgr,tmpHE) reduction(+:E)
do i=1, eel%pol_atoms
do j=1, n_cpt
dr = cpt(:,j) - eel%cpol(:,i)
call coulomb_kernel(dr, 3, kernel)
tmpE = 0.0_rp
!TODO
call mu_elec_prop(0.5*(eel%ipd(:,i, _amoeba_P_) + eel%ipd(:,i, _amoeba_D_)), dr, kernel, .false., tmpV, &
.true., tmpE, .false., tmpEgr, &
.false., tmpHE)
E(:,j) = E(:,j) + tmpE
end do
end do
else
!$omp parallel do default(shared) schedule(dynamic) &
!$omp private(i,j,dr,kernel,tmpV,tmpE,tmpEgr,tmpHE) reduction(+:E)
do i=1, eel%pol_atoms
! loop on sources
do j=1, n_cpt
dr = cpt(:,j) - eel%cpol(:,i)
call coulomb_kernel(dr, 3, kernel)
tmpE = 0.0_rp
call mu_elec_prop(eel%ipd(:,i,1), dr, kernel, .false., tmpV, &
.true., tmpE, .false., tmpEgr, &
.false., tmpHE)
E(:,j) = E(:,j) + tmpE
end do
end do
end if
end subroutine field_D2E