VTK
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();
166  {this->SetIntegratorType(RUNGE_KUTTA2);};
168  {this->SetIntegratorType(RUNGE_KUTTA4);};
170  {this->SetIntegratorType(RUNGE_KUTTA45);};
172 
174 
181  void SetMaximumPropagation(int unit, double max);
182  void SetMaximumPropagation(double max);
183  void SetMaximumPropagationUnit(int unit);
184  int GetMaximumPropagationUnit();
185  double GetMaximumPropagation();
187  {this->SetMaximumPropagationUnit(TIME_UNIT);};
189  {this->SetMaximumPropagationUnit(LENGTH_UNIT);};
191  {this->SetMaximumPropagationUnit(CELL_LENGTH_UNIT);};
193 
195 
203  void SetMinimumIntegrationStep(int unit, double step);
204  void SetMinimumIntegrationStepUnit(int unit);
205  void SetMinimumIntegrationStep(double step);
206  int GetMinimumIntegrationStepUnit();
207  double GetMinimumIntegrationStep();
209  {this->SetMinimumIntegrationStepUnit(TIME_UNIT);};
211  {this->SetMinimumIntegrationStepUnit(LENGTH_UNIT);};
213  {this->SetMinimumIntegrationStepUnit(CELL_LENGTH_UNIT);};
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();
231  {this->SetMaximumIntegrationStepUnit(TIME_UNIT);};
233  {this->SetMaximumIntegrationStepUnit(LENGTH_UNIT);};
235  {this->SetMaximumIntegrationStepUnit(CELL_LENGTH_UNIT);};
237 
239 
248  void SetInitialIntegrationStep(int unit, double step);
249  void SetInitialIntegrationStepUnit(int unit);
250  void SetInitialIntegrationStep(double step);
251  int GetInitialIntegrationStepUnit();
252  double GetInitialIntegrationStep();
254  {this->SetInitialIntegrationStepUnit(TIME_UNIT);};
256  {this->SetInitialIntegrationStepUnit(LENGTH_UNIT);};
258  {this->SetInitialIntegrationStepUnit(CELL_LENGTH_UNIT);};
260 
262 
267  vtkSetMacro(MaximumError, double);
268  vtkGetMacro(MaximumError, double);
270 
272 
275  vtkSetMacro(MaximumNumberOfSteps, vtkIdType);
276  vtkGetMacro(MaximumNumberOfSteps, vtkIdType);
278 
280 
284  vtkSetMacro(TerminalSpeed, double);
285  vtkGetMacro(TerminalSpeed, double);
287 
289 
292  void SetIntegrationStepUnit(int unit)
293  {
294  this->SetInitialIntegrationStepUnit(unit);
295  this->SetMinimumIntegrationStepUnit(unit);
296  this->SetMaximumIntegrationStepUnit(unit);
297  }
299 
300  enum
301  {
304  BOTH
305  };
306 
308 
312  vtkSetClampMacro(IntegrationDirection, int, FORWARD, BOTH);
313  vtkGetMacro(IntegrationDirection, int);
315  {this->SetIntegrationDirection(FORWARD);};
317  {this->SetIntegrationDirection(BACKWARD);};
319  {this->SetIntegrationDirection(BOTH);};
321 
323 
328  vtkSetMacro(ComputeVorticity, vtkTypeBool);
329  vtkGetMacro(ComputeVorticity, vtkTypeBool);
330  vtkBooleanMacro(ComputeVorticity, vtkTypeBool);
332 
334 
338  vtkSetMacro(RotationScale, double);
339  vtkGetMacro(RotationScale, double);
341 
343 
348  vtkGetStringMacro(InputVectorsSelection);
349  void SelectInputVectors(const char *fieldName)
350  {this->SetInputVectorsSelection(fieldName);}
352 
357 
362  void SetInterpolatorPrototype(vtkGenericInterpolatedVelocityField* ivf);
363 
364 protected:
366  ~vtkGenericStreamTracer() override;
367 
368  // hide the superclass' AddInput() from the user and the compiler
370  { vtkErrorMacro( << "AddInput() must be called with a vtkGenericDataSet not a vtkDataObject."); };
371 
373 
381  void CalculateVorticity(vtkGenericAdaptorCell* cell,
382  double pcoords[3],
383  vtkGenericAttribute *attribute,
384  double vorticity[3]);
385 
386  void Integrate(vtkGenericDataSet *input0,
387  vtkPolyData* output,
388  vtkDataArray* seedSource,
389  vtkIdList* seedIds,
390  vtkIntArray* integrationDirections,
391  double lastPoint[3],
393  void SimpleIntegrate(double seed[3],
394  double lastPoint[3],
395  double delt,
397  int CheckInputs(vtkGenericInterpolatedVelocityField*& func,
398  vtkInformationVector **inputVector);
399  void GenerateNormals(vtkPolyData* output, double* firstNormal);
400 
402 
403  vtkSetStringMacro(InputVectorsSelection);
404  char *InputVectorsSelection;
405 
406 
407  // starting from global x-y-z position
408  double StartPosition[3];
409 
410  static const double EPSILON;
412 
414 
416  {
417  double Interval;
418  int Unit;
419  };
420 
425 
426  void SetIntervalInformation(int unit, double interval,
427  IntervalInformation& currentValues);
428  void SetIntervalInformation(int unit,IntervalInformation& currentValues);
429  static double ConvertToTime(IntervalInformation& interval,
430  double cellLength, double speed);
431  static double ConvertToLength(IntervalInformation& interval,
432  double cellLength, double speed);
433  static double ConvertToCellLength(IntervalInformation& interval,
434  double cellLength, double speed);
435  static double ConvertToUnit(IntervalInformation& interval, int unit,
436  double cellLength, double speed);
437  void ConvertIntervals(double& step, double& minStep, double& maxStep,
438  int direction, double cellLength, double speed);
439 
440  void InitializeSeeds(vtkDataArray*& seeds,
441  vtkIdList*& seedIds,
442  vtkIntArray*& integrationDirections);
443 
445 
446  // Prototype showing the integrator type to be set by the user.
448 
449  double MaximumError;
451 
454 
456 
457 private:
459  void operator=(const vtkGenericStreamTracer&) = delete;
460 };
461 
462 #endif
vtkGenericStreamTracer::MaximumPropagation
IntervalInformation MaximumPropagation
Definition: vtkGenericStreamTracer.h:421
vtkGenericStreamTracer::ReasonForTermination
ReasonForTermination
Definition: vtkGenericStreamTracer.h:139
vtkGenericStreamTracer::IntervalInformation::Interval
double Interval
Definition: vtkGenericStreamTracer.h:417
vtkX3D::type
Definition: vtkX3D.h:516
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkX3D::direction
Definition: vtkX3D.h:260
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkGenericStreamTracer::MaximumError
double MaximumError
Definition: vtkGenericStreamTracer.h:449
vtkGenericInterpolatedVelocityField
Interface for obtaining interpolated velocity values.
Definition: vtkGenericInterpolatedVelocityField.h:54
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta4
void SetIntegratorTypeToRungeKutta4()
Definition: vtkGenericStreamTracer.h:167
vtkGenericStreamTracer::SetMaximumIntegrationStepUnitToCellLengthUnit
void SetMaximumIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:234
vtkGenericStreamTracer::MinimumIntegrationStep
IntervalInformation MinimumIntegrationStep
Definition: vtkGenericStreamTracer.h:422
vtkGenericStreamTracer::IntervalInformation
Definition: vtkGenericStreamTracer.h:415
vtkGenericStreamTracer::InitialIntegrationStep
IntervalInformation InitialIntegrationStep
Definition: vtkGenericStreamTracer.h:424
vtkGenericStreamTracer::TerminalSpeed
double TerminalSpeed
Definition: vtkGenericStreamTracer.h:411
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta2
void SetIntegratorTypeToRungeKutta2()
Definition: vtkGenericStreamTracer.h:165
vtkGenericStreamTracer::SetIntegratorTypeToRungeKutta45
void SetIntegratorTypeToRungeKutta45()
Definition: vtkGenericStreamTracer.h:169
vtkGenericAdaptorCell
defines cell interface
Definition: vtkGenericAdaptorCell.h:92
vtkGenericStreamTracer::MaximumIntegrationStep
IntervalInformation MaximumIntegrationStep
Definition: vtkGenericStreamTracer.h:423
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToLengthUnit
void SetInitialIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:255
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
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:410
vtkGenericStreamTracer::RotationScale
double RotationScale
Definition: vtkGenericStreamTracer.h:453
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToTimeUnit
void SetInitialIntegrationStepUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:253
vtkGenericDataSet
defines dataset interface
Definition: vtkGenericDataSet.h:69
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkGenericStreamTracer::MaximumNumberOfSteps
vtkIdType MaximumNumberOfSteps
Definition: vtkGenericStreamTracer.h:450
vtkGenericStreamTracer::SetMaximumPropagationUnitToLengthUnit
void SetMaximumPropagationUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:188
vtkGenericStreamTracer::InterpolatorPrototype
vtkGenericInterpolatedVelocityField * InterpolatorPrototype
Definition: vtkGenericStreamTracer.h:455
vtkGenericStreamTracer::SetMaximumIntegrationStepUnitToLengthUnit
void SetMaximumIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:232
vtkPolyDataAlgorithm.h
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:825
vtkGenericStreamTracer::FORWARD
Definition: vtkGenericStreamTracer.h:302
vtkGenericStreamTracer::SetIntegrationDirectionToForward
void SetIntegrationDirectionToForward()
Definition: vtkGenericStreamTracer.h:314
vtkGenericStreamTracer::LastUsedTimeStep
double LastUsedTimeStep
Definition: vtkGenericStreamTracer.h:413
vtkGenericStreamTracer::RUNGE_KUTTA2
Definition: vtkGenericStreamTracer.h:132
vtkX3D::port
Definition: vtkX3D.h:447
vtkGenericStreamTracer::LENGTH_UNIT
Definition: vtkGenericStreamTracer.h:126
vtkGenericStreamTracer::Units
Units
Definition: vtkGenericStreamTracer.h:123
vtkGenericStreamTracer::SetMaximumPropagationUnitToCellLengthUnit
void SetMaximumPropagationUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:190
vtkPolyDataAlgorithm::RequestData
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called by the superclass.
vtkGenericStreamTracer::RUNGE_KUTTA45
Definition: vtkGenericStreamTracer.h:134
vtkGenericStreamTracer::IntegrationDirection
int IntegrationDirection
Definition: vtkGenericStreamTracer.h:444
vtkGenericStreamTracer::SetInitialIntegrationStepUnitToCellLengthUnit
void SetInitialIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:257
vtkGenericStreamTracer::Solvers
Solvers
Definition: vtkGenericStreamTracer.h:130
vtkGenericStreamTracer::GenerateNormalsInIntegrate
int GenerateNormalsInIntegrate
Definition: vtkGenericStreamTracer.h:401
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
vtkGenericStreamTracer::BACKWARD
Definition: vtkGenericStreamTracer.h:303
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:316
vtkGenericStreamTracer::SetMaximumPropagationUnitToTimeUnit
void SetMaximumPropagationUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:186
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
Definition: vtkInitialValueProblemSolver.h:120
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:80
vtkGenericStreamTracer::TIME_UNIT
Definition: vtkGenericStreamTracer.h:125
vtkX3D::info
Definition: vtkX3D.h:376
vtkX3D::speed
Definition: vtkX3D.h:483
vtkGenericStreamTracer::SetIntegrationDirectionToBoth
void SetIntegrationDirectionToBoth()
Definition: vtkGenericStreamTracer.h:318
vtkGenericStreamTracer::ComputeVorticity
vtkTypeBool ComputeVorticity
Definition: vtkGenericStreamTracer.h:452
vtkGenericStreamTracer::SetIntegrationStepUnit
void SetIntegrationStepUnit(int unit)
Simplified API to set an homogeneous unit across Min/Max/Init IntegrationStepUnit.
Definition: vtkGenericStreamTracer.h:292
vtkGenericStreamTracer::InputVectorsSelection
char * InputVectorsSelection
Definition: vtkGenericStreamTracer.h:403
vtkAlgorithmOutput
Proxy object to connect input/output ports.
Definition: vtkAlgorithmOutput.h:36
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToLengthUnit
void SetMinimumIntegrationStepUnitToLengthUnit()
Definition: vtkGenericStreamTracer.h:210
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToCellLengthUnit
void SetMinimumIntegrationStepUnitToCellLengthUnit()
Definition: vtkGenericStreamTracer.h:212
vtkGenericStreamTracer::NONE
Definition: vtkGenericStreamTracer.h:135
vtkGenericAttribute
abstract class defined API for attribute data
Definition: vtkGenericAttribute.h:47
vtkGenericStreamTracer::Integrator
vtkInitialValueProblemSolver * Integrator
Definition: vtkGenericStreamTracer.h:447
vtkInitialValueProblemSolver
Integrate a set of ordinary differential equations (initial value problem) in time.
Definition: vtkInitialValueProblemSolver.h:40
vtkInitialValueProblemSolver::OUT_OF_DOMAIN
Definition: vtkInitialValueProblemSolver.h:118
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:58
vtkGenericStreamTracer::IntervalInformation::Unit
int Unit
Definition: vtkGenericStreamTracer.h:418
vtkGenericStreamTracer::SetMinimumIntegrationStepUnitToTimeUnit
void SetMinimumIntegrationStepUnitToTimeUnit()
Definition: vtkGenericStreamTracer.h:208
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkPolyDataAlgorithm::New
static vtkPolyDataAlgorithm * New()
vtkGenericStreamTracer::SelectInputVectors
void SelectInputVectors(const char *fieldName)
Definition: vtkGenericStreamTracer.h:349
vtkGenericStreamTracer::RUNGE_KUTTA4
Definition: vtkGenericStreamTracer.h:133
vtkInitialValueProblemSolver::NOT_INITIALIZED
Definition: vtkInitialValueProblemSolver.h:119
vtkPolyDataAlgorithm
Superclass for algorithms that produce only polydata as output.
Definition: vtkPolyDataAlgorithm.h:41
vtkGenericStreamTracer::AddInput
void AddInput(vtkDataObject *)
Definition: vtkGenericStreamTracer.h:369