45 |
|
|
46 |
|
!! @author Charles F. Vardeman II |
47 |
|
!! @author Matthew Meineke |
48 |
< |
!! @version $Id: doForces.F90,v 1.62 2005-10-23 21:08:02 chrisfen Exp $, $Date: 2005-10-23 21:08:02 $, $Name: not supported by cvs2svn $, $Revision: 1.62 $ |
48 |
> |
!! @version $Id: doForces.F90,v 1.64 2005-11-01 19:09:23 chrisfen Exp $, $Date: 2005-11-01 19:09:23 $, $Name: not supported by cvs2svn $, $Revision: 1.64 $ |
49 |
|
|
50 |
|
|
51 |
|
module doForces |
644 |
|
integer, intent(out) :: thisStat |
645 |
|
integer :: my_status, nMatches |
646 |
|
integer, pointer :: MatchList(:) => null() |
647 |
– |
real(kind=dp) :: rcut, rrf, rt, dielect |
647 |
|
|
648 |
|
!! assume things are copacetic, unless they aren't |
649 |
|
thisStat = 0 |
743 |
|
integer :: nlist |
744 |
|
real( kind = DP ) :: ratmsq, rgrpsq, rgrp, vpair, vij |
745 |
|
real( kind = DP ) :: sw, dswdr, swderiv, mf |
746 |
+ |
real( kind = DP ) :: rVal |
747 |
|
real(kind=dp),dimension(3) :: d_atm, d_grp, fpair, fij |
748 |
|
real(kind=dp) :: rfpot, mu_i, virial |
749 |
|
integer :: me_i, me_j, n_in_i, n_in_j |
754 |
|
integer :: propPack_i, propPack_j |
755 |
|
integer :: loopStart, loopEnd, loop |
756 |
|
integer :: iHash |
757 |
< |
integer :: ig |
757 |
> |
integer :: i1 |
758 |
|
|
759 |
|
|
760 |
|
!! initialize local variables |
920 |
|
inner: do jb = groupStartCol(j), groupStartCol(j+1)-1 |
921 |
|
|
922 |
|
atom2 = groupListCol(jb) |
923 |
< |
|
924 |
< |
if (skipThisPair(atom1, atom2)) cycle inner |
925 |
< |
|
923 |
> |
|
924 |
> |
if (skipThisPair(atom1, atom2)) cycle inner |
925 |
> |
|
926 |
|
if ((n_in_i .eq. 1).and.(n_in_j .eq. 1)) then |
927 |
|
d_atm(1:3) = d_grp(1:3) |
928 |
|
ratmsq = rgrpsq |
1090 |
|
|
1091 |
|
! we loop only over the local atoms, so we don't need row and column |
1092 |
|
! lookups for the types |
1093 |
< |
|
1093 |
> |
|
1094 |
|
me_i = atid(i) |
1095 |
|
|
1096 |
|
! is the atom electrostatic? See if it would have an |
1097 |
|
! electrostatic interaction with itself |
1098 |
|
iHash = InteractionHash(me_i,me_i) |
1099 |
< |
|
1099 |
> |
|
1100 |
|
if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then |
1101 |
|
#ifdef IS_MPI |
1102 |
< |
call rf_self_self(i, eFrame, pot_local(ELECTROSTATIC_POT), & |
1102 |
> |
call self_self(i, eFrame, pot_local(ELECTROSTATIC_POT), & |
1103 |
|
t, do_pot) |
1104 |
|
#else |
1105 |
< |
call rf_self_self(i, eFrame, pot(ELECTROSTATIC_POT), & |
1105 |
> |
call self_self(i, eFrame, pot(ELECTROSTATIC_POT), & |
1106 |
|
t, do_pot) |
1107 |
|
#endif |
1108 |
|
endif |
1109 |
+ |
|
1110 |
+ |
|
1111 |
+ |
!!$ if (electrostaticSummationMethod.eq.REACTION_FIELD) then |
1112 |
+ |
|
1113 |
+ |
! loop over the excludes to accumulate RF stuff we've |
1114 |
+ |
! left out of the normal pair loop |
1115 |
+ |
|
1116 |
+ |
do i1 = 1, nSkipsForAtom(i) |
1117 |
+ |
j = skipsForAtom(i, i1) |
1118 |
+ |
|
1119 |
+ |
! prevent overcounting of the skips |
1120 |
+ |
if (i.lt.j) then |
1121 |
+ |
call get_interatomic_vector(q(:,i), & |
1122 |
+ |
q(:,j), d_atm, ratmsq) |
1123 |
+ |
rVal = dsqrt(ratmsq) |
1124 |
+ |
call get_switch(ratmsq, sw, dswdr, rVal, group_switch, & |
1125 |
+ |
in_switching_region) |
1126 |
+ |
#ifdef IS_MPI |
1127 |
+ |
call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, & |
1128 |
+ |
vpair, pot_local(ELECTROSTATIC_POT), f, t, do_pot) |
1129 |
+ |
#else |
1130 |
+ |
call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, & |
1131 |
+ |
vpair, pot(ELECTROSTATIC_POT), f, t, do_pot) |
1132 |
+ |
#endif |
1133 |
+ |
endif |
1134 |
+ |
enddo |
1135 |
+ |
!!$ endif |
1136 |
|
enddo |
1137 |
|
endif |
1138 |
|
|
1163 |
|
|
1164 |
|
subroutine do_pair(i, j, rijsq, d, sw, do_pot, & |
1165 |
|
eFrame, A, f, t, pot, vpair, fpair, d_grp, r_grp) |
1166 |
+ |
!!$ subroutine do_pair(i, j, rijsq, d, sw, do_pot, & |
1167 |
+ |
!!$ eFrame, A, f, t, pot, vpair, fpair, d_grp, r_grp, felec) |
1168 |
|
|
1169 |
|
real( kind = dp ) :: vpair, sw |
1170 |
|
real( kind = dp ), dimension(LR_POT_TYPES) :: pot |
1171 |
|
real( kind = dp ), dimension(3) :: fpair |
1172 |
+ |
real( kind = dp ), dimension(3) :: felec |
1173 |
|
real( kind = dp ), dimension(nLocal) :: mfact |
1174 |
|
real( kind = dp ), dimension(9,nLocal) :: eFrame |
1175 |
|
real( kind = dp ), dimension(9,nLocal) :: A |
1200 |
|
#endif |
1201 |
|
|
1202 |
|
iHash = InteractionHash(me_i, me_j) |
1203 |
< |
|
1203 |
> |
|
1204 |
|
if ( iand(iHash, LJ_PAIR).ne.0 ) then |
1205 |
|
call do_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1206 |
|
pot(VDW_POT), f, do_pot) |
1207 |
|
endif |
1208 |
< |
|
1208 |
> |
|
1209 |
|
if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then |
1210 |
|
call doElectrostaticPair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1211 |
|
pot(ELECTROSTATIC_POT), eFrame, f, t, do_pot) |
1212 |
+ |
!!$ call doElectrostaticPair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1213 |
+ |
!!$ pot(ELECTROSTATIC_POT), eFrame, f, t, do_pot, felec) |
1214 |
|
endif |
1215 |
< |
|
1215 |
> |
|
1216 |
|
if ( iand(iHash, STICKY_PAIR).ne.0 ) then |
1217 |
|
call do_sticky_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1218 |
|
pot(HB_POT), A, f, t, do_pot) |
1219 |
|
endif |
1220 |
< |
|
1220 |
> |
|
1221 |
|
if ( iand(iHash, STICKYPOWER_PAIR).ne.0 ) then |
1222 |
|
call do_sticky_power_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1223 |
|
pot(HB_POT), A, f, t, do_pot) |
1224 |
|
endif |
1225 |
< |
|
1225 |
> |
|
1226 |
|
if ( iand(iHash, GAYBERNE_PAIR).ne.0 ) then |
1227 |
|
call do_gb_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1228 |
|
pot(VDW_POT), A, f, t, do_pot) |
1232 |
|
call do_gb_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1233 |
|
pot(VDW_POT), A, f, t, do_pot) |
1234 |
|
endif |
1235 |
< |
|
1235 |
> |
|
1236 |
|
if ( iand(iHash, EAM_PAIR).ne.0 ) then |
1237 |
|
call do_eam_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1238 |
|
pot(METALLIC_POT), f, do_pot) |
1239 |
|
endif |
1240 |
< |
|
1240 |
> |
|
1241 |
|
if ( iand(iHash, SHAPE_PAIR).ne.0 ) then |
1242 |
|
call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1243 |
|
pot(VDW_POT), A, f, t, do_pot) |
1244 |
|
endif |
1245 |
< |
|
1245 |
> |
|
1246 |
|
if ( iand(iHash, SHAPE_LJ).ne.0 ) then |
1247 |
|
call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, & |
1248 |
|
pot(VDW_POT), A, f, t, do_pot) |
1249 |
|
endif |
1250 |
< |
|
1250 |
> |
|
1251 |
|
end subroutine do_pair |
1252 |
|
|
1253 |
|
subroutine do_prepair(i, j, rijsq, d, sw, rcijsq, dc, & |
1378 |
|
pot_Col = 0.0_dp |
1379 |
|
pot_Temp = 0.0_dp |
1380 |
|
|
1349 |
– |
rf_Row = 0.0_dp |
1350 |
– |
rf_Col = 0.0_dp |
1351 |
– |
rf_Temp = 0.0_dp |
1352 |
– |
|
1381 |
|
#endif |
1382 |
|
|
1383 |
|
if (FF_uses_EAM .and. SIM_uses_EAM) then |