88
John Biddiscombe CSCS Swiss National Supercomputing Centre 03/06/2008 Working with Time in ParaView

John Biddiscombe CSCS Swiss National Supercomputing Centre

  • Upload
    joylyn

  • View
    17

  • Download
    0

Embed Size (px)

DESCRIPTION

Working with Time in ParaView. John Biddiscombe CSCS Swiss National Supercomputing Centre. Contents. Data Formats for time-dependent data Overview of GUI controls Animation Controls Connection between GUI and internals Comparative Visualization mode Temporal Pipeline Overview - PowerPoint PPT Presentation

Citation preview

Page 1: John Biddiscombe CSCS Swiss National Supercomputing Centre

John Biddiscombe

CSCS

Swiss National Supercomputing Centre

03/06/2008

Working with Timein ParaView

Page 2: John Biddiscombe CSCS Swiss National Supercomputing Centre

Contents

Data Formats for time-dependent data

Overview of GUI controls

Animation Controls

Connection between GUI and internals

Comparative Visualization mode

Temporal Pipeline Overview

Time Dependent Filters (vtkTemporalXXX)

Manipulating Time in Filters (C++ code)…

Gotchas & Bugs

Future Plans

Page 3: John Biddiscombe CSCS Swiss National Supercomputing Centre

Data Import

Page 4: John Biddiscombe CSCS Swiss National Supercomputing Centre

Formats Supported

• Exodus (used by several US research facilities)

• vtkPVDReader (vtk XML Collection)• filename.pvd + Filename-00.vtu/vti/vtp etc

• vtkFileSeriesReader

• vtkXML * Reader• PolyData, UnstructuredGrid, StructuredGrid, ImageData, RectilinearGrid,

Multiblock, Heirarchical etc.

• Legacy VTK files with 001, 002, 003 filenames

• Ensight (case files, ASCII/Binary data)

• OpenFOAM, SpyPlot, Phasta, STL, MFIX (untested by me)

• Xdmf (extensible data model format)• XML light data with geometry/time information inside• Hdf5 – heavy – big data containing scalars/fields

• (CSCS) custom readers include netCDF, H5Part (from CSCS web site)

Page 5: John Biddiscombe CSCS Swiss National Supercomputing Centre

Vtk (XML based) file format

VTK Collection - Easy to create by hand if necessaryA General purpose holder for vtk XML files of all types

vtu=unstructured, vtp=polydata, vtr=rectilinear, vti=imagedata

Each individual file can be binary/text, compressed or not<VTKFile type="Collection" version="0.1" byte_order="LittleEndian">

<Collection>

<DataSet timestep="0.01" group="" part="0" file="Foo_001.vtu"/>

<DataSet timestep=“0.02" group="" part="0" file=“Foo_002.vtu"/>

<DataSet timestep=“0.03" group="" part="0" file=“Foo_003.vtu"/>

</Collection>

</VTKFile>

The VTK Collection is in fact a generic holder for MultiBlock composite datasets which can store time information too.

The vtkXMLReader family is responsible for loading this kind of data.

User can use vtkXML_xxx_Writer to write N time steps of any kind of data and then add a little XML meta data to describe it.

Caveat : pvd time collections are not working well in parallel (NxM split of blocks)

Page 6: John Biddiscombe CSCS Swiss National Supercomputing Centre

.pvd versus File List

• .pvd collection is a true Time compatible holder for data• Time steps can be specified with real time values• Don’t need to be contiguous or equally spaced

• FileSeriesReader : Selecting *.vtu/p/i/etc • simple but efficient way of loading time series• One step per file• Can’t specify true time values• vtkFileSeriesReader is clever• Load one – get one• Load *.ext, get time series• No C++ changes required to reader

Page 7: John Biddiscombe CSCS Swiss National Supercomputing Centre

vtkFileSeriesReader : make reader time aware

<FileSeriesReaderProxy name="XMLUnstructuredGridReader"

class="vtkFileSeriesReader"

label="XML Unstructured Grid reader"

file_name_method="SetFileName">

<Documentation

short_help=“blah blah“

long_help=“ditto">

The XML Unstructured Grid reader reads the VTK XML unstructured grid data file format. The standard extension is .vtu.

This reader also supports file series.

</Documentation>

Page 8: John Biddiscombe CSCS Swiss National Supercomputing Centre

FileSeriesReader (slide 2)

Put details of your existing reader in ExposedProperties

<SubProxy><Proxy name="Reader"

proxygroup="internal_sources"

proxyname="XMLUnstructuredGridReaderCore">

</Proxy>

<ExposedProperties>

<Property name="CellArrayInfo" />

<Property name="CellArrayStatus" />

<Property name="PointArrayInfo" />

<Property name="PointArrayStatus" />

</ExposedProperties>

</SubProxy>

Page 9: John Biddiscombe CSCS Swiss National Supercomputing Centre

FileSeriesReader (slide 3)

<StringVectorProperty name="FileName"clean_command="RemoveAllFileNames"

command="AddFileName"

animateable="0"

number_of_elements="0"

repeat_command="1">

<FileListDomain name="files"/>

<Documentation>

The list of files to be read by the reader. If more than 1 file is specified, the reader will switch to file series mode in which it will pretend that it can support time and provide 1 file per time step.

</Documentation>

</StringVectorProperty>

Page 10: John Biddiscombe CSCS Swiss National Supercomputing Centre

FileSeriesReader (slide 4)

The part which makes it ‘time aware’

<DoubleVectorProperty name="TimestepValues"

information_only="1">

<TimeStepsInformationHelper/>

<Documentation>

Available timestep values.

</Documentation>

</DoubleVectorProperty>

</FileSeriesReaderProxy>

Page 11: John Biddiscombe CSCS Swiss National Supercomputing Centre

Old and New Time in ParaView

In PV2.x Time was generally animated by changing the TimeStep value of a reader (or filter sometimes).

In PV3.x Time is an information variable/object passed down the pipeline which makes it possible for filters to modify time before passing it to their source. For this reason, the GUI sets the time inside the Rendering/Mapping code and not via a TimeStep variable.

Some older (custom) readers may still have a TimeStep variable, but this is being phased out and its use is not encouraged – unless you are trying to do something ‘a bit special’ (see later slides).

Page 12: John Biddiscombe CSCS Swiss National Supercomputing Centre

Reader XML

<DoubleVectorProperty name="TimestepValues"information_only="1"><TimeStepsInformationHelper/><Documentation>

Available timestep values.</Documentation>

</DoubleVectorProperty>

For any readerIf you omit this (this is all you need in the XML)Then you won’t see the time information.

It connects the TIME_STEPS key to the GUI

Page 13: John Biddiscombe CSCS Swiss National Supercomputing Centre

The old method (xml for reference)

<IntVectorProperty name="TimeStep" command="SetTimeStep"

number_of_elements="1" default_values="0"

animateable="0"

information_property="TimestepValues">

<IntRangeDomain name="range">

<RequiredProperties>

<Property name="TimeStepRangeInfo" function="Range"/>

</RequiredProperties>

</IntRangeDomain>

<Documentation> Set the current timestep. </Documentation>

</IntVectorProperty>

And for convenience we usually provided a GetTimestepValues(vector)

Page 14: John Biddiscombe CSCS Swiss National Supercomputing Centre

C++ Reader : RequestInformation

Scan files/data structures and build a list/vector/array of times

Set TIME_STEPS for discrete time data (most readers really)

outInfo->Set(

vtkStreamingDemandDrivenPipeline::TIME_STEPS(),

&this->TimeStepValues[0], this->TimeStepValues.size());

Set TIME_RANGE if continuous, but can also be set for discrete

double timeRange[2];

timeRange[0] = this->TimeStepValues.front();

timeRange[1] = this->TimeStepValues.back();

outInfo->Set(

vtkStreamingDemandDrivenPipeline::TIME_RANGE(), timeRange, 2);

Page 15: John Biddiscombe CSCS Swiss National Supercomputing Centre

C++ Reader : RequestData

Find the correct time step (index into array of step values)

if (

outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS()))

{

// usually only one actual step requested

double requestedTimeValue = outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS())[0];

this->ActualTimeStep = vtkstd::find_if(

this->TimeStepValues.begin(), this->TimeStepValues.end(),

vtkstd::bind2nd( WithinTolerance( ), requestedTimeValue ))

- this->TimeStepValues.begin();

}

Page 16: John Biddiscombe CSCS Swiss National Supercomputing Centre

C++ Reader : RequestData

Time stamp the output DataObject using DATA_TIME_STEPS

output->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(), &requestedTimeValue, 1);

Nothing bad happens if you don’t – But filters which use the time information won’t get what they need.

vtkTemporalPathLineFilter builds lists of data times for each frame and joins the dots.

You can read the UPDATE_TIME_STEPS key, but it might not be the same, and is strictly only present during RequestUpdateExtent

Page 17: John Biddiscombe CSCS Swiss National Supercomputing Centre

GUI Controls

Animating with Time

Page 18: John Biddiscombe CSCS Swiss National Supercomputing Centre

Animation GUI Controls

Time value displayed in toolbar –

Time step mode – user can change step

Sequence mode – user can change time freely

VCR style toolbar has play controls

(play, step forward/back, jump to start/end)

Data with Time support shows the timesteps in the information tab. (Lacks ability to click on timestep and jump to it)

Animation control has settings for time stepping and keyframes

Abort button to stop movie generation not obvious

Page 19: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Modes in Animation Inspector

Snap to TimeSteps When you click ‘play’ the animation will

begin at whatever time step you are on and continue until it either reaches the end (or is stopped manually).

When stopped the animation will continue from where it left off if restarted.

Each frame played represents a single time step of the input data

There is no need to set any keyframes or specify any particular property to animate.

The Track selection is used to select or create keyframes

Page 20: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Modes in Animation Inspector

Snap to TimeSteps : * * * Warning * * *When dataset 1 is loaded it may have time values

0, 1, 2, 3, …..N

When dataset 2 is loaded it may have time values

0.5, 1.5, 2.5, 3.5, …..M

Playing an animation in Snap To TimeSteps mode will traverse ALL KNOWN Timesteps – which means

0, 0.5, 1, 1.5, 2, 2.5 …..max(M,N)

This can cause unexpected results!

Future time support should allow you to ‘Snap to active pipeline steps’ so that only the times exported for a particular dataset/filter will be traversed. (In development).

Fix : Use Sequence mode and ‘lock’ the start and end times to prevent changes

Page 21: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Modes in Animation Inspector

Sequence ModeThe start and end times correspond to the

max and min values of time in the data you loaded.

If you manually change the start/end times you can ‘Lock’ the new times – this prevents them being reset to the default start/end times if new data is loaded.

Animation will now ignore the Time steps present in the data and use interval=(end/start)/(numFrames-1)

This is frequently NOT WHAT YOU WANT

Page 22: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Modes in Animation Inspector

Worked example interval=(end/start)/(numFrames-1)

60.001424 - 50.001424 = 10

Num Frames = 10

We should get our original time steps back (1s per step)

In fact we get 10/(numFrames-1) = 1.11111111s/frame

Need to use 11 frames to get 0,1,2,3,4,5,6,7,8,9,10

Note : In the some versions of PV3 selecting time values which are not exactly the same as those present will produce no update. It should snap to the nearest time step, but does not. See SnapToTimeSteps for a fix.

Page 23: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Modes in Animation Inspector

Real TimeAnimates using the ‘Wall time’

Not always useful for the majority of filters/data sources that we use

Useful to animate ‘as fast as we can’ if data was stored with time representing a real clock value and we wish to ‘play back’ data in real time.

In this mode not all times may be displayed. Some will be skipped or some may be on screen for ages.

Could also be very handy for integrating generators of data (eg sensor equipment) into the gui and displaying the real time update of the sensor (no examples of this yet though)

Page 24: John Biddiscombe CSCS Swiss National Supercomputing Centre

Comparative visualization

Page 25: John Biddiscombe CSCS Swiss National Supercomputing Centre

Comparative View Inspector

• Allows MxN array of views on the same data• Allows a variable to be changed along the X axis.• Wrong - limitation <is> used to be that time must be between 0.0-1.0

for the view to operate

Solution :

TemporalShiftScale with

1/N scale factor

(or use Normalize flag set if present in CVS)

Page 26: John Biddiscombe CSCS Swiss National Supercomputing Centre

Same Data at multiple T

Uses Time steps of selected object

Avoid mismatched time display in same window.

FilmStrip uses X

Comparative : X&Y

Works, but patience required

Page 27: John Biddiscombe CSCS Swiss National Supercomputing Centre

Comparative viz Summary

• Much easier than • Creating multiple windows manually• Setting up Shift/Scale• Instantiating Pipelines• Setting view/display properties• Can also use other plot styles.

Page 28: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Dependent Algorithms/Filters

Pipeline Introduction

Page 29: John Biddiscombe CSCS Swiss National Supercomputing Centre

Pipeline Introduction

The pipeline is demand driven with data flowing downstream

Information flowing up and down stream

In PV3 Time is part of the Information flow.

Data source filter(s) Display/GUIRenderer

Data

InformationUPDATE_TIME_STEPS

Page 30: John Biddiscombe CSCS Swiss National Supercomputing Centre

How does it work

• How does the pipeline actually fit together• All filters are connected together by Executives which receive

information from downstream (and upstream) and decide• Are the data inputs valid• Are the data outputs valid• Is everything else valid• Has anything changed since I last updated

In PV3 Time is passed as information and the executives can LOOP portions of the pipeline over multiple time steps

This means that filters can request multiple time steps

This enables us to implement Time Dependent Algorithms

Page 31: John Biddiscombe CSCS Swiss National Supercomputing Centre

Pipeline Looping

• vtkTemporalDataSet• When the pipeline is looped to generate multiple time steps, the executive

generates a dataset collection• The collection is passed to the temporal algorithm• The algorithm can request any number of time steps• But usually 2 (linear interpolation)

• In order to make looping work, some information keys are used internally

Page 32: John Biddiscombe CSCS Swiss National Supercomputing Centre

Information Keys

During Updates, the pipeline makes 4 request passes…DataObject, Information, UpdateExtent, Data

Keys exported by time aware sourcesTIME_RANGE (continuous), TIME_STEPS (discrete)

Time aware reader will declare N steps 0.0, 0.1, 0.2…..etc

Keys used during requestsUPDATE_TIME_STEPS (Filter says ‘I want these’)

Interpolator says I need times 0.1 and 0.2 for example

Keys set during executionDATA_TIME_STEPS (Source says ‘I made these’)

Data generator says I generated times 0.1 and 0.2

Keys used internally by executivesREQUIRES_TIME_DOWNSTREAM (looping will be needed)

CONTINE_EXECUTING (multiple passes inside algorithm)

Page 33: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Dependent Algorithms/Filters

Interpolation

Page 34: John Biddiscombe CSCS Swiss National Supercomputing Centre

(Linear) Interpolation

• vtkTemporalInterpolator• Linearly interpolates between 2 time steps• When Time T.5 is requested it requests times T and T+1

• 2 Modes of Operation• Continuous• Discrete

• Continuous Mode• DiscreteTimeStepInterval=0.0• Filter generates no TIME_STEPS on output – just a TIME_RANGE• GUI can request any time between min/max

• Discrete Mode• DiscreteTimeStepInterval>0• Filter generates (max-min)/DiscreteTimeStepInterval steps• GUI sees discrete data with new TIME_STEPS values

Page 35: John Biddiscombe CSCS Swiss National Supercomputing Centre

(Linear) Interpolation

Continuous modeInput data (left) has N discrete time stepsOutput data (right) has no time stepsIt does report a TIME_RANGESo the GUI knows that any time between min/max can be requested

Page 36: John Biddiscombe CSCS Swiss National Supercomputing Centre

Interpolation – Continuous mode

Data Courtesy : David Graham, Plymouth UK.

Page 37: John Biddiscombe CSCS Swiss National Supercomputing Centre

(Linear) Interpolation

Discrete modeExample :DiscreteTimeStepInterval=0.01

New time steps are generated and the output data ‘looks’ like it has 10x as many time steps.

Note that no interpolation of the data has been performed yet, only when something is actually rendered/requested will the interpolation take place.

Page 38: John Biddiscombe CSCS Swiss National Supercomputing Centre

Interpolation – Discrete mode

Page 39: John Biddiscombe CSCS Swiss National Supercomputing Centre

(Linear) Interpolation

• What can be interpolated• Any Dataset which does not change topology between time steps• Point positions are interpolated

• Connectivity (cells are copied)• Point Data is interpolated• Cell Data is interpolated• ImageData/PolyData/Rectilinear/Unstructured

• All can be interpolated if cell connectivity and number of cells remains the same

• MultiBlock/MultiGroup/Heirarchical/AMR

• If the tree structure remains the same between time steps and the individual leaves satisfy above conditions

• Other interpolation methods could be added

Page 40: John Biddiscombe CSCS Swiss National Supercomputing Centre

• Discrete mode• Given an input with N time steps, but a few are

accidentally missing (lost of never generated)• Set DiscreteTimeStep Interval to the original time

step size (say 0.1 or 0.01 etc)• Data saved every Nth frame to save IO time.• Output now seems to be exactly the same as the

input – except that the steps that were missing from the input are recreated using interpolation when requested on the output

• Animate using ‘Snap To TimeSteps’ mode

• Animation will look like intended original

Fixing Problems with the interpolator

Page 41: John Biddiscombe CSCS Swiss National Supercomputing Centre

Problem Fixing Example (Interpolation)

BeforeMissing data, low samplingProblems for particle tracer

AfterLovely

Page 42: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal DataSet Cache

Page 43: John Biddiscombe CSCS Swiss National Supercomputing Centre

Interpolation – Use a cache

If animation from 0->t is performed using a TemporalInterpolator, the interpolator will request 2 time steps each time it updates

Interpolating at 0.1 spacing between 2 steps causes

Step 0 + Step 1 : Output Step 0.1

Step 0 + Step 1 : Output Step 0.2 Each step N times!

Step 0 + Step 1 : Output Step 0.3

Use a TemporalDataSetCache to store 2 timesteps and prevent this repeated re-execution of the pipeline

Data source(time aware)

TemporalDataSetCache

Display/GUIRenderer

Interpolator

Page 44: John Biddiscombe CSCS Swiss National Supercomputing Centre

Branching Time – Use a cache

It’s not just the filter delivering the data at T, but the whole upstream pipeline that is protected…

Consider the case where a pipeline branches and different T values are requested. The cache prevents updates from one section propagating too far upstream and forcing the other branch to be re-executed needlessly.

Simple filter(s) (no special time requirements)

Temporal DataSetCache

TemporalFilter(requires multiple time

steps, e.g.. Particle tracer)

TemporalShiftScale(modifies time values)

Display/GUIRenderer

Data source(time aware)

Page 45: John Biddiscombe CSCS Swiss National Supercomputing Centre

Branching Time – Caution in the GUI

When different values to T are visible/manipulated

Only display the leaf nodes of the pipeline

Rendering intermediate portions can trigger unwanted/confusing updates

Simple filter(s) (no special time requirements)

Temporal DataSetCache

TemporalFilter(requires multiple time

steps, e.g.. Particle tracer)

TemporalShiftScale(modifies time values)

Display/GUIRenderer

Data source(time aware)

UPDATE_TIME_STEPSDisplay/GUI

Renderer

UPDATE_TIME_STEPS

Page 46: John Biddiscombe CSCS Swiss National Supercomputing Centre

Multiple Inputs

Related Cautionary Note #1

Page 47: John Biddiscombe CSCS Swiss National Supercomputing Centre

• Time dependent filters with multiple inputs• Trigger updates on all inputs• Particle Tracer is one example

Multiple Inputs

Temporal DataSetCache

Particle TracerDisplay/GUI

RendererData source(time aware)

UPDATE_TIME_STEPS

UPDATE_TIME_STEPS

Slice – Seed Points(for example)

Avoid this.Save Seeds if possible

Page 48: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal Snap to TimeSteps

Page 49: John Biddiscombe CSCS Swiss National Supercomputing Centre

SnapToTimeSteps Example

Data source(time aware)

TemporalDataSetCache

Display/GUIRenderer

Interpolator

Snap To TimeStep

Time To Text

Time To Text

Page 50: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Display Side note

Source : Time SourceTakes time from the UPDATE_TIME_STEPS

Actually it takes it directly from the view which is responsible for setting the key on the filter/output

Filter->Temporal->Annotate TimeTakes its time from DATA_TIME_STEPS

Which is the actual time step output from the filter

The two might not always be the same (snap to timestep for example)

Page 51: John Biddiscombe CSCS Swiss National Supercomputing Centre

Time Shifting

Page 52: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal Shift Scale

Changes time between the input and output of a filter

Can be used to compare the same data at 2 different values of T (though the comparative viz view is easier to use in some ways)

Invaluable for combining different datasets with different T values

See example pipeline below

Tout = PreShift + Tin*Scale + PostShift

NB. +ve PostShift produces +ve delay of output time

seems the wrong way around

but time 0 is now time N, so it takes N seconds to get to it

Page 53: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal Shift Scale

Pre-Shift = -50.0014

Scale = 1/10

Post-Shift = 3

Before50-0014 - 60.0014

After3.0 – 4.0

Page 54: John Biddiscombe CSCS Swiss National Supercomputing Centre

Developer Tip : Hiding bad time data

In RequestDataif (outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS())) {

double requestedTimeValue = outInfo-> Get(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS())[0];

if (requestedTimeValue<this->TimeStepValues.front() || requestedTimeValue>this->TimeStepValues.back())

{

this->TimeOutOfRange = 1;

}

output->GetInformation()->Set(vtkDataObject::DATA_TIME_STEPS(), &requestedTimeValue, 1);

}

if (this->TimeOutOfRange && this->MaskOutOfTimeRangeOutput) {

// don't do anything, just return success

return 1;

}

Page 55: John Biddiscombe CSCS Swiss National Supercomputing Centre

Developer Tip : Normalize Time

In RequestInformation

if (this->NormalizeToUnitTime && this->TimeStepValues.size()>0) {

double t1 = this->TimeStepValues.front();

double t2 = this->TimeStepValues.back();

double t3 = (t2-t1)>0 ? (1.0/(t2-t1)) : 1.0;

for (unsigned int i=0; i<this->TimeStepValues.size(); i++) {

double t = this->TimeStepValues[i];

this->TimeStepValues[i] = t3*(t-t1);

}

}

Then everything comes out {0,1}

Feature might be available in ShiftScale. Regional Variations

Page 56: John Biddiscombe CSCS Swiss National Supercomputing Centre

Comparative Vis (using Time shift)

• Time shift + Interpolation + Trails• 3 time dependent features in 1 go

Page 57: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal Shift Scale

Periodic Mode :Turns N time steps spanning t time units into

N*T steps spanning T*t units

Periodic End Correction

If simulation steps are {0,1,2…N-1} and {N-1} is identical to {0}

Periodic end correction OFF = {0,1,2…N-1,1,2,3..N-1}

Otherwise {0,1,2…N-1,1,2,3..N-1} causes duplicated step

If simulation steps are {0,1,2…N-1} and {N-1} is different from {0}

Periodic end correction On

Otherwise {0,1,2…N-1,0,2,3..N-1} causes duplicated step

Page 58: John Biddiscombe CSCS Swiss National Supercomputing Centre

Periodic example

2 Separate Datasets

one 40 steps

one 80 steps

Duration 1s (approx)

Need 5+hours

80*3600*5 = 1.44E6

Tried 10,000 Periods in ParaView (1 day?)

Need a better model!

Page 59: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracer Pipeline (one nasty example)

DataSet 1Temporal

Cache

Particle Tracer

Interpolate

PathLines

DataSet 2 Shift ScaleTemporal

Cache

Seeds 1

GUI

Seeds 2

Page 60: John Biddiscombe CSCS Swiss National Supercomputing Centre

Periodic Time + Resampling + Time Shift

Page 61: John Biddiscombe CSCS Swiss National Supercomputing Centre

Side Note : XML for Temporal Support

<SourceProxy name="TemporalSnapToTimeStep"

class="vtkTemporalSnapToTimeStep"

label="Temporal Snap-to-Time-Step">

<InputProperty name="Input" command="SetInputConnection">

<ProxyGroupDomain name="groups">

<Group name="sources"/>

<Group name="filters"/>

</ProxyGroupDomain>

<DataTypeDomain name="input_type" composite_data_supported="1">

<DataType value="vtkDataObject"/>

</DataTypeDomain>

</InputProperty>

Will change in future : no way of saying : DataType : PolyData : Temporal_required

Page 62: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracer

TemporalStreamTracer

Page 63: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracing

All Inputs must have same vector field

Multiple Multiblock Inputs supported (Temporal Required) Meshes can be dynamic

Parallel operation

If input dataset has N time stepsParticle tracer will generate N-1 output steps

Output step 0 time value corresponds to input step {0,1} timeNothing can be generated until 1 time period has passed

Seed points are supplied as separate inputs

Use SetTimeStep to combat odd time input combinations

Page 64: John Biddiscombe CSCS Swiss National Supercomputing Centre

Request Update Extent

for (int i=0; i<numInputs; i++) {

vtkInformation *inInfo = inputVector[0]->GetInformationObject(i);

// our output timestep T is timestep T+1 in the source

// so output inputTimeSteps[T], inputTimeSteps[T+1]

inInfo-> Set(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS(),

&this->InputTimeValues[this->ActualTimeStep], 2);

vtkDebugMacro(<< "requested 2 time values : "

<< this->InputTimeValues[this->ActualTimeStep] << " "

<< this->InputTimeValues[this->ActualTimeStep+1]);

}

Page 65: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracing (setup example)

Source (seedpoints)LineSource 100 points

Time Step resolutionLeave as 1 – this can be used to scale time if the input time was not stored correctly (e.g. it goes 0…N but should be 0.1 0.2 0.3 etc)

Time Step (output index)Set to zero initially – this will request steps, (0,1) from the input and the time actually corresponds to T=1 (but it will be the 0th step on the output)

Page 66: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracing

Force re-injectionevery 1 or 2 time steps

Particles will be injected at the seed points every N steps

Input vectorsUsually a velocity field, but could be another

Initial Integration stepUsed by Runge-Kutta integration to make incremental velocity field approximations

Can be smaller but 0.25 usually OK

Static Seeds - Static MeshForce optimizations

GEOMETRY_NOT_MODIFIED (work in progress)

Page 67: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracing

Ignore pipeline timeThis is very important – the particle tracer generates less output steps than the input (-1) and so we cannot (yet) use the default animation controls due to bug mentioned earlier.

NB. This works now, but the comment is useful

We therefore instruct the particle tracer to ignore pipeline time and instead animate the Timestep property from 0 to N-2 (if the input has N steps, the Particle tracer has N-1 steps output, so we go from 0 to N-2 to get the correct number)

Particle filename (not shown)An option to store particles to disk will be included at a future date.

Page 68: John Biddiscombe CSCS Swiss National Supercomputing Centre

Side Note : Ignore Pipeline Time

if (this->IgnorePipelineTime) {

if (this->TimeStep<this->OutputTimeValues.size()) {

requestedTimeValue = this->OutputTimeValues[this->TimeStep];

} else {

requestedTimeValue = this->OutputTimeValues.back();

}

this->ActualTimeStep = this->TimeStep;

vtkDebugMacro(<< "SetTimeStep : requestedTimeValue “<< requestedTimeValue << " ActualTimeStep "

<< this->ActualTimeStep);

}

else {

the usual stuff to get requested time

}

Page 69: John Biddiscombe CSCS Swiss National Supercomputing Centre

Particle Tracing

To generate animation of particlesUse Sequence Mode Animation

Use N-1 Frames (because there will be N-1 steps generated – this data had 51 steps on the input indexed as 0-50), so we use 50 frames for output

Create a Keyframe on ParticleTracer TimeStep.

Set Keyframe index 0 Time to start time = 0.0 here

Value to TimeStep 0

Set Keyframe index 1 Time to end time = 7.99 in this example

Value to 49 (last index = 51-2)

Animation can now be played/saved as movie

Page 70: John Biddiscombe CSCS Swiss National Supercomputing Centre

Francis Turbine

Page 71: John Biddiscombe CSCS Swiss National Supercomputing Centre

PathLineFilter

Page 72: John Biddiscombe CSCS Swiss National Supercomputing Centre

Pathline Filter

• Connects to output of Particle tracer

• Can be used on any dataset with points (not just particles)

• Now supports selection of subset• But needs to be updated to use vtkSelection type• Uses Ids from selection dataset to choose points for line construction

• Is not strictly a vtkTemporalXXX filter because it does not loop time• Listents to DATE_TIME_STEPS on input and builds list from that

• See other slides for example of usage

Page 73: John Biddiscombe CSCS Swiss National Supercomputing Centre

Plotting Data

over Time

Page 74: John Biddiscombe CSCS Swiss National Supercomputing Centre

03/06/2008

Temporal Statistics

Page 75: John Biddiscombe CSCS Swiss National Supercomputing Centre

Temporal Statistics

Computes

Mean

Min

Max

Standard Deviation

More can be added

Can take time!

Page 76: John Biddiscombe CSCS Swiss National Supercomputing Centre

03/06/2008

Selection+Time

Page 77: John Biddiscombe CSCS Swiss National Supercomputing Centre

Selection over time

• The same procedure can be used to query a particle over all available time

• Extract Selection over time filter builds a spreadsheet of values for the selected IDs over all time steps • NB: Can’t set a sub region of time using the animation controls yet, but

this feature will be coming

• Selection tutorial should cover possible types• Cell/Point/Global IDs can be used here

03/06/2008

Page 78: John Biddiscombe CSCS Swiss National Supercomputing Centre

Plot Selection over time

03/06/2008

Which Point

to display

Which field(s)

Page 79: John Biddiscombe CSCS Swiss National Supercomputing Centre

Plot Selection over Time

Page 80: John Biddiscombe CSCS Swiss National Supercomputing Centre

03/06/2008

Animations with Non simple time

Page 81: John Biddiscombe CSCS Swiss National Supercomputing Centre

How to animate a slice on a time-dependent dataset

Problem

When I try to animate, time changes as well as the slice

I can’t set time start/end to constants and then animate slice alone

ParaView hangs because of zero increment

Trying to fool it with tiny increments is not safe.

Show animation viewer and double click time track

Now animate the slice or other property using sequence mode

And keyframes to suit.

Page 82: John Biddiscombe CSCS Swiss National Supercomputing Centre

Demo 1

• How to animate a slice, and then animate the data?

Double click on these tracks

Page 83: John Biddiscombe CSCS Swiss National Supercomputing Centre

Setup a slice keyframe

• Create Slice offset keyframe• Animate a slice 50 frames one way• 50 frames back again• Note that extents are +/- 1.5 = 3• Check values when adding keyframes

Page 84: John Biddiscombe CSCS Swiss National Supercomputing Centre

Change the Time track itself

• Double click Time track

• Time is variable• It has its own keyframes• Fix time from frames 1-50• Animate time from 50 to 50+60

Page 85: John Biddiscombe CSCS Swiss National Supercomputing Centre

Sequence mode coordination

• Make sure the Animation inspector has the same information as the animation viewer

• And….the keyframes• When you add/remove them, or adjust the start/end time, they get

rescaled• Could do with a ‘locking keyframe time’ option here

• The time here should be thought of as frames

Page 86: John Biddiscombe CSCS Swiss National Supercomputing Centre

Demo 2

Fixed, forward and reverse time in one animation

Animation (frame) time

View (data) time

We need tracks per dataset – to combine different sources

Page 87: John Biddiscombe CSCS Swiss National Supercomputing Centre

Animate Camera from Python

phi = range(0, 360)

for i in phi:

view.CameraPosition = [2400*math.cos(i*math.pi*2.0/360), 2400*math.sin(i*math.pi*2.0/360), 300]

view.StillRender()

imgfile = "/path/to/snapshot.%03d.png" % i

view.WriteImage(imgfile, "vtkPNGWriter", 1)

To be Continued

Python versions of TimeAnimationCue, Scene, View

Exercise for the reader (Utkarsh) : recreate fancy time animations in Python

Page 88: John Biddiscombe CSCS Swiss National Supercomputing Centre

Conclusion

Few Time dependent filters in ParaView so far

But …

Already powerful tool for animations/analysis

Animation improvements and time step handling will make it hard to beat in terms of features and flexibility