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: |