VTK  9.3.1
vtkLagrangianParticle.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
20 #ifndef vtkLagrangianParticle_h
21 #define vtkLagrangianParticle_h
22 
23 #include "vtkFiltersFlowPathsModule.h" // For export macro
24 #include "vtkNew.h" // For vtkNew
25 #include "vtkSystemIncludes.h" // For PrintSelf signature and vtkType
26 
27 #include <vector>
28 
29 VTK_ABI_NAMESPACE_BEGIN
32 class vtkDataSet;
33 class vtkGenericCell;
34 class vtkIdList;
35 class vtkPointData;
37 
38 class VTKFILTERSFLOWPATHS_EXPORT vtkLagrangianParticle
39 {
40 public:
59  typedef enum ParticleTermination
60  {
61  PARTICLE_TERMINATION_NOT_TERMINATED = 0,
69  PARTICLE_TERMINATION_ABORTED
70  } ParticleTermination;
71 
83  typedef enum SurfaceInteraction
84  {
85  SURFACE_INTERACTION_NO_INTERACTION = 0,
90  SURFACE_INTERACTION_OTHER
91  } SurfaceInteraction;
92 
102  vtkLagrangianParticle(int numberOfVariables, vtkIdType seedId, vtkIdType particleId,
103  vtkIdType seedArrayTupleIndex, double integrationTime, vtkPointData* seedData,
104  int numberOfTrackedUserData);
105 
110  static vtkLagrangianParticle* NewInstance(int numberOfVariables, vtkIdType seedId,
111  vtkIdType particleId, vtkIdType seedArrayTupleIndex, double integrationTime,
112  vtkPointData* seedData, int numberOfTrackedUserData, vtkIdType numberOfSteps = 0,
113  double previousIntegrationTime = 0);
114 
121  vtkLagrangianParticle* NewParticle(vtkIdType particleId);
122 
126  vtkLagrangianParticle* CloneParticle();
127 
131  virtual ~vtkLagrangianParticle();
132 
134 
138  inline double* GetPrevEquationVariables() { return this->PrevEquationVariables.data(); }
140 
142 
154  inline double* GetEquationVariables() { return this->EquationVariables.data(); }
156 
158 
163  inline double* GetNextEquationVariables() { return this->NextEquationVariables.data(); }
165 
167 
172  inline double* GetPrevPosition() { return this->PrevEquationVariables.data(); }
174 
176 
181  inline double* GetPosition() { return this->EquationVariables.data(); }
183 
185 
190  inline double* GetNextPosition() { return this->NextEquationVariables.data(); }
192 
194 
199  inline double* GetPrevVelocity() { return this->PrevVelocity; }
201 
203 
208  inline double* GetVelocity() { return this->Velocity; }
210 
212 
217  inline double* GetNextVelocity() { return this->NextVelocity; }
219 
221 
226  inline double* GetPrevUserVariables() { return this->PrevUserVariables; }
228 
230 
235  inline double* GetUserVariables() { return this->UserVariables; }
237 
239 
244  inline double* GetNextUserVariables() { return this->NextUserVariables; }
246 
248 
252  inline std::vector<double>& GetPrevTrackedUserData() { return this->PrevTrackedUserData; }
254 
256 
266  inline std::vector<double>& GetTrackedUserData() { return this->TrackedUserData; }
268 
270 
274  inline std::vector<double>& GetNextTrackedUserData() { return this->NextTrackedUserData; }
276 
278 
285  inline vtkLagrangianThreadedData* GetThreadedData() { return this->ThreadedData; }
286  inline void SetThreadedData(vtkLagrangianThreadedData* threadedData)
287  {
288  this->ThreadedData = threadedData;
289  }
291 
298  virtual void MoveToNextPosition();
299 
303  virtual vtkIdType GetId();
304 
306 
310  virtual void SetParentId(vtkIdType parentId);
311  virtual vtkIdType GetParentId();
313 
318  virtual vtkIdType GetSeedId();
319 
323  virtual int GetNumberOfVariables();
324 
328  virtual int GetNumberOfUserVariables();
329 
333  virtual vtkPointData* GetSeedData();
334 
339  virtual vtkIdType GetSeedArrayTupleIndex() const;
340 
344  vtkIdType GetLastSurfaceCellId();
345 
349  vtkDataSet* GetLastSurfaceDataSet();
350 
354  void SetLastSurfaceCell(vtkDataSet* dataset, vtkIdType cellId);
355 
359  virtual vtkIdType GetNumberOfSteps();
360 
362 
367  virtual void SetTermination(int termination);
368  virtual int GetTermination();
370 
372 
377  virtual void SetInteraction(int interaction);
378  virtual int GetInteraction();
380 
382 
385  virtual void SetUserFlag(int flag);
386  virtual int GetUserFlag();
388 
390 
395  virtual void SetPInsertPreviousPosition(bool val);
396  virtual bool GetPInsertPreviousPosition();
398 
400 
405  virtual void SetPManualShift(bool val);
406  virtual bool GetPManualShift();
408 
412  virtual double& GetStepTimeRef();
413 
417  virtual double GetIntegrationTime();
418 
422  virtual double GetPrevIntegrationTime();
423 
432  virtual void SetIntegrationTime(double time);
433 
437  double GetPositionVectorMagnitude();
438 
442  virtual void PrintSelf(ostream& os, vtkIndent indent);
443 
444 protected:
446  vtkLagrangianParticle() = delete;
447  void operator=(const vtkLagrangianParticle&) = delete;
448 
449  std::vector<double> PrevEquationVariables;
450  double* PrevVelocity;
452 
453  std::vector<double> EquationVariables;
454  double* Velocity;
455  double* UserVariables;
456 
457  std::vector<double> NextEquationVariables;
458  double* NextVelocity;
460 
461  std::vector<double> PrevTrackedUserData;
462  std::vector<double> TrackedUserData;
463  std::vector<double> NextTrackedUserData;
464 
465  vtkLagrangianThreadedData* ThreadedData = nullptr;
466 
473 
474  double StepTime;
479  int UserFlag;
483 
484  // Parallel related flags
487 };
488 
489 VTK_ABI_NAMESPACE_END
490 #endif
491 // VTK-HeaderTest-Exclude: vtkLagrangianParticle.h
represent and manipulate point attribute data
Definition: vtkPointData.h:29
std::vector< double > & GetPrevTrackedUserData()
Get a reference to PrevTrackedUserData See GetTrackedUserData for an explanation on how to use it...
double * GetUserVariables()
Get a pointer to the user variables.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:52
an abstract base class for locators which find cells
struct to hold a user data
int vtkIdType
Definition: vtkType.h:315
vtkLagrangianThreadedData * GetThreadedData()
Get/Set a pointer to a vtkLagrangianThreadedData that is considered to be local to the thread...
provides thread-safe access to cells
double * GetNextVelocity()
Get a pointer to the next particle velocity.
a simple class to control print indentation
Definition: vtkIndent.h:28
double * GetNextEquationVariables()
Get a pointer to the particle variables array at its next position.
list of point or cell ids
Definition: vtkIdList.h:22
std::vector< double > & GetNextTrackedUserData()
Get a reference to NextTrackedUserData See GetTrackedUserData for an explanation on how to use it...
std::vector< double > PrevTrackedUserData
std::vector< double > EquationVariables
Basis class for Lagrangian particles.
double * GetPrevPosition()
Get a pointer to the previous particle position.
ParticleTermination
An enum to inform about a reason for termination PARTICLE_TERMINATION_NOT_TERMINATED = 0...
SurfaceInteraction
An enum to inform about a surface interaction SURFACE_INTERACTION_NO_INTERACTION = 0...
double * GetEquationVariables()
Get a pointer to the particle variables array.
double * GetPrevVelocity()
Get a pointer to the previous particle velocity.
void SetThreadedData(vtkLagrangianThreadedData *threadedData)
Get/Set a pointer to a vtkLagrangianThreadedData that is considered to be local to the thread...
std::vector< double > & GetTrackedUserData()
Get a reference to TrackedUserData.
std::vector< double > NextTrackedUserData
std::vector< double > NextEquationVariables
double * GetNextUserVariables()
Get a pointer to the next user variables.
double * GetNextPosition()
Get a pointer to the next particle position.
double * GetVelocity()
Get a pointer to the particle velocity.
Class to perform non planar quad intersection.
double * GetPosition()
Get a pointer to the particle position.
std::vector< double > PrevEquationVariables
double * GetPrevUserVariables()
Get a pointer to the previous user variables.
std::vector< double > TrackedUserData
double * GetPrevEquationVariables()
Get a pointer to Particle variables at its previous position See GetEquationVariables for content des...