ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE_old/src/mdtools/libmdCode/calc_LJ_FF.F90
(Generate patch)

Comparing trunk/OOPSE_old/src/mdtools/libmdCode/calc_LJ_FF.F90 (file contents):
Revision 317 by gezelter, Tue Mar 11 23:13:06 2003 UTC vs.
Revision 323 by gezelter, Wed Mar 12 15:39:01 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.4 2003-03-11 23:13:06 gezelter Exp $, $Date: 2003-03-11 23:13:06 $, $Name: not supported by cvs2svn $, $Revision: 1.4 $
5 > !! @version $Id: calc_LJ_FF.F90,v 1.6 2003-03-12 15:39:01 gezelter Exp $, $Date: 2003-03-12 15:39:01 $, $Name: not supported by cvs2svn $, $Revision: 1.6 $
6  
7
8
7   module lj
8    use simulation
9    use definitions
# Line 21 | Line 19 | module lj
19    !! Logical has lj force field module been initialized?
20    logical, save :: isljFFinit = .false.
21    
24  
22    !! Public methods and data
23    public :: init_ljFF
24    public :: do_lj_pair
# Line 31 | Line 28 | module lj
28       real ( kind = dp )  :: epsilon = 0.0_dp
29       !! Lennard-Jones Sigma
30       real ( kind = dp )  :: sigma = 0.0_dp
34     !! Lennard-Jones Sigma Squared
35     real ( kind = dp )  :: sigma2 = 0.0_dp
31       !! Lennard-Jones Sigma to sixth
32       real ( kind = dp )  :: sigma6 = 0.0_dp
33 +     !!
34 +     real ( kind = dp )  :: tp6
35 +     real ( kind = dp )  :: tp12
36 +
37 +     real ( kind = dp )  :: delta  = 0.0_dp
38 +
39    end type lj_mixed_params
40    
41    type (lj_mixed_params), dimension(:,:), pointer :: ljMixed
42    
43   contains
44  
45 <  subroutine init_ljFF(ListHead,status)
45 <    type (atype),pointer :: ListHead
46 <    integer :: nTypes
45 >  subroutine init_ljFF(status)
46      integer, intent(out) :: status
48    
47      integer :: myStatus
48      
49      status = 0
50 <    call createMixingList(ListHead,myStatus)
50 >    call createMixingList(myStatus)
51      if (myStatus /= 0) then
52         status = -1
53         return
# Line 57 | Line 55 | contains
55      
56    end subroutine init_ljFF
57    
58 <  subroutine createMixingList(ListHead,status)
59 <    type (atype), pointer :: ListHead
62 <    integer :: listSize
58 >  subroutine createMixingList(status)
59 >    integer :: nAtypes
60      integer :: status
61      integer :: i
62      integer :: j
63 <    type (atype), pointer :: tmpPtr_i => null()
64 <    type (atype), pointer :: tmpPtr_j => null()
63 >    real ( kind = dp ) :: mySigma_i,mySigma_j
64 >    real ( kind = dp ) :: myEpsilon_i,myEpsilon_j
65 >    real ( kind = dp ) :: rcut, rcut6
66      status = 0
67      
68 <    listSize = get_this_ListLen(ListHead)
69 <    if (listSize == 0) then
68 >    nAtypes = getSize(atypes)
69 >    if (nAtypes == 0) then
70         status = -1
71         return
72      end if
73 <    
76 <    
73 >        
74      if (.not. associated(ljMixed)) then
75 <       allocate(ljMixed(listSize,listSize))
75 >       allocate(ljMixed(nAtypes, nAtypes))
76      else
77         status = -1
78         return
79      end if
80 <    
81 <    
82 <    
83 <    tmpPtr_i => ListHead
84 <    tmpPtr_j => tmpPtr_i%next
88 <    do while (associated(tmpPtr_i))
89 <       i = i + 1
80 >    call getRcut(rcut, rcut6=rcut6)
81 >    do i = 1, nAtypes
82 >
83 >       call getElementProperty(atypes,i,"lj_epsilon",myEpsilon_i)
84 >       call getElementProperty(atypes,i,"lj_sigma",  mySigma_i)
85         ! do self mixing rule
86 <       ljMixed(i,i)%sigma   = tmpPtr_i%lj_sigma
86 >       ljMixed(i,i)%sigma   = mySigma_i
87        
93       ljMixed(i,i)%sigma2  = (ljMixed(i,i)%sigma) ** 2
94      
88         ljMixed(i,i)%sigma6  = (ljMixed(i,i)%sigma) ** 6                                                                                                  
89 <       ljMixed(i,i)%epsilon = tmpPtr_i%lj_epsilon
90 <      
91 <       j = i + 1
92 <       do while (associated(tmpPtr_j))
89 >       ljMixed(i,i)%tp6     = ljMixed(i,i)%sigma6/rcut6
90 >
91 >       ljMixed(i,i)%tp12    = (ljMixed(i,i)%tp6) ** 2
92 >
93 >       ljMixed(i,i)%epsilon = myEpsilon_i
94 >
95 >       ljMixed(i,i)%delta = -4.0_DP * ljMixed(i,i)%epsilon * &
96 >            (ljMixed(i,i)%tp12 - ljMixed(i,i)%tp6)
97 >      
98 >       do j = i + 1, nAtypes
99 >          call getElementProperty(atypes,j,"lj_epsilon",myEpsilon_j)
100 >          call getElementProperty(atypes,j,"lj_sigma",  mySigma_j)
101            
102            ljMixed(i,j)%sigma  =  &
103 <               calcLJMix("sigma",tmpPtr_i%lj_sigma, &
104 <               tmpPtr_j%lj_sigma)
103 >               calcLJMix("sigma",mySigma_i, &
104 >               mySigma_j)
105            
105          ljMixed(i,j)%sigma2  = &
106               (ljMixed(i,j)%sigma)**2
107          
106            ljMixed(i,j)%sigma6 = &
107                 (ljMixed(i,j)%sigma)**6
108            
109 +          
110 +          ljMixed(i,j)%tp6     = ljMixed(i,j)%sigma6/rcut6
111 +          
112 +          ljMixed(i,j)%tp12    = (ljMixed(i,j)%tp6) ** 2
113 +          
114 +          
115            ljMixed(i,j)%epsilon = &
116 <               calcLJMix("epsilon",tmpPtr_i%lj_epsilon, &
117 <               tmpPtr_j%lj_epsilon)
116 >               calcLJMix("epsilon",myEpsilon_i, &
117 >               myEpsilon_j)
118 >          
119 >          ljMixed(i,j)%delta = -4.0_DP * ljMixed(i,j)%epsilon * &
120 >               (ljMixed(i,j)%tp12 - ljMixed(i,j)%tp6)
121 >          
122 >          
123            ljMixed(j,i)%sigma   = ljMixed(i,j)%sigma
115          ljMixed(j,i)%sigma2  = ljMixed(i,j)%sigma2
124            ljMixed(j,i)%sigma6  = ljMixed(i,j)%sigma6
125 +          ljMixed(j,i)%tp6     = ljMixed(i,j)%tp6
126 +          ljMixed(j,i)%tp12    = ljMixed(i,j)%tp12
127            ljMixed(j,i)%epsilon = ljMixed(i,j)%epsilon
128 +          ljMixed(j,i)%delta   = ljMixed(i,j)%delta
129            
119          
120          tmpPtr_j => tmpPtr_j%next
121          j = j + 1
130         end do
123       ! advance pointers
124       tmpPtr_i => tmpPtr_i%next
125       if (associated(tmpPtr_i)) then
126          tmpPtr_j => tmpPtr_i%next
127       endif
128      
131      end do
132      
133    end subroutine createMixingList
134    
135  
136 <  subroutine do_lj_pair(atom1, atom2, d, rij, pot, f)
136 >  subroutine do_lj_pair(atom1, atom2, d, rij, r2, pot, f)
137  
138      integer, intent(in) ::  atom1, atom2
139 <    real( kind = dp ), intent(in) :: rij
139 >    real( kind = dp ), intent(in) :: rij, r2
140      real( kind = dp ) :: pot
141      real( kind = dp ), dimension(3, getNlocal()) :: f    
142      real( kind = dp ), intent(in), dimension(3) :: d
# Line 143 | Line 145 | contains
145      real( kind = dp ) :: drdx, drdy, drdz
146      real( kind = dp ) :: fx, fy, fz
147      real( kind = dp ) :: pot_temp, dudr
146    real( kind = dp ) :: sigma
147    real( kind = dp ) :: sigma2
148      real( kind = dp ) :: sigma6
149      real( kind = dp ) :: epsilon
150
150      real( kind = dp ) :: rcut
152    real( kind = dp ) :: rcut2
153    real( kind = dp ) :: rcut6
154    real( kind = dp ) :: r2
151      real( kind = dp ) :: r6
156
152      real( kind = dp ) :: t6
153      real( kind = dp ) :: t12
159    real( kind = dp ) :: tp6
160    real( kind = dp ) :: tp12
154      real( kind = dp ) :: delta
155  
156      ! Look up the correct parameters in the mixing matrix
157 <    sigma    = ljMixed(atype1%atype_ident,atype2%atype_ident)%sigma
158 <    sigma2   = ljMixed(atype1%atype_ident,atype2%atype_ident)%sigma2
159 <    sigma6   = ljMixed(atype1%atype_ident,atype2%atype_ident)%sigma6
160 <    epsilon  = ljMixed(atype1%atype_ident,atype2%atype_ident)%epsilon
157 > #ifdef IS_MPI
158 >    sigma6   = ljMixed(atid_Row(atom1),atid_Col(atom2))%sigma6
159 >    epsilon  = ljMixed(atid_Row(atom1),atid_Col(atom2))%epsilon
160 >    delta    = ljMixed(atid_Row(atom1),atid_Col(atom2))%delta
161 > #else
162 >    sigma6   = ljMixed(atid(atom1),atid(atom2))%sigma6
163 >    epsilon  = ljMixed(atid(atom1),atid(atom2))%epsilon
164 >    delta    = ljMixed(atid(atom1),atid(atom2))%delta
165 > #endif
166    
167 <    call getRcut(rcut,rcut2=rcut2,rcut6=rcut6)
167 >    call getRcut(rcut)
168      
171    r2 = rij * rij
169      r6 = r2 * r2 * r2
170  
171      t6  = sigma6/ r6
172      t12 = t6 * t6
173 <                                                                              
177 <    tp6 = sigma6 / rcut6
178 <    tp12 = tp6*tp6
179 <                                                                              
180 <    delta = -4.0_DP * epsilon * (tp12 - tp6)
181 <    
173 >      
174      if (rij.le.rcut) then
175        
176         pot_temp = 4.0E0_DP * epsilon * (t12 - t6) + delta      
# Line 229 | Line 221 | contains
221            tau_Temp(9) = tau_Temp(9) + fz * d(3)
222            virial_Temp = virial_Temp + (tau_Temp(1) + tau_Temp(5) + tau_Temp(9))
223         endif
224 <
224 >      
225      endif
226      return          
227    end subroutine do_lj_pair

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines