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

Comparing:
branches/mmeineke/OOPSE/libmdtools/neighborLists.F90 (file contents), Revision 377 by mmeineke, Fri Mar 21 17:42:12 2003 UTC vs.
trunk/OOPSE/libmdtools/neighborLists.F90 (file contents), Revision 673 by chuckv, Fri Aug 8 21:22:37 2003 UTC

# Line 6 | Line 6
6   !! @author Charles F. Vardeman II
7   !! @author Matthew Meineke
8   !! @author J. Daniel Gezelter
9 < !! @version $Id: neighborLists.F90,v 1.1.1.1 2003-03-21 17:42:12 mmeineke Exp $,
9 > !! @version $Id: neighborLists.F90,v 1.5 2003-08-08 21:22:37 chuckv Exp $,
10  
11   module neighborLists
12    
# Line 32 | Line 32 | module neighborLists
32    integer, dimension(:),public, pointer :: list  => null()
33    !! Position array of previous positions for check. Allocated first time
34    !! into saveNeighborList.
35 <  real( kind = dp ), dimension(:,:), allocatable , save :: q0
35 >  real( kind = dp ), dimension(:,:), allocatable, save  :: q0
36    !! Current list size
37    integer, save :: listSize
38    !--------------MODULE ACCESS-------------------------->
# Line 64 | Line 64 | contains
64           .not. associated(list) ) then
65         allocate(point(natoms),stat=alloc_error)
66         if (alloc_error /= 0) then
67 +          write(default_error,*) &
68 +               "ExpandNeighborLists: Error in allocating point"
69            error = -1
70            return
71         end if
72         allocate(list(listMultiplier * natoms),stat=alloc_error)
73         if (alloc_error /= 0) then
74 +          write(default_error,*) &
75 +               "ExpandNeighborLists: Error in allocating list"
76            error = -1
77            return
78         end if
# Line 81 | Line 85 | contains
85           .not. associated(list) ) then
86         allocate(point(getNRow(plan_row)),stat=alloc_error)
87         if (alloc_error /= 0) then
88 <          error = -1
88 >          write(default_error,*) &
89 >               "ExpandNeighborLists: Error in allocating MPI point"
90 >           error = -1
91            return
92         end if
93         allocate(list(listMultiplier * getNCol(plan_col)),stat=alloc_error)
94         if (alloc_error /= 0) then
95 +          write(default_error,*) &
96 +               "ExpandNeighborLists: Error in allocating MPI list"
97            error = -1
98            return
99         end if
# Line 99 | Line 107 | contains
107      
108      ! Check to see if we have exceeded the maximum number of allocations.
109      if (nAllocations > maxAllocations) then
110 +       write(default_error,*) &
111 +            "ExpandNeighborList: exceeded maximum number of re-allocations"
112         error = -1
113         return
114      else !! Expand the list.
115         oldSize = size(list)
116  
117 +
118   #ifdef IS_MPI !! MPI
119         newSize = listMultiplier * getNCol(plan_col) + oldSize
120   #else
# Line 141 | Line 152 | contains
152    
153    !! checks to see if any long range particle has moved
154    !! through the neighbor list skin thickness.
155 <  subroutine checkNeighborList(natoms, q, rcut, rlist, update_nlist)
155 >  subroutine checkNeighborList(natoms, q, listSkin, update_nlist)
156      integer :: natoms
157 <    real(kind = dp), intent(in) :: rcut, rlist
157 >    real(kind = dp), intent(in) :: listSkin
158      real( kind = dp ), dimension(:,:)  :: q
159      integer :: i
160      real( kind = DP ) :: dispmx
161      logical, intent(out) :: update_nlist
162      real( kind = DP ) :: dispmx_tmp
152    real( kind = dp ) :: skin_thickness
163      integer :: nlocal
164 <    
164 >
165 >
166      nlocal = natoms
156    skin_thickness = rlist - rcut
167      dispmx = 0.0E0_DP
168      !! calculate the largest displacement of any atom in any direction
169      
170      !! If we have changed the particle idents, then we need to update    
171 <    if (.not. allocated(q0) .or. size(q0) /= nlocal) then
171 >    if (.not. allocated(q0) .or. size(q0,2) /= nlocal) then
172         update_nlist = .true.
173         return
174      end if
175 <    
175 >
176 >
177   #ifdef MPI
178      
179      dispmx_tmp = 0.0E0_DP
# Line 185 | Line 196 | contains
196  
197   #endif
198      
199 +
200      !! a conservative test of list skin crossings
201      dispmx = 2.0E0_DP * sqrt (3.0E0_DP * dispmx * dispmx)
202      
203 <    update_nlist = (dispmx.gt.(skin_thickness))
203 >    update_nlist = (dispmx.gt.listSkin)
204      
205 <  end subroutine checkNeighborList
205 >   end subroutine checkNeighborList
206    
207    
208    !! Saves neighbor list for comparison in check.
209    !! Save_neighborList will work even if the number of
210    !! local atoms has changed.
211 <  subroutine saveNeighborList(q)
212 <    real(kind = dp ), dimension(:,:), intent(in)  :: q
211 >  subroutine saveNeighborList(natoms, q)
212 >
213 >    integer :: natoms
214 >    real(kind = dp ), dimension(3,natoms), intent(in)  :: q
215      integer :: list_size
216 +
217 +
218      
219      !! get size of list
220 <    list_size = size(q)
220 >    list_size = natoms
221      
222      if (.not. allocated(q0)) then
223         allocate(q0(3,list_size))
224 <    else if( list_size > size(q0)) then
224 >    else if( list_size > size(q0,2)) then
225         deallocate(q0)
226         allocate(q0(3,list_size))
227      endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines