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

Comparing trunk/OOPSE-4/src/UseTheForce/doForces.F90 (file contents):
Revision 2398 by chrisfen, Wed Oct 26 23:31:18 2005 UTC vs.
Revision 2402 by chrisfen, Tue Nov 1 19:09:30 2005 UTC

# Line 45 | Line 45
45  
46   !! @author Charles F. Vardeman II
47   !! @author Matthew Meineke
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 $
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
# Line 644 | Line 644 | contains
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
# Line 756 | Line 755 | contains
755      integer :: loopStart, loopEnd, loop
756      integer :: iHash
757      integer :: i1
759    logical :: indirect_only
758    
759  
760      !! initialize local variables  
# Line 922 | Line 920 | contains
920                     inner: do jb = groupStartCol(j), groupStartCol(j+1)-1
921  
922                        atom2 = groupListCol(jb)
925
926                      indirect_only = .false.
923      
924 <                      if (skipThisPair(atom1, atom2)) then
925 <                         if (electrostaticSummationMethod.ne.REACTION_FIELD) then
930 <                            cycle inner
931 <                         else
932 <                            indirect_only = .true.
933 <                         endif
934 <                      endif
935 <    
936 <
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
# Line 961 | Line 950 | contains
950   #ifdef IS_MPI                      
951                           call do_pair(atom1, atom2, ratmsq, d_atm, sw, &
952                                do_pot, eFrame, A, f, t, pot_local, vpair, &
953 <                              fpair, d_grp, rgrp, indirect_only)
953 >                              fpair, d_grp, rgrp)
954   #else
955                           call do_pair(atom1, atom2, ratmsq, d_atm, sw, &
956                                do_pot, eFrame, A, f, t, pot, vpair, fpair, &
957 <                              d_grp, rgrp, indirect_only)
957 >                              d_grp, rgrp)
958   #endif
959  
960                           vij = vij + vpair
# Line 1110 | Line 1099 | contains
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 <          ! loop over the excludes to accumulate any additional RF components
1111 <
1123 <          do i1 = 1, nSkipsForAtom(i)
1124 <             j = skipsForAtom(i, i1)
1110 >          
1111 > !!$          if (electrostaticSummationMethod.eq.REACTION_FIELD) then
1112              
1113 <             ! prevent overcounting of the skips
1114 <             if (i.lt.j) then
1115 <                call get_interatomic_vector(q(:,i), &
1116 <                     q(:,j), d_atm, ratmsq)
1117 <                rVal = dsqrt(ratmsq)
1118 <                call get_switch(ratmsq, sw, dswdr, rVal, group_switch, &
1119 <                     in_switching_region)
1120 < #ifdef IS_MPI
1121 <                call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, vpair, &
1122 <                     pot_local(ELECTROSTATIC_POT), f, t, do_pot)
1123 < #else
1124 <                call rf_self_excludes(i, j, sw, eFrame, d_atm, rVal, vpair, &
1125 <                     pot(ELECTROSTATIC_POT), f, t, do_pot)
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 <       enddo      
1133 >                endif
1134 >             enddo
1135 > !!$          endif
1136 >       enddo
1137      endif
1138      
1139   #ifdef IS_MPI
# Line 1168 | Line 1162 | contains
1162    end subroutine do_force_loop
1163  
1164    subroutine do_pair(i, j, rijsq, d, sw, do_pot, &
1165 <       eFrame, A, f, t, pot, vpair, fpair, d_grp, r_grp, indirect_only)
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
# Line 1180 | Line 1177 | contains
1177      real( kind = dp ), dimension(3,nLocal) :: t
1178  
1179      logical, intent(inout) :: do_pot
1183    logical, intent(inout) :: indirect_only
1180      integer, intent(in) :: i, j
1181      real ( kind = dp ), intent(inout) :: rijsq
1182      real ( kind = dp ), intent(inout) :: r_grp
# Line 1204 | Line 1200 | contains
1200   #endif
1201  
1202      iHash = InteractionHash(me_i, me_j)
1203 <
1204 <    if (indirect_only) then
1205 <       if ( iand(iHash, ELECTROSTATIC_PAIR).ne.0 ) then
1206 <          call doElectrostaticPair(i, j, d, r, rijsq, sw, vpair, fpair, &
1207 <               pot(ELECTROSTATIC_POT), eFrame, f, t, do_pot, indirect_only)
1208 <       endif
1209 <    else
1210 <          
1211 <       if ( iand(iHash, LJ_PAIR).ne.0 ) then
1212 <          call do_lj_pair(i, j, d, r, rijsq, sw, vpair, fpair, &
1213 <               pot(VDW_POT), f, do_pot)
1218 <       endif
1219 <
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
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 >    
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      
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 +    
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 +    
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)
1229 +    endif
1230 +    
1231 +    if ( iand(iHash, GAYBERNE_LJ).ne.0 ) then
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 +    
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 +    
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 +    
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 +    
1251    end subroutine do_pair
1252  
1253    subroutine do_prepair(i, j, rijsq, d, sw, rcijsq, dc, &
# Line 1388 | Line 1378 | contains
1378      pot_Col = 0.0_dp
1379      pot_Temp = 0.0_dp
1380  
1391    rf_Row = 0.0_dp
1392    rf_Col = 0.0_dp
1393    rf_Temp = 0.0_dp
1394
1381   #endif
1382  
1383      if (FF_uses_EAM .and. SIM_uses_EAM) then

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines