42#ifndef vtkLagrangianBasicIntegrationModel_h 
   43#define vtkLagrangianBasicIntegrationModel_h 
   45#include "vtkFiltersFlowPathsModule.h"  
   54VTK_ABI_NAMESPACE_BEGIN
 
   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;
 
  129  vtkGetMacro(LocatorsBuilt, 
bool);
 
  130  vtkSetMacro(LocatorsBuilt, 
bool);
 
  149    vtkDataSet* dataset, 
bool surface = 
false, 
unsigned int surfaceFlatIndex = 0);
 
  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,
 
  203    int idx, 
int port, 
int connection, 
int fieldAssociation, 
const char* name);
 
  263  vtkSetMacro(NonPlanarQuadSupport, 
bool);
 
  264  vtkGetMacro(NonPlanarQuadSupport, 
bool);
 
  265  vtkBooleanMacro(NonPlanarQuadSupport, 
bool);
 
  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);
 
  486    double* weights, 
double* x, 
double* f) = 0;
 
  520    std::queue<vtkLagrangianParticle*>& particles);
 
  541    double p2[3], 
double tol, 
double& t, 
double x[3]);
 
  601    const char* arrayName, 
vtkDataSet* dataset, 
int nComponent, 
double* defaultValues);
 
  621  } SurfaceArrayDescription;
 
  628  double LocatorTolerance = 0.001;
 
  631  int NumberOfTrackedUserData = 0;
 
Abstract superclass for all arrays.
 
an abstract base class for locators which find cells
 
represent and manipulate cell attribute data
 
abstract class to specify cell behavior
 
abstract superclass for arrays of numeric data
 
general representation of visualization data
 
abstract class to specify dataset behavior
 
dynamic, self-adjusting array of double
 
Represents and manipulates a collection of data arrays.
 
Abstract interface for sets of functions.
 
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
 
vtkFunctionSet abstract implementation to be used in the vtkLagrangianParticleTracker integrator.
 
virtual void InsertInteractionData(vtkLagrangianParticle *particle, vtkFieldData *data)
Method used by the LPT to insert data from the particle into the provided vtkFieldData.
 
virtual void SetInputArrayToProcess(int idx, int port, int connection, int fieldAssociation, const char *name)
Set a input array to process at a specific index, identified by a port, connection,...
 
std::map< int, ArrayMapVal > InputArrays
 
virtual int GetFlowOrSurfaceDataFieldAssociation(int idx)
Recover a field association for a specified array index if it has been set using SetInputArrayToProce...
 
virtual vtkStringArray * GetSurfaceArrayEnumValues()
Get the surface arrays expected values and associated enums Used Only be the vtkLagrangianSurfaceHelp...
 
virtual vtkStringArray * GetSurfaceArrayNames()
Get the surface arrays expected name Used Only be the vtkLagrangianSurfaceHelper in ParaView plugins.
 
std::queue< PassThroughParticlesItem > PassThroughParticlesType
 
virtual bool CheckFreeFlightTermination(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
 
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
 
vtkNew< vtkIntArray > SeedArrayComps
 
virtual void ParallelManualShift(vtkLagrangianParticle *particle)
Method called by parallel algorithm after receiving a particle from stream if PManualShift flag has b...
 
virtual void InitializeParticleData(vtkFieldData *particleData, int maxTuples=0)
Method used by the LPT to initialize data insertion in the provided vtkFieldData.
 
virtual bool TerminateParticle(vtkLagrangianParticle *particle)
Terminate a particle, by positioning flags.
 
virtual bool FindInLocators(double *x, vtkLagrangianParticle *particle, vtkDataSet *&dataset, vtkIdType &cellId)
Convenience methods to call FindInLocators with less arguments THESE METHODS ARE NOT THREAD-SAFE.
 
virtual void InterpolateNextParticleVariables(vtkLagrangianParticle *particle, double interpolationFactor, bool forceInside=false)
compute all particle variables using interpolation factor This method is thread-safe.
 
vtkLagrangianBasicIntegrationModel()
 
virtual void InsertSurfaceInteractionData(vtkLagrangianParticle *particle, vtkPointData *particleData)
Method to be reimplemented if needed in inherited classes.
 
virtual void ParticleAboutToBeDeleted(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
 
virtual void AddDataSet(vtkDataSet *dataset, bool surface=false, unsigned int surfaceFlatIndex=0)
Add a dataset to locate cells in This create a specific locator for the provided dataset using the Lo...
 
virtual void InitializePathData(vtkFieldData *data)
Method used by the LPT to initialize data insertion in the provided vtkFieldData.
 
vtkLocatorsType * Locators
 
virtual void PreIntegrate(std::queue< vtkLagrangianParticle * > &particles)
Enable model to modify particle before integration.
 
virtual vtkLagrangianThreadedData * InitializeThreadedData()
Let the model allocate and initialize a threaded data.
 
virtual void SetTracker(vtkLagrangianParticleTracker *Tracker)
Set the parent tracker.
 
vtkNew< vtkStringArray > SeedArrayNames
 
virtual bool CheckSurfacePerforation(vtkLagrangianParticle *particle, vtkDataSet *surface, vtkIdType cellId)
Given a particle, check if it perforate a surface cell ie : interact with next step after interacting...
 
virtual bool ManualIntegration(vtkInitialValueProblemSolver *integrator, double *xcur, double *xnext, double t, double &delT, double &delTActual, double minStep, double maxStep, double maxError, double cellLength, double &error, int &integrationResult, vtkLagrangianParticle *particle)
Let the model define it's own way to integrate Signature is very close to the integrator method signa...
 
virtual void SetLocator(vtkAbstractCellLocator *locator)
Set/Get the locator used to locate cells in the datasets.
 
virtual void InsertPathData(vtkLagrangianParticle *particle, vtkFieldData *data)
Method used by the LPT to insert data from the particle into the provided vtkFieldData.
 
virtual bool IntersectWithLine(vtkLagrangianParticle *particle, vtkCell *cell, double p1[3], double p2[3], double tol, double &t, double x[3])
Call vtkCell::IntersectWithLine This method is to be reimplemented in inherited classes willing to im...
 
std::pair< unsigned int, vtkLagrangianParticle * > PassThroughParticlesItem
 
vtkNew< vtkStringArray > SurfaceArrayNames
 
virtual void InitializeInteractionData(vtkFieldData *data)
Method used by the LPT to initialize data insertion in the provided vtkFieldData.
 
virtual bool BounceParticle(vtkLagrangianParticle *particle, vtkDataSet *surface, vtkIdType cellId)
Bounce a particle, using the normal of the cell it bounces on.
 
vtkLocatorsType * SurfaceLocators
 
virtual void FinalizeThreadedData(vtkLagrangianThreadedData *&data)
Let the model finalize and deallocate a user data at thread level This method is called serially for ...
 
int FunctionValues(double *x, double *f, void *userData) override
Evaluate integration model velocity f at position x.
 
virtual vtkIntArray * GetSurfaceArrayTypes()
Get the surface arrays expected type Used Only be the vtkLagrangianSurfaceHelper in ParaView plugins.
 
virtual int GetFlowOrSurfaceDataNumberOfComponents(int idx, vtkDataSet *dataSet)
Recover the number of components for a specified array index if it has been set using SetInputArrayTo...
 
std::mutex ParticleQueueMutex
 
vtkNew< vtkIntArray > SurfaceArrayComps
 
virtual void ClearDataSets(bool surface=false)
Add a dataset to locate cells in This create a specific locator for the provided dataset using the Lo...
 
virtual vtkIntArray * GetSeedArrayComps()
Get the seed arrays expected number of components Used Only be the vtkLagrangianSeedHelper in ParaVie...
 
vtkAbstractCellLocator * Locator
 
virtual void InitializeParticle(vtkLagrangianParticle *particle)
Initialize a particle by setting user variables and perform any user model specific operation.
 
std::map< std::string, SurfaceArrayDescription > SurfaceArrayDescriptions
 
virtual vtkStringArray * GetSeedArrayNames()
Get the seed arrays expected name Used Only be the vtkLagrangianSeedHelper in ParaView plugins.
 
virtual void ComputeSurfaceDefaultValues(const char *arrayName, vtkDataSet *dataset, int nComponent, double *defaultValues)
Method used by ParaView surface helper to get default values for each leaf of each dataset of surface...
 
vtkNew< vtkIntArray > SeedArrayTypes
 
virtual bool FindInLocators(double *x, vtkLagrangianParticle *particle, vtkDataSet *&dataset, vtkIdType &cellId, vtkAbstractCellLocator *&loc, double *&weights)
Look for a dataset in this integration model containing the point x.
 
virtual vtkLagrangianParticle * ComputeSurfaceInteraction(vtkLagrangianParticle *particle, std::queue< vtkLagrangianParticle * > &particles, unsigned int &interactedSurfaceFlatIndex, PassThroughParticlesType &passThroughParticles)
Interact the current particle with a surfaces Return a particle to record as interaction point if not...
 
vtkSurfaceType * Surfaces
 
std::pair< ArrayVal, std::string > ArrayMapVal
 
virtual bool FindInLocators(double *x, vtkLagrangianParticle *particle)
Convenience methods to call FindInLocators with less arguments THESE METHODS ARE NOT THREAD-SAFE.
 
virtual void PreParticleInitalization()
Allow for model setup prior to Particle Initialization.
 
virtual vtkAbstractArray * GetSeedArray(int idx, vtkPointData *pointData)
Get a seed array, as set in setInputArrayToProcess from the provided seed point data.
 
vtkNew< vtkDoubleArray > SurfaceArrayDefaultValues
 
virtual bool CheckAdaptiveStepReintegration(vtkLagrangianParticle *particle)
Method to be reimplemented if needed in inherited classes.
 
virtual vtkAbstractArray * GetSeedArray(int idx, vtkLagrangianParticle *particle)
Get a seed array, as set in setInputArrayToProcess from the provided particle seed data Access then t...
 
vtkNew< vtkStringArray > SurfaceArrayEnumValues
 
bool UseInitialIntegrationTime
 
virtual bool InteractWithSurface(int surfaceType, vtkLagrangianParticle *particle, vtkDataSet *surface, vtkIdType cellId, std::queue< vtkLagrangianParticle * > &particles)
Call vtkLagrangianBasicIntegrationModel::Terminate This method is to be reimplemented in inherited cl...
 
virtual void InsertParticleSeedData(vtkLagrangianParticle *particle, vtkFieldData *data)
Method used by the LPT to insert data from the particle into the provided vtkFieldData.
 
virtual vtkIntArray * GetSurfaceArrayComps()
Get the seed array expected number of components Used Only be the vtkLagrangianSurfaceHelper in ParaV...
 
virtual int FunctionValues(vtkLagrangianParticle *particle, vtkDataSet *dataSet, vtkIdType cellId, double *weights, double *x, double *f)=0
Actually compute the integration model velocity field pure abstract, to be implemented in inherited c...
 
virtual vtkIntArray * GetSeedArrayTypes()
Get the seed arrays expected type Used Only be the vtkLagrangianSeedHelper in ParaView plugins.
 
virtual bool FinalizeOutputs(vtkPolyData *particlePathsOutput, vtkDataObject *interractionOutput)
Enable model post process on output Return true if successful, false otherwise Empty and Always retur...
 
bool NonPlanarQuadSupport
 
virtual vtkDoubleArray * GetSurfaceArrayDefaultValues()
Get the surface arrays default values for each leaf Used Only be the vtkLagrangianSurfaceHelper in Pa...
 
vtkWeakPointer< vtkLagrangianParticleTracker > Tracker
 
virtual vtkIdType FindInLocator(vtkDataSet *dataSet, vtkAbstractCellLocator *locator, double *x, vtkGenericCell *cell, double *weights)
Look in the given dataset and associated locator to see if it contains the point x,...
 
virtual int GetWeightsSize()
Get the maximum weights size necessary for calling FindInLocators with weights.
 
vtkDataSetsType * DataSets
 
~vtkLagrangianBasicIntegrationModel() override
 
vtkNew< vtkIntArray > SurfaceArrayTypes
 
virtual void InsertParticleData(vtkLagrangianParticle *particle, vtkFieldData *data, int stepEnum)
Method used by the LPT to insert data from the particle into the provided vtkFieldData.
 
virtual bool BreakParticle(vtkLagrangianParticle *particle, vtkDataSet *surface, vtkIdType cellId, std::queue< vtkLagrangianParticle * > &particles)
Breakup a particle at intersection point, by terminating it and creating two new particle using the i...
 
virtual bool GetFlowOrSurfaceData(vtkLagrangianParticle *particle, int idx, vtkDataSet *flowDataSet, vtkIdType tupleId, double *weights, double *data)
Directly get a double value from flow or surface data as defined in SetInputArrayToProcess.
 
Filter to inject and track particles in a flow.
 
Basis class for Lagrangian particles.
 
Composite dataset that organizes datasets into blocks.
 
composite dataset to encapsulates pieces of dataset.
 
Allocate and hold a VTK object.
 
represent and manipulate point attribute data
 
concrete dataset represents vertices, lines, polygons, and triangle strips
 
a vtkAbstractArray subclass for strings
 
a weak reference to a vtkObject.
 
std::vector< std::pair< int, std::string > > enumValues
 
struct to hold a user data