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 490 by gezelter, Fri Apr 11 15:16:59 2003 UTC vs.
Revision 941 by gezelter, Tue Jan 13 23:01:43 2004 UTC

# Line 16 | Line 16 | module simulation
16   #define __FORTRAN90
17   #include "fSimulation.h"
18  
19 <  type (simtype), public :: thisSim
19 >  type (simtype), public, save :: thisSim
20  
21    logical, save :: simulation_setup_complete = .false.
22  
23 <  integer, public, save :: natoms
23 >  integer, public, save :: nLocal, nGlobal
24    integer, public, save :: nExcludes_Global = 0
25    integer, public, save :: nExcludes_Local = 0
26    integer, allocatable, dimension(:,:), public :: excludesLocal
27    integer, allocatable, dimension(:), public :: excludesGlobal
28    integer, allocatable, dimension(:), public :: molMembershipList
29  
30 <  real(kind=dp), save :: rcut2 = 0.0_DP
31 <  real(kind=dp), save :: rcut6 = 0.0_DP
32 <  real(kind=dp), save :: rlist2 = 0.0_DP
33 <  real(kind=dp), public, dimension(3), save :: box
34 <
30 >  real(kind=dp), public, dimension(3,3), save :: Hmat, HmatInv
31 >  logical, public, save :: boxIsOrthorhombic
32    
33    public :: SimulationSetup
34    public :: getNlocal
35    public :: setBox
39  public :: setBox_3d
40  public :: getBox
41  public :: setRcut
42  public :: getRcut
43  public :: getRlist
44  public :: getRrf
45  public :: getRt
36    public :: getDielect
37    public :: SimUsesPBC
38    public :: SimUsesLJ
39 +  public :: SimUsesCharges
40    public :: SimUsesDipoles
41    public :: SimUsesSticky
42    public :: SimUsesRF
# Line 54 | Line 45 | module simulation
45    public :: SimRequiresPrepairCalc
46    public :: SimRequiresPostpairCalc
47    public :: SimUsesDirectionalAtoms
57
58  interface getBox
59     module procedure getBox_3d
60     module procedure getBox_1d
61  end interface
48    
63  interface setBox
64     module procedure setBox_3d
65     module procedure setBox_1d
66  end interface
67  
49   contains
50    
51 <  subroutine SimulationSetup(setThisSim, nGlobal, nLocal, c_idents, &
51 >  subroutine SimulationSetup(setThisSim, CnGlobal, CnLocal, c_idents, &
52         CnLocalExcludes, CexcludesLocal, CnGlobalExcludes, CexcludesGlobal, &
53         CmolMembership, &
54         status)    
55  
56      type (simtype) :: setThisSim
57 <    integer, intent(inout) :: nGlobal, nLocal
58 <    integer, dimension(nLocal),intent(inout) :: c_idents
57 >    integer, intent(inout) :: CnGlobal, CnLocal
58 >    integer, dimension(CnLocal),intent(inout) :: c_idents
59  
60      integer :: CnLocalExcludes
61      integer, dimension(2,CnLocalExcludes), intent(in) :: CexcludesLocal
62      integer :: CnGlobalExcludes
63      integer, dimension(CnGlobalExcludes), intent(in) :: CexcludesGlobal
64 <    integer, dimension(nGlobal),intent(in) :: CmolMembership
64 >    integer, dimension(CnGlobal),intent(in) :: CmolMembership
65      !!  Result status, success = 0, status = -1
66      integer, intent(out) :: status
67      integer :: i, me, thisStat, alloc_stat, myNode
# Line 95 | Line 76 | contains
76      status = 0
77  
78      ! copy C struct into fortran type
79 +
80 +    nLocal = CnLocal
81 +    nGlobal = CnGlobal
82 +
83      thisSim = setThisSim
99    natoms = nLocal
100    rcut2 = thisSim%rcut * thisSim%rcut
101    rcut6 = rcut2 * rcut2 * rcut2
102    rlist2 = thisSim%rlist * thisSim%rlist
103    box = thisSim%box
84  
85      nExcludes_Global = CnGlobalExcludes
86      nExcludes_Local = CnLocalExcludes
87  
88 <    call InitializeForceGlobals(natoms, thisStat)
88 >    call InitializeForceGlobals(nLocal, thisStat)
89      if (thisStat /= 0) then
90         write(default_error,*) "SimSetup: InitializeForceGlobals error"
91         status = -1
# Line 163 | Line 143 | contains
143         deallocate(c_idents_Row)
144      endif
145      
146 < #else
146 > #endif
147 >
148 > ! We build the local atid's for both mpi and nonmpi
149      do i = 1, nLocal
150        
151         me = getFirstMatchingElement(atypes, "c_ident", c_idents(i))
152         atid(i) = me
153    
154      enddo
173 #endif
155  
156  
157  
158 +
159      do i = 1, nExcludes_Local
160         excludesLocal(1,i) = CexcludesLocal(1,i)
161         excludesLocal(2,i) = CexcludesLocal(2,i)
# Line 185 | Line 167 | contains
167  
168      do i = 1, nGlobal
169         molMemberShipList(i) = CmolMembership(i)
170 <       ! write(0,*) 'molMembershipList(',i,') = ', molMemberShipList(i)
189 <    enddo
170 >     enddo
171  
172      if (status == 0) simulation_setup_complete = .true.
173      
174    end subroutine SimulationSetup
175    
176 <  subroutine setBox_3d(new_box_size)
177 <    real(kind=dp), dimension(3) :: new_box_size
176 >  subroutine setBox(cHmat, cHmatInv, cBoxIsOrthorhombic)
177 >    real(kind=dp), dimension(3,3) :: cHmat, cHmatInv
178 >    integer :: cBoxIsOrthorhombic
179      integer :: smallest, status, i
180 <
181 <    thisSim%box = new_box_size
182 <    box = thisSim%box
183 <
180 >    
181 >    Hmat = cHmat
182 >    HmatInv = cHmatInv
183 >    if (cBoxIsOrthorhombic .eq. 0 ) then
184 >       boxIsOrthorhombic = .false.
185 >    else
186 >       boxIsOrthorhombic = .true.
187 >    endif
188 >    
189      return    
190 <  end subroutine setBox_3d
204 <
205 <  subroutine setBox_1d(dim, new_box_size)
206 <    integer :: dim, status
207 <    real(kind=dp) :: new_box_size
208 <    thisSim%box(dim) = new_box_size
209 <    box(dim) = thisSim%box(dim)
210 <  end subroutine setBox_1d
190 >  end subroutine setBox
191  
212  subroutine setRcut(new_rcut, status)
213    real(kind = dp) :: new_rcut
214    integer :: myStatus, status
215    thisSim%rcut = new_rcut
216    rcut2 = thisSim%rcut * thisSim%rcut
217    rcut6 = rcut2 * rcut2 * rcut2
218    status = 0
219    return
220  end subroutine setRcut
221
222  function getBox_3d() result(thisBox)
223    real( kind = dp ), dimension(3) :: thisBox
224    thisBox = thisSim%box
225  end function getBox_3d
226  
227  function getBox_1d(dim) result(thisBox)
228    integer, intent(in) :: dim
229    real( kind = dp ) :: thisBox
230    
231    thisBox = thisSim%box(dim)
232  end function getBox_1d
233    
234  subroutine getRcut(thisrcut,rc2,rc6,status)
235    real( kind = dp ), intent(out) :: thisrcut
236    real( kind = dp ), intent(out), optional :: rc2
237    real( kind = dp ), intent(out), optional :: rc6
238    integer, optional :: status
239
240    if (present(status)) status = 0
241    
242    if (.not.simulation_setup_complete ) then
243       if (present(status)) status = -1
244       return
245    end if
246    
247    thisrcut = thisSim%rcut
248    if(present(rc2)) rc2 = rcut2
249    if(present(rc6)) rc6 = rcut6
250  end subroutine getRcut
251  
252  subroutine getRlist(thisrlist,rl2,status)
253    real( kind = dp ), intent(out) :: thisrlist
254    real( kind = dp ), intent(out), optional :: rl2
255
256    integer, optional :: status
257
258    if (present(status)) status = 0
259
260    if (.not.simulation_setup_complete ) then
261       if (present(status)) status = -1
262       return
263    end if
264    
265    thisrlist = thisSim%rlist
266    if(present(rl2)) rl2 = rlist2
267  end subroutine getRlist
268
269  function getRrf() result(rrf)
270    real( kind = dp ) :: rrf
271    rrf = thisSim%rrf
272    write(*,*) 'getRrf = ', rrf, thisSim%rrf
273  end function getRrf
274  
275  function getRt() result(rt)
276    real( kind = dp ) :: rt
277    rt = thisSim%rt
278  end function getRt
279
192    function getDielect() result(dielect)
193      real( kind = dp ) :: dielect
194      dielect = thisSim%dielect
# Line 297 | Line 209 | contains
209      doesit = thisSim%SIM_uses_sticky
210    end function SimUsesSticky
211  
212 +  function SimUsesCharges() result(doesit)
213 +    logical :: doesit
214 +    doesit = thisSim%SIM_uses_charges
215 +  end function SimUsesCharges
216 +
217    function SimUsesDipoles() result(doesit)
218      logical :: doesit
219      doesit = thisSim%SIM_uses_dipoles
# Line 353 | Line 270 | contains
270         return
271      endif
272  
273 <    allocate(molMembershipList(getNlocal()), stat=alloc_stat)
273 >    allocate(molMembershipList(nGlobal), stat=alloc_stat)
274      if (alloc_stat /= 0 ) then
275         thisStat = -1
276         return
# Line 371 | Line 288 | contains
288  
289    end subroutine FreeSimGlobals
290  
291 <  pure function getNlocal() result(nlocal)
292 <    integer :: nlocal
293 <    nlocal = natoms
291 >  pure function getNlocal() result(n)
292 >    integer :: n
293 >    n = nLocal
294    end function getNlocal
295  
296    

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines