# Update Time Step with Python programmable source

**URL:** https://discourse.paraview.org/t/update-time-step-with-python-programmable-source/6717
**Category:** ParaView Support
**Tags:** python
**Created:** [March 16, 2021, 1:49pm UTC](https://discourse.paraview.org/t/update-time-step-with-python-programmable-source/6717 "2021-03-16T13:49:52Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![stevenrend](https://discourse.paraview.org/letter_avatar_proxy/v4/letter/s/b487fb/32.png) [@stevenrend](https://discourse.paraview.org/u/stevenrend)
#### Post date: [March 16, 2021, 1:49pm UTC](https://discourse.paraview.org/t/update-time-step-with-python-programmable-source/6717/1 "2021-03-16T13:49:52Z")

</div>

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](https://nuage.osupytheas.fr/s/j7CL7Kr7RzRWmJs)
