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.2 2003-04-04 22:22:30 chuckv Exp $, $Date: 2003-04-04 22:22:30 $, $Name: not supported by cvs2svn $, $Revision: 1.2 $ |
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 |
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 |
|
|
85 |
|
subroutine LJ_new_rcut(rcut, status) |
86 |
|
integer :: status, myStatus |
87 |
|
real(kind=dp) :: rcut |
88 |
< |
|
89 |
< |
LJ_rcut = rcut |
88 |
> |
|
89 |
|
status = 0 |
91 |
– |
call createMixingList(myStatus) |
92 |
– |
if (myStatus /= 0) then |
93 |
– |
status = -1 |
94 |
– |
return |
95 |
– |
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 |
|
|
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 |
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 |
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 |