VTK  9.0.1
vtkAMRResampleFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkAMRResampleFilter.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  =========================================================================*/
33 #ifndef vtkAMRResampleFilter_h
34 #define vtkAMRResampleFilter_h
35 
36 #include "vtkFiltersAMRModule.h" // For export macro
38 #include <vector> // For STL vector
39 
40 class vtkInformation;
42 class vtkUniformGrid;
43 class vtkOverlappingAMR;
46 class vtkFieldData;
47 class vtkCellData;
48 class vtkPointData;
49 class vtkIndent;
50 
51 class vtkAMRBox;
52 class VTKFILTERSAMR_EXPORT vtkAMRResampleFilter : public vtkMultiBlockDataSetAlgorithm
53 {
54 public:
55  static vtkAMRResampleFilter* New();
57  void PrintSelf(ostream& oss, vtkIndent indent) override;
58 
60 
64  vtkSetVector3Macro(NumberOfSamples, int);
65  vtkGetVector3Macro(NumberOfSamples, int);
67 
69 
72  vtkSetMacro(TransferToNodes, int);
73  vtkGetMacro(TransferToNodes, int);
75 
77 
81  vtkSetMacro(DemandDrivenMode, int);
82  vtkGetMacro(DemandDrivenMode, int);
84 
86 
89  vtkSetMacro(NumberOfPartitions, int);
90  vtkGetMacro(NumberOfPartitions, int);
92 
94 
97  vtkSetVector3Macro(Min, double);
98  vtkGetVector3Macro(Min, double);
100 
102 
105  vtkSetVector3Macro(Max, double);
106  vtkGetVector3Macro(Max, double);
108 
110 
113  vtkSetMacro(UseBiasVector, bool);
114  vtkGetMacro(UseBiasVector, bool);
116 
118 
123  vtkSetVector3Macro(BiasVector, double);
124  vtkGetVector3Macro(BiasVector, double);
126 
128 
131  vtkSetMacro(Controller, vtkMultiProcessController*);
132  vtkGetMacro(Controller, vtkMultiProcessController*);
134 
135  // Standard pipeline routines
136 
141  int RequestInformation(vtkInformation* rqst, vtkInformationVector** inputVector,
142  vtkInformationVector* outputVector) override;
143 
145  int FillInputPortInformation(int port, vtkInformation* info) override;
147 
152 
153 protected:
155  ~vtkAMRResampleFilter() override;
156 
158  vtkMultiBlockDataSet* ROI; // Pointer to the region of interest.
159  int NumberOfSamples[3];
160  int GridNumberOfSamples[3];
161  double Min[3];
162  double Max[3];
163  double GridMin[3];
164  double GridMax[3];
171  double BiasVector[3];
172 
173  // Debugging Stuff
181  double AverageLevel;
182 
183  std::vector<int> BlocksToLoad; // Holds the ids of the blocks to load.
184 
188  bool IsParallel();
189 
194  bool IsRegionMine(const int regionIdx);
195 
200  int GetRegionProcessId(const int regionIdx);
201 
205  void ComputeCellCentroid(vtkUniformGrid* g, const vtkIdType cellIdx, double c[3]);
206 
213  void InitializeFields(vtkFieldData* f, vtkIdType size, vtkCellData* src);
214 
218  void CopyData(vtkFieldData* target, vtkIdType targetIdx, vtkCellData* src, vtkIdType srcIdx);
219 
224  bool FoundDonor(double q[3], vtkUniformGrid*& donorGrid, int& cellIdx);
225 
231  bool SearchForDonorGridAtLevel(double q[3], vtkOverlappingAMR* amrds, unsigned int level,
232  unsigned int& gridId, int& donorCellIdx);
233 
240  int ProbeGridPointInAMR(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
241  vtkOverlappingAMR* amrds, unsigned int maxLevel, bool useCached);
242 
249  int ProbeGridPointInAMRGraph(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
250  vtkOverlappingAMR* amrds, unsigned int maxLevel, bool useCached);
251 
256  void TransferToCellCenters(vtkUniformGrid* g, vtkOverlappingAMR* amrds);
257 
262  void TransferToGridNodes(vtkUniformGrid* g, vtkOverlappingAMR* amrds);
263 
267  void TransferSolution(vtkUniformGrid* g, vtkOverlappingAMR* amrds);
268 
272  void ExtractRegion(
273  vtkOverlappingAMR* amrds, vtkMultiBlockDataSet* mbds, vtkOverlappingAMR* metadata);
274 
279  bool IsBlockWithinBounds(double* grd);
280 
286  void ComputeAMRBlocksToLoad(vtkOverlappingAMR* metadata);
287 
291  void ComputeRegionParameters(
292  vtkOverlappingAMR* amrds, int N[3], double min[3], double max[3], double h[3]);
293 
297  void GetDomainParameters(vtkOverlappingAMR* amr, double domainMin[3], double domainMax[3],
298  double h[3], int dims[3], double& rf);
299 
303  bool RegionIntersectsWithAMR(
304  double domainMin[3], double domainMax[3], double regionMin[3], double regionMax[3]);
305 
310  void AdjustNumberOfSamplesInRegion(const double Rh[3], const bool outside[6], int N[3]);
311 
317  void ComputeLevelOfResolution(
318  const int N[3], const double h0[3], const double L[3], const double rf);
319 
326  void SnapBounds(const double h0[3], const double domainMin[3], const double domainMax[3],
327  const int dims[3], bool outside[6]);
328 
334  void ComputeAndAdjustRegionParameters(vtkOverlappingAMR* amrds, double h[3]);
335 
339  void GetRegion(double h[3]);
340 
344  bool GridsIntersect(double* g1, double* g2);
345 
349  vtkUniformGrid* GetReferenceGrid(vtkOverlappingAMR* amrds);
350 
364  void SearchGridDecendants(double q[3], vtkOverlappingAMR* amrds, unsigned int maxLevel,
365  unsigned int& level, unsigned int& gridId, int& id);
366 
371  bool SearchGridAncestors(
372  double q[3], vtkOverlappingAMR* amrds, unsigned int& level, unsigned int& gridId, int& id);
373 
374 private:
376  void operator=(const vtkAMRResampleFilter&) = delete;
377 };
378 
379 #endif /* vtkAMRResampleFilter_h */
vtkAMRBox
Encloses a rectangular region of voxel like cells.
Definition: vtkAMRBox.h:33
vtkAMRResampleFilter::AMRMetaData
vtkOverlappingAMR * AMRMetaData
Definition: vtkAMRResampleFilter.h:157
vtkAMRResampleFilter::NumberOfTimesLevelUp
int NumberOfTimesLevelUp
Definition: vtkAMRResampleFilter.h:178
vtkAMRResampleFilter::ROI
vtkMultiBlockDataSet * ROI
Definition: vtkAMRResampleFilter.h:158
vtkPointData
represent and manipulate point attribute data
Definition: vtkPointData.h:31
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkAMRResampleFilter::NumberOfTimesFoundOnDonorLevel
int NumberOfTimesFoundOnDonorLevel
Definition: vtkAMRResampleFilter.h:177
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkAMRResampleFilter::UseBiasVector
bool UseBiasVector
Definition: vtkAMRResampleFilter.h:170
vtkMultiBlockDataSetAlgorithm::FillOutputPortInformation
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
vtkUniformGrid
image data with blanking
Definition: vtkUniformGrid.h:34
vtkAMRResampleFilter::AverageLevel
double AverageLevel
Definition: vtkAMRResampleFilter.h:181
vtkMultiBlockDataSetAlgorithm::New
static vtkMultiBlockDataSetAlgorithm * New()
vtkAMRResampleFilter::NumberOfPartitions
int NumberOfPartitions
Definition: vtkAMRResampleFilter.h:166
vtkAMRResampleFilter::TransferToNodes
int TransferToNodes
Definition: vtkAMRResampleFilter.h:167
vtkMultiBlockDataSetAlgorithm::RequestUpdateExtent
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
Definition: vtkMultiBlockDataSetAlgorithm.h:99
vtkMultiBlockDataSet
Composite dataset that organizes datasets into blocks.
Definition: vtkMultiBlockDataSet.h:45
vtkAMRResampleFilter::LevelOfResolution
int LevelOfResolution
Definition: vtkAMRResampleFilter.h:165
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkFieldData
represent and manipulate fields of data
Definition: vtkFieldData.h:53
vtkAMRResampleFilter::NumberOfBlocksVisSkipped
int NumberOfBlocksVisSkipped
Definition: vtkAMRResampleFilter.h:176
vtkMultiBlockDataSetAlgorithm::RequestData
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
Definition: vtkMultiBlockDataSetAlgorithm.h:89
vtkAMRResampleFilter::NumberOfFailedPoints
int NumberOfFailedPoints
Definition: vtkAMRResampleFilter.h:180
vtkX3D::level
@ level
Definition: vtkX3D.h:401
vtkX3D::port
@ port
Definition: vtkX3D.h:453
target
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:965
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:75
vtkCellData
represent and manipulate cell attribute data
Definition: vtkCellData.h:32
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkMultiBlockDataSetAlgorithm.h
vtkOverlappingAMR
hierarchical dataset of vtkUniformGrids
Definition: vtkOverlappingAMR.h:40
vtkAMRResampleFilter::NumberOfBlocksTestedForLevel
int NumberOfBlocksTestedForLevel
Definition: vtkAMRResampleFilter.h:174
vtkMultiBlockDataSetAlgorithm::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:73
vtkX3D::info
@ info
Definition: vtkX3D.h:382
vtkMultiBlockDataSetAlgorithm::FillInputPortInformation
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
vtkAMRResampleFilter::Controller
vtkMultiProcessController * Controller
Definition: vtkAMRResampleFilter.h:169
vtkAMRResampleFilter::NumberOfBlocksTested
int NumberOfBlocksTested
Definition: vtkAMRResampleFilter.h:175
vtkAMRResampleFilter::DemandDrivenMode
int DemandDrivenMode
Definition: vtkAMRResampleFilter.h:168
vtkAMRResampleFilter::BlocksToLoad
std::vector< int > BlocksToLoad
Definition: vtkAMRResampleFilter.h:183
vtkAMRResampleFilter
Definition: vtkAMRResampleFilter.h:52
vtkAMRResampleFilter::NumberOfTimesLevelDown
int NumberOfTimesLevelDown
Definition: vtkAMRResampleFilter.h:179
vtkMultiBlockDataSetAlgorithm::RequestInformation
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
Definition: vtkMultiBlockDataSetAlgorithm.h:80
h
vtkMultiBlockDataSetAlgorithm
Superclass for algorithms that produce only vtkMultiBlockDataSet as output.
Definition: vtkMultiBlockDataSetAlgorithm.h:32