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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 912 - (show annotations)
Wed Dec 6 03:29:49 2006 UTC (11 years, 5 months ago) by gross
File MIME type: text/x-python
File size: 19038 byte(s)
modellib.WriteVTK has been rewritten. Instead of only three data objects scalar,
vector, tensor it takes now up to 20 data objects data0 ... data19 and writes it into a 
single VTK file. There is also the possibilty to define individiual name tags name0,..., name19.
If no name is given the corresponding attribute name of the Link target is used. 
This simplifies the usage and increases efficiency.



1 # $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.modelframe import Model, Link
10 from esys.escript import saveVTK, Data
11 import os
12
13 class Visualization(Model):
14 """
15 Generic visualization Model
16
17 @ivar t: current time (in)
18 @ivar n: frame counter (in)
19 @ivar dt: increment for output (in)
20 @ivar filename: name of the output file (in)
21 """
22
23 def __init__(self, debug=False):
24 """
25 Initialisation of the visualisation model object
26
27 @param debug: Debugging flag
28 """
29 super(Visualization,self).__init__(debug=debug)
30 self.declareParameter(t=0.,
31 n=0,
32 dt=1,
33 filename="movie.mpg")
34
35 def doInitialization(self):
36 """
37 does some kind of initialisation
38 """
39 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):
57 """
58 returns True if the time stamp for writing frame is reached.
59 """
60 out=self.t>=self.__last_t+self.dt
61 if out:
62 self.__last_t+=self.dt
63 self.n+=1
64 return out
65
66 def getFrameCounter(self):
67 """
68 returns a frame counter
69 """
70 return self.n
71
72 def getSafeTimeStepSize(self,dt):
73 """
74 returns new step size
75
76 @param dt: last time step size used
77 @type dt: C{float}
78 @return: time step size that can savely be used
79 @rtype: C{float}
80 """
81 return self.__last_t+self.dt-self.t
82
83 class Movie(Visualization):
84 """
85 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):
93 """
94 Initialisation of the visualisation model object
95
96 @param debug: Debugging flag
97 """
98 super(Movie,self).__init__(debug=debug)
99 self.declareParameter(scalar=None,
100 vector=None,
101 tensor=None)
102
103 def doStepPostprocessing(self, dt):
104 """
105 renders the scene
106 """
107 super(Movie, self).doStepPostprocessing(dt)
108 if self.writeFrame():
109 if self.debug():
110 self.trace("%s-th frame at time %s"%(self.getFrameCounter(),self.t))
111 if isinstance(self.scalar,Data):
112 self.trace("scalar data: (min,max) =(%s,%s)"%(inf(self.scalar),sup(self.scalar)))
113 if isinstance(self.vector,Data):
114 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(Movie):
119 """
120 Shaded contour plots
121 """
122
123 def __init(self, debug=False):
124 """
125 Initialisation
126 """
127 Movie.__init__(self, debug)
128 self.declareParameter(filename="shadePlot.%s.png")
129
130 def doStepPostprocessing(self, dt):
131 """
132 Do any necessary postprocessing operations after a timestep.
133
134 @param dt:
135 """
136 self.counter += 1
137 if self.counter % self.stride == 0:
138 n = self.counter/self.stride
139
140 # look for a vtk xml file of the right name and plot it
141 dataFname = "data.s.%d.xml" % n
142 if not os.path.exists(dataFname):
143 print "Data file doesn't exist! Skipping frame generation."
144
145 else:
146 import pyvisi
147 import pyvisi.renderers.vtk
148
149 scene = pyvisi.renderers.vtk.Scene()
150 plot = pyvisi.renderers.vtk.ContourPlot(scene)
151 plot.setData(fname=dataFname,
152 format='vtk-xml',
153 scalars='escript_scalar_data')
154 scene.save(fname="shadePlot.%05d.png" % n, format="png")
155
156
157 class ArrowPlot(Movie):
158 """
159 Arrow/vector/quiver plots
160 """
161
162 def __init(self, debug=False):
163 """
164 Initialisation
165 """
166 Movie.__init__(self, debug)
167 self.declareParameter(filename="arrowPlot.%s.png")
168
169 def doStepPostprocessing(self, dt):
170 """
171 Do any necessary postprocessing operations after a timestep.
172
173 @param dt:
174 """
175 self.counter += 1
176 if self.counter % self.stride == 0:
177 n = self.counter/self.stride
178
179 # look for a vtk xml file of the right name and plot it
180 dataFname = "data.v.%d.xml" % n
181 if not os.path.exists(dataFname):
182 print "Data file doesn't exist! Skipping frame generation."
183
184 else:
185 import pyvisi
186 import pyvisi.renderers.vtk
187
188 scene = pyvisi.renderers.vtk.Scene()
189 plot = pyvisi.renderers.vtk.ArrowPlot3D(scene)
190 plot.setData(fname=dataFname,
191 format='vtk-xml')
192 scene.save(fname="arrowPlot.%05d.png" % n, format="png")
193
194
195
196 class EllipsoidPlot(Movie):
197 """
198 Ellipsoid plots
199 """
200
201 def __init(self, debug=False):
202 """
203 Initialisation
204 """
205 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:

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26