27 #ifndef __vtkParticleTracerBase_h
28 #define __vtkParticleTracerBase_h
30 #include "vtkFiltersFlowPathsModule.h"
31 #include "vtkSmartPointer.h"
32 #include "vtkPolyDataAlgorithm.h"
39 class vtkAbstractParticleWriter;
42 class vtkCompositeDataSet;
48 class vtkInitialValueProblemSolver;
50 class vtkMultiBlockDataSet;
51 class vtkMultiProcessController;
58 namespace vtkParticleTracerBaseNamespace
64 int CachedDataSetId[2];
65 vtkIdType CachedCellId[2];
105 void PrintSelf(ostream& os, vtkIndent indent);
106 void PrintParticleHistories();
111 vtkGetMacro(ComputeVorticity,
bool);
112 void SetComputeVorticity(
bool);
118 vtkGetMacro(TerminalSpeed,
double);
119 void SetTerminalSpeed(
double);
125 void SetRotationScale(
double);
126 vtkGetMacro(RotationScale,
double);
133 vtkSetMacro(IgnorePipelineTime,
int);
134 vtkGetMacro(IgnorePipelineTime,
int);
135 vtkBooleanMacro(IgnorePipelineTime,
int);
146 void SetForceReinjectionEveryNSteps(
int);
147 vtkGetMacro(ForceReinjectionEveryNSteps,
int);
155 void SetTerminationTime(
double t);
156 vtkGetMacro(TerminationTime,
double);
159 void SetIntegrator(vtkInitialValueProblemSolver *);
160 vtkGetObjectMacro ( Integrator, vtkInitialValueProblemSolver );
162 void SetIntegratorType(
int type);
163 int GetIntegratorType();
170 void SetStartTime(
double t);
171 vtkGetMacro(StartTime,
double);
182 vtkGetMacro(StaticSeeds,
int);
192 vtkGetMacro(StaticMesh,
int);
200 virtual
void SetParticleWriter(vtkAbstractParticleWriter *pw);
201 vtkGetObjectMacro(ParticleWriter, vtkAbstractParticleWriter);
207 vtkSetStringMacro(ParticleFileName);
208 vtkGetStringMacro(ParticleFileName);
214 vtkSetMacro(EnableParticleWriting,
int);
215 vtkGetMacro(EnableParticleWriting,
int);
216 vtkBooleanMacro(EnableParticleWriting,
int);
222 vtkSetMacro(DisableResetCache,
int);
223 vtkGetMacro(DisableResetCache,
int);
224 vtkBooleanMacro(DisableResetCache,
int);
229 void AddSourceConnection(vtkAlgorithmOutput* input);
230 void RemoveAllSources();
234 vtkSmartPointer<vtkPolyData> Output;
235 vtkSmartPointer<vtkPointData> ProtoPD;
236 vtkIdType UniqueIdCounter;
238 vtkSmartPointer<vtkPointData> ParticlePointData;
240 int ReinjectionCounter;
243 int IgnorePipelineTime;
244 int DisableResetCache;
253 virtual
int FillInputPortInformation(
int port, vtkInformation* info);
258 virtual
int ProcessRequest(vtkInformation* request,
259 vtkInformationVector** inputVector,
260 vtkInformationVector* outputVector);
266 virtual
int RequestInformation(vtkInformation* request,
267 vtkInformationVector** inputVector,
268 vtkInformationVector* outputVector);
273 virtual
int RequestUpdateExtent(vtkInformation* request,
274 vtkInformationVector** inputVector,
275 vtkInformationVector* outputVector);
280 virtual
int RequestData(vtkInformation* request,
281 vtkInformationVector** inputVector,
282 vtkInformationVector* outputVector);
287 virtual
int ProcessInput(vtkInformationVector** inputVector);
295 virtual vtkPolyData* Execute(vtkInformationVector** inputVector);
298 virtual
void Initialize(){}
299 virtual int OutputParticles(vtkPolyData* poly)=0;
305 int InitializeInterpolator();
306 int UpdateDataCache(vtkDataObject *td);
326 virtual void AssignSeedsToProcessors(
double time,
327 vtkDataSet *
source,
int sourceID,
int ptId,
329 int &LocalAssignedCount);
335 virtual void AssignUniqueIds(
342 void UpdateParticleList(
352 void IntegrateParticle(
354 double currenttime,
double terminationtime,
355 vtkInitialValueProblemSolver* integrator);
372 bool ComputeDomainExitLocation(
373 double pos[4],
double p2[4],
double intersection[4],
374 vtkGenericCell *cell);
380 void CreateProtoPD(vtkDataObject* input);
382 vtkFloatArray* GetParticleAge(vtkPointData*);
383 vtkIntArray* GetParticleIds(vtkPointData*);
384 vtkCharArray* GetParticleSourceIds(vtkPointData*);
385 vtkIntArray* GetInjectedPointIds(vtkPointData*);
386 vtkIntArray* GetInjectedStepIds(vtkPointData*);
387 vtkIntArray* GetErrorCodeArr(vtkPointData*);
388 vtkFloatArray* GetParticleVorticity(vtkPointData*);
389 vtkFloatArray* GetParticleRotation(vtkPointData*);
390 vtkFloatArray* GetParticleAngularVel(vtkPointData*);
394 bool InsideBounds(
double point[]);
398 void CalculateVorticity( vtkGenericCell* cell,
double pcoords[3],
399 vtkDoubleArray* cellVectors,
double vorticity[3] );
404 double GetCacheDataTime(
int i);
405 double GetCacheDataTime();
407 virtual void ResetCache();
414 virtual bool IsPointDataValid(vtkDataObject* input);
415 bool IsPointDataValid(vtkCompositeDataSet* input, std::vector<std::string>& arrayNames);
416 void GetPointDataArrayNames(vtkDataSet* input, std::vector<std::string>& names);
434 vtkInitialValueProblemSolver* Integrator;
435 double IntegrationStep;
437 bool ComputeVorticity;
438 double RotationScale;
439 double TerminalSpeed;
442 int AllFixedGeometry;
446 std::vector<double> InputTimeValues;
448 double TerminationTime;
453 int TerminationTimeStep;
457 int ForceReinjectionEveryNSteps;
458 vtkTimeStamp ParticleInjectionTime;
462 vtkAbstractParticleWriter *ParticleWriter;
463 char *ParticleFileName;
464 int EnableParticleWriting;
472 vtkSmartPointer<vtkTemporalInterpolatedVelocityField> Interpolator;
476 vtkSmartPointer<vtkMultiBlockDataSet> CachedData[2];
482 std::vector<bounds> CachedBounds[2];
486 vtkSmartPointer<vtkPoints> OutputCoordinates;
487 vtkSmartPointer<vtkFloatArray> ParticleAge;
488 vtkSmartPointer<vtkIntArray> ParticleIds;
489 vtkSmartPointer<vtkCharArray> ParticleSourceIds;
490 vtkSmartPointer<vtkIntArray> InjectedPointIds;
491 vtkSmartPointer<vtkIntArray> InjectedStepIds;
492 vtkSmartPointer<vtkIntArray> ErrorCode;
493 vtkSmartPointer<vtkFloatArray> ParticleVorticity;
494 vtkSmartPointer<vtkFloatArray> ParticleRotation;
495 vtkSmartPointer<vtkFloatArray> ParticleAngularVel;
496 vtkSmartPointer<vtkDoubleArray> CellVectors;
497 vtkSmartPointer<vtkPointData> OutputPointData;
498 vtkSmartPointer<vtkDataSet> DataReferenceT[2];
499 vtkSmartPointer<vtkCellArray> ParticleCells;
503 vtkTimeStamp ExecuteTime;
505 unsigned int NumberOfParticles();
510 static const double Epsilon;
A helper class for interpolating between times during particle tracing.
virtual void UpdateParticleListFromOtherProcesses()
An abstract class for obtaining the interpolated velocity values at a point.
virtual bool SendParticleToAnotherProcess(vtkParticleTracerBaseNamespace::ParticleInformation &, vtkParticleTracerBaseNamespace::ParticleInformation &, vtkPointData *)
ParticleVector::iterator ParticleIterator
std::list< ParticleInformation > ParticleDataList
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
std::vector< ParticleInformation > ParticleVector
ParticleDataList::iterator ParticleListIterator
A particle tracer for vector fields.