/[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 1098 by gross, Mon Apr 16 23:15:23 2007 UTC revision 1152 by gross, Thu May 17 04:46:04 2007 UTC
# Line 97  class RectangularDomain(ParameterSet): Line 97  class RectangularDomain(ParameterSet):
97             if self.__domain==None:             if self.__domain==None:
98                if self.dim==2:                if self.dim==2:
99                     self.__domain=finley.Rectangle(n0=self.n[0],\                     self.__domain=finley.Rectangle(n0=self.n[0],\
100                                                  n1=self.n[1],\                                                  n1=self.n[2],\
101                                                  l0=self.l[0],\                                                  l0=self.l[0],\
102                                                  l1=self.l[1],\                                                  l1=self.l[2],\
103                                                  order=self.order, \                                                  order=self.order, \
104                                                  periodic0=self.periodic[0], \                                                  periodic0=self.periodic[0], \
105                                                  periodic1=self.periodic[1], \                                                  periodic1=self.periodic[2], \
106                                                  integrationOrder=self.integrationOrder)                                                  integrationOrder=self.integrationOrder)
107                else:                else:
108                     self.__domain=finley.Brick(n0=self.n[0],\                     self.__domain=finley.Brick(n0=self.n[0],\
# Line 344  class VectorConstrainerOverBox(Model): Line 344  class VectorConstrainerOverBox(Model):
344             super(VectorConstrainerOverBox, self).__init__(**kwargs)             super(VectorConstrainerOverBox, self).__init__(**kwargs)
345             self.declareParameter(domain=None, \             self.declareParameter(domain=None, \
346                                   value=None,  \                                   value=None,  \
347                                   left=[0,0,0],  \                                   left=[False ,False ,False ],  \
348                                   right=[0,0,0],  \                                   right=[False ,False ,False ],  \
349                                   top=[0,0,0],  \                                   top=[False ,False ,False ],  \
350                                   bottom=[0,0,0],  \                                   bottom=[False ,False ,False ],  \
351                                   front=[0,0,0], \                                   front=[False ,False ,False ], \
352                                   back=[0,0,0], \                                   back=[False ,False ,False ], \
353                                   tol=1.e-8)                                   tol=1.e-8)
354             self.__value_of_constraint = None             self.__value_of_constraint = None
355             self.__location_of_constraint=None             self.__location_of_constraint=None
# Line 423  class VectorConstrainerOverBox(Model): Line 423  class VectorConstrainerOverBox(Model):
423               if not self.value == None:               if not self.value == None:
424                  self.__value_of_constraint=self.__location_of_constraint*self.value[:2]                  self.__value_of_constraint=self.__location_of_constraint*self.value[:2]
425    
426  # vim: expandtab shiftwidth=4:  class ConstrainerAtBoxVertex(Model):
427          """
428          Creates a characteristic function for the location of constraints
429          for all components of a value and selects the value from an initial value
430          ate these locations.
431    
432          In the case that the spatial dimension is two, the arguments front and back are ignored.
433    
434          @ivar domain: domain (in).
435          @ivar tol: absolute tolerance for "x=left, front, bottom vertex" condition, default 1.e-8 (in).
436          """
437          def __init__(self,**kwargs):
438               super(ConstrainerAtBoxVertex, self).__init__(**kwargs)
439               self.declareParameter(domain=None, \
440                                     value=None,  \
441                                     tol=1.e-8)
442               self.__value_of_constraint = None
443               self.__location_of_constraint=None
444          def location_of_constraint(self):
445              """
446              return the values used to constrain a solution
447    
448              @return: the mask marking the locations of the constraints
449              @rtype: L{escript.Scalar}
450              """
451              if self.__location_of_constraint == None: self.__setOutput()
452              return self.__location_of_constraint
453            
454          def value_of_constraint(self):
455              """
456              return the values used to constrain a solution
457    
458              @return: values to be used at the locations of the constraints. If
459                      L{value} is not given C{None} is rerturned.
460              @rtype: L{escript.Scalar}
461              """
462              if self.__location_of_constraint == None: self.__setOutput()
463              return self.__value_of_constraint
464            
465          def __setOutput(self):
466              if self.__location_of_constraint == None:
467                 x=self.domain.getX()
468                 val=self.value
469                 if isinstance(val, int) or isinstance(val, float):
470                    shape=()
471                 elif isinstance(val, list) or isinstance(val, tuple) :
472                    shape=(len(val),)
473                 elif isinstance(val, numarray.NumArray):
474                     shape=val.shape
475                 elif val == None:
476                      shape=()
477                 else:
478                     shape=val.getShape()
479                 if self.domain.getDim()==3:
480                       vertex=[inf(x[0]),inf(x[1]),inf(x[2])]
481                 else:
482                       vertex=[inf(x[0]),inf(x[1])]
483                 self.__location_of_constraint=whereZero(length(x-vertex),self.tol)*numarray.ones(shape)
484                 if not self.value == None:
485                       self.__value_of_constraint=self.__location_of_constraint*self.value
486    class ScalarConstrainerAtBoxVertex(Model):
487          """
488          Creates a characteristic function for the location of constraints
489          for a scalar value and selects the value from an initial value
490          ate these locations.
491    
492          In the case that the spatial dimension is two, the arguments front and back are ignored.
493    
494          @ivar domain: domain (in).
495          @ivar tol: absolute tolerance for "x=left, front, bottom vertex" condition, default 1.e-8 (in).
496          """
497          def __init__(self,**kwargs):
498               super(ScalarConstrainerAtBoxVertex, self).__init__(**kwargs)
499               self.declareParameter(domain=None, \
500                                     value=None,  \
501                                     tol=1.e-8)
502               self.__value_of_constraint = None
503               self.__location_of_constraint=None
504          def location_of_constraint(self):
505              """
506              return the values used to constrain a solution
507    
508              @return: the mask marking the locations of the constraints
509              @rtype: L{escript.Scalar}
510              """
511              if self.__location_of_constraint == None: self.__setOutput()
512              return self.__location_of_constraint
513            
514          def value_of_constraint(self):
515              """
516              return the values used to constrain a solution
517    
518              @return: values to be used at the locations of the constraints. If
519                      L{value} is not given C{None} is rerturned.
520              @rtype: L{escript.Scalar}
521              """
522              if self.__location_of_constraint == None: self.__setOutput()
523              return self.__value_of_constraint
524            
525          def __setOutput(self):
526              x=self.domain.getX()
527              self.__location_of_constraint=Scalar(0,x.getFunctionSpace())
528              if self.domain.getDim()==3:
529                       vertex=[inf(x[0]),inf(x[1]),inf(x[2])]
530              else:
531                     vertex=[inf(x[0]),inf(x[1])]
532              self.__location_of_constraint=whereZero(length(x-vertex),self.tol)
533              if not self.value == None:
534                  self.__value_of_constraint=self.__location_of_constraint*self.value
535    
536    class VectorConstrainerAtBoxVertex(Model):
537          """
538          Creates a characteristic function for the location of constraints vector value.
539          In the case that the spatial dimension is two, the arguments front and
540          back as well as the third component of each argument is ignored.
541    
542          @ivar domain: domain
543          @ivar comp_mask: list of three boolean. comp_mask[i]==True sets a constraint for the i-th component at the left, front, bottom vertex, default [False,False,False] (in).
544          @ivar tol: absolute tolerance for "x=left, front, bottom vertex" condition, default 1.e-8 (in).
545          """
546          def __init__(self, **kwargs):
547               super(VectorConstrainerAtBoxVertex, self).__init__(**kwargs)
548               self.declareParameter(domain=None, \
549                                     value=None,  \
550                                     comp_mask=[False, False, False],
551                                     tol=1.e-8)
552               self.__value_of_constraint = None
553               self.__location_of_constraint=None
554    
555          def location_of_constraint(self):
556              """
557              return the values used to constrain a solution
558    
559              @return: the mask marking the locations of the constraints
560              @rtype: L{escript.Vector}
561              """
562              if self.__location_of_constraint == None: self.__setOutput()
563              return self.__location_of_constraint
564            
565          def value_of_constraint(self):
566              """
567              return the values used to constrain a solution
568    
569              @return: values to be used at the locations of the constraints. If
570                      L{value} is not given C{None} is rerturned.
571              @rtype: L{escript.Vector}
572              """
573              if self.__location_of_constraint == None: self.__setOutput()
574              return self.__value_of_constraint
575            
576          def __setOutput(self):
577              x=self.domain.getX()
578              self.__location_of_constraint=Vector(0,x.getFunctionSpace())
579              if self.domain.getDim()==3:
580                 vertex=[inf(x[0]),inf(x[1]),inf(x[2])]
581                 msk=numarray.zeros((3,))
582                 if self.comp_mask[0]: msk[0]=1
583                 if self.comp_mask[1]: msk[1]=1
584                 if self.comp_mask[2]: msk[2]=1
585              else:
586                 vertex=[inf(x[0]),inf(x[1])]
587                 msk=numarray.zeros((2,))
588                 if self.comp_mask[0]: msk[0]=1
589                 if self.comp_mask[1]: msk[1]=1
590              self.__location_of_constraint=whereZero(length(x-vertex),self.tol)*numarray.ones(shape)
591              if not self.value == None:
592                    self.__value_of_constraint=self.__location_of_constraint*self.value
593    

Legend:
Removed from v.1098  
changed lines
  Added in v.1152

  ViewVC Help
Powered by ViewVC 1.1.26