/[escript]/trunk/modellib/py_src/geometry.py
ViewVC logotype

Annotation of /trunk/modellib/py_src/geometry.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 819 - (hide annotations)
Sun Aug 27 23:07:51 2006 UTC (13 years, 1 month ago) by gross
File MIME type: text/x-python
File size: 14087 byte(s)
new version of FinleyReader etc. They can noe update node coordinates but have to be part of the Simulation
1 jgs 127 # $Id$
2    
3 elspeth 628 __copyright__=""" Copyright (c) 2006 by ACcESS MNRF
4     http://www.access.edu.au
5     Primary Business: Queensland, Australia"""
6     __license__="""Licensed under the Open Software License version 3.0
7     http://www.opensource.org/licenses/osl-3.0.php"""
8 jgs 127
9 elspeth 628
10 jgs 149 from esys.escript import *
11     from esys.escript.modelframe import Model,ParameterSet
12     from esys import finley
13 jgs 127
14 gross 819 class Domain(Model):
15     """
16     template L{Model} for a domain.
17    
18     @ivar intergrationOrder: integration order, default -1 (in).
19     @type intergrationOrder: C{int}
20     @ivar displacement: displacements applied to the original mesh coordinates
21     @type displacement: C{None} or L{escript.Vector}
22     @ivar domain: domain (out)
23     @type domain: L{escript.Domain}
24     """
25     def __init__(self,debug=False):
26     """
27     initializes the object
28     """
29     super(Domain, self).__init__(debug=debug)
30     self.declareParameter(displacement=None,\
31     integrationOrder=-1)
32    
33     self.__updated=False
34    
35     def doInitialization(self):
36     """
37     applies an initial L{displacement} to the mesh nodes (if not equal to C{None})
38     """
39     self.__x=self.domain.getX()
40     if self.displacement:
41     self.domain.setX(self.__x+self.displacement)
42    
43     def doStepPreprocessing(self,dt):
44     """
45     applies the final L{displacement} to mesh nodes.
46     """
47     if self.displacement:
48     self.domain.setX(self.__x+self.displacement)
49     self.__update=False
50    
51     def doStep(self,dt):
52     """
53     applies the current L{displacement} to mesh nodes.
54     """
55     if self.displacement:
56     self.domain.setX(self.__x+self.displacement)
57     self.__update=False
58    
59     def doStepPostprocessing(self,dt):
60     """
61     applies the final L{displacement} to mesh nodes.
62     """
63     if self.displacement:
64     self.domain.setX(self.__x+self.displacement)
65     self.__update=False
66    
67     class FinleyReader(Domain):
68 jgs 149 """
69 gross 819 reads finley mesh file.
70 jgs 147
71 gross 819 @ivar source: file name of the finley input file
72     @type source: C{str}
73 gross 398 """
74     def __init__(self,debug=False):
75 gross 406 super(FinleyReader,self).__init__(debug=debug)
76 gross 819 self.declareParameter(source="none")
77 gross 398
78 gross 819 def doInitialization(self):
79     self.domain=finley.ReadMesh(self.source,self.integrationOrder)
80     self.trace("mesh read from %s"%self.source)
81     super(FinleyReader, self).doInitialization()
82 gross 398
83 gross 819 class RectangularDomain(Domain):
84 gross 398 """
85     Generates a mesh over a rectangular domain finley.
86    
87 gross 819 @ivar dim: spatial dimension, default =2 (in).
88     @type dim: spatial dimension
89     @ivar l: spatial lengths, default [1.,1.,1.] (in).
90     @type l: C{list} of C{floats}s
91     @ivar n: number of elements, default [10,10,10] (in).
92     @type n: C{list} of C{int}s
93     @ivar order: element order, default 1 (in).
94     @type order: C{int}
95     @ivar periodic: flags for periodicity, default [False,False,False] (in).
96     @type periodic: C{list} of C{bool}s
97 jgs 147 """
98 jgs 127 def __init__(self,debug=False):
99 gross 819 """
100     initializes the object
101     """
102 gross 406 super(RectangularDomain,self).__init__(debug=debug)
103 jgs 147 self.declareParameter(dim=2,\
104 jgs 127 l=[1.,1.,1.],\
105     n=[10,10,10], \
106     order=1,\
107 gross 819 periodic=[False,False,False])
108 jgs 127
109 gross 819 def doInitialization(self):
110     """
111     initializes the object
112     """
113     if self.dim==2:
114     self.domain=finley.Rectangle(n0=self.n[0],\
115 jgs 147 n1=self.n[1],\
116     l0=self.l[0],\
117     l1=self.l[1],\
118     order=self.order, \
119     periodic0=self.periodic[0], \
120     periodic1=self.periodic[1], \
121     integrationOrder=self.integrationOrder)
122 gross 819 else:
123 gross 720 self.__domain=finley.Brick(n0=self.n[0],\
124 jgs 147 n1=self.n[1],\
125     n2=self.n[2],\
126     l0=self.l[0],\
127     l1=self.l[1],\
128     l2=self.l[2],\
129     order=self.order, \
130     periodic0=self.periodic[0], \
131     periodic1=self.periodic[1], \
132     periodic2=self.periodic[2], \
133     integrationOrder=self.integrationOrder)
134 gross 819 super(RectangularDomain, self).doInitialization()
135 jgs 147
136    
137 gross 819 class ScalarConstrainer(Model):
138 jgs 149 """
139     Creates a characteristic function for the location of constraints
140 gross 819 for a scalar value and selects the value from an initial value
141     ate these locations.
142 jgs 127
143 gross 819 In the case that the spatial dimension is two, the arguments front and back are ignored.
144 jgs 127
145 gross 819 @ivar domain: domain (in).
146     @ivar left: True to set a constraint at the left face of the domain (x[0]=min x[0]), default False (in).
147     @ivar right: True to set a constraint at the left face of the domain (x[0]=max x[0]), default False (in).
148     @ivar top: True to set a constraint at the left face of the domain (x[1]=min x[1]), default False (in).
149     @ivar bottom: True to set a constraint at the left face of the domain (x[1]=max x[1]), default False (in).
150     @ivar front: True to set a constraint at the left face of the domain (x[2]=min x[2]), default False (in).
151     @ivar back: True to set a constraint at the left face of the domain (x[2]=max x[2]), default False (in).
152     @ivar tol: absolute tolerance for "x=max x" condition, default 1.e-8 (in).
153     @ivar location_of_constraint: locations of the constraints (out).
154     @ivar constraint: locations of the constraints (out).
155 jgs 127 """
156     def __init__(self,debug=False):
157 jgs 148 ParameterSet.__init__(self,debug=debug)
158 jgs 127 self.declareParameter(domain=None, \
159 gross 819 value=0, \
160 jgs 147 left=False, \
161     right=False, \
162     top=False, \
163     bottom=False, \
164     front=False, \
165 gross 819 back=False, \
166     tol=1.e-8, \
167     constraint_value = None, \
168     location_constrained_value=None)
169 jgs 147 self._location_of_constraint=None
170 jgs 127
171 gross 819 def doInitialization(self):
172 jgs 149 """
173     Returns the mask of the location of constraint.
174     """
175 gross 819 x=self.domain.getX()
176     self._location_of_constraint=Scalar(0,x.getFunctionSpace())
177     if self.domain.getDim()==3:
178     x0,x1,x2=x[0],x[1],x[2]
179     if self.left: self._location_of_constraint+=whereZero(x0-inf(x0),self.tol)
180     if self.right: self._location_of_constraint+=whereZero(x0-sup(x0),self.tol)
181     if self.front: self._location_of_constraint+=whereZero(x1-inf(x1),self.tol)
182     if self.back: self._location_of_constraint+=whereZero(x1-sup(x1),self.tol)
183     if self.bottom: self._location_of_constraint+=whereZero(x2-inf(x2),self.tol)
184     if self.top: self._location_of_constraint+=whereZero(x2-sup(x2),self.tol)
185     else:
186     x0,x1=x[0],x[1]
187     if self.left: self._location_of_constraint+=whereZero(x0-inf(x0),self.tol)
188     if self.right: self._location_of_constraint+=whereZero(x0-sup(x0),self.tol)
189     if self.bottom: self._location_of_constraint+=whereZero(x1-inf(x1),self.tol)
190     if self.top: self._location_of_constraint+=whereZero(x1-sup(x1),self.tol)
191     self.constraint_value=self.location_constrained_value*self.value
192 jgs 147
193 gross 819 class VectorConstrainer(Model):
194 jgs 149 """
195 gross 819 Creates a characteristic function for the location of constraints vector value.
196     In the case that the spatial dimension is two, the arguments front and
197     back as well as the third component of each argument is ignored.
198 jgs 127
199 gross 819 @ivar domain: domain
200     @ivar left: list of three boolean. left[i]==True sets a constraint for the i-th component at the left face of the domain (x[0]=min x[0]),
201     default [False,False,False] (in).
202     @ivar right: list of three boolean. left[i]==True sets a constraint for the i-th component at the right face of the domain (x[0]=max x[0]),
203     default [False,False,False] (in).
204     @ivar top: list of three boolean. left[i]==True sets a constraint for the i-th component at the top face of the domain (x[1]=min x[1]),
205     default [False,False,False] (in).
206     @ivar bottom: list of three boolean. left[i]==True sets a constraint for the i-th component at the bottom face of the domain (x[1]=min x[1]),
207     default [False,False,False] (in).
208     @ivar front: list of three boolean. left[i]==True sets a constraint for the i-th component at the front face of the domain (x[2]=min x[2]),
209     default [False,False,False] (in).
210     @ivar back: list of three boolean. left[i]==True sets a constraint for the i-th component at the back face of the domain (x[2]=max x[2]),
211     default [False,False,False] (in).
212     @ivar tol: absolute tolerance for "x=max x" condition, default 1.e-8 (in).
213     @ivar location_of_constraint: locations of the constraints (out).
214     @ivar constraint: locations of the constraints (out).
215 jgs 127
216     """
217     def __init__(self,debug=False):
218 jgs 148 ParameterSet.__init__(self,debug=debug)
219 jgs 127 self.declareParameter(domain=None, \
220 gross 819 value=0, \
221 jgs 147 left=[0,0,0], \
222     right=[0,0,0], \
223     top=[0,0,0], \
224     bottom=[0,0,0], \
225 gross 819 front=[0,0,0], \
226     ack=[0,0,0], \
227     tol=1.e-8, \
228     constraint_value = None, \
229     location_constrained_value=None)
230 jgs 147 self._location_of_constraint=None
231 gross 819 def doInitialization(self):
232 jgs 149 """
233 gross 819 sets the location_constrained_value and constraint_value to be kept throughout the simulation.
234 jgs 149 """
235 jgs 147 if self._location_of_constraint==None:
236     x=self.domain.getX()
237     self._location_of_constraint=Vector(0,x.getFunctionSpace())
238     if self.domain.getDim()==3:
239 gross 819 x0,x1,x2=x[0],x[1],x[2]
240     left_mask=whereZero(x0-inf(x0),self.tol)
241 jgs 147 if self.left[0]: self._location_of_constraint+=left_mask*[1.,0.,0.]
242     if self.left[1]: self._location_of_constraint+=left_mask*[0.,1.,0.]
243     if self.left[2]: self._location_of_constraint+=left_mask*[0.,0.,1.]
244 gross 819 right_mask=whereZero(x0-sup(x0),self.tol)
245 jgs 147 if self.right[0]: self._location_of_constraint+=right_mask*[1.,0.,0.]
246     if self.right[1]: self._location_of_constraint+=right_mask*[0.,1.,0.]
247     if self.right[2]: self._location_of_constraint+=right_mask*[0.,0.,1.]
248 gross 819 front_mask=whereZero(x1-inf(x1),self.tol)
249 jgs 147 if self.front[0]: self._location_of_constraint+=front_mask*[1.,0.,0.]
250     if self.front[1]: self._location_of_constraint+=front_mask*[0.,1.,0.]
251     if self.front[2]: self._location_of_constraint+=front_mask*[0.,0.,1.]
252 gross 819 back_mask=whereZero(x1-sup(x1),self.tol)
253 jgs 147 if self.back[0]: self._location_of_constraint+=back_mask*[1.,0.,0.]
254     if self.back[1]: self._location_of_constraint+=back_mask*[0.,1.,0.]
255     if self.back[2]: self._location_of_constraint+=back_mask*[0.,0.,1.]
256 gross 819 bottom_mask=whereZero(x2-inf(x2),self.tol)
257 jgs 147 if self.bottom[0]: self._location_of_constraint+=bottom_mask*[1.,0.,0.]
258     if self.bottom[1]: self._location_of_constraint+=bottom_mask*[0.,1.,0.]
259     if self.bottom[2]: self._location_of_constraint+=bottom_mask*[0.,0.,1.]
260 gross 819 top_mask=whereZero(x2-sup(x2),self.tol)
261 jgs 147 if self.top[0]: self._location_of_constraint+=top_mask*[1.,0.,0.]
262     if self.top[1]: self._location_of_constraint+=top_mask*[0.,1.,0.]
263     if self.top[2]: self._location_of_constraint+=top_mask*[0.,0.,1.]
264     else:
265 gross 819 x0,x1=x[0],x[1]
266     left_mask=whereZero(x0-inf(x0),self.tol)
267 jgs 147 if self.left[0]: self._location_of_constraint+=left_mask*[1.,0.]
268     if self.left[1]: self._location_of_constraint+=left_mask*[0.,1.]
269 gross 819 right_mask=whereZero(x0-sup(x0),self.tol)
270 jgs 147 if self.right[0]: self._location_of_constraint+=right_mask*[1.,0.]
271     if self.right[1]: self._location_of_constraint+=right_mask*[0.,1.]
272 gross 819 bottom_mask=whereZero(x1-inf(x1),self.tol)
273 jgs 147 if self.bottom[0]: self._location_of_constraint+=bottom_mask*[1.,0.]
274     if self.bottom[1]: self._location_of_constraint+=bottom_mask*[0.,1.]
275 gross 819 top_mask=whereZero(x1-sup(x1),self.tol)
276 jgs 147 if self.top[0]: self._location_of_constraint+=top_mask*[1.,0.]
277     if self.top[1]: self._location_of_constraint+=top_mask*[0.,1.]
278 gross 819 self.constraint_value=self.location_constrained_value*self.value
279 jgs 149
280     # vim: expandtab shiftwidth=4:

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26