VTK
vtkLagrangianBasicIntegrationModel.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLagrangianBasicIntegrationModel.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 =========================================================================*/
51 #ifndef vtkLagrangianBasicIntegrationModel_h
52 #define vtkLagrangianBasicIntegrationModel_h
53 
54 #include "vtkFiltersFlowPathsModule.h" // For export macro
55 #include "vtkNew.h" // For arrays
56 #include "vtkWeakPointer.h" // For weak pointer
57 #include "vtkFunctionSet.h"
58 
59 #include <queue> // for new particles
60 #include <map> // for array indexes
61 
62 class vtkAbstractArray;
64 class vtkCell;
65 class vtkCellData;
66 class vtkDataArray;
67 class vtkDataObject;
68 class vtkDataSet;
69 class vtkDataSetsType;
70 class vtkDoubleArray;
71 class vtkFieldData;
72 class vtkGenericCell;
73 class vtkIntArray;
76 class vtkLocatorsType;
77 class vtkPointData;
78 class vtkPolyData;
79 class vtkStringArray;
80 class vtkSurfaceType;
81 
82 class VTKFILTERSFLOWPATHS_EXPORT vtkLagrangianBasicIntegrationModel :
83  public vtkFunctionSet
84 {
85 public:
87  void PrintSelf(ostream& os, vtkIndent indent) override;
88 
89  typedef enum SurfaceType
90  {
91  SURFACE_TYPE_MODEL = 0,
92  SURFACE_TYPE_TERM = 1,
93  SURFACE_TYPE_BOUNCE = 2,
94  SURFACE_TYPE_BREAK = 3,
95  SURFACE_TYPE_PASS = 4
96  } SurfaceType;
97 
98  typedef enum VariableStep
99  {
100  VARIABLE_STEP_PREV = -1,
101  VARIABLE_STEP_CURRENT = 0,
102  VARIABLE_STEP_NEXT = 1,
103  } VariableStep;
104 
105  typedef std::pair< unsigned int, vtkLagrangianParticle*> PassThroughParticlesItem;
106  typedef std::queue< PassThroughParticlesItem > PassThroughParticlesType;
107 
114  int FunctionValues(double* x, double* f) override;
115 
117 
123  virtual void SetLocator(vtkAbstractCellLocator* locator);
124  vtkGetObjectMacro(Locator, vtkAbstractCellLocator);
126 
128 
131  vtkGetMacro(LocatorsBuilt, bool);
132  vtkSetMacro(LocatorsBuilt, bool);
134 
138  virtual void SetTracker(vtkLagrangianParticleTracker* Tracker);
139 
141 
150  virtual void AddDataSet(vtkDataSet* dataset, bool surface = false,
151  unsigned int surfaceFlatIndex = 0);
152  virtual void ClearDataSets(bool surface = false);
154 
156 
159  vtkSetMacro(UseInitialIntegrationTime, bool);
160  vtkGetMacro(UseInitialIntegrationTime, bool);
161  vtkBooleanMacro(UseInitialIntegrationTime, bool);
163 
165 
168  vtkSetMacro(CurrentParticle, vtkLagrangianParticle*);
170 
172 
175  vtkGetMacro(Tolerance, double);
177 
195  virtual vtkLagrangianParticle* ComputeSurfaceInteraction(vtkLagrangianParticle* particle,
196  std::queue<vtkLagrangianParticle*>& particles,
197  unsigned int& interactedSurfaceFlatIndex, PassThroughParticlesType& passThroughParticles);
198 
204  virtual void SetInputArrayToProcess(int idx, int port, int connection,
205  int fieldAssociation, const char* name);
206 
208 
215  virtual bool FindInLocators(double* x, vtkDataSet*& dataset, vtkIdType& cellId,
216  vtkAbstractCellLocator*& loc, double*& weights);
217  virtual bool FindInLocators(double* x, vtkDataSet*& dataset, vtkIdType& cellId);
218  virtual bool FindInLocators(double* x);
220 
229  vtkPointData* vtkNotUsed(particleData), int vtkNotUsed(maxTuples) = 0) {}
230 
236  virtual void InsertVariablesParticleData(vtkLagrangianParticle* vtkNotUsed(particle),
237  vtkPointData* vtkNotUsed(particleData), int vtkNotUsed(stepEnum)) {}
238 
244  virtual void InitializeModelPathData(vtkFieldData* vtkNotUsed(data)) {}
245 
251  virtual void InsertModelPathData(vtkLagrangianParticle* vtkNotUsed(particle),
252  vtkFieldData* vtkNotUsed(data)) {}
253 
258  virtual void InitializeParticle(vtkLagrangianParticle* vtkNotUsed(particle)){}
259 
269  vtkLagrangianParticle* vtkNotUsed(particle)){return true;}
270 
279  vtkLagrangianParticle* vtkNotUsed(particle)){return false;}
280 
282 
285  vtkSetMacro(NonPlanarQuadSupport, bool);
286  vtkGetMacro(NonPlanarQuadSupport, bool);
287  vtkBooleanMacro(NonPlanarQuadSupport, bool);
289 
294  virtual vtkStringArray* GetSeedArrayNames();
295 
300  virtual vtkIntArray* GetSeedArrayComps();
301 
306  virtual vtkIntArray* GetSeedArrayTypes();
307 
312  virtual vtkStringArray* GetSurfaceArrayNames();
313 
318  virtual vtkIntArray* GetSurfaceArrayTypes();
319 
324  virtual vtkStringArray* GetSurfaceArrayEnumValues();
325 
330  virtual vtkDoubleArray* GetSurfaceArrayDefaultValues();
331 
336  virtual vtkIntArray* GetSurfaceArrayComps();
337 
339 
343  vtkGetMacro(WeightsSize, int);
345 
368  virtual bool ManualIntegration(double* xcur, double* xnext,
369  double t, double& delT, double& delTActual,
370  double minStep, double maxStep,
371  double maxError, double& error, int& integrationResult);
372 
378  virtual void ParallelManualShift(vtkLagrangianParticle* vtkNotUsed(particle)){}
379 
385  virtual bool FinalizeOutputs(vtkPolyData* vtkNotUsed(particlePathsOutput),
386  vtkDataObject* vtkNotUsed(interractionOutput)){return true;}
387 
391  virtual void PreIntegrate(std::queue<vtkLagrangianParticle*>& vtkNotUsed(particles)){}
392 
397  virtual vtkAbstractArray* GetSeedArray(int idx, vtkPointData* pointData);
398 
399 protected:
402 
407  virtual int FunctionValues(vtkDataSet* detaSet, vtkIdType cellId, double* weights,
408  double * x, double * f) = 0;
409 
415  virtual vtkIdType FindInLocator(vtkDataSet* dataSet, vtkAbstractCellLocator* locator,
416  double* x, vtkGenericCell* cell, double* weights);
417 
422  virtual bool TerminateParticle(vtkLagrangianParticle* particle);
423 
428  virtual bool BounceParticle(vtkLagrangianParticle* particle,
429  vtkDataSet* surface, vtkIdType cellId);
430 
436  virtual bool BreakParticle(vtkLagrangianParticle* particle,
437  vtkDataSet* surface, vtkIdType cellId, std::queue<vtkLagrangianParticle*>& particles);
438 
445  virtual bool InteractWithSurface(int surfaceType, vtkLagrangianParticle* particle,
446  vtkDataSet* surface, vtkIdType cellId, std::queue<vtkLagrangianParticle*>& particles);
447 
453  virtual bool IntersectWithLine(vtkCell* cell, double p1[3], double p2[3],
454  double tol, double& t, double x[3]);
455 
459  virtual void InterpolateNextParticleVariables(vtkLagrangianParticle* particle,
460  double interpolationFactor, bool forceInside = false);
461 
466  virtual bool CheckSurfacePerforation(vtkLagrangianParticle* particle,
467  vtkDataSet* surface, vtkIdType cellId);
468 
475  virtual vtkAbstractArray* GetSeedArray(int idx, vtkLagrangianParticle* particle);
476 
482  virtual bool GetFlowOrSurfaceData(int idx, vtkDataSet* flowDataSet,
483  vtkIdType tupleId, double* weights, double*& data, int& nComponents);
484 
489  virtual int GetFlowOrSurfaceDataFieldAssociation(int idx);
490 
499  virtual void ComputeSurfaceDefaultValues(const char* arrayName, vtkDataSet* dataset,
500  int nComponent, double* defaultValues);
501 
505  vtkLocatorsType* Locators;
506 
508  vtkDataSetsType* DataSets;
510  double* LastWeights;
512 
513  struct ArrayVal
514  {
515  int val[3];
516  };
517  typedef std::pair<ArrayVal, std::string> ArrayMapVal;
518  std::map<int, ArrayMapVal> InputArrays;
519 
520  typedef struct SurfaceArrayDescription
521  {
522  int nComp;
523  int type;
524  std::vector< std::pair< int, std::string > > enumValues;
526  std::map<std::string, SurfaceArrayDescription> SurfaceArrayDescriptions;
527 
530 
531  vtkSurfaceType* Surfaces;
532  vtkLocatorsType* SurfaceLocators;
533 
535 
536  double Tolerance;
539 
548 
550 
551 private:
553  void operator=(const vtkLagrangianBasicIntegrationModel&) = delete;
554 };
555 
556 #endif
vtkLagrangianBasicIntegrationModel::SurfaceLocators
vtkLocatorsType * SurfaceLocators
Definition: vtkLagrangianBasicIntegrationModel.h:532
vtkLagrangianBasicIntegrationModel::InitializeVariablesParticleData
virtual void InitializeVariablesParticleData(vtkPointData *vtkNotUsed(particleData), int vtkNotUsed(maxTuples)=0)
Empty method to be reimplemented if necessary in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:228
vtkLagrangianBasicIntegrationModel::SurfaceArrayDescription::enumValues
std::vector< std::pair< int, std::string > > enumValues
Definition: vtkLagrangianBasicIntegrationModel.h:524
vtkLagrangianParticleTracker
Filter to inject and track particles in a flow.
Definition: vtkLagrangianParticleTracker.h:109
vtkLagrangianBasicIntegrationModel::InitializeModelPathData
virtual void InitializeModelPathData(vtkFieldData *vtkNotUsed(data))
Empty method to be reimplemented if necessary in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:244
vtkLagrangianBasicIntegrationModel::SeedArrayComps
vtkNew< vtkIntArray > SeedArrayComps
Definition: vtkLagrangianBasicIntegrationModel.h:541
vtkFunctionSet
Abstract interface for sets of functions.
Definition: vtkFunctionSet.h:35
vtkLagrangianBasicIntegrationModel
vtkFunctionSet abstract implementation to be used in the vtkLagrangianParticleTracker integrator.
Definition: vtkLagrangianBasicIntegrationModel.h:82
vtkLagrangianBasicIntegrationModel::Tolerance
double Tolerance
Definition: vtkLagrangianBasicIntegrationModel.h:536
vtkLagrangianBasicIntegrationModel::SurfaceType
SurfaceType
Definition: vtkLagrangianBasicIntegrationModel.h:89
vtkLagrangianBasicIntegrationModel::Locators
vtkLocatorsType * Locators
Definition: vtkLagrangianBasicIntegrationModel.h:505
vtkLagrangianBasicIntegrationModel::SurfaceArrayComps
vtkNew< vtkIntArray > SurfaceArrayComps
Definition: vtkLagrangianBasicIntegrationModel.h:544
vtkPointData
represent and manipulate point attribute data
Definition: vtkPointData.h:31
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkLagrangianBasicIntegrationModel::ArrayVal
Definition: vtkLagrangianBasicIntegrationModel.h:513
vtkX3D::data
Definition: vtkX3D.h:315
vtkLagrangianBasicIntegrationModel::DataSets
vtkDataSetsType * DataSets
Definition: vtkLagrangianBasicIntegrationModel.h:508
vtkLagrangianBasicIntegrationModel::CheckFreeFlightTermination
virtual bool CheckFreeFlightTermination(vtkLagrangianParticle *vtkNotUsed(particle))
Method to be reimplemented if needed in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:278
vtkLagrangianBasicIntegrationModel::SurfaceArrayNames
vtkNew< vtkStringArray > SurfaceArrayNames
Definition: vtkLagrangianBasicIntegrationModel.h:543
vtkLagrangianBasicIntegrationModel::SurfaceArrayDescriptions
std::map< std::string, SurfaceArrayDescription > SurfaceArrayDescriptions
Definition: vtkLagrangianBasicIntegrationModel.h:526
vtkFunctionSet::FunctionValues
virtual int FunctionValues(double *x, double *f)=0
Evaluate functions at x_j.
vtkLagrangianBasicIntegrationModel::VariableStep
VariableStep
Definition: vtkLagrangianBasicIntegrationModel.h:98
vtkLagrangianBasicIntegrationModel::SeedArrayNames
vtkNew< vtkStringArray > SeedArrayNames
Definition: vtkLagrangianBasicIntegrationModel.h:540
vtkLagrangianBasicIntegrationModel::TmpParticle
vtkLagrangianParticle * TmpParticle
Definition: vtkLagrangianBasicIntegrationModel.h:529
vtkLagrangianBasicIntegrationModel::SurfaceArrayDescription::nComp
int nComp
Definition: vtkLagrangianBasicIntegrationModel.h:522
vtkFunctionSet.h
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
vtkLagrangianBasicIntegrationModel::Surfaces
vtkSurfaceType * Surfaces
Definition: vtkLagrangianBasicIntegrationModel.h:531
vtkLagrangianBasicIntegrationModel::PreIntegrate
virtual void PreIntegrate(std::queue< vtkLagrangianParticle * > &vtkNotUsed(particles))
Enable model to modify particle before integration.
Definition: vtkLagrangianBasicIntegrationModel.h:391
vtkFieldData
represent and manipulate fields of data
Definition: vtkFieldData.h:53
vtkFunctionSet::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkLagrangianBasicIntegrationModel::WeightsSize
int WeightsSize
Definition: vtkLagrangianBasicIntegrationModel.h:511
vtkX3D::port
Definition: vtkX3D.h:447
vtkLagrangianBasicIntegrationModel::UseInitialIntegrationTime
bool UseInitialIntegrationTime
Definition: vtkLagrangianBasicIntegrationModel.h:538
vtkLagrangianBasicIntegrationModel::ArrayMapVal
std::pair< ArrayVal, std::string > ArrayMapVal
Definition: vtkLagrangianBasicIntegrationModel.h:517
vtkLagrangianBasicIntegrationModel::SurfaceArrayDescription
Definition: vtkLagrangianBasicIntegrationModel.h:520
vtkLagrangianBasicIntegrationModel::InitializeParticle
virtual void InitializeParticle(vtkLagrangianParticle *vtkNotUsed(particle))
Initialize a particle by setting user variables and perform any user model specific operation.
Definition: vtkLagrangianBasicIntegrationModel.h:258
vtkLagrangianBasicIntegrationModel::PassThroughParticlesItem
std::pair< unsigned int, vtkLagrangianParticle * > PassThroughParticlesItem
Definition: vtkLagrangianBasicIntegrationModel.h:105
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:56
vtkLagrangianBasicIntegrationModel::InsertModelPathData
virtual void InsertModelPathData(vtkLagrangianParticle *vtkNotUsed(particle), vtkFieldData *vtkNotUsed(data))
Empty method to be reimplemented if necessary in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:251
vtkLagrangianBasicIntegrationModel::InputArrays
std::map< int, ArrayMapVal > InputArrays
Definition: vtkLagrangianBasicIntegrationModel.h:518
vtkCellData
represent and manipulate cell attribute data
Definition: vtkCellData.h:32
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkIntArray
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:39
vtkLagrangianBasicIntegrationModel::SurfaceArrayEnumValues
vtkNew< vtkStringArray > SurfaceArrayEnumValues
Definition: vtkLagrangianBasicIntegrationModel.h:546
vtkNew< vtkStringArray >
vtkLagrangianBasicIntegrationModel::LastLocator
vtkAbstractCellLocator * LastLocator
Definition: vtkLagrangianBasicIntegrationModel.h:504
vtkLagrangianBasicIntegrationModel::TmpArray
vtkDataArray * TmpArray
Definition: vtkLagrangianBasicIntegrationModel.h:534
vtkWeakPointer.h
vtkAbstractCellLocator
an abstract base class for locators which find cells
Definition: vtkAbstractCellLocator.h:48
vtkLagrangianBasicIntegrationModel::LastDataSet
vtkDataSet * LastDataSet
Definition: vtkLagrangianBasicIntegrationModel.h:507
vtkLagrangianParticle
Basis class for Lagrangian particles.
Definition: vtkLagrangianParticle.h:38
vtkX3D::name
Definition: vtkX3D.h:219
vtkLagrangianBasicIntegrationModel::SurfaceArrayDefaultValues
vtkNew< vtkDoubleArray > SurfaceArrayDefaultValues
Definition: vtkLagrangianBasicIntegrationModel.h:547
vtkLagrangianBasicIntegrationModel::Locator
vtkAbstractCellLocator * Locator
Definition: vtkLagrangianBasicIntegrationModel.h:502
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
vtkAbstractArray
Abstract superclass for all arrays.
Definition: vtkAbstractArray.h:75
vtkLagrangianBasicIntegrationModel::LocatorsBuilt
bool LocatorsBuilt
Definition: vtkLagrangianBasicIntegrationModel.h:503
vtkLagrangianBasicIntegrationModel::CheckAdaptiveStepReintegration
virtual bool CheckAdaptiveStepReintegration(vtkLagrangianParticle *vtkNotUsed(particle))
Method to be reimplemented if needed in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:268
vtkLagrangianBasicIntegrationModel::CurrentParticle
vtkLagrangianParticle * CurrentParticle
Definition: vtkLagrangianBasicIntegrationModel.h:528
vtkNew.h
vtkLagrangianBasicIntegrationModel::FinalizeOutputs
virtual bool FinalizeOutputs(vtkPolyData *vtkNotUsed(particlePathsOutput), vtkDataObject *vtkNotUsed(interractionOutput))
Enable model post process on output Return true if successful, false otherwise Empty and Always retur...
Definition: vtkLagrangianBasicIntegrationModel.h:385
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
vtkGenericCell
provides thread-safe access to cells
Definition: vtkGenericCell.h:36
vtkLagrangianBasicIntegrationModel::SeedArrayTypes
vtkNew< vtkIntArray > SeedArrayTypes
Definition: vtkLagrangianBasicIntegrationModel.h:542
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:36
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:35
vtkLagrangianBasicIntegrationModel::NonPlanarQuadSupport
bool NonPlanarQuadSupport
Definition: vtkLagrangianBasicIntegrationModel.h:537
vtkLagrangianBasicIntegrationModel::SurfaceArrayTypes
vtkNew< vtkIntArray > SurfaceArrayTypes
Definition: vtkLagrangianBasicIntegrationModel.h:545
vtkLagrangianBasicIntegrationModel::Cell
vtkGenericCell * Cell
Definition: vtkLagrangianBasicIntegrationModel.h:509
vtkLagrangianBasicIntegrationModel::Tracker
vtkWeakPointer< vtkLagrangianParticleTracker > Tracker
Definition: vtkLagrangianBasicIntegrationModel.h:549
vtkLagrangianBasicIntegrationModel::InsertVariablesParticleData
virtual void InsertVariablesParticleData(vtkLagrangianParticle *vtkNotUsed(particle), vtkPointData *vtkNotUsed(particleData), int vtkNotUsed(stepEnum))
Empty method to be reimplemented if necessary in inherited classes.
Definition: vtkLagrangianBasicIntegrationModel.h:236
vtkLagrangianBasicIntegrationModel::PassThroughParticlesType
std::queue< PassThroughParticlesItem > PassThroughParticlesType
Definition: vtkLagrangianBasicIntegrationModel.h:106
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:58
vtkLagrangianBasicIntegrationModel::SurfaceArrayDescription::type
int type
Definition: vtkLagrangianBasicIntegrationModel.h:523
vtkWeakPointer< vtkLagrangianParticleTracker >
vtkLagrangianBasicIntegrationModel::ParallelManualShift
virtual void ParallelManualShift(vtkLagrangianParticle *vtkNotUsed(particle))
Method called by parallel algorithm after receiving a particle from stream if PManualShift flag has b...
Definition: vtkLagrangianBasicIntegrationModel.h:378
vtkLagrangianBasicIntegrationModel::LastWeights
double * LastWeights
Definition: vtkLagrangianBasicIntegrationModel.h:510