ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/UseTheForce/DarkSide/switcheroo.F90
Revision: 1930
Committed: Wed Jan 12 22:41:40 2005 UTC (19 years, 6 months ago) by gezelter
File size: 4536 byte(s)
Log Message:
merging new_design branch into OOPSE-2.0

File Contents

# User Rev Content
1 gezelter 1930 !!
2     !! Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3     !!
4     !! The University of Notre Dame grants you ("Licensee") a
5     !! non-exclusive, royalty free, license to use, modify and
6     !! redistribute this software in source and binary code form, provided
7     !! that the following conditions are met:
8     !!
9     !! 1. Acknowledgement of the program authors must be made in any
10     !! publication of scientific results based in part on use of the
11     !! program. An acceptable form of acknowledgement is citation of
12     !! the article in which the program was described (Matthew
13     !! A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14     !! J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15     !! Parallel Simulation Engine for Molecular Dynamics,"
16     !! J. Comput. Chem. 26, pp. 252-271 (2005))
17     !!
18     !! 2. Redistributions of source code must retain the above copyright
19     !! notice, this list of conditions and the following disclaimer.
20     !!
21     !! 3. Redistributions in binary form must reproduce the above copyright
22     !! notice, this list of conditions and the following disclaimer in the
23     !! documentation and/or other materials provided with the
24     !! distribution.
25     !!
26     !! This software is provided "AS IS," without a warranty of any
27     !! kind. All express or implied conditions, representations and
28     !! warranties, including any implied warranty of merchantability,
29     !! fitness for a particular purpose or non-infringement, are hereby
30     !! excluded. The University of Notre Dame and its licensors shall not
31     !! be liable for any damages suffered by licensee as a result of
32     !! using, modifying or distributing the software or its
33     !! derivatives. In no event will the University of Notre Dame or its
34     !! licensors be liable for any lost revenue, profit or data, or for
35     !! direct, indirect, special, consequential, incidental or punitive
36     !! damages, however caused and regardless of the theory of liability,
37     !! arising out of the use of or inability to use software, even if the
38     !! University of Notre Dame has been advised of the possibility of
39     !! such damages.
40     !!
41    
42 gezelter 1608 module switcheroo
43    
44     use definitions
45    
46     implicit none
47     PRIVATE
48    
49     #define __FORTRAN90
50     #include "UseTheForce/fSwitchingFunction.h"
51    
52     real ( kind = dp ), dimension(NSWITCHTYPES) :: rin
53     real ( kind = dp ), dimension(NSWITCHTYPES) :: rout
54     real ( kind = dp ), dimension(NSWITCHTYPES) :: rin2
55     real ( kind = dp ), dimension(NSWITCHTYPES) :: rout2
56    
57     logical, dimension(NSWITCHTYPES) :: isOK
58    
59    
60     public::set_switch
61     public::get_switch
62    
63     contains
64    
65     subroutine set_switch(SwitchType, rinner, router)
66    
67     real ( kind = dp ), intent(in):: rinner, router
68     integer, intent(in) :: SwitchType
69    
70     if (SwitchType .gt. NSWITCHTYPES) then
71     write(default_error, *) &
72     'set_switch: not that many switch types! '
73     return
74     endif
75    
76     isOK(SwitchType) = .false.
77    
78     if (router .lt. rinner) then
79     write(default_error, *) &
80     'set_switch: router is less than rinner '
81     return
82     endif
83    
84     if ((router .lt. 0.0d0) .or. (rinner .lt. 0.0d0)) then
85     write(default_error, *) &
86     'set_switch: one of the switches is negative!'
87     return
88     endif
89    
90     rin(SwitchType) = rinner
91     rout(SwitchType) = router
92     rin2(SwitchType) = rinner * rinner
93     rout2(SwitchType) = router * router
94     isOK(SwitchType) = .true.
95    
96     end subroutine set_switch
97    
98     subroutine get_switch(r2, sw, dswdr, r, SwitchType, in_switching_region)
99    
100     real( kind = dp ), intent(in) :: r2
101     real( kind = dp ), intent(inout) :: sw, dswdr, r
102     real( kind = dp ) :: ron, roff
103     integer, intent(in) :: SwitchType
104     logical, intent(inout) :: in_switching_region
105    
106     sw = 0.0d0
107     dswdr = 0.0d0
108     in_switching_region = .false.
109    
110     if (.not.isOK(SwitchType)) then
111     write(default_error, *) &
112     'get_switch: this switching function has not been set up!'
113     return
114     endif
115    
116     if (r2.lt.rout2(SwitchType)) then
117     if (r2.lt.rin2(SwitchType)) then
118    
119     sw = 1.0d0
120     dswdr = 0.0d0
121     return
122    
123     else
124    
125     r = dsqrt(r2)
126    
127     ron = rin(SwitchType)
128     roff = rout(SwitchType)
129    
130     sw = (roff + 2.0d0*r - 3.0d0*ron)*(roff-r)**2/ ((roff-ron)**3)
131     dswdr = 6.0d0*(r*r - r*ron - r*roff +roff*ron)/((roff-ron)**3)
132    
133     in_switching_region = .true.
134     return
135     endif
136     else
137     return
138     endif
139    
140     end subroutine get_switch
141     end module switcheroo