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 */
vtkMultiProcessController * Controller
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph *>::edge_descriptor e, vtkGraph *)
represent and manipulate point attribute data
Definition: vtkPointData.h:31
vtkOverlappingAMR * AMRMetaData
vtkMultiBlockDataSet * ROI
Store vtkAlgorithm input/output information.
Encloses a rectangular region of voxel like cells.
Definition: vtkAMRBox.h:33
represent and manipulate cell attribute data
Definition: vtkCellData.h:32
int vtkIdType
Definition: vtkType.h:338
Superclass for algorithms that produce only vtkMultiBlockDataSet as output.
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
std::vector< int > BlocksToLoad
static vtkMultiBlockDataSetAlgorithm * New()
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
This filter is a concrete instance of vtkMultiBlockDataSetAlgorithm and provides functionality for ex...
a simple class to control print indentation
Definition: vtkIndent.h:33
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
image data with blanking
Composite dataset that organizes datasets into blocks.
hierarchical dataset of vtkUniformGrids
Store zero or more vtkInformation instances.
#define max(a, b)
represent and manipulate fields of data
Definition: vtkFieldData.h:53
virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
Multiprocessing communication superclass.