VTK  9.0.1
vtkGenericStreamTracer.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkGenericStreamTracer.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 =========================================================================*/
66 #ifndef vtkGenericStreamTracer_h
67 #define vtkGenericStreamTracer_h
68 
69 #include "vtkFiltersGenericModule.h" // For export macro
70 #include "vtkPolyDataAlgorithm.h"
71 
72 #include "vtkInitialValueProblemSolver.h" // Needed for constants
73 
74 class vtkDataArray;
76 class vtkIdList;
77 class vtkIntArray;
79 class vtkDataSet;
81 class vtkGenericDataSet;
82 
83 class VTKFILTERSGENERIC_EXPORT vtkGenericStreamTracer : public vtkPolyDataAlgorithm
84 {
85 public:
87  void PrintSelf(ostream& os, vtkIndent indent) override;
88 
95  static vtkGenericStreamTracer* New();
96 
98 
103  vtkSetVector3Macro(StartPosition, double);
104  vtkGetVector3Macro(StartPosition, double);
106 
108 
111  void SetSourceData(vtkDataSet* source);
112  vtkDataSet* GetSource();
114 
119  void SetSourceConnection(vtkAlgorithmOutput* algOutput);
120 
121  int FillInputPortInformation(int port, vtkInformation* info) override;
122 
123  enum Units
124  {
127  CELL_LENGTH_UNIT
128  };
129 
130  enum Solvers
131  {
136  UNKNOWN
137  };
138 
140  {
144  OUT_OF_TIME = 4,
145  OUT_OF_STEPS = 5,
146  STAGNATION = 6
147  };
148 
150 
161  void SetIntegrator(vtkInitialValueProblemSolver*);
162  vtkGetObjectMacro(Integrator, vtkInitialValueProblemSolver);
163  void SetIntegratorType(int type);
164  int GetIntegratorType();
165  void SetIntegratorTypeToRungeKutta2() { this->SetIntegratorType(RUNGE_KUTTA2); }
166  void SetIntegratorTypeToRungeKutta4() { this->SetIntegratorType(RUNGE_KUTTA4); }
167  void SetIntegratorTypeToRungeKutta45() { this->SetIntegratorType(RUNGE_KUTTA45); }
169 
171 
178  void SetMaximumPropagation(int unit, double max);
179  void SetMaximumPropagation(double max);
180  void SetMaximumPropagationUnit(int unit);
181  int GetMaximumPropagationUnit();
182  double GetMaximumPropagation();
183  void SetMaximumPropagationUnitToTimeUnit() { this->SetMaximumPropagationUnit(TIME_UNIT); }
184  void SetMaximumPropagationUnitToLengthUnit() { this->SetMaximumPropagationUnit(LENGTH_UNIT); }
186  {
187  this->SetMaximumPropagationUnit(CELL_LENGTH_UNIT);
188  }
190 
192 
200  void SetMinimumIntegrationStep(int unit, double step);
201  void SetMinimumIntegrationStepUnit(int unit);
202  void SetMinimumIntegrationStep(double step);
203  int GetMinimumIntegrationStepUnit();
204  double GetMinimumIntegrationStep();
205  void SetMinimumIntegrationStepUnitToTimeUnit() { this->SetMinimumIntegrationStepUnit(TIME_UNIT); }
207  {
208  this->SetMinimumIntegrationStepUnit(LENGTH_UNIT);
209  }
211  {
212  this->SetMinimumIntegrationStepUnit(CELL_LENGTH_UNIT);
213  }
215 
217 
225  void SetMaximumIntegrationStep(int unit, double step);
226  void SetMaximumIntegrationStepUnit(int unit);
227  void SetMaximumIntegrationStep(double step);
228  int GetMaximumIntegrationStepUnit();
229  double GetMaximumIntegrationStep();
230  void SetMaximumIntegrationStepUnitToTimeUnit() { this->SetMaximumIntegrationStepUnit(TIME_UNIT); }
232  {
233  this->SetMaximumIntegrationStepUnit(LENGTH_UNIT);
234  }
236  {
237  this->SetMaximumIntegrationStepUnit(CELL_LENGTH_UNIT);
238  }
240 
242 
251  void SetInitialIntegrationStep(int unit, double step);
252  void SetInitialIntegrationStepUnit(int unit);
253  void SetInitialIntegrationStep(double step);
254  int GetInitialIntegrationStepUnit();
255  double GetInitialIntegrationStep();
256  void SetInitialIntegrationStepUnitToTimeUnit() { this->SetInitialIntegrationStepUnit(TIME_UNIT); }
258  {
259  this->SetInitialIntegrationStepUnit(LENGTH_UNIT);
260  }
262  {
263  this->SetInitialIntegrationStepUnit(CELL_LENGTH_UNIT);
264  }
266 
268 
273  vtkSetMacro(MaximumError, double);
274  vtkGetMacro(MaximumError, double);
276 
278 
281  vtkSetMacro(MaximumNumberOfSteps, vtkIdType);
282  vtkGetMacro(MaximumNumberOfSteps, vtkIdType);
284 
286 
290  vtkSetMacro(TerminalSpeed, double);
291  vtkGetMacro(TerminalSpeed, double);
293 
295 
298  void SetIntegrationStepUnit(int unit)
299  {
300  this->SetInitialIntegrationStepUnit(unit);
301  this->SetMinimumIntegrationStepUnit(unit);
302  this->SetMaximumIntegrationStepUnit(unit);
303  }
305 
306  enum
307  {
310  BOTH
311  };
312 
314 
318  vtkSetClampMacro(IntegrationDirection, int, FORWARD, BOTH);
319  vtkGetMacro(IntegrationDirection, int);
320  void SetIntegrationDirectionToForward() { this->SetIntegrationDirection(FORWARD); }
321  void SetIntegrationDirectionToBackward() { this->SetIntegrationDirection(BACKWARD); }
322  void SetIntegrationDirectionToBoth() { this->SetIntegrationDirection(BOTH); }
324 
326 
331  vtkSetMacro(ComputeVorticity, vtkTypeBool);
332  vtkGetMacro(ComputeVorticity, vtkTypeBool);
333  vtkBooleanMacro(ComputeVorticity, vtkTypeBool);
335 
337 
341  vtkSetMacro(RotationScale, double);
342  vtkGetMacro(RotationScale, double);
344 
346 
351  vtkGetStringMacro(InputVectorsSelection);
352  void SelectInputVectors(const char* fieldName) { this->SetInputVectorsSelection(fieldName); }
354 
359 
364  void SetInterpolatorPrototype(vtkGenericInterpolatedVelocityField* ivf);
365 
366 protected:
368  ~vtkGenericStreamTracer() override;
369 
370  // hide the superclass' AddInput() from the user and the compiler
372  {
373  vtkErrorMacro(<< "AddInput() must be called with a vtkGenericDataSet not a vtkDataObject.");
374  }
375 
377 
385  void CalculateVorticity(vtkGenericAdaptorCell* cell, double pcoords[3],
386  vtkGenericAttribute* attribute, double vorticity[3]);
387 
388  void Integrate(vtkGenericDataSet* input0, vtkPolyData* output, vtkDataArray* seedSource,
389  vtkIdList* seedIds, vtkIntArray* integrationDirections, double lastPoint[3],
391  void SimpleIntegrate(
392  double seed[3], double lastPoint[3], double delt, vtkGenericInterpolatedVelocityField* func);
393  int CheckInputs(vtkGenericInterpolatedVelocityField*& func, vtkInformationVector** inputVector);
394  void GenerateNormals(vtkPolyData* output, double* firstNormal);
395 
397 
398  vtkSetStringMacro(InputVectorsSelection);
399  char* InputVectorsSelection;
400 
401  // starting from global x-y-z position
402  double StartPosition[3];
403 
404  static const double EPSILON;
406 
408 
410  {
411  double Interval;
412  int Unit;
413  };
414 
419 
420  void SetIntervalInformation(int unit, double interval, IntervalInformation& currentValues);
421  void SetIntervalInformation(int unit, IntervalInformation& currentValues);
422  static double ConvertToTime(IntervalInformation& interval, double cellLength, double speed);
423  static double ConvertToLength(IntervalInformation& interval, double cellLength, double speed);
424  static double ConvertToCellLength(IntervalInformation& interval, double cellLength, double speed);
425  static double ConvertToUnit(
426  IntervalInformation& interval, int unit, double cellLength, double speed);
427  void ConvertIntervals(
428  double& step, double& minStep, double& maxStep, int direction, double cellLength, double speed);
429 
430  void InitializeSeeds(
431  vtkDataArray*& seeds, vtkIdList*& seedIds, vtkIntArray*& integrationDirections);
432 
434 
435  // Prototype showing the integrator type to be set by the user.
437 
438  double MaximumError;
440 
443 
445 
446 private:
448  void operator=(const vtkGenericStreamTracer&) = delete;
449 };
450 
451 #endif
vtkGenericStreamTracer::MaximumPropagation
IntervalInformation MaximumPropagation
Definition: vtkGenericStreamTracer.h:415
vtkGenericStreamTracer::ReasonForTermination
ReasonForTermination
Definition: vtkGenericStreamTracer.h:139
vtkGenericStreamTracer::IntervalInformation::Interval
double Interval
Definition: vtkGenericStreamTracer.h:411
vtkX3D::type
@ type
Definition: vtkX3D.h:522
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkX3D::direction
@ direction
Definition: vtkX3D.h:266
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkGenericStreamTracer::MaximumError
double MaximumError
Definition: vtkGenericStreamTracer.h:438
vtkGenericInterpolatedVelocityField
Interface for obtaining interpolated velocity values.
Definition: vtkGenericInterpolatedVelocityField.h:54
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta4
void SetIntegratorTypeToRungeKutta4()
Definition: vtkGenericStreamTracer.h:166
vtkGenericStreamTracer::SetMaximumIntegrationStepUnitToCellLengthUnit
void SetMaximumIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:235
vtkGenericStreamTracer::MinimumIntegrationStep
IntervalInformation MinimumIntegrationStep
Definition: vtkGenericStreamTracer.h:416
vtkGenericStreamTracer::IntervalInformation
Definition: vtkGenericStreamTracer.h:409
vtkGenericStreamTracer::InitialIntegrationStep
IntervalInformation InitialIntegrationStep
Definition: vtkGenericStreamTracer.h:418
vtkGenericStreamTracer::TerminalSpeed
double TerminalSpeed
Definition: vtkGenericStreamTracer.h:405
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta2
void SetIntegratorTypeToRungeKutta2()
Definition: vtkGenericStreamTracer.h:165
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta45
void SetIntegratorTypeToRungeKutta45()
Definition: vtkGenericStreamTracer.h:167
vtkGenericAdaptorCell
defines cell interface
Definition: vtkGenericAdaptorCell.h:91
vtkGenericStreamTracer::MaximumIntegrationStep
IntervalInformation MaximumIntegrationStep
Definition: vtkGenericStreamTracer.h:417
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToLengthUnit
void SetInitialIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:257
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:49
vtkPolyDataAlgorithm::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkGenericStreamTracer::SetMaximumIntegrationStepUnitToTimeUnit
void SetMaximumIntegrationStepUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:230
vtkGenericStreamTracer::EPSILON
static const double EPSILON
Definition: vtkGenericStreamTracer.h:404
vtkGenericStreamTracer::RotationScale
double RotationScale
Definition: vtkGenericStreamTracer.h:442
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToTimeUnit
void SetInitialIntegrationStepUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:256
vtkGenericDataSet
defines dataset interface
Definition: vtkGenericDataSet.h:69
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkGenericStreamTracer::MaximumNumberOfSteps
vtkIdType MaximumNumberOfSteps
Definition: vtkGenericStreamTracer.h:439
vtkGenericStreamTracer::SetMaximumPropagationUnitToLengthUnit
void SetMaximumPropagationUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:184
vtkGenericStreamTracer::InterpolatorPrototype
vtkGenericInterpolatedVelocityField * InterpolatorPrototype
Definition: vtkGenericStreamTracer.h:444
vtkGenericStreamTracer::SetMaximumIntegrationStepUnitToLengthUnit
void SetMaximumIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:231
vtkPolyDataAlgorithm.h
vtkGenericStreamTracer::SetIntegrationDirectionToForward
void SetIntegrationDirectionToForward()
Definition: vtkGenericStreamTracer.h:320
vtkGenericStreamTracer::LastUsedTimeStep
double LastUsedTimeStep
Definition: vtkGenericStreamTracer.h:407
vtkGenericStreamTracer::RUNGE_KUTTA2
@ RUNGE_KUTTA2
Definition: vtkGenericStreamTracer.h:132
vtkX3D::port
@ port
Definition: vtkX3D.h:453
vtkGenericStreamTracer::LENGTH_UNIT
@ LENGTH_UNIT
Definition: vtkGenericStreamTracer.h:126
vtkGenericStreamTracer::Units
Units
Definition: vtkGenericStreamTracer.h:123
vtkGenericStreamTracer::SetMaximumPropagationUnitToCellLengthUnit
void SetMaximumPropagationUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:185
vtkPolyDataAlgorithm::RequestData
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called by the superclass.
vtkGenericStreamTracer::RUNGE_KUTTA45
@ RUNGE_KUTTA45
Definition: vtkGenericStreamTracer.h:134
vtkGenericStreamTracer::IntegrationDirection
int IntegrationDirection
Definition: vtkGenericStreamTracer.h:433
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToCellLengthUnit
void SetInitialIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:261
vtkGenericStreamTracer::Solvers
Solvers
Definition: vtkGenericStreamTracer.h:130
vtkGenericStreamTracer::GenerateNormalsInIntegrate
int GenerateNormalsInIntegrate
Definition: vtkGenericStreamTracer.h:396
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkInitialValueProblemSolver.h
vtkIntArray
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:39
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:30
vtkGenericStreamTracer
Streamline generator.
Definition: vtkGenericStreamTracer.h:83
vtkGenericStreamTracer::SetIntegrationDirectionToBackward
void SetIntegrationDirectionToBackward()
Definition: vtkGenericStreamTracer.h:321
vtkGenericStreamTracer::SetMaximumPropagationUnitToTimeUnit
void SetMaximumPropagationUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:183
vtkPolyDataAlgorithm::AddInputData
void AddInputData(vtkDataObject *)
Assign a data object as input.
vtkPolyDataAlgorithm::FillInputPortInformation
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
vtkInitialValueProblemSolver::UNEXPECTED_VALUE
@ UNEXPECTED_VALUE
Definition: vtkInitialValueProblemSolver.h:148
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:73
vtkGenericStreamTracer::TIME_UNIT
@ TIME_UNIT
Definition: vtkGenericStreamTracer.h:125
vtkX3D::info
@ info
Definition: vtkX3D.h:382
vtkX3D::speed
@ speed
Definition: vtkX3D.h:489
vtkGenericStreamTracer::SetIntegrationDirectionToBoth
void SetIntegrationDirectionToBoth()
Definition: vtkGenericStreamTracer.h:322
vtkGenericStreamTracer::ComputeVorticity
vtkTypeBool ComputeVorticity
Definition: vtkGenericStreamTracer.h:441
vtkGenericStreamTracer::SetIntegrationStepUnit
void SetIntegrationStepUnit(int unit)
Simplified API to set an homogeneous unit across Min/Max/Init IntegrationStepUnit.
Definition: vtkGenericStreamTracer.h:298
vtkGenericStreamTracer::InputVectorsSelection
char * InputVectorsSelection
Definition: vtkGenericStreamTracer.h:398
vtkAlgorithmOutput
Proxy object to connect input/output ports.
Definition: vtkAlgorithmOutput.h:36
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToLengthUnit
void SetMinimumIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:206
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToCellLengthUnit
void SetMinimumIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:210
vtkGenericStreamTracer::NONE
@ NONE
Definition: vtkGenericStreamTracer.h:135
vtkGenericAttribute
abstract class defined API for attribute data
Definition: vtkGenericAttribute.h:47
vtkGenericStreamTracer::Integrator
vtkInitialValueProblemSolver * Integrator
Definition: vtkGenericStreamTracer.h:436
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:959
vtkGenericStreamTracer::FORWARD
@ FORWARD
Definition: vtkGenericStreamTracer.h:308
vtkInitialValueProblemSolver
Integrate a set of ordinary differential equations (initial value problem) in time.
Definition: vtkInitialValueProblemSolver.h:40
vtkInitialValueProblemSolver::OUT_OF_DOMAIN
@ OUT_OF_DOMAIN
Definition: vtkInitialValueProblemSolver.h:146
vtkGenericStreamTracer::BACKWARD
@ BACKWARD
Definition: vtkGenericStreamTracer.h:309
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:59
vtkGenericStreamTracer::IntervalInformation::Unit
int Unit
Definition: vtkGenericStreamTracer.h:412
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToTimeUnit
void SetMinimumIntegrationStepUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:205
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkPolyDataAlgorithm::New
static vtkPolyDataAlgorithm * New()
vtkGenericStreamTracer::SelectInputVectors
void SelectInputVectors(const char *fieldName)
Definition: vtkGenericStreamTracer.h:352
vtkGenericStreamTracer::RUNGE_KUTTA4
@ RUNGE_KUTTA4
Definition: vtkGenericStreamTracer.h:133
vtkInitialValueProblemSolver::NOT_INITIALIZED
@ NOT_INITIALIZED
Definition: vtkInitialValueProblemSolver.h:147
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:41
vtkGenericStreamTracer::AddInput
void AddInput(vtkDataObject *)
Definition: vtkGenericStreamTracer.h:371