VTK  9.2.5
vtkLagrangianParticle.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkLagrangianParticle.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 =========================================================================*/
32 #ifndef vtkLagrangianParticle_h
33 #define vtkLagrangianParticle_h
34 
35 #include "vtkFiltersFlowPathsModule.h" // For export macro
36 #include "vtkNew.h" // For vtkNew
37 #include "vtkSystemIncludes.h" // For PrintSelf signature and vtkType
38 
39 #include <vector>
40 
43 class vtkDataSet;
44 class vtkGenericCell;
45 class vtkIdList;
46 class vtkPointData;
48 
49 class VTKFILTERSFLOWPATHS_EXPORT vtkLagrangianParticle
50 {
51 public:
70  typedef enum ParticleTermination
71  {
72  PARTICLE_TERMINATION_NOT_TERMINATED = 0,
80  PARTICLE_TERMINATION_ABORTED
81  } ParticleTermination;
82 
94  typedef enum SurfaceInteraction
95  {
96  SURFACE_INTERACTION_NO_INTERACTION = 0,
101  SURFACE_INTERACTION_OTHER
102  } SurfaceInteraction;
103 
113  vtkLagrangianParticle(int numberOfVariables, vtkIdType seedId, vtkIdType particleId,
114  vtkIdType seedArrayTupleIndex, double integrationTime, vtkPointData* seedData,
115  int numberOfTrackedUserData);
116 
121  static vtkLagrangianParticle* NewInstance(int numberOfVariables, vtkIdType seedId,
122  vtkIdType particleId, vtkIdType seedArrayTupleIndex, double integrationTime,
123  vtkPointData* seedData, int numberOfTrackedUserData, vtkIdType numberOfSteps = 0,
124  double previousIntegrationTime = 0);
125 
133 
138 
143 
145 
149  inline double* GetPrevEquationVariables() { return this->PrevEquationVariables.data(); }
151 
153 
165  inline double* GetEquationVariables() { return this->EquationVariables.data(); }
167 
169 
174  inline double* GetNextEquationVariables() { return this->NextEquationVariables.data(); }
176 
178 
183  inline double* GetPrevPosition() { return this->PrevEquationVariables.data(); }
185 
187 
192  inline double* GetPosition() { return this->EquationVariables.data(); }
194 
196 
201  inline double* GetNextPosition() { return this->NextEquationVariables.data(); }
203 
205 
210  inline double* GetPrevVelocity() { return this->PrevVelocity; }
212 
214 
219  inline double* GetVelocity() { return this->Velocity; }
221 
223 
228  inline double* GetNextVelocity() { return this->NextVelocity; }
230 
232 
237  inline double* GetPrevUserVariables() { return this->PrevUserVariables; }
239 
241 
246  inline double* GetUserVariables() { return this->UserVariables; }
248 
250 
255  inline double* GetNextUserVariables() { return this->NextUserVariables; }
257 
259 
263  inline std::vector<double>& GetPrevTrackedUserData() { return this->PrevTrackedUserData; }
265 
267 
277  inline std::vector<double>& GetTrackedUserData() { return this->TrackedUserData; }
279 
281 
285  inline std::vector<double>& GetNextTrackedUserData() { return this->NextTrackedUserData; }
287 
289 
296  inline vtkLagrangianThreadedData* GetThreadedData() { return this->ThreadedData; }
297  inline void SetThreadedData(vtkLagrangianThreadedData* threadedData)
298  {
299  this->ThreadedData = threadedData;
300  }
302 
309  virtual void MoveToNextPosition();
310 
314  virtual vtkIdType GetId();
315 
317 
321  virtual void SetParentId(vtkIdType parentId);
324 
329  virtual vtkIdType GetSeedId();
330 
334  virtual int GetNumberOfVariables();
335 
340 
345 
351 
356 
361 
365  void SetLastSurfaceCell(vtkDataSet* dataset, vtkIdType cellId);
366 
371 
373 
378  virtual void SetTermination(int termination);
379  virtual int GetTermination();
381 
383 
388  virtual void SetInteraction(int interaction);
389  virtual int GetInteraction();
391 
393 
396  virtual void SetUserFlag(int flag);
397  virtual int GetUserFlag();
399 
401 
406  virtual void SetPInsertPreviousPosition(bool val);
409 
411 
416  virtual void SetPManualShift(bool val);
417  virtual bool GetPManualShift();
419 
423  virtual double& GetStepTimeRef();
424 
428  virtual double GetIntegrationTime();
429 
433  virtual double GetPrevIntegrationTime();
434 
443  virtual void SetIntegrationTime(double time);
444 
449 
453  virtual void PrintSelf(ostream& os, vtkIndent indent);
454 
455 protected:
458  void operator=(const vtkLagrangianParticle&) = delete;
459 
460  std::vector<double> PrevEquationVariables;
461  double* PrevVelocity;
463 
464  std::vector<double> EquationVariables;
465  double* Velocity;
466  double* UserVariables;
467 
468  std::vector<double> NextEquationVariables;
469  double* NextVelocity;
471 
472  std::vector<double> PrevTrackedUserData;
473  std::vector<double> TrackedUserData;
474  std::vector<double> NextTrackedUserData;
475 
476  vtkLagrangianThreadedData* ThreadedData = nullptr;
477 
484 
485  double StepTime;
490  int UserFlag;
494 
495  // Parallel related flags
498 };
499 
500 #endif
501 // VTK-HeaderTest-Exclude: vtkLagrangianParticle.h
an abstract base class for locators which find cells
Class to perform non planar quad intersection.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:172
provides thread-safe access to cells
list of point or cell ids
Definition: vtkIdList.h:143
a simple class to control print indentation
Definition: vtkIndent.h:119
Basis class for Lagrangian particles.
double * GetNextUserVariables()
Get a pointer to the next user variables.
std::vector< double > TrackedUserData
std::vector< double > & GetPrevTrackedUserData()
Get a reference to PrevTrackedUserData See GetTrackedUserData for an explanation on how to use it.
std::vector< double > PrevTrackedUserData
virtual double GetPrevIntegrationTime()
Get the integration time at previous position.
virtual void MoveToNextPosition()
Move the particle to its next position by putting next equation variable to equation variable and cle...
virtual int GetUserFlag()
Set/Get user flag.
virtual int GetNumberOfVariables()
Get the number of variables used to initialize EquationVariables.
vtkIdType GetLastSurfaceCellId()
Get the last intersected surface cell id.
void SetThreadedData(vtkLagrangianThreadedData *threadedData)
Get/Set a pointer to a vtkLagrangianThreadedData that is considered to be local to the thread.
virtual vtkIdType GetSeedArrayTupleIndex() const
Get the index of the tuple for this particle in the point data returned by GetSeedData method.
double * GetEquationVariables()
Get a pointer to the particle variables array.
virtual void SetInteraction(int interaction)
Set/Get particle interaction.
vtkLagrangianParticle()=delete
double GetPositionVectorMagnitude()
Compute and return the position vector magnitude.
virtual void SetPInsertPreviousPosition(bool val)
Set/Get parallel specific flag, indication to insert or not the previous position after streaming.
virtual ~vtkLagrangianParticle()
Destructor.
virtual void SetPManualShift(bool val)
Set/Get parallel specific flag, indication that the particle may be manually shifted after streaming.
virtual void SetIntegrationTime(double time)
Convenience setter for integration time, do not use unless manual particle shifting One using this me...
double * GetNextVelocity()
Get a pointer to the next particle velocity.
ParticleTermination
An enum to inform about a reason for termination PARTICLE_TERMINATION_NOT_TERMINATED = 0,...
double * GetPrevVelocity()
Get a pointer to the previous particle velocity.
vtkLagrangianParticle * NewParticle(vtkIdType particleId)
method to create a particle from a parent particle.
vtkLagrangianParticle(const vtkLagrangianParticle &)=delete
double * GetPrevPosition()
Get a pointer to the previous particle position.
vtkDataSet * GetLastSurfaceDataSet()
Get the dataset containing the last intersected surface cell.
void operator=(const vtkLagrangianParticle &)=delete
virtual bool GetPInsertPreviousPosition()
Set/Get parallel specific flag, indication to insert or not the previous position after streaming.
virtual vtkIdType GetId()
Get particle id.
static vtkLagrangianParticle * NewInstance(int numberOfVariables, vtkIdType seedId, vtkIdType particleId, vtkIdType seedArrayTupleIndex, double integrationTime, vtkPointData *seedData, int numberOfTrackedUserData, vtkIdType numberOfSteps=0, double previousIntegrationTime=0)
Constructor wrapper to create a partially integrated particle in the domain.
std::vector< double > EquationVariables
virtual void SetUserFlag(int flag)
Set/Get user flag.
double * GetVelocity()
Get a pointer to the particle velocity.
virtual vtkPointData * GetSeedData()
Get the particle seed data, for reading only.
double * GetNextEquationVariables()
Get a pointer to the particle variables array at its next position.
virtual vtkIdType GetParentId()
Set/Get parent particle id.
std::vector< double > & GetTrackedUserData()
Get a reference to TrackedUserData.
double * GetPrevUserVariables()
Get a pointer to the previous user variables.
virtual double & GetStepTimeRef()
Get reference to step time of this particle.
double * GetUserVariables()
Get a pointer to the user variables.
SurfaceInteraction
An enum to inform about a surface interaction SURFACE_INTERACTION_NO_INTERACTION = 0,...
vtkLagrangianParticle(int numberOfVariables, vtkIdType seedId, vtkIdType particleId, vtkIdType seedArrayTupleIndex, double integrationTime, vtkPointData *seedData, int numberOfTrackedUserData)
Constructor to create a particle from a seed.
void SetLastSurfaceCell(vtkDataSet *dataset, vtkIdType cellId)
Set the last surface dataset and last surface cell id.
std::vector< double > PrevEquationVariables
double * GetNextPosition()
Get a pointer to the next particle position.
double * GetPosition()
Get a pointer to the particle position.
virtual int GetNumberOfUserVariables()
Get the number of variables specific to the user.
std::vector< double > NextTrackedUserData
virtual void SetTermination(int termination)
Set/Get particle termination.
vtkLagrangianParticle * CloneParticle()
method to create an exact clone of a particle.
virtual double GetIntegrationTime()
Get the integration time.
virtual bool GetPManualShift()
Set/Get parallel specific flag, indication that the particle may be manually shifted after streaming.
virtual int GetInteraction()
Set/Get particle interaction.
std::vector< double > NextEquationVariables
virtual vtkIdType GetNumberOfSteps()
Get particle current number of steps.
virtual void SetParentId(vtkIdType parentId)
Set/Get parent particle id.
virtual vtkIdType GetSeedId()
Get the particle original seed index in the seed dataset.
double * GetPrevEquationVariables()
Get a pointer to Particle variables at its previous position See GetEquationVariables for content des...
vtkLagrangianThreadedData * GetThreadedData()
Get/Set a pointer to a vtkLagrangianThreadedData that is considered to be local to the thread.
std::vector< double > & GetNextTrackedUserData()
Get a reference to NextTrackedUserData See GetTrackedUserData for an explanation on how to use it.
virtual void PrintSelf(ostream &os, vtkIndent indent)
Print information about the particle.
virtual int GetTermination()
Set/Get particle termination.
represent and manipulate point attribute data
Definition: vtkPointData.h:151
@ time
Definition: vtkX3D.h:503
struct to hold a user data
int vtkIdType
Definition: vtkType.h:332