42 #ifndef vtkLagrangianBasicIntegrationModel_h
43 #define vtkLagrangianBasicIntegrationModel_h
45 #include "vtkFiltersFlowPathsModule.h"
54 VTK_ABI_NAMESPACE_BEGIN
62 class vtkDataSetsType;
70 class vtkLocatorsType;
87 SURFACE_TYPE_MODEL = 0,
88 SURFACE_TYPE_TERM = 1,
89 SURFACE_TYPE_BOUNCE = 2,
90 SURFACE_TYPE_BREAK = 3,
96 VARIABLE_STEP_PREV = -1,
97 VARIABLE_STEP_CURRENT = 0,
98 VARIABLE_STEP_NEXT = 1,
104 using Superclass::FunctionValues;
112 int FunctionValues(
double* x,
double* f,
void* userData)
override;
129 vtkGetMacro(LocatorsBuilt,
bool);
130 vtkSetMacro(LocatorsBuilt,
bool);
148 virtual void AddDataSet(
149 vtkDataSet* dataset,
bool surface =
false,
unsigned int surfaceFlatIndex = 0);
150 virtual void ClearDataSets(
bool surface =
false);
157 vtkSetMacro(UseInitialIntegrationTime,
bool);
158 vtkGetMacro(UseInitialIntegrationTime,
bool);
159 vtkBooleanMacro(UseInitialIntegrationTime,
bool);
166 vtkGetMacro(Tolerance,
double);
173 vtkGetMacro(LocatorTolerance,
double);
194 std::queue<vtkLagrangianParticle*>& particles,
unsigned int& interactedSurfaceFlatIndex,
195 PassThroughParticlesType& passThroughParticles);
202 virtual void SetInputArrayToProcess(
203 int idx,
int port,
int connection,
int fieldAssociation,
const char*
name);
222 virtual bool FindInLocators(
263 vtkSetMacro(NonPlanarQuadSupport,
bool);
264 vtkGetMacro(NonPlanarQuadSupport,
bool);
265 vtkBooleanMacro(NonPlanarQuadSupport,
bool);
321 virtual int GetWeightsSize();
348 double* xnext,
double t,
double& delT,
double& delTActual,
double minStep,
double maxStep,
349 double maxError,
double cellLength,
double& error,
int& integrationResult,
390 virtual void PreIntegrate(std::queue<vtkLagrangianParticle*>& vtkNotUsed(particles)) {}
405 vtkSetMacro(NumberOfTrackedUserData,
int);
406 vtkGetMacro(NumberOfTrackedUserData,
int);
427 virtual void InitializeParticleData(
vtkFieldData* particleData,
int maxTuples = 0);
449 virtual void InsertParticleData(
486 double* weights,
double* x,
double* f) = 0;
509 virtual bool BounceParticle(
520 std::queue<vtkLagrangianParticle*>& particles);
541 double p2[3],
double tol,
double& t,
double x[3]);
547 virtual void InterpolateNextParticleVariables(
555 virtual bool CheckSurfacePerforation(
583 virtual int GetFlowOrSurfaceDataNumberOfComponents(
int idx,
vtkDataSet* dataSet);
590 virtual int GetFlowOrSurfaceDataFieldAssociation(
int idx);
600 virtual void ComputeSurfaceDefaultValues(
601 const char* arrayName,
vtkDataSet* dataset,
int nComponent,
double* defaultValues);
628 double LocatorTolerance = 0.001;
631 int NumberOfTrackedUserData = 0;
650 VTK_ABI_NAMESPACE_END
vtkNew< vtkStringArray > SurfaceArrayEnumValues
std::queue< PassThroughParticlesItem > PassThroughParticlesType
std::pair< unsigned int, vtkLagrangianParticle * > PassThroughParticlesItem
std::vector< std::pair< int, std::string > > enumValues
represent and manipulate point attribute data
vtkNew< vtkDoubleArray > SurfaceArrayDefaultValues
vtkAbstractCellLocator * Locator
virtual void InitializeParticle(vtkLagrangianParticle *particle)
Initialize a particle by setting user variables and perform any user model specific operation...
abstract class to specify dataset behavior
Abstract superclass for all arrays.
represent and manipulate cell attribute data
virtual void InsertSurfaceInteractionData(vtkLagrangianParticle *particle, vtkPointData *particleData)
Method to be reimplemented if needed in inherited classes.
an abstract base class for locators which find cells
a vtkAbstractArray subclass for strings
virtual void PreParticleInitalization()
Allow for model setup prior to Particle Initialization.
vtkNew< vtkIntArray > SeedArrayTypes
struct to hold a user data
concrete dataset represents vertices, lines, polygons, and triangle strips
std::mutex ParticleQueueMutex
vtkNew< vtkIntArray > SurfaceArrayTypes
vtkWeakPointer< vtkLagrangianParticleTracker > Tracker
provides thread-safe access to cells
const std::string pointData
dynamic, self-adjusting array of double
bool NonPlanarQuadSupport
virtual void ParticleAboutToBeDeleted(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
virtual void ParallelManualShift(vtkLagrangianParticle *particle)
Method called by parallel algorithm after receiving a particle from stream if PManualShift flag has b...
abstract class to specify cell behavior
dynamic, self-adjusting array of int
virtual bool FinalizeOutputs(vtkPolyData *particlePathsOutput, vtkDataObject *interractionOutput)
Enable model post process on output Return true if successful, false otherwise Empty and Always retur...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkIntArray > SeedArrayComps
a simple class to control print indentation
vtkFunctionSet abstract implementation to be used in the vtkLagrangianParticleTracker integrator...
virtual bool CheckFreeFlightTermination(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
composite dataset to encapsulates pieces of dataset.
abstract superclass for arrays of numeric data
vtkLocatorsType * SurfaceLocators
vtkLocatorsType * Locators
Abstract interface for sets of functions.
Basis class for Lagrangian particles.
virtual int FunctionValues(double *x, double *f)
Evaluate functions at x_j.
vtkNew< vtkIntArray > SurfaceArrayComps
vtkNew< vtkStringArray > SeedArrayNames
vtkDataSetsType * DataSets
vtkNew< vtkStringArray > SurfaceArrayNames
std::map< std::string, SurfaceArrayDescription > SurfaceArrayDescriptions
vtkSurfaceType * Surfaces
Composite dataset that organizes datasets into blocks.
virtual bool CheckAdaptiveStepReintegration(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
virtual void PreIntegrate(std::queue< vtkLagrangianParticle * > &particles)
Enable model to modify particle before integration.
std::pair< ArrayVal, std::string > ArrayMapVal
general representation of visualization data
Filter to inject and track particles in a flow.
std::map< int, ArrayMapVal > InputArrays
Represents and manipulates a collection of data arrays.
bool UseInitialIntegrationTime
Integrate a set of ordinary differential equations (initial value problem) in time.