/[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 819 by gross, Sun Aug 27 23:07:51 2006 UTC revision 906 by gross, Tue Nov 21 05:34:15 2006 UTC
# Line 128  class InterpolateOverBox(ParameterSet): Line 128  class InterpolateOverBox(ParameterSet):
128          if self.domain.getDim() == 2:          if self.domain.getDim() == 2:
129              x0,x1=x[0],x[1]              x0,x1=x[0],x[1]
130              left_bottom_front0,right_top_back0=inf(x0),sup(x0)              left_bottom_front0,right_top_back0=inf(x0),sup(x0)
131              left_bottom_front1,right_top_back1=inf(x[1]),sup(x[1])              left_bottom_front1,right_top_back1=inf(x1),sup(x1)
132              f_right = (x[0] - self.left_bottom_front0)/\              f_right = (x0 - left_bottom_front0)/(right_top_back0 -left_bottom_front0)
          (self.right_top_back0 - self.left_bottom_front0)  
133              f_left = 1. - f_right              f_left = 1. - f_right
134              f_top = (x[1] - self.left_bottom_front1)/\              f_top = (x1 - left_bottom_front1)/(right_top_back1 - left_bottom_front1)
          (self.right_top_back1 - self.left_bottom_front1)  
135              f_bottom = 1. - f_top              f_bottom = 1. - f_top
136              out = f_left * f_bottom * self.value_left_bottom_front \              out = f_left * f_bottom * self.value_left_bottom_front \
137                  + f_right * f_bottom * self.value_right_bottom_front \                  + f_right * f_bottom * self.value_right_bottom_front \
# Line 142  class InterpolateOverBox(ParameterSet): Line 140  class InterpolateOverBox(ParameterSet):
140          else:          else:
141              x0,x1,x2=x[0],x[1],x[2]              x0,x1,x2=x[0],x[1],x[2]
142              left_bottom_front0,right_top_back0=inf(x0),sup(x0)              left_bottom_front0,right_top_back0=inf(x0),sup(x0)
143              left_bottom_front1,right_top_back1=inf(x[1]),sup(x[1])              left_bottom_front1,right_top_back1=inf(x1),sup(x1)
144              left_bottom_front2,right_top_back2=inf(x[2]),sup(x[2])              left_bottom_front2,right_top_back2=inf(x2),sup(x2)
145              f_right = (x[0] - self.left_bottom_front0)/\              f_right = (x0 - left_bottom_front0)/(right_top_back0 - left_bottom_front0)
                     (self.right_top_back0 - self.left_bottom_front0)  
146              f_left = 1. - f_right              f_left = 1. - f_right
147              f_top = (x[1] - self.left_bottom_front1)/\              f_top = (x1 - left_bottom_front1)/(right_top_back1 - left_bottom_front1)
                     (self.right_top_back1 - self.left_bottom_front1)  
148              f_bottom = 1. - f_top              f_bottom = 1. - f_top
149              f_back = (x[2] - self.left_bottom_front1)/\              f_back = (x2 - left_bottom_front1)/(right_top_back2 - left_bottom_front2)
                     (self.right_top_back2 - self.left_bottom_front2)  
150              f_front = 1. - f_back              f_front = 1. - f_back
151              out = f_left * f_bottom * f_front * self.value_left_bottom_front\              out = f_left * f_bottom * f_front * self.value_left_bottom_front\
152                  + f_right * f_bottom * f_front * self.value_right_bottom_front\                  + f_right * f_bottom * f_front * self.value_right_bottom_front\
# Line 204  class InterpolatedTimeProfile(ParameterS Line 199  class InterpolatedTimeProfile(ParameterS
199                        return m*(t-self.nodes[i-1]) + self.values[i-1]                        return m*(t-self.nodes[i-1]) + self.values[i-1]
200                 return self.values[l]                 return self.values[l]
201    
202  class LinearCombination(Model):  class ScalarDistributionFromTags(ParameterSet):
203        """
204        creates a scalar distribution on a domain from tags
205                
206        @ivar domain: domain
207        @type domain: L{esys.escript.Domain}
208        @ivar default: default value
209        @ivar tag0: tag 0
210        @type tag0: C{int}
211        @ivar value0: value for tag 0
212        @type value0: C{float}
213        @ivar tag1: tag 1
214        @type tag1: C{int}
215        @ivar value1: value for tag 1
216        @type value1: C{float}
217        @ivar tag2: tag 2
218        @type tag2: C{int}
219        @ivar value2: value for tag 2
220        @type value2: C{float}
221        @ivar tag3: tag 3
222        @type tag3: C{int}
223        @ivar value3: value for tag 3
224        @type value3: C{float}
225        @ivar tag4: tag 4
226        @type tag4: C{int}
227        @ivar value4: value for tag 4
228        @type value4: C{float}
229        @ivar tag5: tag 5
230        @type tag5: C{int}
231        @ivar value5: value for tag 5
232        @type value5: C{float}
233        @ivar tag6: tag 6
234        @type tag6: C{int}
235        @ivar value6: value for tag 6
236        @type value6: C{float}
237        @ivar tag7: tag 7
238        @type tag7: C{int}
239        @ivar value7: value for tag 7
240        @type value7: C{float}
241        @ivar tag8: tag 8
242        @type tag8: C{int}
243        @ivar value8: value for tag 8
244        @type value8: C{float}
245        @ivar tag9: tag 9
246        @type tag9: C{int}
247        @ivar value9: value for tag 9
248        @type value9: C{float}
249        """
250        def __init__(self,debug=False):
251            super(ScalarDistributionFromTags, self).__init__(debug=debug)
252            self.declareParameter(domain=None,
253                                  default=0.,
254                                  tag0=None,
255                                  value0=0.,
256                                  tag1=None,
257                                  value1=0.,
258                                  tag2=None,
259                                  value2=0.,
260                                  tag3=None,
261                                  value3=0.,
262                                  tag4=None,
263                                  value4=0.,
264                                  tag5=None,
265                                  value5=0.,
266                                  tag6=None,
267                                  value6=0.,
268                                  tag7=None,
269                                  value7=0.,
270                                  tag8=None,
271                                  value8=0.,
272                                  tag9=None,
273                                  value9=0.)
274    
275    
276        def out(self):
277            """
278            returns a L{esys.escript.Data} object
279            Link against this method to get the output of this model.
280            """
281            d=Scalar(self.default,Function(self.domain))
282            if not self.tag0 == None: d.setTaggedValue(self.tag0,self.value0)
283            if not self.tag1 == None: d.setTaggedValue(self.tag1,self.value1)
284            if not self.tag2 == None: d.setTaggedValue(self.tag2,self.value2)
285            if not self.tag3 == None: d.setTaggedValue(self.tag3,self.value3)
286            if not self.tag4 == None: d.setTaggedValue(self.tag4,self.value4)
287            if not self.tag5 == None: d.setTaggedValue(self.tag5,self.value5)
288            if not self.tag6 == None: d.setTaggedValue(self.tag6,self.value6)
289            if not self.tag7 == None: d.setTaggedValue(self.tag7,self.value7)
290            if not self.tag8 == None: d.setTaggedValue(self.tag8,self.value8)
291            if not self.tag9 == None: d.setTaggedValue(self.tag9,self.value9)
292            return d
293    
294    class LinearCombination(ParameterSet):
295      """      """
296      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
297                            
# Line 274  class LinearCombination(Model): Line 361  class LinearCombination(Model):
361              out += fv3              out += fv3
362          return out          return out
363    
364    class MergeConstraints(ParameterSet):
365        """
366        Returns a linear combination of the f0*v0+f1*v1+f2*v2+f3*v3+f4*v4
367        """
368        def __init__(self,debug=False):
369            super(MergeConstraints, self).__init__(debug=debug)
370            self.declareParameter(location_of_constraint0=None, \
371                                  value_of_constraint0=None, \
372                                  location_of_constraint1=None, \
373                                  value_of_constraint1=None, \
374                                  location_of_constraint2=None, \
375                                  value_of_constraint2=None, \
376                                  location_of_constraint3=None, \
377                                  value_of_constraint3=None, \
378                                  location_of_constraint4=None, \
379                                  value_of_constraint4=None)
380        def location_of_constraint(self):
381              """
382              return the values used to constrain a solution
383    
384              @return: the mask marking the locations of the constraints
385              @rtype: L{escript.Scalar}
386              """
387              out_loc=0
388              if not self.location_of_constraint0 == None:
389                   out_loc=wherePositive(out_loc+wherePositive(self.location_of_constraint0))
390              if not self.location_of_constraint1 == None:
391                   out_loc=wherePositive(out_loc+wherePositive(self.location_of_constraint1))
392              if not self.location_of_constraint2 == None:
393                   out_loc=wherePositive(out_loc+wherePositive(self.location_of_constraint2))
394              if not self.location_of_constraint3 == None:
395                   out_loc=wherePositive(out_loc+wherePositive(self.location_of_constraint3))
396              return out_loc
397    
398        def value_of_constraint(self):
399              """
400              return the values used to constrain a solution
401    
402              @return: values to be used at the locations of the constraints. If
403                      L{value} is not given C{None} is rerturned.
404              @rtype: L{escript.Scalar}
405              """
406              out_loc=0
407              out=0
408              if not self.location_of_constraint0 == None:
409                   tmp=wherePositive(self.location_of_constraint0)
410                   out=out*(1.-tmp)+self.value_of_constraint0*tmp
411                   out_loc=wherePositive(out_loc+tmp)
412              if not self.location_of_constraint1 == None:
413                   tmp=wherePositive(self.location_of_constraint1)
414                   out=out*(1.-tmp)+self.value_of_constraint1*tmp
415                   out_loc=wherePositive(out_loc+tmp)
416              if not self.location_of_constraint2 == None:
417                   tmp=wherePositive(self.location_of_constraint2)
418                   out=out*(1.-tmp)+self.value_of_constraint2*tmp
419                   out_loc=wherePositive(out_loc+tmp)
420              if not self.location_of_constraint3 == None:
421                   tmp=wherePositive(self.location_of_constraint3)
422                   out=out*(1.-tmp)+self.value_of_constraint3*tmp
423                   out_loc=wherePositive(out_loc+tmp)
424              return out
425  # vim: expandtab shiftwidth=4:  # vim: expandtab shiftwidth=4:

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

  ViewVC Help
Powered by ViewVC 1.1.26