VTK
vtkTemporalStreamTracer.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkTemporalStreamTracer.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
27 #ifndef vtkTemporalStreamTracer_h
28 #define vtkTemporalStreamTracer_h
29 
30 #include "vtkFiltersFlowPathsModule.h" // For export macro
31 #include "vtkSmartPointer.h" // For protected ivars.
32 #include "vtkStreamTracer.h"
33 
34 #include <vector> // STL Header
35 #include <list> // STL Header
36 
38 
40 class vtkDataArray;
41 class vtkDoubleArray;
42 class vtkGenericCell;
43 class vtkIntArray;
45 class vtkPoints;
46 class vtkCellArray;
47 class vtkDoubleArray;
48 class vtkFloatArray;
49 class vtkIntArray;
50 class vtkCharArray;
52 
54 {
55  typedef struct { double x[4]; } Position;
56  typedef struct {
57  // These are used during iteration
59  int CachedDataSetId[2];
60  vtkIdType CachedCellId[2];
62  // These are computed scalars we might display
63  int SourceID;
68  // These are useful to track for debugging etc
69  int ErrorCode;
70  float age;
71  // these are needed across time steps to compute vorticity
72  float rotation;
73  float angularVel;
74  float time;
75  float speed;
77 
78  typedef std::vector<ParticleInformation> ParticleVector;
79  typedef ParticleVector::iterator ParticleIterator;
80  typedef std::list<ParticleInformation> ParticleDataList;
81  typedef ParticleDataList::iterator ParticleListIterator;
82 };
83 
84 class VTKFILTERSFLOWPATHS_EXPORT vtkTemporalStreamTracer : public vtkStreamTracer
85 {
86 public:
87 
89  void PrintSelf(ostream& os, vtkIndent indent) override;
90 
94  static vtkTemporalStreamTracer *New();
95 
97 
102  vtkSetMacro(TimeStep,unsigned int);
103  vtkGetMacro(TimeStep,unsigned int);
105 
107 
111  vtkSetMacro(IgnorePipelineTime, vtkTypeBool);
112  vtkGetMacro(IgnorePipelineTime, vtkTypeBool);
113  vtkBooleanMacro(IgnorePipelineTime, vtkTypeBool);
115 
117 
124  vtkSetMacro(TimeStepResolution,double);
125  vtkGetMacro(TimeStepResolution,double);
127 
129 
138  vtkSetMacro(ForceReinjectionEveryNSteps,int);
139  vtkGetMacro(ForceReinjectionEveryNSteps,int);
141 
142  enum Units
143  {
145  TERMINATION_STEP_UNIT
146  };
147 
149 
155  vtkSetMacro(TerminationTime,double);
156  vtkGetMacro(TerminationTime,double);
158 
160 
164  vtkSetMacro(TerminationTimeUnit,int);
165  vtkGetMacro(TerminationTimeUnit,int);
167  {this->SetTerminationTimeUnit(TERMINATION_TIME_UNIT);};
169  {this->SetTerminationTimeUnit(TERMINATION_STEP_UNIT);};
171 
173 
181  vtkSetMacro(StaticSeeds,vtkTypeBool);
182  vtkGetMacro(StaticSeeds,vtkTypeBool);
183  vtkBooleanMacro(StaticSeeds,vtkTypeBool);
185 
187 
195  vtkSetMacro(StaticMesh,vtkTypeBool);
196  vtkGetMacro(StaticMesh,vtkTypeBool);
197  vtkBooleanMacro(StaticMesh,vtkTypeBool);
199 
201 
207  virtual void SetParticleWriter(vtkAbstractParticleWriter *pw);
208  vtkGetObjectMacro(ParticleWriter, vtkAbstractParticleWriter);
210 
212 
216  vtkSetStringMacro(ParticleFileName);
217  vtkGetStringMacro(ParticleFileName);
219 
221 
225  vtkSetMacro(EnableParticleWriting,vtkTypeBool);
226  vtkGetMacro(EnableParticleWriting,vtkTypeBool);
227  vtkBooleanMacro(EnableParticleWriting,vtkTypeBool);
229 
231 
234  void AddSourceConnection(vtkAlgorithmOutput* input);
235  void RemoveAllSources();
237 
238  protected:
239 
241  ~vtkTemporalStreamTracer() override;
242 
243  //
244  // Make sure the pipeline knows what type we expect as input
245  //
246  int FillInputPortInformation(int port, vtkInformation* info) override;
247 
248  //
249  // The usual suspects
250  //
251  int ProcessRequest(vtkInformation* request,
252  vtkInformationVector** inputVector,
253  vtkInformationVector* outputVector) override;
254 
255  //
256  // Store any information we need in the output and fetch what we can
257  // from the input
258  //
259  int RequestInformation(vtkInformation* request,
260  vtkInformationVector** inputVector,
261  vtkInformationVector* outputVector) override;
262 
263  //
264  // Compute input time steps given the output step
265  //
266  int RequestUpdateExtent(vtkInformation* request,
267  vtkInformationVector** inputVector,
268  vtkInformationVector* outputVector) override;
269 
270  //
271  // what the pipeline calls for each time step
272  //
273  int RequestData(vtkInformation* request,
274  vtkInformationVector** inputVector,
275  vtkInformationVector* outputVector) override;
276 
277  //
278  // these routines are internally called to actually generate the output
279  //
280  virtual int ProcessInput(vtkInformationVector** inputVector);
281 
282  virtual int GenerateOutput(vtkInformationVector** inputVector,
283  vtkInformationVector* outputVector);
284 
285  //
286  // Initialization of input (vector-field) geometry
287  //
288  int InitializeInterpolator();
289  int SetTemporalInput(vtkDataObject *td, int index);
290 
291 //
292 
297  void TestParticles(
300  int &count);
301 
308  virtual void AssignSeedsToProcessors(
309  vtkDataSet *source, int sourceID, int ptId,
311  int &LocalAssignedCount);
312 
317  virtual void AssignUniqueIds(
319 
324  void UpdateParticleList(
326 
331  virtual void TransmitReceiveParticles(
334  bool removeself);
335 
339  void IntegrateParticle(
341  double currenttime, double terminationtime,
342  vtkInitialValueProblemSolver* integrator);
343 
350  bool RetryWithPush(
352  double velocity[3], double delT);
353 
354  // if the particle is added to send list, then returns value is 1,
355  // if it is kept on this process after a retry return value is 0
356  bool SendParticleToAnotherProcess(
358  double point1[4], double delT);
359 
360  void AddParticleToMPISendList(
362 
368  bool ComputeDomainExitLocation(
369  double pos[4], double p2[4], double intersection[4],
370  vtkGenericCell *cell);
371 
372 //
373 
374 //
375  //Track internally which round of RequestData it is--between 0 and 2
377 
378  // Track which process we are
381 
382  // Important for Caching of Cells/Ids/Weights etc
386 
387  // Support 'pipeline' time or manual SetTimeStep
388  unsigned int TimeStep;
389  unsigned int ActualTimeStep;
392 
393  std::vector<double> InputTimeValues;
394  std::vector<double> OutputTimeValues;
395 
396  // more time management
397  double EarliestTime;
398  double CurrentTimeSteps[2];
400 
401  // Particle termination after time
404 
405  // Particle injection+Reinjection
410 
411  // Particle writing to disk
415 
416  // The main lists which are held during operation- between time step updates
417  unsigned int NumberOfParticles;
420 
421  //
422  // Scalar arrays that are generated as each particle is updated
423  //
436 
437  // The output geometry
440 
441  // List used for transmitting between processors during parallel operation
443 
444  // The velocity interpolator
446 
447  // The input datasets which are stored by time step 0 and 1
449  vtkSmartPointer<vtkDataSet> DataReferenceT[2];
450 
451  // Cache bounds info for each dataset we will use repeatedly
452  typedef struct {
453  double b[6];
454  } bounds;
455  std::vector<bounds> CachedBounds[2];
456 
457  // utility function we use to test if a point is inside any of our local datasets
458  bool InsideBounds(double point[]);
459 
460  // global Id counter used to give particles a stamp
463  // for debugging only;
464  int substeps;
465 
466 private:
471 
472 private:
474  void operator=(const vtkTemporalStreamTracer&) = delete;
475 };
476 
477 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:39
vtkTemporalStreamTracerNamespace::ParticleInformation::SourceID
int SourceID
Definition: vtkTemporalStreamTracer.h:63
vtkTemporalStreamTracer::ReinjectionFlag
bool ReinjectionFlag
Definition: vtkTemporalStreamTracer.h:407
vtkTemporalStreamTracerNamespace::ParticleInformation::InjectedPointId
int InjectedPointId
Definition: vtkTemporalStreamTracer.h:65
vtkTemporalStreamTracer::UpdatePiece
int UpdatePiece
Definition: vtkTemporalStreamTracer.h:379
vtkTemporalStreamTracer::OutputPointData
vtkSmartPointer< vtkPointData > OutputPointData
Definition: vtkTemporalStreamTracer.h:434
vtkTemporalStreamTracer::ForceReinjectionEveryNSteps
int ForceReinjectionEveryNSteps
Definition: vtkTemporalStreamTracer.h:406
vtkTemporalStreamTracerNamespace::ParticleInformation::rotation
float rotation
Definition: vtkTemporalStreamTracer.h:72
vtkTemporalStreamTracerNamespace::ParticleInformation::TimeStepAge
int TimeStepAge
Definition: vtkTemporalStreamTracer.h:64
vtkTemporalStreamTracerNamespace::ParticleInformation::CurrentPosition
Position CurrentPosition
Definition: vtkTemporalStreamTracer.h:58
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkFloatArray
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:41
vtkTemporalStreamTracer::ParticleHistories
vtkTemporalStreamTracerNamespace::ParticleDataList ParticleHistories
Definition: vtkTemporalStreamTracer.h:418
vtkTemporalStreamTracerNamespace::ParticleInformation::UniqueParticleId
int UniqueParticleId
Definition: vtkTemporalStreamTracer.h:67
vtkTemporalStreamTracer::InputTimeValues
std::vector< double > InputTimeValues
Definition: vtkTemporalStreamTracer.h:393
vtkTemporalStreamTracer::NumberOfParticles
unsigned int NumberOfParticles
Definition: vtkTemporalStreamTracer.h:417
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:41
vtkTemporalStreamTracerNamespace::ParticleInformation::ErrorCode
int ErrorCode
Definition: vtkTemporalStreamTracer.h:69
vtkTemporalStreamTracer::UniqueIdCounterMPI
vtkIdType UniqueIdCounterMPI
Definition: vtkTemporalStreamTracer.h:462
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkTemporalStreamTracer::SetTerminationTimeUnitToStepUnit
void SetTerminationTimeUnitToStepUnit()
Definition: vtkTemporalStreamTracer.h:168
vtkTemporalStreamTracer::StaticSeeds
vtkTypeBool StaticSeeds
Definition: vtkTemporalStreamTracer.h:385
vtkPolyDataAlgorithm::RequestUpdateExtent
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
vtkTemporalStreamTracer::UniqueIdCounter
vtkIdType UniqueIdCounter
Definition: vtkTemporalStreamTracer.h:461
vtkStreamTracer::RequestData
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
vtkStreamTracer.h
vtkTemporalStreamTracer::TERMINATION_TIME_UNIT
Definition: vtkTemporalStreamTracer.h:144
vtkTemporalStreamTracer::TimeStepResolution
double TimeStepResolution
Definition: vtkTemporalStreamTracer.h:399
vtkTemporalStreamTracerNamespace::Position
Definition: vtkTemporalStreamTracer.h:55
vtkSmartPointer< vtkFloatArray >
vtkTemporalStreamTracer::ParticleAge
vtkSmartPointer< vtkFloatArray > ParticleAge
Definition: vtkTemporalStreamTracer.h:424
vtkTemporalStreamTracer
A Parallel Particle tracer for unsteady vector fields.
Definition: vtkTemporalStreamTracer.h:84
vtkTemporalStreamTracer::UpdateNumPieces
int UpdateNumPieces
Definition: vtkTemporalStreamTracer.h:380
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:54
vtkMultiBlockDataSet
Composite dataset that organizes datasets into blocks.
Definition: vtkMultiBlockDataSet.h:51
vtkTemporalStreamTracer::EarliestTime
double EarliestTime
Definition: vtkTemporalStreamTracer.h:397
vtkTemporalStreamTracerNamespace::ParticleInformation::InjectedStepId
int InjectedStepId
Definition: vtkTemporalStreamTracer.h:66
vtkTemporalStreamTracer::Interpolator
vtkSmartPointer< vtkTemporalInterpolatedVelocityField > Interpolator
Definition: vtkTemporalStreamTracer.h:445
vtkTemporalStreamTracer::InjectedStepIds
vtkSmartPointer< vtkIntArray > InjectedStepIds
Definition: vtkTemporalStreamTracer.h:428
vtkStreamTracer::FillInputPortInformation
int FillInputPortInformation(int, vtkInformation *) override
Fill the input port information objects for this algorithm.
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:825
vtkStreamTracer::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkCharArray
dynamic, self-adjusting array of char
Definition: vtkCharArray.h:38
vtkX3D::port
Definition: vtkX3D.h:447
vtkTemporalStreamTracer::ParticleFileName
char * ParticleFileName
Definition: vtkTemporalStreamTracer.h:413
vtkX3D::point
Definition: vtkX3D.h:236
vtkTemporalStreamTracer::TerminationTime
double TerminationTime
Definition: vtkTemporalStreamTracer.h:402
vtkTemporalStreamTracer::ActualTimeStep
unsigned int ActualTimeStep
Definition: vtkTemporalStreamTracer.h:389
vtkTemporalStreamTracer::AllFixedGeometry
int AllFixedGeometry
Definition: vtkTemporalStreamTracer.h:383
vtkTemporalStreamTracer::bounds
Definition: vtkTemporalStreamTracer.h:452
vtkTemporalStreamTracer::ParticleVorticity
vtkSmartPointer< vtkFloatArray > ParticleVorticity
Definition: vtkTemporalStreamTracer.h:430
vtkTemporalStreamTracer::NumberOfInputTimeSteps
unsigned int NumberOfInputTimeSteps
Definition: vtkTemporalStreamTracer.h:391
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:82
vtkTemporalStreamTracer::ParticleInjectionTime
vtkTimeStamp ParticleInjectionTime
Definition: vtkTemporalStreamTracer.h:409
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkCellArray
object to represent cell connectivity
Definition: vtkCellArray.h:50
vtkIntArray
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:45
vtkSmartPointer.h
vtkAbstractParticleWriter
abstract class to write particle data to file
Definition: vtkAbstractParticleWriter.h:37
vtkTemporalStreamTracer::IgnorePipelineTime
vtkTypeBool IgnorePipelineTime
Definition: vtkTemporalStreamTracer.h:390
vtkTemporalStreamTracer::MPISendList
vtkTemporalStreamTracerNamespace::ParticleVector MPISendList
Definition: vtkTemporalStreamTracer.h:442
vtkStreamTracer
Streamline generator.
Definition: vtkStreamTracer.h:107
vtkTemporalStreamTracer::InjectedPointIds
vtkSmartPointer< vtkIntArray > InjectedPointIds
Definition: vtkTemporalStreamTracer.h:427
vtkTemporalStreamTracerNamespace::ParticleInformation::angularVel
float angularVel
Definition: vtkTemporalStreamTracer.h:73
vtkTemporalStreamTracerNamespace::ParticleInformation::speed
float speed
Definition: vtkTemporalStreamTracer.h:75
vtkTemporalStreamTracer::TimeStep
unsigned int TimeStep
Definition: vtkTemporalStreamTracer.h:388
vtkTemporalStreamTracer::ParticleWriter
vtkAbstractParticleWriter * ParticleWriter
Definition: vtkTemporalStreamTracer.h:412
vtkTemporalStreamTracer::EnableParticleWriting
vtkTypeBool EnableParticleWriting
Definition: vtkTemporalStreamTracer.h:414
vtkTemporalStreamTracerNamespace::ParticleInformation::age
float age
Definition: vtkTemporalStreamTracer.h:70
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:62
vtkAbstractInterpolatedVelocityField
An abstract class for obtaining the interpolated velocity values at a point.
Definition: vtkAbstractInterpolatedVelocityField.h:84
vtkTemporalStreamTracer::ParticleIds
vtkSmartPointer< vtkIntArray > ParticleIds
Definition: vtkTemporalStreamTracer.h:425
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:86
vtkStreamTracer::Units
Units
Definition: vtkStreamTracer.h:158
vtkTemporalStreamTracer::ParticleCells
vtkSmartPointer< vtkCellArray > ParticleCells
Definition: vtkTemporalStreamTracer.h:438
vtkX3D::info
Definition: vtkX3D.h:376
vtkTemporalStreamTracerNamespace::ParticleVector
std::vector< ParticleInformation > ParticleVector
Definition: vtkTemporalStreamTracer.h:78
vtkTemporalStreamTracerNamespace
Definition: vtkTemporalStreamTracer.h:53
vtkTemporalStreamTracer::ParticleAngularVel
vtkSmartPointer< vtkFloatArray > ParticleAngularVel
Definition: vtkTemporalStreamTracer.h:432
vtkTemporalStreamTracerNamespace::ParticleListIterator
ParticleDataList::iterator ParticleListIterator
Definition: vtkTemporalStreamTracer.h:81
vtkTemporalStreamTracerNamespace::ParticleInformation
Definition: vtkTemporalStreamTracer.h:56
vtkTemporalStreamTracer::OutputTimeValues
std::vector< double > OutputTimeValues
Definition: vtkTemporalStreamTracer.h:394
vtkAlgorithmOutput
Proxy object to connect input/output ports.
Definition: vtkAlgorithmOutput.h:39
vtkTemporalStreamTracer::OutputCoordinates
vtkSmartPointer< vtkPoints > OutputCoordinates
Definition: vtkTemporalStreamTracer.h:439
vtkTemporalInterpolatedVelocityField
A helper class for interpolating between times during particle tracing.
Definition: vtkTemporalInterpolatedVelocityField.h:68
vtkTemporalStreamTracer::SetTerminationTimeUnitToTimeUnit
void SetTerminationTimeUnitToTimeUnit()
Definition: vtkTemporalStreamTracer.h:166
vtkTemporalStreamTracerNamespace::ParticleDataList
std::list< ParticleInformation > ParticleDataList
Definition: vtkTemporalStreamTracer.h:80
vtkGenericCell
provides thread-safe access to cells
Definition: vtkGenericCell.h:39
vtkTemporalStreamTracer::ReinjectionCounter
int ReinjectionCounter
Definition: vtkTemporalStreamTracer.h:408
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:41
vtkTemporalStreamTracer::RequestIndex
int RequestIndex
Definition: vtkTemporalStreamTracer.h:376
vtkTemporalStreamTracerNamespace::ParticleInformation::time
float time
Definition: vtkTemporalStreamTracer.h:74
vtkTemporalStreamTracer::ParticleSourceIds
vtkSmartPointer< vtkCharArray > ParticleSourceIds
Definition: vtkTemporalStreamTracer.h:426
vtkTemporalStreamTracer::InterpolationCount
int InterpolationCount
Definition: vtkTemporalStreamTracer.h:435
vtkTemporalStreamTracer::TerminationTimeUnit
int TerminationTimeUnit
Definition: vtkTemporalStreamTracer.h:403
vtkInitialValueProblemSolver
Integrate a set of ordinary differential equations (initial value problem) in time.
Definition: vtkInitialValueProblemSolver.h:40
vtkTemporalStreamTracer::cellVectors
vtkSmartPointer< vtkDoubleArray > cellVectors
Definition: vtkTemporalStreamTracer.h:433
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:64
vtkTemporalStreamTracer::substeps
int substeps
Definition: vtkTemporalStreamTracer.h:464
vtkTemporalStreamTracerNamespace::ParticleIterator
ParticleVector::iterator ParticleIterator
Definition: vtkTemporalStreamTracer.h:79
vtkTemporalStreamTracer::LocalSeeds
vtkTemporalStreamTracerNamespace::ParticleVector LocalSeeds
Definition: vtkTemporalStreamTracer.h:419
vtkX3D::index
Definition: vtkX3D.h:246
vtkTemporalStreamTracer::StaticMesh
vtkTypeBool StaticMesh
Definition: vtkTemporalStreamTracer.h:384
vtkTemporalStreamTracer::ParticleRotation
vtkSmartPointer< vtkFloatArray > ParticleRotation
Definition: vtkTemporalStreamTracer.h:431
vtkStreamTracer::New
static vtkStreamTracer * New()
Construct object to start from position (0,0,0), with forward integration, terminal speed 1....
vtkStreamTracer::SetInterpolatorPrototype
void SetInterpolatorPrototype(vtkAbstractInterpolatedVelocityField *ivf)
The object used to interpolate the velocity field during integration is of the same class as this pro...
vtkPolyDataAlgorithm::ProcessRequest
int ProcessRequest(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
see vtkAlgorithm for details
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkPolyDataAlgorithm::RequestInformation
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
vtkTemporalStreamTracer::ErrorCodeArray
vtkSmartPointer< vtkIntArray > ErrorCodeArray
Definition: vtkTemporalStreamTracer.h:429
vtkTemporalStreamTracerNamespace::ParticleInformation::LocationState
int LocationState
Definition: vtkTemporalStreamTracer.h:61