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

Comparing trunk/OOPSE/libmdtools/simulation_module.F90 (file contents):
Revision 1183 by gezelter, Fri May 21 15:58:48 2004 UTC vs.
Revision 1198 by tim, Thu May 27 00:48:12 2004 UTC

# Line 23 | Line 23 | module simulation
23    logical, save :: simulation_setup_complete = .false.
24  
25    integer, public, save :: nLocal, nGlobal
26 <  integer, public, save :: nGroup, nGroupGlobal
26 >  integer, public, save :: nGroups, nGroupGlobal
27    integer, public, save :: nExcludes_Global = 0
28    integer, public, save :: nExcludes_Local = 0
29    integer, allocatable, dimension(:,:), public :: excludesLocal
30    integer, allocatable, dimension(:),   public :: excludesGlobal
31    integer, allocatable, dimension(:),   public :: molMembershipList
32 <  integer, allocatable, dimension(:),   public :: groupList
33 <  integer, allocatable, dimension(:),   public :: groupStart
32 >  integer, allocatable, dimension(:),   public :: groupListRow
33 >  integer, allocatable, dimension(:),   public :: groupStartRow
34 >  integer, allocatable, dimension(:),   public :: groupListCol
35 >  integer, allocatable, dimension(:),   public :: groupStartCol
36 >  integer, allocatable, dimension(:),   public :: groupListLocal
37 >  integer, allocatable, dimension(:),   public :: groupStartLocal
38    integer, allocatable, dimension(:),   public :: nSkipsForAtom
39    integer, allocatable, dimension(:,:), public :: skipsForAtom
40 <  real(kind=dp), allocatable, dimension(:), public :: mfact
40 >  real(kind=dp), allocatable, dimension(:), public :: mfactRow
41 >  real(kind=dp), allocatable, dimension(:), public :: mfactCol
42 >  real(kind=dp), allocatable, dimension(:), public :: mfactLocal
43  
44    real(kind=dp), public, dimension(3,3), save :: Hmat, HmatInv
45    logical, public, save :: boxIsOrthorhombic
# Line 58 | Line 64 | contains
64    
65    subroutine SimulationSetup(setThisSim, CnGlobal, CnLocal, c_idents, &
66         CnLocalExcludes, CexcludesLocal, CnGlobalExcludes, CexcludesGlobal, &
67 <       CmolMembership, Cmfact, CnGroup, CgroupList, CgroupStart, &
67 >       CmolMembership, Cmfact, CnGroups, CgroupList, CgroupStart, &
68         status)    
69  
70      type (simtype) :: setThisSim
# Line 73 | Line 79 | contains
79      !!  Result status, success = 0, status = -1
80      integer, intent(out) :: status
81      integer :: i, j, me, thisStat, alloc_stat, myNode, id1, id2
82 <    integer :: gStart, gEnd, groupSize, biggestGroupSize, ia
82 >    integer :: ia
83  
84      !! mass factors used for molecular cutoffs
85      real ( kind = dp ), dimension(CnLocal) :: Cmfact
86 <    integer, intent(in):: CnGroup
86 >    integer, intent(in):: CnGroups
87      integer, dimension(CnLocal),intent(in) :: CgroupList
88 <    integer, dimension(CnGroup),intent(in) :: CgroupStart
88 >    integer, dimension(CnGroups),intent(in) :: CgroupStart
89      integer :: maxSkipsForAtom
90  
91   #ifdef IS_MPI
92      integer, allocatable, dimension(:) :: c_idents_Row
93      integer, allocatable, dimension(:) :: c_idents_Col
94 <    integer :: nrow
95 <    integer :: ncol
94 >    integer :: nAtomsInRow, nGroupsInRow
95 >    integer :: nAtomsInCol, nGroupsInCol
96   #endif  
97  
98      simulation_setup_complete = .false.
# Line 96 | Line 102 | contains
102  
103      nLocal = CnLocal
104      nGlobal = CnGlobal
105 <    nGroup = CnGroup
105 >    nGroups = CnGroups
106  
107      thisSim = setThisSim
108  
# Line 124 | Line 130 | contains
130         status = -1
131         return
132      endif
133 <    nrow = getNrow(plan_row)
134 <    ncol = getNcol(plan_col)
133 >    nAtomsInRow = getNatomsInRow(plan_atom_row)
134 >    nAtomsInCol = getNatomsInCol(plan_atom_col)
135 >    nGroupsInRow = getNgroupsInRow(plan_group_row)
136 >    nGroupsInCol = getNgroupsInCol(plan_group_col)
137      mynode = getMyNode()
138      
139 <    allocate(c_idents_Row(nrow),stat=alloc_stat)
139 >    allocate(c_idents_Row(nAtomsInRow),stat=alloc_stat)
140      if (alloc_stat /= 0 ) then
141         status = -1
142         return
143      endif
144  
145 <    allocate(c_idents_Col(ncol),stat=alloc_stat)
145 >    allocate(c_idents_Col(nAtomsInCol),stat=alloc_stat)
146      if (alloc_stat /= 0 ) then
147         status = -1
148         return
149      endif
150  
151 <    call gather(c_idents, c_idents_Row, plan_row)
152 <    call gather(c_idents, c_idents_Col, plan_col)
151 >    call gather(c_idents, c_idents_Row, plan_atom_row)
152 >    call gather(c_idents, c_idents_Col, plan_atom_col)
153  
154 <    do i = 1, nrow
154 >    do i = 1, nAtomsInRow
155         me = getFirstMatchingElement(atypes, "c_ident", c_idents_Row(i))
156         atid_Row(i) = me
157      enddo
158  
159 <    do i = 1, ncol
159 >    do i = 1, nAtomsInCol
160         me = getFirstMatchingElement(atypes, "c_ident", c_idents_Col(i))
161         atid_Col(i) = me
162      enddo
# Line 160 | Line 168 | contains
168      if (allocated(c_idents_Row)) then
169         deallocate(c_idents_Row)
170      endif
171 +  
172 + #endif
173 +
174 + #ifdef IS_MPI
175 +    allocate(groupStartRow(nGroupsInRow+1),stat=alloc_stat)
176 +    if (alloc_stat /= 0 ) then
177 +       status = -1
178 +       return
179 +    endif
180 +    allocate(groupStartCol(nGroupsInCol+1),stat=alloc_stat)
181 +    if (alloc_stat /= 0 ) then
182 +       status = -1
183 +       return
184 +    endif
185 +    allocate(groupListRow(nAtomsInRow),stat=alloc_stat)
186 +    if (alloc_stat /= 0 ) then
187 +       status = -1
188 +       return
189 +    endif
190 +    allocate(groupListCol(nAtomsInCol),stat=alloc_stat)
191 +    if (alloc_stat /= 0 ) then
192 +       status = -1
193 +       return
194 +    endif
195 +    allocate(mfactRow(nAtomsInRow),stat=alloc_stat)
196 +    if (alloc_stat /= 0 ) then
197 +       status = -1
198 +       return
199 +    endif
200 +    allocate(mfactCol(nAtomsInCol),stat=alloc_stat)
201 +    if (alloc_stat /= 0 ) then
202 +       status = -1
203 +       return
204 +    endif
205 +    allocate(groupStartLocal(nGroups), stat=alloc_stat)
206 +    if (alloc_stat /= 0 ) then
207 +       status = -1
208 +       return
209 +    endif
210 +    allocate(groupListLocal(nLocal), stat=alloc_stat)
211 +    if (alloc_stat /= 0 ) then
212 +       status = -1
213 +       return
214 +    endif    
215 +    allocate(mfactLocal(nLocal), stat=alloc_stat)
216 +    if (alloc_stat /= 0 ) then
217 +       status = -1
218 +       return
219 +    endif    
220 +            
221 +    groupStartLocal = CgroupStart
222 +    groupListLocal = CgroupList
223 +    mfactLocal = Cmfact        
224 +            
225 +    call gather(groupStartLocal, groupStartRow, plan_group_row)
226 +    call gather(groupStartLocal, groupStartCol, plan_group_col)
227 +    groupStartRow(nGroupsInRow+1) = nAtomsInRow
228 +    groupStartCol(nGroupsInCol+1) = nAtomsInCol
229 +    call gather(groupListLocal,  groupListRow,  plan_atom_row)
230 +    call gather(groupListLocal,  groupListCol,  plan_atom_col)
231 +    call gather(mfactLocal,      mfactRow,      plan_atom_row)
232 +    call gather(mfactLocal,      mfactCol,      plan_atom_col)
233      
234 +    if (allocated(mfactLocal)) then
235 +       deallocate(mfactLocal)
236 +    end if
237 +    if (allocated(groupListLocal)) then
238 +       deallocate(groupListLocal)
239 +    endif
240 +    if (allocated(groupStartLocal)) then
241 +       deallocate(groupStartLocal)
242 +    endif
243 + #else
244 +    allocate(groupStartRow(nGroups+1),stat=alloc_stat)
245 +    if (alloc_stat /= 0 ) then
246 +       status = -1
247 +       return
248 +    endif
249 +    allocate(groupStartCol(nGroups+1),stat=alloc_stat)
250 +    if (alloc_stat /= 0 ) then
251 +       status = -1
252 +       return
253 +    endif
254 +    allocate(groupListRow(nLocal),stat=alloc_stat)
255 +    if (alloc_stat /= 0 ) then
256 +       status = -1
257 +       return
258 +    endif
259 +    allocate(groupListCol(nLocal),stat=alloc_stat)
260 +    if (alloc_stat /= 0 ) then
261 +       status = -1
262 +       return
263 +    endif
264 +    allocate(mfactRow(nLocal),stat=alloc_stat)
265 +    if (alloc_stat /= 0 ) then
266 +       status = -1
267 +       return
268 +    endif
269 +    allocate(mfactCol(nLocal),stat=alloc_stat)
270 +    if (alloc_stat /= 0 ) then
271 +       status = -1
272 +       return
273 +    endif
274 +    do i = 1, nGroups
275 +       groupStartRow(i) = CgroupStart(i)
276 +       groupStartCol(i) = CgroupStart(i)
277 +    end do
278 +    groupStartRow(nGroups+1) = nLocal
279 +    groupStartCol(nGroups+1) = nLocal
280 +    do i = 1, nLocal
281 +       groupListRow(i) = CgroupList(i)
282 +       groupListCol(i) = CgroupList(i)
283 +       mfactRow(i) = Cmfact(i)
284 +       mfactCol(i) = Cmfact(i)
285 +    end do
286 +    
287   #endif
288  
289 +
290   ! We build the local atid's for both mpi and nonmpi
291      do i = 1, nLocal
292        
# Line 180 | Line 304 | contains
304      do j = 1, nLocal
305         nSkipsForAtom(j) = 0
306   #ifdef IS_MPI
307 <       id1 = tagRow(j)
307 >       id1 = AtomRowToGlobal(j)
308   #else
309         id1 = j
310   #endif
# Line 211 | Line 335 | contains
335      do j = 1, nLocal
336         nSkipsForAtom(j) = 0
337   #ifdef IS_MPI
338 <       id1 = tagRow(j)
338 >       id1 = AtomRowToGlobal(j)
339   #else
340         id1 = j
341   #endif
# Line 219 | Line 343 | contains
343            if (excludesLocal(1,i) .eq. id1 ) then
344               nSkipsForAtom(j) = nSkipsForAtom(j) + 1
345   #ifdef IS_MPI
346 <             id2 = tagColumn(excludesLocal(2,i))
346 >             id2 = AtomColToGlobal(excludesLocal(2,i))
347   #else
348               id2 = excludesLocal(2,i)
349   #endif
# Line 228 | Line 352 | contains
352            if (excludesLocal(2, i) .eq. id2 ) then
353               nSkipsForAtom(j) = nSkipsForAtom(j) + 1
354   #ifdef IS_MPI
355 <             id2 = tagColumn(excludesLocal(1,i))
355 >             id2 = AtomColToGlobal(excludesLocal(1,i))
356   #else
357               id2 = excludesLocal(1,i)
358   #endif
# Line 245 | Line 369 | contains
369         molMemberShipList(i) = CmolMembership(i)
370      enddo
371      
248    biggestGroupSize = 0
249    do i = 1, nGroup
250       groupStart(i) = CgroupStart(i)
251       groupSize = 0
252       gStart = groupStart(i)      
253       if (i .eq. nGroup) then
254          gEnd = nLocal
255       else
256          gEnd = CgroupStart(i+1) - 1
257       endif
258       do ia = gStart, gEnd
259          groupList(ia) = CgroupList(ia)
260          groupSize = groupSize + 1
261       enddo
262       if (groupSize .gt. biggestGroupSize) biggestGroupSize = groupSize      
263    enddo
264    groupStart(nGroup+1) = nLocal+1
265
266    do i = 1, nLocal
267       mfact(i) = Cmfact(i)
268    enddo    
269    
372      if (status == 0) simulation_setup_complete = .true.
373      
374    end subroutine SimulationSetup
# Line 379 | Line 481 | contains
481         thisStat = -1
482         return
483      endif
382
383    allocate(groupStart(nGroup+1), stat=alloc_stat)
384    if (alloc_stat /= 0 ) then
385       thisStat = -1
386       return
387    endif
388
389    allocate(groupList(nLocal), stat=alloc_stat)
390    if (alloc_stat /= 0 ) then
391       thisStat = -1
392       return
393    endif
394
395    allocate(mfact(nLocal), stat=alloc_stat)
396    if (alloc_stat /= 0 ) then
397       thisStat = -1
398       return
399    endif
484      
485    end subroutine InitializeSimGlobals
486    
# Line 405 | Line 489 | contains
489      !We free in the opposite order in which we allocate in.
490  
491      if (allocated(skipsForAtom)) deallocate(skipsForAtom)
492 <    if (allocated(mfact)) deallocate(mfact)
493 <    if (allocated(groupList)) deallocate(groupList)    
494 <    if (allocated(groupStart)) deallocate(groupStart)    
492 >    if (allocated(mfactCol)) deallocate(mfactCol)
493 >    if (allocated(mfactRow)) deallocate(mfactRow)
494 >    if (allocated(groupListCol)) deallocate(groupListCol)    
495 >    if (allocated(groupListRow)) deallocate(groupListRow)    
496 >    if (allocated(groupStartCol)) deallocate(groupStartCol)
497 >    if (allocated(groupStartRow)) deallocate(groupStartRow)    
498      if (allocated(molMembershipList)) deallocate(molMembershipList)    
499      if (allocated(excludesGlobal)) deallocate(excludesGlobal)
500      if (allocated(excludesLocal)) deallocate(excludesLocal)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines