28 #ifndef vtkParticleTracerBase_h
29 #define vtkParticleTracerBase_h
31 #include "vtkFiltersFlowPathsModule.h"
67 int CachedDataSetId[2];
121 vtkGetMacro(ComputeVorticity,
bool);
129 vtkGetMacro(TerminalSpeed,
double);
138 vtkGetMacro(RotationScale,
double);
162 vtkGetMacro(ForceReinjectionEveryNSteps,
int);
174 vtkGetMacro(TerminationTime,
double);
188 vtkGetMacro(StartTime,
double);
202 vtkSetMacro(StaticSeeds,
int);
203 vtkGetMacro(StaticSeeds,
int);
216 vtkSetMacro(StaticMesh,
int);
217 vtkGetMacro(StaticMesh,
int);
236 vtkSetStringMacro(ParticleFileName);
237 vtkGetStringMacro(ParticleFileName);
409 double pos[4],
double p2[4],
double intersection[4],
vtkGenericCell* cell);
451 vtkGetMacro(ReinjectionCounter,
int);
452 vtkGetMacro(CurrentTimeValue,
double);
486 double delT,
int subSteps);
488 bool SetTerminationTimeNoModify(
double t);
492 double IntegrationStep;
494 bool ComputeVorticity;
495 double RotationScale;
496 double TerminalSpeed;
499 int ReinjectionCounter;
502 int AllFixedGeometry;
506 std::vector<double> InputTimeValues;
508 double TerminationTime;
509 double CurrentTimeValue;
514 int TerminationTimeStep;
518 int ForceReinjectionEveryNSteps;
524 char* ParticleFileName;
542 std::vector<bounds> CachedBounds[2];
565 unsigned int NumberOfParticles();
570 static const double Epsilon;
An abstract class for obtaining the interpolated velocity values at a point.
abstract class to write particle data to file
Proxy object to connect input/output ports.
object to represent cell connectivity
dynamic, self-adjusting array of char
abstract superclass for composite (multi-block or AMR) datasets
abstract superclass for arrays of numeric data
general representation of visualization data
abstract class to specify dataset behavior
dynamic, self-adjusting array of double
dynamic, self-adjusting array of float
provides thread-safe access to cells
a simple class to control print indentation
Integrate a set of ordinary differential equations (initial value problem) in time.
dynamic, self-adjusting array of int
Composite dataset that organizes datasets into blocks.
Multiprocessing communication superclass.
A particle tracer for vector fields.
vtkTypeBool DisableResetCache
vtkSmartPointer< vtkPointData > ProtoPD
ProtoPD is used just to keep track of the input array names and number of components for copy allocat...
double GetCacheDataTime()
vtkCharArray * GetParticleSourceIds(vtkPointData *)
void IntegrateParticle(vtkParticleTracerBaseNamespace::ParticleListIterator &it, double currenttime, double terminationtime, vtkInitialValueProblemSolver *integrator)
particle between the two times supplied.
void SetComputeVorticity(bool)
vtkSmartPointer< vtkPointData > ParticlePointData
void TestParticles(vtkParticleTracerBaseNamespace::ParticleVector &candidates, std::vector< int > &passed)
vtkIntArray * GetErrorCodeArr(vtkPointData *)
virtual void AddRestartSeeds(vtkInformationVector **)
For restarts of particle paths, we add in the ability to add in particles from a previous computation...
bool IsPointDataValid(vtkCompositeDataSet *input, std::vector< std::string > &arrayNames)
void SetTerminationTime(double t)
Setting TerminationTime to a positive value will cause particles to terminate when the time is reache...
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
This is called by the superclass.
virtual bool UpdateParticleListFromOtherProcesses()
this is used during classification of seed points and also between iterations of the main loop as par...
vtkFloatArray * GetParticleVorticity(vtkPointData *)
vtkFloatArray * GetParticleRotation(vtkPointData *)
void UpdateParticleList(vtkParticleTracerBaseNamespace::ParticleVector &candidates)
and sending between processors, into a list, which is used as the master list on this processor
virtual void AppendToExtraPointDataArrays(vtkParticleTracerBaseNamespace::ParticleInformation &)
double GetCacheDataTime(int i)
void TestParticles(vtkParticleTracerBaseNamespace::ParticleVector &candidates, vtkParticleTracerBaseNamespace::ParticleVector &passed, int &count)
inside our data.
vtkTypeBool ProcessRequest(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
see vtkAlgorithm for details
void AddSourceConnection(vtkAlgorithmOutput *input)
Provide support for multiple seed sources.
void CalculateVorticity(vtkGenericCell *cell, double pcoords[3], vtkDoubleArray *cellVectors, double vorticity[3])
void CreateProtoPD(vtkDataObject *input)
virtual int ProcessInput(vtkInformationVector **inputVector)
vtkTemporalInterpolatedVelocityField * GetInterpolator()
vtkIntArray * GetInjectedStepIds(vtkPointData *)
virtual bool SendParticleToAnotherProcess(vtkParticleTracerBaseNamespace::ParticleInformation &, vtkParticleTracerBaseNamespace::ParticleInformation &, vtkPointData *)
void SetForceReinjectionEveryNSteps(int)
int UpdateDataCache(vtkDataObject *td)
void SetTerminalSpeed(double)
virtual void SetParticleWriter(vtkAbstractParticleWriter *pw)
Set/Get the Writer associated with this Particle Tracer Ideally a parallel IO capable vtkH5PartWriter...
void SetRotationScale(double)
void AddParticle(vtkParticleTracerBaseNamespace::ParticleInformation &info, double *velocity)
vtkParticleTracerBaseNamespace::ParticleDataList ParticleHistories
void GetPointDataArrayNames(vtkDataSet *input, std::vector< std::string > &names)
virtual void Initialize()
virtual vtkPolyData * Execute(vtkInformationVector **inputVector)
int RequestUpdateExtent(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
This is called by the superclass.
void SetStartTime(double t)
virtual void AssignSeedsToProcessors(double time, vtkDataSet *source, int sourceID, int ptId, vtkParticleTracerBaseNamespace::ParticleVector &localSeedPoints, int &localAssignedCount)
all the injection/seed points according to which processor they belong to.
virtual std::vector< vtkDataSet * > GetSeedSources(vtkInformationVector *inputVector, int timeStep)
Method to get the data set seed sources.
vtkTypeBool IgnorePipelineTime
bool InsideBounds(double point[])
virtual bool IsPointDataValid(vtkDataObject *input)
Methods that check that the input arrays are ordered the same on all data sets.
int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
vtkFloatArray * GetParticleAge(vtkPointData *)
vtkIntArray * GetInjectedPointIds(vtkPointData *)
void SetIntegratorType(int type)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkFloatArray * GetParticleAngularVel(vtkPointData *)
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void PrintParticleHistories()
vtkIdType UniqueIdCounter
virtual void InitializeExtraPointDataArrays(vtkPointData *vtkNotUsed(outputPD))
Methods to append values to existing point data arrays that may only be desired on specific concrete ...
~vtkParticleTracerBase() override
void SetIntegrator(vtkInitialValueProblemSolver *)
vtkIntArray * GetParticleIds(vtkPointData *)
bool ComputeDomainExitLocation(double pos[4], double p2[4], double intersection[4], vtkGenericCell *cell)
This is an old routine kept for possible future use.
virtual void ResetCache()
virtual void AssignUniqueIds(vtkParticleTracerBaseNamespace::ParticleVector &localSeedPoints)
give each one a unique ID.
virtual int OutputParticles(vtkPolyData *poly)=0
int InitializeInterpolator()
vtkSmartPointer< vtkPolyData > Output
represent and manipulate point attribute data
represent and manipulate 3D points
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
A helper class for interpolating between times during particle tracing.
record modification and/or execution time
ParticleVector::iterator ParticleIterator
std::list< ParticleInformation > ParticleDataList
ParticleDataList::iterator ParticleListIterator
std::vector< ParticleInformation > ParticleVector
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)