/[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 6939 - (show annotations)
Mon Jan 20 03:37:18 2020 UTC (6 months, 2 weeks ago) by uqaeller
File MIME type: text/x-python
File size: 16139 byte(s)
Updated the copyright header.


1
2 ##############################################################################
3 #
4 # Copyright (c) 2003-2020 by The University of Queensland
5 # http://www.uq.edu.au
6 #
7 # Primary Business: Queensland, Australia
8 # Licensed under the Apache License, version 2.0
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 # Development 2012-2013 by School of Earth Sciences
13 # Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 # Development from 2019 by School of Earth and Environmental Sciences
15 #
16 ##############################################################################
17
18 from __future__ import print_function, division
19
20 __copyright__="""Copyright (c) 2003-2020 by The University of Queensland
21 http://www.uq.edu.au
22 Primary Business: Queensland, Australia"""
23 __license__="""Licensed under the Apache License, version 2.0
24 http://www.apache.org/licenses/LICENSE-2.0"""
25 __url__="https://launchpad.net/escript-finley"
26
27 from esys.escript.modelframe import Model, Link
28 from esys.escript import Data
29 from esys.weipa import saveVTK
30 import os
31
32 class Visualization(Model):
33 """
34 Generic visualization Model
35
36 :ivar t: current time (in)
37 :ivar n: frame counter (in)
38 :ivar dt: increment for output (in)
39 :ivar filename: name of the output file (in)
40 """
41
42 def __init__(self, **kwargs):
43 """
44 Initialisation of the visualisation model object
45
46 :keyword debug: Debugging flag
47 """
48 super(Visualization,self).__init__(**kwargs)
49 self.declareParameter(t=0.,
50 n=0,
51 dt=1,
52 filename="movie.mpg")
53
54 def doInitialization(self):
55 """
56 does some kind of initialisation
57 """
58 self.__last_t=self.t
59 fnc=self.filename.split('.')
60 if len(fnc)==0:
61 self.__frame_filename="data.%s.xml"
62 else:
63 n=fnc[0]
64 for i in range(1,len(fnc)-1):
65 n+="."+fnc[i]
66 if len(fnc)==1:
67 self.__frame_filename=n+".%s"
68 else:
69 self.__frame_filename=n+".%s."+fnc[-1]
70 self.trace("output filename is %s."%self.__frame_filename)
71
72 def getFrameFileName(self):
73 return self.__frame_filename%self.getFrameCounter()
74
75 def writeFrame(self):
76 """
77 returns True if the time stamp for writing frame is reached.
78 """
79 out=self.t>=self.__last_t+self.dt
80 if out:
81 self.__last_t+=self.dt
82 self.n+=1
83 return out
84
85 def getFrameCounter(self):
86 """
87 returns a frame counter
88 """
89 return self.n
90
91 def getSafeTimeStepSize(self,dt):
92 """
93 returns new step size
94
95 :param dt: last time step size used
96 :type dt: ``float``
97 :return: time step size that can savely be used
98 :rtype: ``float``
99 """
100 return self.__last_t+self.dt-self.t
101
102 class WriteVTK(Visualization):
103 """
104 Writes data into a VTK file.
105
106 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
107 the data are defined by a `Link` the name of the target attribute is used as a tag.
108
109 :ivar data0: data set 0 to be written
110 :type data0: `escript.Data`
111 :ivar name0: name tag for data set 0
112 :type name0: ``str`` or ``None``
113 :ivar data1: data set 1 to be written
114 :type data1: `escript.Data`
115 :ivar name1: name tag for data set 1
116 :type name1: ``str`` or ``None``
117 :ivar data2: data set 2 to be written
118 :type data2: `escript.Data`
119 :ivar name2: name tag for data set 2
120 :type name2: ``str`` or ``None``
121 :ivar data3: data set 3 to be written
122 :type data3: `escript.Data`
123 :ivar name3: name tag for data set 3
124 :type name3: ``str`` or ``None``
125 :ivar data4: data set 4 to be written
126 :type data4: `escript.Data`
127 :ivar name4: name tag for data set 4
128 :type name4: ``str`` or ``None``
129 :ivar data5: data set 5 to be written
130 :type data5: `escript.Data`
131 :ivar name5: name tag for data set 5
132 :type name5: ``str`` or ``None``
133 :ivar data6: data set 6 to be written
134 :type data6: `escript.Data`
135 :ivar name6: name tag for data set 6
136 :type name6: ``str`` or ``None``
137 :ivar data7: data set 7 to be written
138 :type data7: `escript.Data`
139 :ivar name7: name tag for data set 7
140 :type name7: ``str`` or ``None``
141 :ivar data8: data set 8 to be written
142 :type data8: `escript.Data`
143 :ivar name8: name tag for data set 8
144 :type name8: ``str`` or ``None``
145 :ivar data9: data set 9 to be written
146 :type data9: `escript.Data`
147 :ivar name9: name tag for data set 9
148 :type name9: ``str`` or ``None``
149 :ivar data10: data set 10 to be written
150 :type data10: `escript.Data`
151 :ivar name10: name tag for data set 10
152 :type name10: ``str`` or ``None``
153 :ivar data11: data set 11 to be written
154 :type data11: `escript.Data`
155 :ivar name11: name tag for data set 11
156 :type name11: ``str`` or ``None``
157 :ivar data12: data set 12 to be written
158 :type data12: `escript.Data`
159 :ivar name12: name tag for data set 12
160 :type name12: ``str`` or ``None``
161 :ivar data13: data set 13 to be written
162 :type data13: `escript.Data`
163 :ivar name13: name tag for data set 13
164 :type name13: ``str`` or ``None``
165 :ivar data14: data set 14 to be written
166 :type data14: `escript.Data`
167 :ivar name14: name tag for data set 14
168 :type name14: ``str`` or ``None``
169 :ivar data15: data set 15 to be written
170 :type data15: `escript.Data`
171 :ivar name15: name tag for data set 15
172 :type name15: ``str`` or ``None``
173 :ivar data16: data set 16 to be written
174 :type data16: `escript.Data`
175 :ivar name16: name tag for data set 16
176 :type name16: ``str`` or ``None``
177 :ivar data17: data set 17 to be written
178 :type data17: `escript.Data`
179 :ivar name17: name tag for data set 17
180 :type name17: ``str`` or ``None``
181 :ivar data18: data set 18 to be written
182 :type data18: `escript.Data`
183 :ivar name18: name tag for data set 18
184 :type name18: ``str`` or ``None``
185 :ivar data19: data set 19 to be written
186 :type data19: `escript.Data`
187 :ivar name19: name tag for data set 19
188 :type name19: ``str`` or ``None``
189 """
190 def __init__(self, **kwargs):
191 """
192 Initialisation of the WriteVTK object
193
194 :keyword debug: debugging flag
195 :type debug: ``bool``
196 """
197 super(WriteVTK,self).__init__(**kwargs)
198 self.declareParameter(data0=None,name0=None,
199 data1=None,name1=None,
200 data2=None,name2=None,
201 data3=None,name3=None,
202 data4=None,name4=None,
203 data5=None,name5=None,
204 data6=None,name6=None,
205 data7=None,name7=None,
206 data8=None,name8=None,
207 data9=None,name9=None,
208 data10=None,name10=None,
209 data11=None,name11=None,
210 data12=None,name12=None,
211 data13=None,name13=None,
212 data14=None,name14=None,
213 data15=None,name15=None,
214 data16=None,name16=None,
215 data17=None,name17=None,
216 data18=None,name18=None,
217 data19=None,name19=None)
218 def collectData(self):
219 kwargs={}
220 if isinstance(self.data0, Data):
221 if self.name0 == None:
222 if isinstance(self.getAttributeObject("data0"),Link):
223 kwargs[self.getAttributeObject("data0").getAttributeName()]=self.data0
224 else:
225 kwargs["data0"]=self.data0
226 else:
227 kwargs[str(self.name0)]=self.data0
228
229
230 if isinstance(self.data1, Data):
231 if self.name1 == None:
232 if isinstance(self.getAttributeObject("data1"),Link):
233 kwargs[self.getAttributeObject("data1").getAttributeName()]=self.data1
234 else:
235 kwargs["data1"]=self.data1
236 else:
237 kwargs[str(self.name1)]=self.data1
238
239
240 if isinstance(self.data2, Data):
241 if self.name2 == None:
242 if isinstance(self.getAttributeObject("data2"),Link):
243 kwargs[self.getAttributeObject("data2").getAttributeName()]=self.data2
244 else:
245 kwargs["data2"]=self.data2
246 else:
247 kwargs[str(self.name2)]=self.data2
248
249
250 if isinstance(self.data3, Data):
251 if self.name3 == None:
252 if isinstance(self.getAttributeObject("data3"),Link):
253 kwargs[self.getAttributeObject("data3").getAttributeName()]=self.data3
254 else:
255 kwargs["data3"]=self.data3
256 else:
257 kwargs[str(self.name3)]=self.data3
258
259
260 if isinstance(self.data4, Data):
261 if self.name4 == None:
262 if isinstance(self.getAttributeObject("data4"),Link):
263 kwargs[self.getAttributeObject("data4").getAttributeName()]=self.data4
264 else:
265 kwargs["data4"]=self.data4
266 else:
267 kwargs[str(self.name4)]=self.data4
268
269
270 if isinstance(self.data5, Data):
271 if self.name5 == None:
272 if isinstance(self.getAttributeObject("data5"),Link):
273 kwargs[self.getAttributeObject("data5").getAttributeName()]=self.data5
274 else:
275 kwargs["data5"]=self.data5
276 else:
277 kwargs[str(self.name5)]=self.data5
278
279
280 if isinstance(self.data6, Data):
281 if self.name6 == None:
282 if isinstance(self.getAttributeObject("data6"),Link):
283 kwargs[self.getAttributeObject("data6").getAttributeName()]=self.data6
284 else:
285 kwargs["data6"]=self.data6
286 else:
287 kwargs[str(self.name6)]=self.data6
288
289
290 if isinstance(self.data7, Data):
291 if self.name7 == None:
292 if isinstance(self.getAttributeObject("data7"),Link):
293 kwargs[self.getAttributeObject("data7").getAttributeName()]=self.data7
294 else:
295 kwargs["data7"]=self.data7
296 else:
297 kwargs[str(self.name7)]=self.data7
298
299
300 if isinstance(self.data8, Data):
301 if self.name8 == None:
302 if isinstance(self.getAttributeObject("data8"),Link):
303 kwargs[self.getAttributeObject("data8").getAttributeName()]=self.data8
304 else:
305 kwargs["data8"]=self.data8
306 else:
307 kwargs[str(self.name8)]=self.data8
308
309
310 if isinstance(self.data9, Data):
311 if self.name9 == None:
312 if isinstance(self.getAttributeObject("data9"),Link):
313 kwargs[self.getAttributeObject("data9").getAttributeName()]=self.data9
314 else:
315 kwargs["data9"]=self.data9
316 else:
317 kwargs[str(self.name9)]=self.data9
318
319
320 if isinstance(self.data10, Data):
321 if self.name10 == None:
322 if isinstance(self.getAttributeObject("data10"),Link):
323 kwargs[self.getAttributeObject("data10").getAttributeName()]=self.data10
324 else:
325 kwargs["data10"]=self.data10
326 else:
327 kwargs[str(self.name10)]=self.data10
328
329
330 if isinstance(self.data11, Data):
331 if self.name11 == None:
332 if isinstance(self.getAttributeObject("data11"),Link):
333 kwargs[self.getAttributeObject("data11").getAttributeName()]=self.data11
334 else:
335 kwargs["data11"]=self.data11
336 else:
337 kwargs[str(self.name11)]=self.data11
338
339
340 if isinstance(self.data12, Data):
341 if self.name12 == None:
342 if isinstance(self.getAttributeObject("data12"),Link):
343 kwargs[self.getAttributeObject("data12").getAttributeName()]=self.data12
344 else:
345 kwargs["data12"]=self.data12
346 else:
347 kwargs[str(self.name12)]=self.data12
348
349
350 if isinstance(self.data13, Data):
351 if self.name13 == None:
352 if isinstance(self.getAttributeObject("data13"),Link):
353 kwargs[self.getAttributeObject("data13").getAttributeName()]=self.data13
354 else:
355 kwargs["data13"]=self.data13
356 else:
357 kwargs[str(self.name13)]=self.data13
358
359
360 if isinstance(self.data14, Data):
361 if self.name14 == None:
362 if isinstance(self.getAttributeObject("data14"),Link):
363 kwargs[self.getAttributeObject("data14").getAttributeName()]=self.data14
364 else:
365 kwargs["data14"]=self.data14
366 else:
367 kwargs[str(self.name14)]=self.data14
368
369
370 if isinstance(self.data15, Data):
371 if self.name15 == None:
372 if isinstance(self.getAttributeObject("data15"),Link):
373 kwargs[self.getAttributeObject("data15").getAttributeName()]=self.data15
374 else:
375 kwargs["data15"]=self.data15
376 else:
377 kwargs[str(self.name15)]=self.data15
378
379
380 if isinstance(self.data16, Data):
381 if self.name16 == None:
382 if isinstance(self.getAttributeObject("data16"),Link):
383 kwargs[self.getAttributeObject("data16").getAttributeName()]=self.data16
384 else:
385 kwargs["data16"]=self.data16
386 else:
387 kwargs[str(self.name16)]=self.data16
388
389
390 if isinstance(self.data17, Data):
391 if self.name17 == None:
392 if isinstance(self.getAttributeObject("data17"),Link):
393 kwargs[self.getAttributeObject("data17").getAttributeName()]=self.data17
394 else:
395 kwargs["data17"]=self.data17
396 else:
397 kwargs[str(self.name17)]=self.data17
398
399
400 if isinstance(self.data18, Data):
401 if self.name18 == None:
402 if isinstance(self.getAttributeObject("data18"),Link):
403 kwargs[self.getAttributeObject("data18").getAttributeName()]=self.data18
404 else:
405 kwargs["data18"]=self.data18
406 else:
407 kwargs[str(self.name18)]=self.data18
408
409
410 if isinstance(self.data19, Data):
411 if self.name19 == None:
412 if isinstance(self.getAttributeObject("data19"),Link):
413 kwargs[self.getAttributeObject("data19").getAttributeName()]=self.data19
414 else:
415 kwargs["data19"]=self.data19
416 else:
417 kwargs[str(self.name19)]=self.data19
418 return kwargs
419
420 def doInitialPostprocessing(self):
421 """
422 writes vtk file at the end of initial iteration
423 """
424 super(WriteVTK,self).doInitialPostprocessing()
425 kwargs=self.collectData()
426 if len(kwargs)>0:
427 saveVTK(self.getFrameFileName(),**kwargs)
428 self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.getFrameFileName()))
429
430 def doStepPostprocessing(self, dt):
431 """
432 writes vtk file at the end of time iteration
433 """
434 super(WriteVTK,self).doStepPostprocessing(dt)
435 if self.writeFrame():
436 kwargs=self.collectData()
437 if len(kwargs)>0:
438 saveVTK(self.getFrameFileName(),**kwargs)
439 self.trace("%s-th frame at time %s is writen to %s"%(self.getFrameCounter(),self.t,self.getFrameFileName()))
440
441 # 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