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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 819 - (show annotations)
Sun Aug 27 23:07:51 2006 UTC (14 years, 9 months 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 # $Id$
2
3 __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
9
10 from esys.escript import *
11 from esys.escript.modelframe import Model,ParameterSet
12 from esys import finley
13
14 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 """
69 reads finley mesh file.
70
71 @ivar source: file name of the finley input file
72 @type source: C{str}
73 """
74 def __init__(self,debug=False):
75 super(FinleyReader,self).__init__(debug=debug)
76 self.declareParameter(source="none")
77
78 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
83 class RectangularDomain(Domain):
84 """
85 Generates a mesh over a rectangular domain finley.
86
87 @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 """
98 def __init__(self,debug=False):
99 """
100 initializes the object
101 """
102 super(RectangularDomain,self).__init__(debug=debug)
103 self.declareParameter(dim=2,\
104 l=[1.,1.,1.],\
105 n=[10,10,10], \
106 order=1,\
107 periodic=[False,False,False])
108
109 def doInitialization(self):
110 """
111 initializes the object
112 """
113 if self.dim==2:
114 self.domain=finley.Rectangle(n0=self.n[0],\
115 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 else:
123 self.__domain=finley.Brick(n0=self.n[0],\
124 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 super(RectangularDomain, self).doInitialization()
135
136
137 class ScalarConstrainer(Model):
138 """
139 Creates a characteristic function for the location of constraints
140 for a scalar value and selects the value from an initial value
141 ate these locations.
142
143 In the case that the spatial dimension is two, the arguments front and back are ignored.
144
145 @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 """
156 def __init__(self,debug=False):
157 ParameterSet.__init__(self,debug=debug)
158 self.declareParameter(domain=None, \
159 value=0, \
160 left=False, \
161 right=False, \
162 top=False, \
163 bottom=False, \
164 front=False, \
165 back=False, \
166 tol=1.e-8, \
167 constraint_value = None, \
168 location_constrained_value=None)
169 self._location_of_constraint=None
170
171 def doInitialization(self):
172 """
173 Returns the mask of the location of constraint.
174 """
175 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
193 class VectorConstrainer(Model):
194 """
195 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
199 @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
216 """
217 def __init__(self,debug=False):
218 ParameterSet.__init__(self,debug=debug)
219 self.declareParameter(domain=None, \
220 value=0, \
221 left=[0,0,0], \
222 right=[0,0,0], \
223 top=[0,0,0], \
224 bottom=[0,0,0], \
225 front=[0,0,0], \
226 ack=[0,0,0], \
227 tol=1.e-8, \
228 constraint_value = None, \
229 location_constrained_value=None)
230 self._location_of_constraint=None
231 def doInitialization(self):
232 """
233 sets the location_constrained_value and constraint_value to be kept throughout the simulation.
234 """
235 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 x0,x1,x2=x[0],x[1],x[2]
240 left_mask=whereZero(x0-inf(x0),self.tol)
241 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 right_mask=whereZero(x0-sup(x0),self.tol)
245 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 front_mask=whereZero(x1-inf(x1),self.tol)
249 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 back_mask=whereZero(x1-sup(x1),self.tol)
253 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 bottom_mask=whereZero(x2-inf(x2),self.tol)
257 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 top_mask=whereZero(x2-sup(x2),self.tol)
261 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 x0,x1=x[0],x[1]
266 left_mask=whereZero(x0-inf(x0),self.tol)
267 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 right_mask=whereZero(x0-sup(x0),self.tol)
270 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 bottom_mask=whereZero(x1-inf(x1),self.tol)
273 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 top_mask=whereZero(x1-sup(x1),self.tol)
276 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 self.constraint_value=self.location_constrained_value*self.value
279
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