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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 127 by jgs, Fri Jul 22 05:11:29 2005 UTC revision 149 by jgs, Thu Sep 1 03:31:39 2005 UTC
# Line 1  Line 1 
1  # $Id$  # $Id$
2    
3    
 from esys.modelframe import Model  
4  from esys.escript import *  from esys.escript import *
5  import esys.finley as finley  from esys.escript.modelframe import Model,ParameterSet
6    from esys import finley
7    
8  class RectangularDomain(Model):  class RectangularDomain(Model):
9         """   """         """
10           Generates a mesh over a rectangular domain finley.
11    
12           @ivar dim:
13           @ivar l:
14           @ivar n:
15           @ivar order:
16           @ivar periodic:
17           @ivar intergration order:
18           @ivar domain (callable):
19           """
20         def __init__(self,debug=False):         def __init__(self,debug=False):
21             Model.__init__(self,debug=debug)             Model.__init__(self,debug=debug)
22             self.declareParameter(domain=None, dim=2,\             self.declareParameter(dim=2,\
23                                   l=[1.,1.,1.],\                                   l=[1.,1.,1.],\
24                                   n=[10,10,10], \                                   n=[10,10,10], \
25                   order=1,\                   order=1,\
26                                   periodic=[False,False,False],\                                   periodic=[False,False,False],\
27                                   integrationOrder=-1)                                   integrationOrder=-1)
28         def doInitialization(self,t):             self._domain=None
29            if self.dim==2:  
30               self.domain=finley.Rectangle(n0=self.n[0],\         def domain(self):
31                                            n1=self.n[1],\            if self._domain==None:
32                                            l0=self.l[0],\               if self.dim==2:
33                                            l1=self.l[1],\                  self._domain=finley.Rectangle(n0=self.n[0],\
34                                            order=self.order, \                                               n1=self.n[1],\
35                                            periodic0=self.periodic[0], \                                               l0=self.l[0],\
36                                            periodic1=self.periodic[1], \                                               l1=self.l[1],\
37                                            integrationOrder=self.integrationOrder)                                               order=self.order, \
38            else:                                               periodic0=self.periodic[0], \
39               self.domain=finley.Brick(n0=self.n[0],\                                               periodic1=self.periodic[1], \
40                                        n1=self.n[1],\                                               integrationOrder=self.integrationOrder)
41                                        n2=self.n[2],\               else:
42                                        l0=self.l[0],\                  self._domain=finley.Brick(n0=self.n[0],\
43                                        l1=self.l[1],\                                           n1=self.n[1],\
44                                        l2=self.l[2],\                                           n2=self.n[2],\
45                                        order=self.order, \                                           l0=self.l[0],\
46                                        periodic0=self.periodic[0], \                                           l1=self.l[1],\
47                                        periodic1=self.periodic[1], \                                           l2=self.l[2],\
48                                        periodic2=self.periodic[2], \                                           order=self.order, \
49                                        integrationOrder=self.integrationOrder)                                           periodic0=self.periodic[0], \
50                                             periodic1=self.periodic[1], \
51  class ScalarConstrainer(Model):                                           periodic2=self.periodic[2], \
52       """@brief creates a characteristic function for the location of constraints for a scalar value                                           integrationOrder=self.integrationOrder)
53    
54                @param domain (in) - rectangular domain            return self._domain
55                @param left (in)  - True to set a constraint at the left face of the domain (x[0]=min x[0]), default is False  
56                @param right (in) - True to set a constraint at the left face of the domain (x[0]=max x[0]), default is False  class ScalarConstrainer(ParameterSet):
57                @param top (in)  - True to set a constraint at the left face of the domain (x[1]=min x[1]), default is False       """
58                @param bottom (in) - True to set a constraint at the left face of the domain (x[1]=max x[1]), default is False       Creates a characteristic function for the location of constraints
59                @param front (in)  - True to set a constraint at the left face of the domain (x[2]=min x[2]), default is False       for a scalar value.
               @param back (in) - True to set a constraint at the left face of the domain (x[2]=max x[2]), default is False  
               @param location_of_constraint (out) - object that defines the location of the constraints.  
60    
61         In the case that the spatial dimension is two, teh arguments front and back are ignored       In the case that the spatial dimension is two, the arguments front
62         and back are ignored.
63    
64         @ivar domain (in): rectangular domain
65         @ivar left (in): True to set a constraint at the left face of the
66                   domain (x[0]=min x[0]), default is False
67         @ivar right (in): True to set a constraint at the left face of the
68                   domain (x[0]=max x[0]), default is False
69         @ivar top (in): True to set a constraint at the left face of the
70                   domain (x[1]=min x[1]), default is False
71         @ivar bottom (in): True to set a constraint at the left face of the
72                   domain (x[1]=max x[1]), default is False
73         @ivar front (in): True to set a constraint at the left face of the
74                   domain (x[2]=min x[2]), default is False
75         @ivar back (in): True to set a constraint at the left face of the
76                   domain (x[2]=max x[2]), default is False
77         @ivar location_of_constraint (out): object that defines the location
78                   of the constraints.
79       """       """
80       def __init__(self,debug=False):       def __init__(self,debug=False):
81             Model.__init__(self,debug=debug)             ParameterSet.__init__(self,debug=debug)
82             self.declareParameter(domain=None, \             self.declareParameter(domain=None, \
83                                   left=False,                                   left=False, \
84                                   right=False,                                   right=False, \
85                                   top=False,                                   top=False, \
86                                   bottom=False,                                   bottom=False, \
87                                   front=False,                                   front=False, \
88                                   back=False,                                   back=False)
89                                   location_of_constraint=Data())             self._location_of_constraint=None
90       def doInitialization(self,t):  
91            x=self.domain.getX()       def location_of_constraint(self):
92            self.location_of_constraint=Scalar(0,x.getFunctionSpace())            """
93            if self.domain.getDim()==3:            Returns the mask of the location of constraint.
94               if self.left: self.location_of_constraint+=(x[0]-inf(x[0])).whereZero()            """
95               if self.right: self.location_of_constraint+=(x[0]-sup(x[0])).whereZero()            if self._location_of_constraint==None:
96               if self.front: self.location_of_constraint+=(x[1]-inf(x[1])).whereZero()               x=self.domain.getX()
97               if self.back: self.location_of_constraint+=(x[1]-sup(x[1])).whereZero()               self._location_of_constraint=Scalar(0,x.getFunctionSpace())
98               if self.bottom: self.location_of_constraint+=(x[2]-inf(x[2])).whereZero()               if self.domain.getDim()==3:
99               if self.top: self.location_of_constraint+=(x[2]-sup(x[2])).whereZero()                  if self.left: self._location_of_constraint+=(x[0]-inf(x[0])).whereZero()
100            else:                  if self.right: self._location_of_constraint+=(x[0]-sup(x[0])).whereZero()
101               if self.left: self.location_of_constraint+=(x[0]-inf(x[0])).whereZero()                  if self.front: self._location_of_constraint+=(x[1]-inf(x[1])).whereZero()
102               if self.right: self.location_of_constraint+=(x[0]-sup(x[0])).whereZero()                  if self.back: self._location_of_constraint+=(x[1]-sup(x[1])).whereZero()
103               if self.bottom: self.location_of_constraint+=(x[1]-inf(x[1])).whereZero()                  if self.bottom: self._location_of_constraint+=(x[2]-inf(x[2])).whereZero()
104               if self.top: self.location_of_constraint+=(x[1]-sup(x[1])).whereZero()                  if self.top: self._location_of_constraint+=(x[2]-sup(x[2])).whereZero()
105                 else:
106  class VectorConstrainer(Model):                  if self.left: self._location_of_constraint+=(x[0]-inf(x[0])).whereZero()
107        """@brief creates a characteristic function for the location of constraints for a scalar value                  if self.right: self._location_of_constraint+=(x[0]-sup(x[0])).whereZero()
108                    if self.bottom: self._location_of_constraint+=(x[1]-inf(x[1])).whereZero()
109                @param domain (in) - rectangular domain                  if self.top: self._location_of_constraint+=(x[1]-sup(x[1])).whereZero()
110                @param left (in)  - list of three boolean. left[i]==True sets a constraint for the i-th component at the left            return self._location_of_constraint
111                                    face of the domain (x[0]=min x[0]), default is [False,False,False]  
112                @param right (in) - list of three boolean. left[i]==True sets a constraint for the i-th component at the right  class VectorConstrainer(ParameterSet):
113                                    face of the domain (x[0]=max x[0]), default is [False,False,False]        """
114                @param top (in)  - list of three boolean. left[i]==True sets a constraint for the i-th component at the top        Creates a characteristic function for the location of constraints
115                                    face of the domain (x[1]=min x[1]), default is [False,False,False]        for a scalar value.
               @param bottom (in) - 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]), default is [False,False,False]  
               @param front (in)  - 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]), default is [False,False,False]  
               @param back (in) - 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]), default is [False,False,False]  
               @param location_of_constraint (out) - object that defines the location of the constraints for each vector component.  
116    
117         In the case that the spatial dimension is two, thh arguments front and back as well as the third component of each argument is ignored.        @ivar domain (in): rectangular domain
118          @ivar left (in): list of three boolean. left[i]==True sets a
119                    constraint for the i-th component at the left
120                    face of the domain (x[0]=min x[0]),
121                    default is [False,False,False]
122          @ivar right (in): list of three boolean. left[i]==True sets a
123                    constraint for the i-th component at the right
124                    face of the domain (x[0]=max x[0]),
125                    default is [False,False,False]
126          @ivar top (in): list of three boolean. left[i]==True sets a
127                    constraint for the i-th component at the top
128                    face of the domain (x[1]=min x[1]),
129                    default is [False,False,False]
130          @ivar bottom (in): list of three boolean. left[i]==True sets a
131                    constraint for the i-th component at the bottom
132                    face of the domain (x[1]=min x[1]),
133                    default is [False,False,False]
134          @ivar front (in): list of three boolean. left[i]==True sets a
135                    constraint for the i-th component at the front
136                    face of the domain (x[2]=min x[2]),
137                    default is [False,False,False]
138          @ivar back (in): list of three boolean. left[i]==True sets a
139                    constraint for the i-th component at the back
140                    face of the domain (x[2]=max x[2]),
141                    default is [False,False,False]
142          @ivar location_of_constraint (callable): object that defines the location of the constraints for each vector component.
143    
144          In the case that the spatial dimension is two, thh arguments front and
145          back as well as the third component of each argument is ignored.
146        """        """
147        def __init__(self,debug=False):        def __init__(self,debug=False):
148             Model.__init__(self,debug=debug)             ParameterSet.__init__(self,debug=debug)
149             self.declareParameter(domain=None, \             self.declareParameter(domain=None, \
150                                   left=[0,0,0],                                   left=[0,0,0],  \
151                                   right=[0,0,0],                                   right=[0,0,0],  \
152                                   top=[0,0,0],                                   top=[0,0,0],  \
153                                   bottom=[0,0,0],                                   bottom=[0,0,0],  \
154                                   front=[0,0,0],                                   front=[0,0,0],
155                                   back=[0,0,0],                                   back=[0,0,0])
156                                   location_of_constraint=Data())             self._location_of_constraint=None
157        def doInitialization(self,t):        def location_of_constraint(self):
158            x=self.domain.getX()            """
159            self.location_of_constraint=Vector(0,x.getFunctionSpace())            Returns the mask of the location of constraint.
160            if self.domain.getDim()==3:            """
161               left_mask=(x[0]-inf(x[0])).whereZero()            if self._location_of_constraint==None:
162               if self.left[0]: self.location_of_constraint+=left_mask*[1.,0.,0.]               x=self.domain.getX()
163               if self.left[1]: self.location_of_constraint+=left_mask*[0.,1.,0.]               self._location_of_constraint=Vector(0,x.getFunctionSpace())
164               if self.left[2]: self.location_of_constraint+=left_mask*[0.,0.,1.]               if self.domain.getDim()==3:
165               right_mask=(x[0]-inf(x[0])).whereZero()                  left_mask=(x[0]-inf(x[0])).whereZero()
166               if self.right[0]: self.location_of_constraint+=right_mask*[1.,0.,0.]                  if self.left[0]: self._location_of_constraint+=left_mask*[1.,0.,0.]
167               if self.right[1]: self.location_of_constraint+=right_mask*[0.,1.,0.]                  if self.left[1]: self._location_of_constraint+=left_mask*[0.,1.,0.]
168               if self.right[2]: self.location_of_constraint+=right_mask*[0.,0.,1.]                  if self.left[2]: self._location_of_constraint+=left_mask*[0.,0.,1.]
169               front_mask=(x[1]-inf(x[1])).whereZero()                  right_mask=(x[0]-sup(x[0])).whereZero()
170               if self.front[0]: self.location_of_constraint+=front_mask*[1.,0.,0.]                  if self.right[0]: self._location_of_constraint+=right_mask*[1.,0.,0.]
171               if self.front[1]: self.location_of_constraint+=front_mask*[0.,1.,0.]                  if self.right[1]: self._location_of_constraint+=right_mask*[0.,1.,0.]
172               if self.front[2]: self.location_of_constraint+=front_mask*[0.,0.,1.]                  if self.right[2]: self._location_of_constraint+=right_mask*[0.,0.,1.]
173               back_mask=(x[1]-sup(x[1])).whereZero()                  front_mask=(x[1]-inf(x[1])).whereZero()
174               if self.back[0]: self.location_of_constraint+=back_mask*[1.,0.,0.]                  if self.front[0]: self._location_of_constraint+=front_mask*[1.,0.,0.]
175               if self.back[1]: self.location_of_constraint+=back_mask*[0.,1.,0.]                  if self.front[1]: self._location_of_constraint+=front_mask*[0.,1.,0.]
176               if self.back[2]: self.location_of_constraint+=back_mask*[0.,0.,1.]                  if self.front[2]: self._location_of_constraint+=front_mask*[0.,0.,1.]
177               bottom_mask=(x[2]-inf(x[2])).whereZero()                  back_mask=(x[1]-sup(x[1])).whereZero()
178               if self.bottom[0]: self.location_of_constraint+=bottom_mask*[1.,0.,0.]                  if self.back[0]: self._location_of_constraint+=back_mask*[1.,0.,0.]
179               if self.bottom[1]: self.location_of_constraint+=bottom_mask*[0.,1.,0.]                  if self.back[1]: self._location_of_constraint+=back_mask*[0.,1.,0.]
180               if self.bottom[2]: self.location_of_constraint+=bottom_mask*[0.,0.,1.]                  if self.back[2]: self._location_of_constraint+=back_mask*[0.,0.,1.]
181               top_mask=(x[2]-sup(x[2])).whereZero()                  bottom_mask=(x[2]-inf(x[2])).whereZero()
182               if self.top[0]: self.location_of_constraint+=top_mask*[1.,0.,0.]                  if self.bottom[0]: self._location_of_constraint+=bottom_mask*[1.,0.,0.]
183               if self.top[1]: self.location_of_constraint+=top_mask*[0.,1.,0.]                  if self.bottom[1]: self._location_of_constraint+=bottom_mask*[0.,1.,0.]
184               if self.top[2]: self.location_of_constraint+=top_mask*[0.,0.,1.]                  if self.bottom[2]: self._location_of_constraint+=bottom_mask*[0.,0.,1.]
185            else:                  top_mask=(x[2]-sup(x[2])).whereZero()
186               left_mask=(x[0]-inf(x[0])).whereZero()                  if self.top[0]: self._location_of_constraint+=top_mask*[1.,0.,0.]
187               if self.left[0]: self.location_of_constraint+=left_mask*[1.,0.]                  if self.top[1]: self._location_of_constraint+=top_mask*[0.,1.,0.]
188               if self.left[1]: self.location_of_constraint+=left_mask*[0.,1.]                  if self.top[2]: self._location_of_constraint+=top_mask*[0.,0.,1.]
189               right_mask=(x[0]-inf(x[0])).whereZero()               else:
190               if self.right[0]: self.location_of_constraint+=right_mask*[1.,0.]                  left_mask=(x[0]-inf(x[0])).whereZero()
191               if self.right[1]: self.location_of_constraint+=right_mask*[0.,1.]                  if self.left[0]: self._location_of_constraint+=left_mask*[1.,0.]
192               bottom_mask=(x[1]-inf(x[1])).whereZero()                  if self.left[1]: self._location_of_constraint+=left_mask*[0.,1.]
193               if self.bottom[0]: self.location_of_constraint+=bottom_mask*[1.,0.]                  right_mask=(x[0]-sup(x[0])).whereZero()
194               if self.bottom[1]: self.location_of_constraint+=bottom_mask*[0.,1.]                  if self.right[0]: self._location_of_constraint+=right_mask*[1.,0.]
195               top_mask=(x[1]-sup(x[1])).whereZero()                  if self.right[1]: self._location_of_constraint+=right_mask*[0.,1.]
196               if self.top[0]: self.location_of_constraint+=top_mask*[1.,0.]                  bottom_mask=(x[1]-inf(x[1])).whereZero()
197               if self.top[1]: self.location_of_constraint+=top_mask*[0.,1.]                  if self.bottom[0]: self._location_of_constraint+=bottom_mask*[1.,0.]
198                    if self.bottom[1]: self._location_of_constraint+=bottom_mask*[0.,1.]
199                    top_mask=(x[1]-sup(x[1])).whereZero()
200                    if self.top[0]: self._location_of_constraint+=top_mask*[1.,0.]
201                    if self.top[1]: self._location_of_constraint+=top_mask*[0.,1.]
202              return self._location_of_constraint
203    
204    # vim: expandtab shiftwidth=4:

Legend:
Removed from v.127  
changed lines
  Added in v.149

  ViewVC Help
Powered by ViewVC 1.1.26