Dear all,
I want to display 3D Time varying data in Paraview. I partially succeded to do it thanks to the simplified code below :
ReqDataScript = """
import numpy as np
import h5py
import glob, os
path = "/home/srendon/Paraview_tests/paraview_support/"
timesteps=range(1, 7)
executive = self.GetExecutive()
outInfo = executive.GetOutputInformation(0)
outInfo.Remove(executive.TIME_STEPS())
for timestep in timesteps:
outInfo.Append(executive.TIME_STEPS(), timestep)
outInfo.Remove(executive.TIME_RANGE())
outInfo.Append(executive.TIME_RANGE(), timesteps[0])
outInfo.Append(executive.TIME_RANGE(), timesteps[-1])
# A 3D cylindrical mesh
f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=1),"r")
# radius, theta, z-elevation
nx=f["mesh"]["x"].shape[0]
ny=f["mesh"]["y"].shape[0]
nz=f["mesh"]["z"].shape[0]
outInfo.Set(executive.WHOLE_EXTENT(), 0, nx-1 , 0, ny-1 , 0, nz-1)
outInfo.Set(vtk.vtkAlgorithm.CAN_PRODUCE_SUB_EXTENT(), 1)
f.close()
"""
ReqDataScript = """
import numpy as np
import h5py
from vtk.numpy_interface import algorithms as algs
import vtk
import glob, os
path = "/home/srendon/Paraview_tests/paraview_support/"
list_data_files = glob.glob(path + "*data.h5")
executive = self.GetExecutive()
outInfo = executive.GetOutputInformation(0)
if outInfo.Has(executive.UPDATE_TIME_STEP()):
time = int(outInfo.Get(executive.UPDATE_TIME_STEP()))
else:
print("no update time available")
time = 0
exts = [executive.UPDATE_EXTENT().Get(outInfo, i) for i in range(6)]
output.SetExtent(exts)
print("{path}{time:03}.data.h5".format(path=path, time=time))
f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=1),"r")
#f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=time),"r")
### Euler Variables
p_gas = f["gas"]["p"][()]
### Mesh ###
Raxis = f["mesh"]["x"][...]
Thetaaxis = f["mesh"]["y"][...]
Zaxis = f["mesh"]["z"][...]
z, t, r = np.meshgrid(Zaxis, Thetaaxis, Raxis, indexing="ij")
X = r * np.cos(t)
Y = r * np.sin(t)
Z = z
coordinates = algs.make_vector(X.ravel(),Y.ravel(),Z.ravel())
output.Points = coordinates
### Output PointData ###
output.PointData.append(p_gas.ravel(), "gas_p")
### Close files ###
f.close()
output.GetInformation().Set(output.DATA_TIME_STEP(), time)
"""
# create a new 'Programmable Source'
programmableSource1 = ProgrammableSource()
programmableSource1.OutputDataSetType = 'vtkStructuredGrid'
programmableSource1.Script = ReqDataScript
programmableSource1.ScriptRequestInformation = ReqInfoScript
programmableSource1.PythonPath = ''
rep2 = Show()
rep2.Representation = 'Surface'
ColorBy(rep2, ('POINTS', 'gas_p'))
Render()
viewSG.ResetCamera()
Render()
However each time I try to visualize my data I am forced to comment in my script the line :
f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=time),"r")
Then when Paraview opens and load only the first file I have to go to the script window :
comment : f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=1),"r")
uncomment f = h5py.File("{path}{time:03}.data.h5".format(path=path,time=time),"r")
And then apply. When this is performed I have a time varying data. However I do not want to do this all the time …
Can someone tell me what I am missing please ?
Thank you in advance,
Steven
P-S : In the following link there is a video of the procedure I do and some test files with the programmable source : Nuage