Hey David,I think you'll have trouble using the calculator filter for this because even if you time shift your data set, the variable will still have the same name so you won't be able to distinguish the original and time shifted values to add them together.
In principle you should be able to use a Python Programmable Filter to do this, since it can take two inputs and grab the scalars from each without worrying about the names. (Note, though, that there are sometimes issues with the pipeline updating properly when multiple temporal shifts are combined into a PPF -- bug 8156: http://www.vtk.org/Bug/view.php?id=8156 )
I use this method to calculate velocity of particles "on the fly". So, my example may be a little more complicated than you need because I have to make sure particle IDs match each other before calculating the difference in their positions, but hopefully you can get the main ideas from here:
Attach a Temporal Cache to your data set (size = 2). Attach a Temporal Shift Scale to this with a Post Shift of whatever time value (actual time, not data set index) you want. Then, highlight both the Cache and the Shift Scale together and apply a Python Programmable Filter. My output data set is a vtkUnstructuredGrid, so I set the output of the PPF to that, and then put my script in the first window. (I'll place it at the end of the email.) This script adds a new array to the data set containing my calculated values.
NOTE: The catch for me to get the pipeline to update all the temporal shifts properly is that I have to "keep visible" the Temporal Shift Scale (or something directly branching off of it), or else my velocities all come out as zero! (I'll also attach a screen shot of my pipeline to make it clear.)
Good luck -- when it works, it works great.
-Eric
------------------------------------------------------
Eric E Monson
Duke Visualization Technology Group
====================
from paraview.vtk import vtkFloatArray
in1 = self.GetInputDataObject(0,1).GetTimeStep(0)
in0 = self.GetInputDataObject(0,0).GetTimeStep(0)
pti0 = in0.GetPoints()
pti1 = in1.GetPoints()
pdi0 = in0.GetPointData()
pdi1 = in1.GetPointData()
pdi0.SetActiveScalars('leuk_globalids')
pdi1.SetActiveScalars('leuk_globalids')
id0 = pdi0.GetScalars()
id1 = pdi1.GetScalars()
numPts = id1.GetSize()
vec = vtkFloatArray()
vec.SetName('velocity')
vec.SetNumberOfComponents(3)
vec.SetNumberOfTuples(numPts)
for ii in range(id1.GetSize()):
idx1 = ii
globalID1 = id1.GetValue(idx1)
idx0 = -1
for jj in range(id0.GetSize()):
globalID0tmp = id0.GetValue(jj)
if globalID0tmp == globalID1:
idx0 = jj
break
if idx0 >= 0:
# compute velocity and put in vec
tmpPos = [0.0, 0.0, 0.0]
pos1 = pti1.GetPoint(idx1)
pos0 = pti0.GetPoint(idx0)
for kk in range(len(tmpPos)):
tmpPos[kk] = pos1[kk] - pos0[kk]
vec.SetTuple3(ii,tmpPos[0],tmpPos[1],tmpPos[2])
else:
# put zero velocity in vec
vec.SetTuple3(ii,0.0,0.0,0.0)
out1 = self.GetOutputDataObject(0)
out1.ShallowCopy(in1)
out1.GetPointData().AddArray(vec)
====================
<<inline: TemporalDiffPipe_sm.jpg>>
On Mar 17, 2009, at 11:05 AM, David Fuentes wrote:
Hello,Is there a way to use the Calculator on a variable at two different time instances? I have a time series of data stored in an exodus file. I'm trying to accumulate the sum of a variable over time and need to add the previous value of a variable to the variable's current value. Is there a way to use the "Temporal Cache", "Temporal Shift Scale", or a similar filter to provide the calculator access to a variable at a previous time instance?Thank you, David Fuentes
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Follow this link to subscribe/unsubscribe: http://www.paraview.org/mailman/listinfo/paraview
