/[escript]/branches/3.4.1/modellib/py_src/input.py
ViewVC logotype

Diff of /branches/3.4.1/modellib/py_src/input.py

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

revision 155 by jgs, Wed Nov 9 02:02:19 2005 UTC revision 819 by gross, Sun Aug 27 23:07:51 2006 UTC
# Line 1  Line 1 
1  # $Id$  # $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  from esys.escript import *  from esys.escript import *
10  from esys.escript.modelframe import Model,ParameterSet  from esys.escript.modelframe import Model,ParameterSet
11  from math import log  from math import log
12    
13  class Sequencer(Model):  class Sequencer(Model):
14      """      """
15      Runs through time until t_end is reached.      Runs through time until t_end is reached.
16    
17        @ivar t_end: model is terminated when t_end is passed, default 1 (in).
18        @type t_end: C{float}
19        @ivar dt_max: maximum time step size, default L{Model.UNDEF_DT} (in)
20        @type dt_max: C{float}
21        @ivar t: current time stamp (in/out). By default it is initialized with zero.
22        @type t: C{float}
23    
24      """      """
25      def __init__(self,t=0.,t_end=Model.UNDEF_DT,dt_max=Model.UNDEF_DT,debug=False):      def __init__(self,debug=False):
26          """          """
         @param t_end: - model is terminated when t_end is passed    
                    (exposed in writeXML)  
         @type t_end: float  
         @param dt_max: - maximum time step size  
         @type dt_max: float  
         @param t: - initial time  
         @type t: float  
   
27          """          """
28          Model.__init__(self,debug=debug)          super(Sequencer,self).__init__(debug=debug)
29          self.declareParameter(t=t, \          self.declareParameter(t=0.,
30                                t_end=t_end,  \                                t_end=1.,
31                                dt_max=dt_max)                                dt_max=Model.UNDEF_DT)
32    
33      def doInitialization(self):      def doInitialization(self):
34          """          """
# Line 37  class Sequencer(Model): Line 44  class Sequencer(Model):
44    
45      def finalize(self):      def finalize(self):
46          """          """
47          true when t has reached t_end          returns true when L{t} has reached L{t_end}
48          """          """
49          return self.t >= self.t_end          return self.t >= self.t_end
50    
51      def getSafeTimeStepSize(self, dt):      def getSafeTimeStepSize(self, dt):
52          """          """
53          returns dt_max          returns L{dt_max}
54          """          """
55          return self.dt_max          return self.dt_max
56    
# Line 52  class GaussianProfile(ParameterSet): Line 59  class GaussianProfile(ParameterSet):
59      Generates a Gaussian profile at center x_c, width width and height A      Generates a Gaussian profile at center x_c, width width and height A
60      over a domain      over a domain
61    
62      @ivar domain (in): domain      @ivar domain: domain
63      @ivar x_c (in): center of the Gaussian profile (default [0.,0.,0.])      @ivar x_c: center of the Gaussian profile (default [0.,0.,0.])
64      @ivar A (in): height of the profile. A maybe a vector. (default 1.)      @ivar A: (in) height of the profile. A maybe a vector. (default 1.)
65      @ivar width (in): width of the profile (default 0.1)      @ivar width: (in) width of the profile (default 0.1)
66      @ivar r (in): radius of the circle (default = 0)      @ivar r: (in) radius of the circle (default = 0)
     @ivar out (callable): profile  
67    
68      In the case that the spatial dimension is two, The third component of      In the case that the spatial dimension is two, The third component of
69      x_c is dropped      x_c is dropped.
70      """      """
71      def __init__(self,debug=False):      def __init__(self,debug=False):
72          ParameterSet.__init__(self,debug=debug)          ParameterSet.__init__(self,debug=debug)
# Line 73  class GaussianProfile(ParameterSet): Line 79  class GaussianProfile(ParameterSet):
79      def out(self):      def out(self):
80          """          """
81          Generate the Gaussian profile          Generate the Gaussian profile
82    
83            Link against this method to get the output of this model.
84          """          """
85          x = self.domain.getX()          x = self.domain.getX()
86          dim = self.domain.getDim()          dim = self.domain.getDim()
87          l = length(x-self.x_c[:dim])          l = length(x-self.x_c[:dim])
88          m = (l-self.r).whereNegative()          m = whereNegative(l-self.r)
89    
90          return (m+(1.-m)*exp(-log(2.)*(l/self.width)**2))*self.A          return (m+(1.-m)*exp(-log(2.)*(l/self.width)**2))*self.A
91    
92  class InterpolateOverBox(ParameterSet):  class InterpolateOverBox(ParameterSet):
93      """      """
94      Returns values at each time. The values are defined through given values      Returns values at each time. The values are defined through given values
95      at time node.      at time node. For two dimensional domains back values are ignored.
96    
97      @ivar domain (in): domain      @ivar domain: domain
98      @ivar left_bottom_front (in): coordinates of left, bottom, front corner      @ivar value_left_bottom_front: (in) value at left,bottom,front corner
99                of the box      @ivar value_right_bottom_front: (in) value at right, bottom, front corner
100      @ivar right_top_back (in): coordinates of the right, top, back corner      @ivar value_left_top_front: (in) value at left,top,front corner
101                of the box      @ivar value_right_top_front: (in) value at right,top,front corner
102      @ivar value_left_bottom_front (in): value at left,bottom,front corner      @ivar value_left_bottom_back: (in) value at  left,bottom,back corner
103      @ivar value_right_bottom_front (in): value at right, bottom, front corner      @ivar value_right_bottom_back: (in) value at right,bottom,back corner
104      @ivar value_left_top_front (in): value at left,top,front corner      @ivar value_left_top_back: (in) value at left,top,back  corner
105      @ivar value_right_top_front (in): value at right,top,front corner      @ivar value_right_top_back: (in) value at right,top,back corner
     @ivar value_left_bottom_back (in): value at  left,bottom,back corner  
     @ivar value_right_bottom_back (in): value at right,bottom,back corner  
     @ivar value_left_top_back (in): value at left,top,back  corner  
     @ivar value_right_top_back (in): value at right,top,back corner  
     @ivar out (callable): values at domain locations by bilinear  
               interpolation.  For two dimensional domains back values are  
               ignored.  
106      """      """
107    
108      def __init__(self, debug=False):      def __init__(self, debug=False):
109          ParameterSet.__init__(self, debug=debug)          ParameterSet.__init__(self, debug=debug)
110          self.declareParameter(domain=None,          self.declareParameter(domain=None,
                               left_bottom_front=[0.,0.,0.],  
                               right_top_back=[1.,1.,1.],  
111                                value_left_bottom_front=0.,                                value_left_bottom_front=0.,
112                                value_right_bottom_front=0.,                                value_right_bottom_front=0.,
113                                value_left_top_front=0.,                                value_left_top_front=0.,
# Line 120  class InterpolateOverBox(ParameterSet): Line 119  class InterpolateOverBox(ParameterSet):
119    
120    
121      def out(self):      def out(self):
122            """
123            values at domain locations by bilinear interpolation of the given values.
124    
125            Link against this method to get the output of this model.
126            """
127          x = self.domain.getX()          x = self.domain.getX()
128          if self.domain.getDim() == 2:          if self.domain.getDim() == 2:
129              f_right = (x[0] - self.left_bottom_front[0])/\              x0,x1=x[0],x[1]
130           (self.right_top_back[0] - self.left_bottom_front[0])              left_bottom_front0,right_top_back0=inf(x0),sup(x0)
131                left_bottom_front1,right_top_back1=inf(x[1]),sup(x[1])
132                f_right = (x[0] - self.left_bottom_front0)/\
133             (self.right_top_back0 - self.left_bottom_front0)
134              f_left = 1. - f_right              f_left = 1. - f_right
135              f_top = (x[1] - self.left_bottom_front[1])/\              f_top = (x[1] - self.left_bottom_front1)/\
136           (self.right_top_back[1] - self.left_bottom_front[1])           (self.right_top_back1 - self.left_bottom_front1)
137              f_bottom = 1. - f_top              f_bottom = 1. - f_top
138              out = self.value_left_bottom_front * f_left * f_bottom \              out = f_left * f_bottom * self.value_left_bottom_front \
139                  + self.value_right_bottom_front* f_right * f_bottom \                  + f_right * f_bottom * self.value_right_bottom_front \
140                  + self.value_left_top_front    * f_left * f_top \                  + f_left * f_top * self.value_left_top_front \
141                  + self.value_right_top_front   * f_right * f_top                  + f_right * f_top * self.value_right_top_front
142          else:          else:
143              f_right = (x[0] - self.left_bottom_front[0])/\              x0,x1,x2=x[0],x[1],x[2]
144                      (self.right_top_back[0] - self.left_bottom_front[0])              left_bottom_front0,right_top_back0=inf(x0),sup(x0)
145                left_bottom_front1,right_top_back1=inf(x[1]),sup(x[1])
146                left_bottom_front2,right_top_back2=inf(x[2]),sup(x[2])
147                f_right = (x[0] - self.left_bottom_front0)/\
148                        (self.right_top_back0 - self.left_bottom_front0)
149              f_left = 1. - f_right              f_left = 1. - f_right
150              f_top = (x[1] - self.left_bottom_front[1])/\              f_top = (x[1] - self.left_bottom_front1)/\
151                      (self.right_top_back[1] - self.left_bottom_front[1])                      (self.right_top_back1 - self.left_bottom_front1)
152              f_bottom = 1. - f_top              f_bottom = 1. - f_top
153              f_back = (x[2] - self.left_bottom_front[1])/\              f_back = (x[2] - self.left_bottom_front1)/\
154                      (self.right_top_back[2] - self.left_bottom_front[2])                      (self.right_top_back2 - self.left_bottom_front2)
155              f_front = 1. - f_back              f_front = 1. - f_back
156              out = self.value_left_bottom_front * f_left * f_bottom * f_front \              out = f_left * f_bottom * f_front * self.value_left_bottom_front\
157                  + self.value_right_bottom_front* f_right * f_bottom * f_front \                  + f_right * f_bottom * f_front * self.value_right_bottom_front\
158                  + self.value_left_top_front    * f_left * f_top * f_front \                  + f_left * f_top * f_front * self.value_left_top_front\
159                  + self.value_right_top_front   * f_right * f_top * f_front \                  + f_right * f_top * f_front * self.value_right_top_front\
160                  + self.value_left_bottom_back  * f_left * f_bottom * f_back \                  + f_left * f_bottom * f_back * self.value_left_bottom_back\
161                  + self.value_right_bottom_back * f_right * f_bottom * f_back \                  + f_right * f_bottom * f_back * self.value_right_bottom_back\
162                  + self.value_left_top_back     * f_left * f_top * f_back \                  + f_left * f_top * f_back * self.value_left_top_back\
163                  + self.value_right_top_back    * f_right * f_top * f_back                  + f_right * f_top * f_back * self.value_right_top_back
164          return out          return out
165    
166    
# Line 165  class InterpolatedTimeProfile(ParameterS Line 176  class InterpolatedTimeProfile(ParameterS
176         For time t<nodes[0], value[0] is used and for t>nodes[l], values[l]         For time t<nodes[0], value[0] is used and for t>nodes[l], values[l]
177         is used where l=len(nodes)-1.         is used where l=len(nodes)-1.
178    
179         @ivar t (in): current time         @ivar t: (in) current time
180         @ivar node (in): list of time nodes         @ivar node: (in) list of time nodes
181         @ivar values (in): list of values at time nodes         @ivar values: (in) list of values at time nodes
        @ivar out (callable): current value  
182         """         """
183    
184         def __init__(self,debug=False):         def __init__(self,debug=False):
# Line 177  class InterpolatedTimeProfile(ParameterS Line 187  class InterpolatedTimeProfile(ParameterS
187                                   nodes=[0.,1.],\                                   nodes=[0.,1.],\
188                                   values=[1.,1.])                                   values=[1.,1.])
189         def out(self):         def out(self):
190               """
191               current value
192      
193               Link against this method to get the output of this model.
194               """
195             l = len(self.nodes) - 1             l = len(self.nodes) - 1
196             t = self.t             t = self.t
197             if t <= self.nodes[0]:             if t <= self.nodes[0]:
# Line 193  class LinearCombination(Model): Line 208  class LinearCombination(Model):
208      """      """
209      Returns a linear combination of the f0*v0+f1*v1+f2*v2+f3*v3+f4*v4      Returns a linear combination of the f0*v0+f1*v1+f2*v2+f3*v3+f4*v4
210                            
211      @ivar f0 (in): numerical object or None (default: None)      @ivar f0: numerical object or None, default=None (in)
212      @ivar v0 (in): numerical object or None (default: None)      @ivar v0: numerical object or None, default=None (in)
213      @ivar f1 (in): numerical object or None (default: None)      @ivar f1: numerical object or None, default=None (in)
214      @ivar v1 (in): numerical object or None (default: None)      @ivar v1: numerical object or None, default=None (in)
215      @ivar f2 (in): numerical object or None (default: None)      @ivar f2: numerical object or None, default=None (in)
216      @ivar v2 (in): numerical object or None (default: None)      @ivar v2: numerical object or None, default=None (in)
217      @ivar f3 (in): numerical object or None (default: None)      @ivar f3: numerical object or None, default=None (in)
218      @ivar v3 (in): numerical object or None (default: None)      @ivar v3: numerical object or None, default=None (in)
219      @ivar f4 (in): numerical object or None (default: None)      @ivar f4: numerical object or None, default=None (in)
220      @ivar v4 (in): numerical object or None (default: None)      @ivar v4: numerical object or None, default=None (in)
     @ivar out (callable): current value  
221      """      """
222      def __init__(self,debug=False):      def __init__(self,debug=False):
223          Model.__init__(self,debug=debug)          Model.__init__(self,debug=debug)
# Line 219  class LinearCombination(Model): Line 233  class LinearCombination(Model):
233                                v4=None)                                v4=None)
234    
235      def out(self):      def out(self):
236            """
237            returns f0*v0+f1*v1+f2*v2+f3*v3+f4*v4.
238            Link against this method to get the output of this model.
239            """
240          if not self.f0 == None and not self.v0 == None:          if not self.f0 == None and not self.v0 == None:
241              fv0 = self.f0*self.v0              fv0 = self.f0*self.v0
242          else:          else:

Legend:
Removed from v.155  
changed lines
  Added in v.819

  ViewVC Help
Powered by ViewVC 1.1.26