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

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

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

revision 911 by gross, Tue Dec 5 23:39:39 2006 UTC revision 912 by gross, Wed Dec 6 03:29:49 2006 UTC
# Line 6  __copyright__="""  Copyright (c) 2006 by Line 6  __copyright__="""  Copyright (c) 2006 by
6  __license__="""Licensed under the Open Software License version 3.0  __license__="""Licensed under the Open Software License version 3.0
7               http://www.opensource.org/licenses/osl-3.0.php"""               http://www.opensource.org/licenses/osl-3.0.php"""
8    
9  from esys.escript.modelframe import Model  from esys.escript.modelframe import Model, Link
10  from esys.escript import saveVTK, Data  from esys.escript import saveVTK, Data
11  import os  import os
12    
13  class Visualization(Model):  class Visualization(Model):
14      """      """
15      Generic visualization of scalar, vector and tensorial data      Generic visualization Model
     (not implemeted yet)  
16    
17      @ivar t: current time (in)      @ivar t: current time (in)
18      @ivar n: frame counter (in)      @ivar n: frame counter (in)
     @ivar scalar: scalar data set (in)  
     @ivar vector: vector data set (in)  
     @ivar tensor: tensor data set (in)  
19      @ivar dt: increment for output  (in)      @ivar dt: increment for output  (in)
20      @ivar filename: name of the output file (in)      @ivar filename: name of the output file (in)
21      """      """
# Line 33  class Visualization(Model): Line 29  class Visualization(Model):
29          super(Visualization,self).__init__(debug=debug)          super(Visualization,self).__init__(debug=debug)
30          self.declareParameter(t=0.,          self.declareParameter(t=0.,
31                                n=0,                                n=0,
                               scalar=None,  
                               vector=None,  
                               tensor=None,  
32                                dt=1,                                dt=1,
33                                filename="movie.mpg")                                filename="movie.mpg")
34    
# Line 44  class Visualization(Model): Line 37  class Visualization(Model):
37         does some kind of initialisation         does some kind of initialisation
38         """         """
39         self.__last_t=self.t         self.__last_t=self.t
40           fnc=self.filename.split('.')
41           if len(fnc)==0:
42               self.__frame_filename="data.%s.xml"
43           else:
44               n=fnc[0]
45               for i in range(1,len(fnc)-1):
46                  n+="."+fnc[i]
47               if len(fnc)==1:
48                  self.__frame_filename=n+".%s"
49               else:
50                  self.__frame_filename=n+".%s."+fnc[-1]
51           self.trace("output filename is %s."%self.__frame_filename)
52    
53        def getFrameFileName(self):
54             return self.__frame_filename%self.getFrameCounter()
55    
56      def writeFrame(self):      def writeFrame(self):
57         """         """
# Line 72  class Visualization(Model): Line 80  class Visualization(Model):
80         """         """
81         return self.__last_t+self.dt-self.t         return self.__last_t+self.dt-self.t
82    
83      def doStepPostprocessing(self, dt):  class Movie(Visualization):
         """  
         renders the scene  
   
         @note: to be overwritten  
         """  
         if self.writeFrame():  
             if self.debug():  
                self.trace("%s-th frame at time %s"%(self.getFrameCounter(),self.t))  
                if isinstance(self.scalar,Data):  
                   self.trace("scalar data: (min,max) =(%s,%s)"%(inf(self.scalar),sup(self.scalar)))  
                if isinstance(self.vector,Data):  
                   self.trace("vector data: (min,max) =(%s,%s)"%(inf(self.vector),sup(self.vector)))  
                if isinstance(self.tensor,Data):  
                   self.trace("tensor data: (min,max) =(%s,%s)"%(inf(self.tensor),sup(self.tensor)))  
   
 class WriteVTK(Visualization):  
84      """      """
85      Writes data into VTK files for further processing.      Generic visualization of scalar, vector and/or tensorial data
86    
87        @ivar scalar: scalar data set (in)
88        @ivar vector: vector data set (in)
89        @ivar tensor: tensor data set (in)
90      """      """
91    
92      def __init__(self, debug=False):      def __init__(self, debug=False):
93          """          """
94          Initialisation of the WriteVTK object          Initialisation of the visualisation model object
95    
96          @param debug: Debugging flag          @param debug: Debugging flag
         @type debug: C{bool}  
97          """          """
98          super(WriteVTK,self).__init__(debug=debug)          super(Movie,self).__init__(debug=debug)
99            self.declareParameter(scalar=None,
100      def doInitialization(self):                                vector=None,
101          """                                tensor=None)
         does some kind of initialisation  
         """  
         super(WriteVTK,self).doInitialization()  
         fnc=self.filename.split('.')  
         if len(fnc)==0:  
            self.__filename="data.%s.xml"  
         else:  
            n=fnc[0]  
            for i in range(1,len(fnc)-1):  
               n+="."+fnc[i]  
            if len(fnc)==1:  
               self.__filename=n+".%s"  
            else:  
               self.__filename=n+".%s."+fnc[-1]  
         self.trace("output filename is %s."%self.__filename)  
         
     def doInitialPostprocessing(self):  
         kwargs={}  
         if isinstance(self.scalar,Data): kwargs["scalar"] = self.scalar  
         if isinstance(self.vector,Data): kwargs["vector"] = self.vector  
         if isinstance(self.tensor,Data): kwargs["tensor"] = self.tensor  
         saveVTK(self.__filename%self.getFrameCounter(),**kwargs)  
         self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.__filename%self.getFrameCounter()))  
102    
103      def doStepPostprocessing(self, dt):      def doStepPostprocessing(self, dt):
104          """          """
105          writes          renders the scene
         do any necessary postprocessing operations after a timestep.  
   
         @param dt: current time increment  
         @type dt: C{float}  
106          """          """
107            super(Movie, self).doStepPostprocessing(dt)
108          if self.writeFrame():          if self.writeFrame():
109              kwargs={}              if self.debug():
110              if isinstance(self.scalar,Data): kwargs["scalar"] = self.scalar                 self.trace("%s-th frame at time %s"%(self.getFrameCounter(),self.t))
111              if isinstance(self.vector,Data): kwargs["vector"] = self.vector                 if isinstance(self.scalar,Data):
112              if isinstance(self.tensor,Data): kwargs["tensor"] = self.tensor                    self.trace("scalar data: (min,max) =(%s,%s)"%(inf(self.scalar),sup(self.scalar)))
113              saveVTK(self.__filename%self.getFrameCounter(),**kwargs)                 if isinstance(self.vector,Data):
114              self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.__filename%self.getFrameCounter()))                    self.trace("vector data: (min,max) =(%s,%s)"%(inf(self.vector),sup(self.vector)))
115                   if isinstance(self.tensor,Data):
116                      self.trace("tensor data: (min,max) =(%s,%s)"%(inf(self.tensor),sup(self.tensor)))
117    
118  class ShadePlot(Visualization):  class ShadePlot(Movie):
119      """      """
120      Shaded contour plots      Shaded contour plots
121      """      """
# Line 153  class ShadePlot(Visualization): Line 124  class ShadePlot(Visualization):
124          """          """
125          Initialisation          Initialisation
126          """          """
127          Visualization.__init__(self, debug)          Movie.__init__(self, debug)
128          self.declareParameter(filename="shadePlot.%s.png")          self.declareParameter(filename="shadePlot.%s.png")
129    
130      def doStepPostprocessing(self, dt):      def doStepPostprocessing(self, dt):
# Line 183  class ShadePlot(Visualization): Line 154  class ShadePlot(Visualization):
154                  scene.save(fname="shadePlot.%05d.png" % n, format="png")                  scene.save(fname="shadePlot.%05d.png" % n, format="png")
155    
156    
157  class ArrowPlot(Visualization):  class ArrowPlot(Movie):
158      """      """
159      Arrow/vector/quiver plots      Arrow/vector/quiver plots
160      """      """
# Line 192  class ArrowPlot(Visualization): Line 163  class ArrowPlot(Visualization):
163          """          """
164          Initialisation          Initialisation
165          """          """
166          Visualization.__init__(self, debug)          Movie.__init__(self, debug)
167          self.declareParameter(filename="arrowPlot.%s.png")          self.declareParameter(filename="arrowPlot.%s.png")
168    
169      def doStepPostprocessing(self, dt):      def doStepPostprocessing(self, dt):
# Line 222  class ArrowPlot(Visualization): Line 193  class ArrowPlot(Visualization):
193    
194    
195    
196  class EllipsoidPlot(Visualization):  class EllipsoidPlot(Movie):
197      """      """
198      Ellipsoid plots      Ellipsoid plots
199      """      """
# Line 231  class EllipsoidPlot(Visualization): Line 202  class EllipsoidPlot(Visualization):
202          """          """
203          Initialisation          Initialisation
204          """          """
205          Visualization.__init__(self, debug)          Movie.__init__(self, debug)
206    
207    
208    class WriteVTK(Visualization):
209        """
210        Writes data into a VTK file.
211    
212        The Model can handel up to 20 data sets that are written into a single file tagged with the given name. If no name is given and
213        the data are defined by a L{Link} the name of the target attribute is used as a tag.
214    
215        @ivar data0: data set 0 to be written
216        @type data0: L{escript.Data}
217        @ivar name0: name tag for data set 0
218        @type name0: C{str} or C{None}
219        @ivar data1: data set 1 to be written
220        @type data1: L{escript.Data}
221        @ivar name1: name tag for data set 1
222        @type name1: C{str} or C{None}
223        @ivar data2: data set 2 to be written
224        @type data2: L{escript.Data}
225        @ivar name2: name tag for data set 2
226        @type name2: C{str} or C{None}
227        @ivar data3: data set 3 to be written
228        @type data3: L{escript.Data}
229        @ivar name3: name tag for data set 3
230        @type name3: C{str} or C{None}
231        @ivar data4: data set 4 to be written
232        @type data4: L{escript.Data}
233        @ivar name4: name tag for data set 4
234        @type name4: C{str} or C{None}
235        @ivar data5: data set 5 to be written
236        @type data5: L{escript.Data}
237        @ivar name5: name tag for data set 5
238        @type name5: C{str} or C{None}
239        @ivar data6: data set 6 to be written
240        @type data6: L{escript.Data}
241        @ivar name6: name tag for data set 6
242        @type name6: C{str} or C{None}
243        @type data7: L{escript.Data}
244        @ivar name7: name tag for data set 7
245        @type name7: C{str} or C{None}
246        @ivar data8: data set 8 to be written
247        @type data8: L{escript.Data}
248        @ivar name8: name tag for data set 8
249        @type name8: C{str} or C{None}
250        @ivar data9: data set 9 to be written
251        @type data9: L{escript.Data}
252        @ivar name9: name tag for data set 9
253        @type name9: C{str} or C{None}
254        @ivar data10: data set 10 to be written
255        @type data10: L{escript.Data}
256        @ivar name10: name tag for data set 10
257        @type name10: C{str} or C{None}
258        @ivar data11: data set 11 to be written
259        @type data11: L{escript.Data}
260        @ivar name11: name tag for data set 11
261        @type name11: C{str} or C{None}
262        @ivar data12: data set 12 to be written
263        @type data12: L{escript.Data}
264        @ivar name12: name tag for data set 12
265        @type name12: C{str} or C{None}
266        @ivar data13: data set 13 to be written
267        @type data13: L{escript.Data}
268        @ivar name13: name tag for data set 13
269        @type name13: C{str} or C{None}
270        @ivar data14: data set 14 to be written
271        @type data14: L{escript.Data}
272        @ivar name14: name tag for data set 14
273        @type name14: C{str} or C{None}
274        @ivar data15: data set 15 to be written
275        @type data15: L{escript.Data}
276        @ivar name15: name tag for data set 15
277        @type name15: C{str} or C{None}
278        @ivar data16: data set 16 to be written
279        @type data16: L{escript.Data}
280        @ivar name16: name tag for data set 16
281        @type name16: C{str} or C{None}
282        @ivar data17: data set 17 to be written
283        @type data17: L{escript.Data}
284        @ivar name17: name tag for data set 17
285        @type name17: C{str} or C{None}
286        @ivar data18: data set 18 to be written
287        @type data18: L{escript.Data}
288        @ivar name18: name tag for data set 18
289        @type name18: C{str} or C{None}
290        @ivar data19: data set 19 to be written
291        @type data19: L{escript.Data}
292        @ivar name19: name tag for data set 19
293        @type name19: C{str} or C{None}
294        """
295        def __init__(self, debug=False):
296            """
297            Initialisation of the WriteVTK object
298    
299            @param debug: debugging flag
300            @type debug: C{bool}
301            """
302            super(WriteVTK,self).__init__(debug=debug)
303            self.declareParameter(data0=None,name0=None,
304                                  data1=None,name1=None,
305                                  data2=None,name2=None,
306                                  data3=None,name3=None,
307                                  data4=None,name4=None,
308                                  data5=None,name5=None,
309                                  data6=None,name6=None,
310                                  data7=None,name7=None,
311                                  data8=None,name8=None,
312                                  data9=None,name9=None,
313                                  data10=None,name10=None,
314                                  data11=None,name11=None,
315                                  data12=None,name12=None,
316                                  data13=None,name13=None,
317                                  data14=None,name14=None,
318                                  data15=None,name15=None,
319                                  data16=None,name16=None,
320                                  data17=None,name17=None,
321                                  data18=None,name18=None,
322                                  data19=None,name19=None)
323        def collectData(self):
324            kwargs={}
325            if not self.data0 == None:
326                if self.name0 == None:
327                   if isinstance(self.getAttributeObject("data0"),Link):
328                      kwargs[self.getAttributeObject("data0").getAttributeName()]=self.data0
329                   else:
330                      kwargs["data0"]=self.data0
331                else:
332                   kwargs[str(self.name0)]=self.data0
333    
334    
335            if not self.data1 == None:
336                if self.name1 == None:
337                   if isinstance(self.getAttributeObject("data1"),Link):
338                      kwargs[self.getAttributeObject("data1").getAttributeName()]=self.data1
339                   else:
340                      kwargs["data1"]=self.data1
341                else:
342                   kwargs[str(self.name1)]=self.data1
343    
344    
345            if not self.data2 == None:
346                if self.name2 == None:
347                   if isinstance(self.getAttributeObject("data2"),Link):
348                      kwargs[self.getAttributeObject("data2").getAttributeName()]=self.data2
349                   else:
350                      kwargs["data2"]=self.data2
351                else:
352                   kwargs[str(self.name2)]=self.data2
353    
354    
355            if not self.data3 == None:
356                if self.name3 == None:
357                   if isinstance(self.getAttributeObject("data3"),Link):
358                      kwargs[self.getAttributeObject("data3").getAttributeName()]=self.data3
359                   else:
360                      kwargs["data3"]=self.data3
361                else:
362                   kwargs[str(self.name3)]=self.data3
363    
364    
365            if not self.data4 == None:
366                if self.name4 == None:
367                   if isinstance(self.getAttributeObject("data4"),Link):
368                      kwargs[self.getAttributeObject("data4").getAttributeName()]=self.data4
369                   else:
370                      kwargs["data4"]=self.data4
371                else:
372                   kwargs[str(self.name4)]=self.data4
373    
374    
375            if not self.data5 == None:
376                if self.name5 == None:
377                   if isinstance(self.getAttributeObject("data5"),Link):
378                      kwargs[self.getAttributeObject("data5").getAttributeName()]=self.data5
379                   else:
380                      kwargs["data5"]=self.data5
381                else:
382                   kwargs[str(self.name5)]=self.data5
383    
384    
385            if not self.data6 == None:
386                if self.name6 == None:
387                   if isinstance(self.getAttributeObject("data6"),Link):
388                      kwargs[self.getAttributeObject("data6").getAttributeName()]=self.data6
389                   else:
390                      kwargs["data6"]=self.data6
391                else:
392                   kwargs[str(self.name6)]=self.data6
393    
394    
395            if not self.data7 == None:
396                if self.name7 == None:
397                   if isinstance(self.getAttributeObject("data7"),Link):
398                      kwargs[self.getAttributeObject("data7").getAttributeName()]=self.data7
399                   else:
400                      kwargs["data7"]=self.data7
401                else:
402                   kwargs[str(self.name7)]=self.data7
403    
404    
405            if not self.data8 == None:
406                if self.name8 == None:
407                   if isinstance(self.getAttributeObject("data8"),Link):
408                      kwargs[self.getAttributeObject("data8").getAttributeName()]=self.data8
409                   else:
410                      kwargs["data8"]=self.data8
411                else:
412                   kwargs[str(self.name8)]=self.data8
413    
414    
415            if not self.data9 == None:
416                if self.name9 == None:
417                   if isinstance(self.getAttributeObject("data9"),Link):
418                      kwargs[self.getAttributeObject("data9").getAttributeName()]=self.data9
419                   else:
420                      kwargs["data9"]=self.data9
421                else:
422                   kwargs[str(self.name9)]=self.data9
423    
424    
425            if not self.data10 == None:
426                if self.name10 == None:
427                   if isinstance(self.getAttributeObject("data10"),Link):
428                      kwargs[self.getAttributeObject("data10").getAttributeName()]=self.data10
429                   else:
430                      kwargs["data10"]=self.data10
431                else:
432                   kwargs[str(self.name10)]=self.data10
433    
434    
435            if not self.data11 == None:
436                if self.name11 == None:
437                   if isinstance(self.getAttributeObject("data11"),Link):
438                      kwargs[self.getAttributeObject("data11").getAttributeName()]=self.data11
439                   else:
440                      kwargs["data11"]=self.data11
441                else:
442                   kwargs[str(self.name11)]=self.data11
443    
444    
445            if not self.data12 == None:
446                if self.name12 == None:
447                   if isinstance(self.getAttributeObject("data12"),Link):
448                      kwargs[self.getAttributeObject("data12").getAttributeName()]=self.data12
449                   else:
450                      kwargs["data12"]=self.data12
451                else:
452                   kwargs[str(self.name12)]=self.data12
453    
454    
455            if not self.data13 == None:
456                if self.name13 == None:
457                   if isinstance(self.getAttributeObject("data13"),Link):
458                      kwargs[self.getAttributeObject("data13").getAttributeName()]=self.data13
459                   else:
460                      kwargs["data13"]=self.data13
461                else:
462                   kwargs[str(self.name13)]=self.data13
463    
464    
465            if not self.data14 == None:
466                if self.name14 == None:
467                   if isinstance(self.getAttributeObject("data14"),Link):
468                      kwargs[self.getAttributeObject("data14").getAttributeName()]=self.data14
469                   else:
470                      kwargs["data14"]=self.data14
471                else:
472                   kwargs[str(self.name14)]=self.data14
473    
474    
475            if not self.data15 == None:
476                if self.name15 == None:
477                   if isinstance(self.getAttributeObject("data15"),Link):
478                      kwargs[self.getAttributeObject("data15").getAttributeName()]=self.data15
479                   else:
480                      kwargs["data15"]=self.data15
481                else:
482                   kwargs[str(self.name15)]=self.data15
483    
484    
485            if not self.data16 == None:
486                if self.name16 == None:
487                   if isinstance(self.getAttributeObject("data16"),Link):
488                      kwargs[self.getAttributeObject("data16").getAttributeName()]=self.data16
489                   else:
490                      kwargs["data16"]=self.data16
491                else:
492                   kwargs[str(self.name16)]=self.data16
493    
494    
495            if not self.data17 == None:
496                if self.name17 == None:
497                   if isinstance(self.getAttributeObject("data17"),Link):
498                      kwargs[self.getAttributeObject("data17").getAttributeName()]=self.data17
499                   else:
500                      kwargs["data17"]=self.data17
501                else:
502                   kwargs[str(self.name17)]=self.data17
503    
504    
505            if not self.data18 == None:
506                if self.name18 == None:
507                   if isinstance(self.getAttributeObject("data18"),Link):
508                      kwargs[self.getAttributeObject("data18").getAttributeName()]=self.data18
509                   else:
510                      kwargs["data18"]=self.data18
511                else:
512                   kwargs[str(self.name18)]=self.data18
513    
514    
515            if not self.data19 == None:
516                if self.name19 == None:
517                   if isinstance(self.getAttributeObject("data19"),Link):
518                      kwargs[self.getAttributeObject("data19").getAttributeName()]=self.data19
519                   else:
520                      kwargs["data19"]=self.data19
521                else:
522                   kwargs[str(self.name19)]=self.data19
523            return kwargs
524    
525        def doInitialPostprocessing(self):
526            """
527            writes vtk file at the end of initial iteration
528            """
529            super(WriteVTK,self).doInitialPostprocessing()
530            kwargs=self.collectData()
531            if len(kwargs)>0:
532               saveVTK(self.getFrameFileName(),**kwargs)
533               self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.getFrameFileName()))
534    
535        def doStepPostprocessing(self, dt):
536            """
537            writes vtk file at the end of time iteration
538            """
539            super(WriteVTK,self).doStepPostprocessing(dt)
540            if self.writeFrame():
541                kwargs=self.collectData()
542                if len(kwargs)>0:
543                   saveVTK(self.getFrameFileName(),**kwargs)
544                   self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.getFrameFileName()))
545    
546  # vim: expandtab shiftwidth=4:  # vim: expandtab shiftwidth=4:

Legend:
Removed from v.911  
changed lines
  Added in v.912

  ViewVC Help
Powered by ViewVC 1.1.26