ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/calc_LJ_FF.F90
(Generate patch)

Comparing trunk/OOPSE/libmdtools/calc_LJ_FF.F90 (file contents):
Revision 378 by mmeineke, Fri Mar 21 17:42:12 2003 UTC vs.
Revision 619 by mmeineke, Tue Jul 15 22:22:41 2003 UTC

# Line 2 | Line 2
2   !! Corresponds to the force field defined in lj_FF.cpp
3   !! @author Charles F. Vardeman II
4   !! @author Matthew Meineke
5 < !! @version $Id: calc_LJ_FF.F90,v 1.1.1.1 2003-03-21 17:42:12 mmeineke Exp $, $Date: 2003-03-21 17:42:12 $, $Name: not supported by cvs2svn $, $Revision: 1.1.1.1 $
5 > !! @version $Id: calc_LJ_FF.F90,v 1.8 2003-07-15 22:22:41 mmeineke Exp $, $Date: 2003-07-15 22:22:41 $, $Name: not supported by cvs2svn $, $Revision: 1.8 $
6  
7   module lj
8    use definitions
9    use atype_module
10    use vector_class
11 +  use simulation
12   #ifdef IS_MPI
13    use mpiSimulation
14   #endif
# Line 20 | Line 21 | module lj
21   #include "fForceField.h"
22  
23    integer, save :: LJ_Mixing_Policy
24 <  integer, save :: LJ_rcut
24 >  real(kind=DP), save :: LJ_rcut
25    
26    !! Logical has lj force field module been initialized?
27    
# Line 84 | Line 85 | contains
85    subroutine LJ_new_rcut(rcut, status)
86      integer :: status, myStatus
87      real(kind=dp) :: rcut
88 <
88 <    LJ_rcut = rcut
88 >    
89      status = 0
90    call createMixingList(myStatus)
91    if (myStatus /= 0) then
92       status = -1
93       return
94    end if
90  
91 +    if ( rcut .ne. LJ_rcut ) then
92 +       LJ_rcut = rcut
93 +       call createMixingList(myStatus)
94 +       if (myStatus /= 0) then
95 +          status = -1
96 +          return
97 +       end if
98 +    endif
99 +    
100 +    
101      return
102    end subroutine LJ_new_rcut
103    
# Line 180 | Line 185 | contains
185      integer, intent(in) ::  atom1, atom2
186      real( kind = dp ), intent(in) :: rij, r2
187      real( kind = dp ) :: pot
188 <    real( kind = dp ), dimension(:,:) :: f    
188 >    real( kind = dp ), dimension(3,getNlocal()) :: f    
189      real( kind = dp ), intent(in), dimension(3) :: d
190      logical, intent(in) :: do_pot, do_stress
191  
# Line 194 | Line 199 | contains
199      real( kind = dp ) :: t6
200      real( kind = dp ) :: t12
201      real( kind = dp ) :: delta
202 +    integer :: id1, id2
203  
204  
205      if (rij.lt.LJ_rcut)  then
# Line 218 | Line 224 | contains
224        
225         dudr = 24.0E0_DP * epsilon * (t6 - 2.0E0_DP*t12) / rij
226        
227 <       drdx = -d(1) / rij
228 <       drdy = -d(2) / rij
229 <       drdz = -d(3) / rij
227 >       drdx = d(1) / rij
228 >       drdy = d(2) / rij
229 >       drdz = d(3) / rij
230        
231         fx = dudr * drdx
232         fy = dudr * drdy
# Line 253 | Line 259 | contains
259   #endif
260        
261         if (do_stress) then
262 <          tau_Temp(1) = tau_Temp(1) + fx * d(1)
263 <          tau_Temp(2) = tau_Temp(2) + fx * d(2)
264 <          tau_Temp(3) = tau_Temp(3) + fx * d(3)
265 <          tau_Temp(4) = tau_Temp(4) + fy * d(1)
266 <          tau_Temp(5) = tau_Temp(5) + fy * d(2)
267 <          tau_Temp(6) = tau_Temp(6) + fy * d(3)
268 <          tau_Temp(7) = tau_Temp(7) + fz * d(1)
269 <          tau_Temp(8) = tau_Temp(8) + fz * d(2)
270 <          tau_Temp(9) = tau_Temp(9) + fz * d(3)
271 <          virial_Temp = virial_Temp + (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
262 >
263 > #ifdef IS_MPI
264 >          id1 = tagRow(atom1)
265 >          id2 = tagColumn(atom2)
266 > #else
267 >          id1 = atom1
268 >          id2 = atom2
269 > #endif
270 >
271 >          if (molMembershipList(id1) .ne. molMembershipList(id2)) then
272 >
273 >             ! because the d vector is the rj - ri vector, and
274 >             ! because fx, fy, fz are the force on atom i, we need a
275 >             ! negative sign here:
276 >
277 >             tau_Temp(1) = tau_Temp(1) - d(1) * fx
278 >             tau_Temp(2) = tau_Temp(2) - d(1) * fy
279 >             tau_Temp(3) = tau_Temp(3) - d(1) * fz
280 >             tau_Temp(4) = tau_Temp(4) - d(2) * fx
281 >             tau_Temp(5) = tau_Temp(5) - d(2) * fy
282 >             tau_Temp(6) = tau_Temp(6) - d(2) * fz
283 >             tau_Temp(7) = tau_Temp(7) - d(3) * fx
284 >             tau_Temp(8) = tau_Temp(8) - d(3) * fy
285 >             tau_Temp(9) = tau_Temp(9) - d(3) * fz
286 >            
287 >             virial_Temp = virial_Temp + &
288 >                  (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
289 >
290 >          endif
291         endif
292        
293      endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines