79 #ifndef vtkLagrangianParticleTracker_h
80 #define vtkLagrangianParticleTracker_h
84 #include "vtkFiltersFlowPathsModule.h"
91 VTK_ABI_NAMESPACE_BEGIN
107 struct IntegratingFunctor;
119 STEP_CUR_CELL_LENGTH = 1,
120 STEP_CUR_CELL_VEL_DIR = 3,
121 STEP_CUR_CELL_DIV_THEO = 5
122 } CellLengthComputation;
148 vtkSetMacro(GeneratePolyVertexInteractionOutput,
bool);
149 vtkGetMacro(GeneratePolyVertexInteractionOutput,
bool);
166 vtkSetMacro(CellLengthComputationMode,
int);
167 vtkGetMacro(CellLengthComputationMode,
int);
174 vtkSetMacro(StepFactor,
double);
175 vtkGetMacro(StepFactor,
double);
182 vtkSetMacro(StepFactorMin,
double);
183 vtkGetMacro(StepFactorMin,
double);
190 vtkSetMacro(StepFactorMax,
double);
191 vtkGetMacro(StepFactorMax,
double);
198 vtkSetMacro(MaximumNumberOfSteps,
int);
199 vtkGetMacro(MaximumNumberOfSteps,
int);
207 vtkSetMacro(MaximumIntegrationTime,
double);
208 vtkGetMacro(MaximumIntegrationTime,
double);
218 vtkSetMacro(AdaptiveStepReintegration,
bool);
219 vtkGetMacro(AdaptiveStepReintegration,
bool);
220 vtkBooleanMacro(AdaptiveStepReintegration,
bool);
228 vtkSetMacro(GenerateParticlePathsOutput,
bool);
229 vtkGetMacro(GenerateParticlePathsOutput,
bool);
230 vtkBooleanMacro(GenerateParticlePathsOutput,
bool);
304 std::queue<vtkLagrangianParticle*>& particles,
vtkPointData* seedData);
307 int nVar, std::queue<vtkLagrangianParticle*>& particles);
334 std::queue<vtkLagrangianParticle*>&,
vtkPolyData* particlePathsOutput,
341 vtkIdList* particlePathPointId,
bool prev =
false);
347 unsigned int interactedSurfaceFlatIndex,
vtkDataObject* interactionOutput);
359 double t,
double& delT,
double& delTActual,
double minStep,
double maxStep,
double cellLength,
378 bool GenerateParticlePathsOutput =
true;
393 bool FlowCacheInvalid =
true;
396 bool SurfaceCacheInvalid =
true;
399 friend struct IntegratingFunctor;
408 VTK_ABI_NAMESPACE_END
Proxy object to connect input/output ports.
Fast, simple class for representing and operating on 3D bounds.
object to represent cell connectivity
abstract superclass for arrays of numeric data
Superclass for algorithms that produce only data object as output.
general representation of visualization data
abstract class to specify dataset behavior
dynamic, self-adjusting array of double
list of point or cell ids
a simple class to control print indentation
Integrate a set of ordinary differential equations (initial value problem) in time.
vtkFunctionSet abstract implementation to be used in the vtkLagrangianParticleTracker integrator.
Filter to inject and track particles in a flow.
vtkDataObject * GetSurface()
Specify the source object used to compute surface interaction with Note that this method does not con...
vtkIdType IntegratedParticleCounterIncrement
double MinimumVelocityMagnitude
void SetSourceConnection(vtkAlgorithmOutput *algOutput)
Specify the source object used to generate particle initial position (seeds).
virtual bool UpdateSurfaceCacheIfNeeded(vtkDataObject *&surfaces)
vtkDataObject * SurfacesCache
virtual vtkIdType GetNewParticleId()
Get an unique id for a particle This method is thread safe.
double MaximumIntegrationTime
void InsertPathOutputPoint(vtkLagrangianParticle *particle, vtkPolyData *particlePathsOutput, vtkIdList *particlePathPointId, bool prev=false)
This method is thread safe.
int FillInputPortInformation(int port, vtkInformation *info) override
Declare input port type.
virtual void GetParticleFeed(std::queue< vtkLagrangianParticle * > &particleQueue)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool GeneratePolyVertexInteractionOutput
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
Process inputs to integrate particle and generate output.
vtkBoundingBox FlowBoundsCache
vtkSmartPointer< vtkInitialValueProblemSolver > Integrator
vtkMTimeType SurfacesTime
bool ComputeNextStep(vtkInitialValueProblemSolver *integrator, double *xprev, double *xnext, double t, double &delT, double &delTActual, double minStep, double maxStep, double cellLength, int &integrationRes, vtkLagrangianParticle *particle)
This method is thread safe.
vtkLagrangianParticleTracker()
virtual void InitializeSurface(vtkDataObject *&surfaces)
virtual void DeleteParticle(vtkLagrangianParticle *particle)
This method is thread safe Call the ParticleAboutToBeDeleted model method and delete the particle.
virtual void GenerateParticles(const vtkBoundingBox *bounds, vtkDataSet *seeds, vtkDataArray *initialVelocities, vtkDataArray *initialIntegrationTimes, vtkPointData *seedData, int nVar, std::queue< vtkLagrangianParticle * > &particles)
static vtkLagrangianParticleTracker * New()
virtual bool InitializeParticles(const vtkBoundingBox *bounds, vtkDataSet *seeds, std::queue< vtkLagrangianParticle * > &particles, vtkPointData *seedData)
vtkInitialValueProblemSolver * GetIntegrator()
Set/Get the integrator.
static void InsertPolyVertexCell(vtkPolyData *polydata)
double ComputeCellLength(vtkLagrangianParticle *particle)
Computes the cell length for the next step using the method set by CellLengthComputationMode.
vtkLagrangianBasicIntegrationModel * GetIntegrationModel()
Set/Get the integration model.
void SetIntegrator(vtkInitialValueProblemSolver *integrator)
Set/Get the integrator.
void SetSurfaceData(vtkDataObject *source)
Specify the source object used to compute surface interaction with Note that this method does not con...
static void InsertVertexCells(vtkPolyData *polydata)
vtkMTimeType GetMTime() override
Get the tracker modified time taking into account the integration model and the integrator.
std::atomic< vtkIdType > IntegratedParticleCounter
void SetSurfaceConnection(vtkAlgorithmOutput *algOutput)
Specify the object used to compute surface interaction with.
vtkLagrangianThreadedData * SerialThreadedData
void SetIntegrationModel(vtkLagrangianBasicIntegrationModel *integrationModel)
Set/Get the integration model.
virtual int Integrate(vtkInitialValueProblemSolver *integrator, vtkLagrangianParticle *, std::queue< vtkLagrangianParticle * > &, vtkPolyData *particlePathsOutput, vtkPolyLine *particlePath, vtkDataObject *interactionOutput)
This method is thread safe.
std::atomic< vtkIdType > ParticleCounter
virtual bool InitializeFlow(vtkDataObject *flow, vtkBoundingBox *bounds)
vtkDataObject * FlowCache
int FillOutputPortInformation(int port, vtkInformation *info) override
Declare output port type.
bool AdaptiveStepReintegration
int RequestDataObject(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Create outputs objects.
virtual bool InitializePathsOutput(vtkPointData *seedData, vtkIdType numberOfSeeds, vtkPolyData *&particlePathsOutput)
This method is thread safe.
virtual bool InitializeInteractionOutput(vtkPointData *seedData, vtkDataObject *surfaces, vtkDataObject *&interractionOutput)
This method is thread safe.
vtkDataObject * GetSource()
Specify the source object used to generate particle initial position (seeds).
double MinimumReductionFactor
void SetSourceData(vtkDataObject *source)
Specify the source object used to generate particle initial position (seeds).
void InsertInteractionOutputPoint(vtkLagrangianParticle *particle, unsigned int interactedSurfaceFlatIndex, vtkDataObject *interactionOutput)
This method is thread safe.
int CellLengthComputationMode
virtual bool FinalizeOutputs(vtkPolyData *particlePathsOutput, vtkDataObject *interactionOutput)
~vtkLagrangianParticleTracker() override
vtkSmartPointer< vtkLagrangianBasicIntegrationModel > IntegrationModel
Basis class for Lagrangian particles.
Composite dataset that organizes datasets into blocks.
composite dataset to encapsulates pieces of dataset.
represent and manipulate point attribute data
represent and manipulate 3D points
concrete dataset represents vertices, lines, polygons, and triangle strips
cell represents a set of 1D lines
struct to hold a user data
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkTypeUInt32 vtkMTimeType