ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/UseTheForce/doForces.F90
(Generate patch)

Comparing trunk/OOPSE-2.0/src/UseTheForce/doForces.F90 (file contents):
Revision 2397 by chrisfen, Sun Oct 23 21:08:08 2005 UTC vs.
Revision 2398 by chrisfen, Wed Oct 26 23:31:18 2005 UTC

# Line 45 | Line 45
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.63 2005-10-26 23:31:18 chrisfen Exp $, $Date: 2005-10-26 23:31:18 $, $Name: not supported by cvs2svn $, $Revision: 1.63 $
49  
50  
51   module doForces
# Line 744 | Line 744 | contains
744      integer :: nlist
745      real( kind = DP ) :: ratmsq, rgrpsq, rgrp, vpair, vij
746      real( kind = DP ) :: sw, dswdr, swderiv, mf
747 +    real( kind = DP ) :: rVal
748      real(kind=dp),dimension(3) :: d_atm, d_grp, fpair, fij
749      real(kind=dp) :: rfpot, mu_i, virial
750      integer :: me_i, me_j, n_in_i, n_in_j
# Line 754 | Line 755 | contains
755      integer :: propPack_i, propPack_j
756      integer :: loopStart, loopEnd, loop
757      integer :: iHash
758 <    integer :: ig
758 >    integer :: i1
759 >    logical :: indirect_only
760    
761  
762      !! initialize local variables  
# Line 921 | Line 923 | contains
923  
924                        atom2 = groupListCol(jb)
925  
926 <                      if (skipThisPair(atom1, atom2)) cycle inner
926 >                      indirect_only = .false.
927 >    
928 >                      if (skipThisPair(atom1, atom2)) then
929 >                         if (electrostaticSummationMethod.ne.REACTION_FIELD) then
930 >                            cycle inner
931 >                         else
932 >                            indirect_only = .true.
933 >                         endif
934 >                      endif
935 >    
936  
937                        if ((n_in_i .eq. 1).and.(n_in_j .eq. 1)) then
938                           d_atm(1:3) = d_grp(1:3)
# Line 950 | Line 961 | contains
961   #ifdef IS_MPI                      
962                           call do_pair(atom1, atom2, ratmsq, d_atm, sw, &
963                                do_pot, eFrame, A, f, t, pot_local, vpair, &
964 <                              fpair, d_grp, rgrp)
964 >                              fpair, d_grp, rgrp, indirect_only)
965   #else
966                           call do_pair(atom1, atom2, ratmsq, d_atm, sw, &
967                                do_pot, eFrame, A, f, t, pot, vpair, fpair, &
968 <                              d_grp, rgrp)
968 >                              d_grp, rgrp, indirect_only)
969   #endif
970  
971                           vij = vij + vpair
# Line 1090 | Line 1101 | contains
1101            
1102            ! we loop only over the local atoms, so we don't need row and column
1103            ! lookups for the types
1104 <
1104 >          
1105            me_i = atid(i)
1106            
1107            ! is the atom electrostatic?  See if it would have an
1108            ! electrostatic interaction with itself
1109            iHash = InteractionHash(me_i,me_i)
1110 <          
1110 >
1111            if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then
1112   #ifdef IS_MPI
1113               call rf_self_self(i, eFrame, pot_local(ELECTROSTATIC_POT), &
# Line 1106 | Line 1117 | contains
1117                    t, do_pot)
1118   #endif
1119            endif
1120 <       enddo
1120 >  
1121 >          ! loop over the excludes to accumulate any additional RF components
1122 >
1123 >          do i1 = 1, nSkipsForAtom(i)
1124 >             j = skipsForAtom(i, i1)
1125 >            
1126 >             ! prevent overcounting of the skips
1127 >             if (i.lt.j) then
1128 >                call get_interatomic_vector(q(:,i), &
1129 >                     q(:,j), d_atm, ratmsq)
1130 >                rVal = dsqrt(ratmsq)
1131 >                call get_switch(ratmsq, sw, dswdr, rVal, group_switch, &
1132 >                     in_switching_region)
1133 > #ifdef IS_MPI
1134 >                call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, vpair, &
1135 >                     pot_local(ELECTROSTATIC_POT), f, t, do_pot)
1136 > #else
1137 >                call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, vpair, &
1138 >                     pot(ELECTROSTATIC_POT), f, t, do_pot)
1139 > #endif
1140 >             endif
1141 >          enddo
1142 >       enddo      
1143      endif
1144      
1145   #ifdef IS_MPI
# Line 1135 | Line 1168 | contains
1168    end subroutine do_force_loop
1169  
1170    subroutine do_pair(i, j, rijsq, d, sw, do_pot, &
1171 <       eFrame, A, f, t, pot, vpair, fpair, d_grp, r_grp)
1171 >       eFrame, A, f, t, pot, vpair, fpair, d_grp, r_grp, indirect_only)
1172  
1173      real( kind = dp ) :: vpair, sw
1174      real( kind = dp ), dimension(LR_POT_TYPES) :: pot
# Line 1147 | Line 1180 | contains
1180      real( kind = dp ), dimension(3,nLocal) :: t
1181  
1182      logical, intent(inout) :: do_pot
1183 +    logical, intent(inout) :: indirect_only
1184      integer, intent(in) :: i, j
1185      real ( kind = dp ), intent(inout) :: rijsq
1186      real ( kind = dp ), intent(inout) :: r_grp
# Line 1171 | Line 1205 | contains
1205  
1206      iHash = InteractionHash(me_i, me_j)
1207  
1208 <    if ( iand(iHash, LJ_PAIR).ne.0 ) then
1209 <       call do_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1210 <            pot(VDW_POT), f, do_pot)
1211 <    endif
1212 <
1213 <    if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then
1214 <       call doElectrostaticPair(i, j, d, r, rijsq, sw, vpair, fpair, &
1215 <            pot(ELECTROSTATIC_POT), eFrame, f, t, do_pot)
1216 <    endif
1217 <
1218 <    if ( iand(iHash, STICKY_PAIR).ne.0 ) then
1185 <       call do_sticky_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1186 <            pot(HB_POT), A, f, t, do_pot)
1187 <    endif
1188 <
1189 <    if ( iand(iHash, STICKYPOWER_PAIR).ne.0 ) then
1190 <       call do_sticky_power_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1191 <            pot(HB_POT), A, f, t, do_pot)
1192 <    endif
1208 >    if (indirect_only) then
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, indirect_only)
1212 >       endif
1213 >    else
1214 >          
1215 >       if ( iand(iHash, LJ_PAIR).ne.0 ) then
1216 >          call do_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1217 >               pot(VDW_POT), f, do_pot)
1218 >       endif
1219  
1220 <    if ( iand(iHash, GAYBERNE_PAIR).ne.0 ) then
1221 <       call do_gb_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1222 <            pot(VDW_POT), A, f, t, do_pot)
1223 <    endif
1224 <    
1225 <    if ( iand(iHash, GAYBERNE_LJ).ne.0 ) then
1226 <       call do_gb_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1227 <            pot(VDW_POT), A, f, t, do_pot)
1228 <    endif
1229 <
1230 <    if ( iand(iHash, EAM_PAIR).ne.0 ) then      
1231 <       call do_eam_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1232 <            pot(METALLIC_POT), f, do_pot)
1233 <    endif
1234 <
1235 <    if ( iand(iHash, SHAPE_PAIR).ne.0 ) then      
1236 <       call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1237 <            pot(VDW_POT), A, f, t, do_pot)
1238 <    endif
1239 <
1240 <    if ( iand(iHash, SHAPE_LJ).ne.0 ) then      
1241 <       call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1242 <            pot(VDW_POT), A, f, t, do_pot)
1220 >       if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then
1221 >          call doElectrostaticPair(i, j, d, r, rijsq, sw, vpair, fpair, &
1222 >               pot(ELECTROSTATIC_POT), eFrame, f, t, do_pot, indirect_only)
1223 >       endif
1224 >      
1225 >       if ( iand(iHash, STICKY_PAIR).ne.0 ) then
1226 >          call do_sticky_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1227 >               pot(HB_POT), A, f, t, do_pot)
1228 >       endif
1229 >      
1230 >       if ( iand(iHash, STICKYPOWER_PAIR).ne.0 ) then
1231 >          call do_sticky_power_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1232 >               pot(HB_POT), A, f, t, do_pot)
1233 >       endif
1234 >      
1235 >       if ( iand(iHash, GAYBERNE_PAIR).ne.0 ) then
1236 >          call do_gb_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1237 >               pot(VDW_POT), A, f, t, do_pot)
1238 >       endif
1239 >      
1240 >       if ( iand(iHash, GAYBERNE_LJ).ne.0 ) then
1241 >          call do_gb_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1242 >               pot(VDW_POT), A, f, t, do_pot)
1243 >       endif
1244 >      
1245 >       if ( iand(iHash, EAM_PAIR).ne.0 ) then      
1246 >          call do_eam_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1247 >               pot(METALLIC_POT), f, do_pot)
1248 >       endif
1249 >      
1250 >       if ( iand(iHash, SHAPE_PAIR).ne.0 ) then      
1251 >          call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1252 >               pot(VDW_POT), A, f, t, do_pot)
1253 >       endif
1254 >      
1255 >       if ( iand(iHash, SHAPE_LJ).ne.0 ) then      
1256 >          call do_shape_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1257 >               pot(VDW_POT), A, f, t, do_pot)
1258 >       endif
1259      endif
1260      
1261    end subroutine do_pair

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines