VTK  9.3.20240329
vtkTemporalInterpolatedVelocityField.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
35 #ifndef vtkTemporalInterpolatedVelocityField_h
36 #define vtkTemporalInterpolatedVelocityField_h
37 
38 #include "vtkFiltersFlowPathsModule.h" // For export macro
39 #include "vtkFunctionSet.h"
40 #include "vtkSmartPointer.h" // For vtkSmartPointer
41 
42 #include <vector> // For internal structures
43 
44 VTK_ABI_NAMESPACE_BEGIN
48 class vtkDataArray;
49 class vtkDataSet;
50 class vtkDoubleArray;
52 class vtkGenericCell;
53 class vtkLocator;
54 class vtkPointData;
55 
56 class VTKFILTERSFLOWPATHS_EXPORT vtkTemporalInterpolatedVelocityField : public vtkFunctionSet
57 {
58 public:
60  void PrintSelf(ostream& os, vtkIndent indent) override;
61 
67 
71  enum IDStates
72  {
73  INSIDE_ALL = 0,
74  OUTSIDE_ALL = 1,
75  OUTSIDE_T0 = 2,
76  OUTSIDE_T1 = 3
77  };
78 
83  {
84  DIFFERENT = 0,
85  STATIC = 1,
86  LINEAR_TRANSFORMATION = 2,
87  SAME_TOPOLOGY = 3
88  };
89 
91  /*
92  * Set/Get the type of variance of the mesh over time.
93  *
94  * DIFFERENT = 0,
95  * STATIC = 1,
96  * LINEAR_TRANSFORMATION = 2
97  * SAME_TOPOLOGY = 3
98  */
99  vtkSetClampMacro(MeshOverTime, int, DIFFERENT, SAME_TOPOLOGY);
100  void SetMeshOverTimeToDifferent() { this->SetMeshOverTime(DIFFERENT); }
101  void SetMeshOverTimeToStatic() { this->SetMeshOverTime(STATIC); }
102  void SetMeshOverTimeToLinearTransformation() { this->SetMeshOverTime(LINEAR_TRANSFORMATION); }
103  void SetMeshOverTimeToSameTopology() { this->SetMeshOverTime(SAME_TOPOLOGY); }
104  vtkGetMacro(MeshOverTime, int);
106 
115 
123 
124  using Superclass::FunctionValues;
126 
130  int FunctionValues(double* x, double* u) override;
131  int FunctionValuesAtT(int T, double* x, double* u);
133 
139  void SelectVectors(const char* fieldName) { this->SetVectorsSelection(fieldName); }
140 
142 
147  void AddDataSetAtTime(int N, double T, vtkDataSet* dataset);
149 
151 
156  bool GetCachedCellIds(vtkIdType id[2], int ds[2]);
157  void SetCachedCellIds(vtkIdType id[2], int ds[2]);
159 
164  void ClearCache();
165 
167 
171  int TestPoint(double* x);
172  int QuickTestPoint(double* x);
174 
176 
180  vtkGetVector3Macro(LastGoodVelocity, double);
182 
184 
187  vtkGetMacro(CurrentWeight, double);
189 
190  bool InterpolatePoint(vtkPointData* outPD1, vtkPointData* outPD2, vtkIdType outIndex);
191 
192  bool InterpolatePoint(int T, vtkPointData* outPD1, vtkIdType outIndex);
193 
195  int T, double pcoords[3], double* weights, vtkGenericCell*& cell, vtkDoubleArray* cellVectors);
196 
198 
200 
202 
209  vtkGetObjectMacro(FindCellStrategy, vtkFindCellStrategy);
211 
212 protected:
215 
216  virtual void SetVectorsSelection(const char* v);
217 
218  int MeshOverTime = MeshOverTimeTypes::DIFFERENT;
219 
221  const std::vector<vtkDataSet*>& datasets, vtkFindCellStrategy* strategy,
222  const std::vector<vtkSmartPointer<vtkLocator>>& locators,
224 
225  void CreateLocators(const std::vector<vtkDataSet*>& datasets, vtkFindCellStrategy* strategy,
227  void CreateLinks(const std::vector<vtkDataSet*>& datasets,
230  std::vector<vtkSmartPointer<vtkLocator>>& linearCellLocators);
231 
232  double Vals1[3];
233  double Vals2[3];
234  double Times[2];
235  double LastGoodVelocity[3];
236 
237  static const double WEIGHT_TO_TOLERANCE;
238 
239  // The weight (0.0->1.0) of the value of T between the two available
240  // time values for the current computation
242  // One minus the CurrentWeight
244  // A scaling factor used when calculating the CurrentWeight { 1.0/(T2-T1) }
245  double ScaleCoeff;
246 
248  std::vector<vtkSmartPointer<vtkLocator>> Locators[2];
249  std::vector<vtkSmartPointer<vtkLocator>> InitialCellLocators;
250  std::vector<vtkSmartPointer<vtkAbstractCellLinks>> Links[2];
251  std::vector<size_t> MaxCellSizes[2];
252 
254 
255 private:
256  // Hide this since we need multiple time steps and are using a different
257  // function prototype
258  virtual void AddDataSet(vtkDataSet*) {}
259 
261  void operator=(const vtkTemporalInterpolatedVelocityField&) = delete;
262 };
263 
264 VTK_ABI_NAMESPACE_END
265 #endif
abstract superclass for composite (multi-block or AMR) datasets
An abstract class for obtaining the interpolated velocity values at a point.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:155
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
dynamic, self-adjusting array of double
helper class to manage the vtkPointSet::FindCell() METHOD
Abstract interface for sets of functions.
provides thread-safe access to cells
a simple class to control print indentation
Definition: vtkIndent.h:108
abstract base class for objects that accelerate spatial searches
Definition: vtkLocator.h:78
represent and manipulate point attribute data
Definition: vtkPointData.h:140
Hold a reference to a vtkObjectBase instance.
A helper class for interpolating between times during particle tracing.
int QuickTestPoint(double *x)
A utility function which evaluates the point at T1, T2 to see if it is inside the data at both times ...
int TestPoint(double *x)
A utility function which evaluates the point at T1, T2 to see if it is inside the data at both times ...
IDStates
States that define where the cell id are.
void AddDataSetAtTime(int N, double T, vtkDataSet *dataset)
In order to use this class, two sets of data must be supplied, corresponding to times T1 and T2.
MeshOverTimeTypes
Types of Variance of Mesh over time.
virtual void CopyParameters(vtkTemporalInterpolatedVelocityField *from)
Copy essential parameters between instances of this class.
static vtkTemporalInterpolatedVelocityField * New()
Construct a vtkTemporalInterpolatedVelocityField with no initial data set.
bool InterpolatePoint(vtkPointData *outPD1, vtkPointData *outPD2, vtkIdType outIndex)
void SelectVectors(const char *fieldName)
If you want to work with an arbitrary vector array, then set its name here.
virtual void SetVectorsSelection(const char *v)
bool GetVorticityData(int T, double pcoords[3], double *weights, vtkGenericCell *&cell, vtkDoubleArray *cellVectors)
std::vector< vtkSmartPointer< vtkLocator > > InitialCellLocators
bool InterpolatePoint(int T, vtkPointData *outPD1, vtkIdType outIndex)
virtual void SetFindCellStrategy(vtkFindCellStrategy *)
Set / get the strategy used to perform the FindCell() operation.
void SetCachedCellIds(vtkIdType id[2], int ds[2])
Between iterations of the Particle Tracer, Id's of the Cell are stored and then at the start of the n...
bool GetCachedCellIds(vtkIdType id[2], int ds[2])
Between iterations of the Particle Tracer, Id's of the Cell are stored and then at the start of the n...
void CreateLocators(const std::vector< vtkDataSet * > &datasets, vtkFindCellStrategy *strategy, std::vector< vtkSmartPointer< vtkLocator >> &locators)
void CreateLinearTransformCellLocators(const std::vector< vtkSmartPointer< vtkLocator >> &locators, std::vector< vtkSmartPointer< vtkLocator >> &linearCellLocators)
void InitializeWithLocators(vtkCompositeInterpolatedVelocityField *ivf, const std::vector< vtkDataSet * > &datasets, vtkFindCellStrategy *strategy, const std::vector< vtkSmartPointer< vtkLocator >> &locators, const std::vector< vtkSmartPointer< vtkAbstractCellLinks >> &links)
void CreateLinks(const std::vector< vtkDataSet * > &datasets, std::vector< vtkSmartPointer< vtkAbstractCellLinks >> &links)
void ClearCache()
Set the last cell id to -1 so that the next search does not start from the previous cell.
int FunctionValues(double *x, double *u) override
Evaluate the velocity field, f, at (x, y, z, t).
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int FunctionValuesAtT(int T, double *x, double *u)
Evaluate the velocity field, f, at (x, y, z, t).
void Initialize(vtkCompositeDataSet *t0, vtkCompositeDataSet *t1)
The Initialize() method is used to build and cache supporting structures (such as locators) which are...
@ vector
Definition: vtkX3D.h:237
int vtkIdType
Definition: vtkType.h:315