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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 816 - (hide annotations)
Thu Aug 24 00:03:01 2006 UTC (12 years, 8 months ago) by gross
Original Path: trunk/modellib/py_src/input.py
File MIME type: text/x-python
File size: 10077 byte(s)
drucker prager in modellib (it does not work yet)
1 jgs 127 # $Id$
2 elspeth 628
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 jgs 149 from esys.escript import *
10     from esys.escript.modelframe import Model,ParameterSet
11 jgs 147 from math import log
12 jgs 127
13 jgs 147 class Sequencer(Model):
14 jgs 148 """
15 gross 814 Runs through time until t_end is reached.
16 gross 720
17 gross 814 @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 jgs 148 """
25 gross 423 def __init__(self,debug=False):
26 jgs 148 """
27 jgs 149 """
28 gross 423 super(Sequencer,self).__init__(debug=debug)
29     self.declareParameter(t=0.,
30     t_end=1.,
31     dt_max=Model.UNDEF_DT)
32 jgs 127
33 jgs 147 def doInitialization(self):
34 jgs 148 """
35 jgs 149 initialize time integration
36 jgs 148 """
37     self.__t_old = self.t
38 jgs 147
39 jgs 148 def doStepPreprocessing(self, dt):
40     self.t = self.__t_old+dt
41 jgs 147
42 jgs 148 def doStepPostprocessing(self, dt):
43     self.__t_old = self.t
44 jgs 147
45     def finalize(self):
46 jgs 148 """
47 gross 814 returns true when L{t} has reached L{t_end}
48 jgs 148 """
49     return self.t >= self.t_end
50 jgs 147
51 jgs 148 def getSafeTimeStepSize(self, dt):
52     """
53 gross 814 returns L{dt_max}
54 jgs 148 """
55     return self.dt_max
56 jgs 147
57 jgs 148 class GaussianProfile(ParameterSet):
58     """
59 jgs 149 Generates a Gaussian profile at center x_c, width width and height A
60 jgs 148 over a domain
61 jgs 127
62 gross 814 @ivar domain: domain
63     @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.)
65     @ivar width: (in) width of the profile (default 0.1)
66     @ivar r: (in) radius of the circle (default = 0)
67 jgs 127
68 jgs 148 In the case that the spatial dimension is two, The third component of
69 gross 814 x_c is dropped.
70 jgs 127 """
71     def __init__(self,debug=False):
72 jgs 148 ParameterSet.__init__(self,debug=debug)
73 jgs 147 self.declareParameter(domain=None,
74     x_c=numarray.zeros([3]),
75     A=1.,
76     width=0.1,
77     r=0)
78 jgs 127
79     def out(self):
80 jgs 149 """
81     Generate the Gaussian profile
82 gross 814
83     Link against this method to get the output of this model.
84 jgs 149 """
85 jgs 148 x = self.domain.getX()
86     dim = self.domain.getDim()
87     l = length(x-self.x_c[:dim])
88 gross 323 m = whereNegative(l-self.r)
89 jgs 148
90 jgs 127 return (m+(1.-m)*exp(-log(2.)*(l/self.width)**2))*self.A
91    
92 jgs 148 class InterpolateOverBox(ParameterSet):
93 jgs 147 """
94 jgs 148 Returns values at each time. The values are defined through given values
95 gross 814 at time node. For two dimensional domains back values are ignored.
96 jgs 147
97 gross 814 @ivar domain: domain
98     @ivar left_bottom_front: (in) coordinates of left, bottom, front corner
99 jgs 149 of the box
100 gross 814 @ivar right_top_back: (in) coordinates of the right, top, back corner
101 jgs 149 of the box
102 gross 814 @ivar value_left_bottom_front: (in) value at left,bottom,front corner
103     @ivar value_right_bottom_front: (in) value at right, bottom, front corner
104     @ivar value_left_top_front: (in) value at left,top,front corner
105     @ivar value_right_top_front: (in) value at right,top,front corner
106     @ivar value_left_bottom_back: (in) value at left,bottom,back corner
107     @ivar value_right_bottom_back: (in) value at right,bottom,back corner
108     @ivar value_left_top_back: (in) value at left,top,back corner
109     @ivar value_right_top_back: (in) value at right,top,back corner
110 jgs 147 """
111    
112 jgs 148 def __init__(self, debug=False):
113     ParameterSet.__init__(self, debug=debug)
114 jgs 147 self.declareParameter(domain=None,
115     left_bottom_front=[0.,0.,0.],
116     right_top_back=[1.,1.,1.],
117     value_left_bottom_front=0.,
118     value_right_bottom_front=0.,
119     value_left_top_front=0.,
120     value_right_top_front=0.,
121     value_left_bottom_back=0.,
122     value_right_bottom_back=0.,
123     value_left_top_back=0.,
124     value_right_top_back=0.)
125    
126    
127     def out(self):
128 gross 814 """
129     values at domain locations by bilinear interpolation of the given values.
130    
131     Link against this method to get the output of this model.
132     """
133 jgs 148 x = self.domain.getX()
134     if self.domain.getDim() == 2:
135     f_right = (x[0] - self.left_bottom_front[0])/\
136     (self.right_top_back[0] - self.left_bottom_front[0])
137     f_left = 1. - f_right
138     f_top = (x[1] - self.left_bottom_front[1])/\
139     (self.right_top_back[1] - self.left_bottom_front[1])
140     f_bottom = 1. - f_top
141 gross 816 out = f_left * f_bottom * self.value_left_bottom_front \
142     + f_right * f_bottom * self.value_right_bottom_front \
143     + f_left * f_top * self.value_left_top_front \
144     + f_right * f_top * self.value_right_top_front
145 jgs 147 else:
146 jgs 148 f_right = (x[0] - self.left_bottom_front[0])/\
147     (self.right_top_back[0] - self.left_bottom_front[0])
148     f_left = 1. - f_right
149     f_top = (x[1] - self.left_bottom_front[1])/\
150     (self.right_top_back[1] - self.left_bottom_front[1])
151     f_bottom = 1. - f_top
152     f_back = (x[2] - self.left_bottom_front[1])/\
153     (self.right_top_back[2] - self.left_bottom_front[2])
154     f_front = 1. - f_back
155 gross 816 out = f_left * f_bottom * f_front * self.value_left_bottom_front\
156     + f_right * f_bottom * f_front * self.value_right_bottom_front\
157     + f_left * f_top * f_front * self.value_left_top_front\
158     + f_right * f_top * f_front * self.value_right_top_front\
159     + f_left * f_bottom * f_back * self.value_left_bottom_back\
160     + f_right * f_bottom * f_back * self.value_right_bottom_back\
161     + f_left * f_top * f_back * self.value_left_top_back\
162     + f_right * f_top * f_back * self.value_right_top_back
163 jgs 147 return out
164    
165    
166 jgs 148 class InterpolatedTimeProfile(ParameterSet):
167     """
168    
169     Returns values at each time. The values are defined through given
170     values at time node.
171 jgs 147
172 jgs 148 value[i] defines the value at time nodes[i]. Between nodes linear
173     interpolation is used.
174    
175     For time t<nodes[0], value[0] is used and for t>nodes[l], values[l]
176     is used where l=len(nodes)-1.
177 jgs 147
178 gross 814 @ivar t: (in) current time
179     @ivar node: (in) list of time nodes
180     @ivar values: (in) list of values at time nodes
181 jgs 148 """
182 jgs 127
183     def __init__(self,debug=False):
184 jgs 148 ParameterSet.__init__(self,debug=debug)
185 jgs 147 self.declareParameter(t=0., \
186     nodes=[0.,1.],\
187     values=[1.,1.])
188     def out(self):
189 gross 814 """
190     current value
191    
192     Link against this method to get the output of this model.
193     """
194 jgs 148 l = len(self.nodes) - 1
195     t = self.t
196     if t <= self.nodes[0]:
197     return self.values[0]
198 jgs 147 else:
199     for i in range(1,l):
200 jgs 148 if t < self.nodes[i]:
201     m = (self.values[i-1] - self.values[i])/\
202     (self.nodes[i-1] - self.nodes[i])
203     return m*(t-self.nodes[i-1]) + self.values[i-1]
204 jgs 147 return self.values[l]
205 jgs 127
206 jgs 147 class LinearCombination(Model):
207 jgs 148 """
208     Returns a linear combination of the f0*v0+f1*v1+f2*v2+f3*v3+f4*v4
209 jgs 147
210 gross 814 @ivar f0: (in) numerical object or None, default=None (in)
211     @ivar v0: (in) numerical object or None, default=None (in)
212     @ivar f1: (in) numerical object or None, default=None (in)
213     @ivar v1: (in) numerical object or None, default=None (in)
214     @ivar f2: (in) numerical object or None, default=None (in)
215     @ivar v2: (in) numerical object or None, default=None (in)
216     @ivar f3: (in) numerical object or None, default=None (in)
217     @ivar v3: (in) numerical object or None, default=None (in)
218     @ivar f4: (in) numerical object or None, default=None (in)
219     @ivar v4: (in) numerical object or None, default=None (in)
220 jgs 148 """
221     def __init__(self,debug=False):
222     Model.__init__(self,debug=debug)
223     self.declareParameter(f0=None, \
224     v0=None, \
225     f1=None, \
226     v1=None, \
227     f2=None, \
228     v2=None, \
229     f3=None, \
230     v3=None, \
231     f4=None, \
232     v4=None)
233 jgs 147
234 jgs 148 def out(self):
235 gross 814 """
236     returns f0*v0+f1*v1+f2*v2+f3*v3+f4*v4.
237     Link against this method to get the output of this model.
238     """
239 jgs 148 if not self.f0 == None and not self.v0 == None:
240     fv0 = self.f0*self.v0
241     else:
242     fv0 = None
243 jgs 147
244 jgs 148 if not self.f1 == None and not self.v1 == None:
245     fv1 = self.f1*self.v1
246     else:
247     fv1 = None
248 jgs 147
249 jgs 148 if not self.f2 == None and not self.v2 == None:
250     fv2 = f2*v2
251     else:
252     fv2 = None
253 jgs 147
254 jgs 148 if not self.f3 == None and not self.v3 == None:
255     fv3 = self.f3*self.v3
256     else:
257     fv3 = None
258 jgs 147
259 jgs 148 if not self.f4 == None and not self.v4 == None:
260     fv4 = self.f4*self.v4
261     else:
262     fv4 = None
263 jgs 147
264 jgs 148 if fv0 == None:
265     out = 0.
266     else:
267     out = fv0
268     if not fv1 == None:
269     out += fv1
270     if not fv2 == None:
271     out += fv2
272     if not fv3 == None:
273     out += fv3
274     return out
275 jgs 147
276 jgs 148 # 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