VTK  9.1.0
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
40class vtkInformation;
42class vtkUniformGrid;
46class vtkFieldData;
47class vtkCellData;
48class vtkPointData;
49class vtkIndent;
50
51class vtkAMRBox;
52class VTKFILTERSAMR_EXPORT vtkAMRResampleFilter : public vtkMultiBlockDataSetAlgorithm
53{
54public:
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
142 vtkInformationVector* outputVector) override;
143
145 int FillInputPortInformation(int port, vtkInformation* info) override;
146 int FillOutputPortInformation(int port, vtkInformation* info) override;
147
152
153protected:
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
182
183 std::vector<int> BlocksToLoad; // Holds the ids of the blocks to load.
184
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
214
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 hadDonorGrid);
242
249 int ProbeGridPointInAMRGraph(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
250 vtkOverlappingAMR* amrds, unsigned int maxLevel, bool useCached);
251
257
263
268
274
279 bool IsBlockWithinBounds(double* grd);
280
287
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
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
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
335
339 void GetRegion(double h[3]);
340
344 bool GridsIntersect(double* g1, double* g2);
345
350
364 void SearchGridDecendants(double q[3], vtkOverlappingAMR* amrds, unsigned int maxLevel,
365 unsigned int& level, unsigned int& gridId, int& id);
366
372 double q[3], vtkOverlappingAMR* amrds, unsigned int& level, unsigned int& gridId, int& id);
373
374private:
376 void operator=(const vtkAMRResampleFilter&) = delete;
377};
378
379#endif /* vtkAMRResampleFilter_h */
Encloses a rectangular region of voxel like cells.
Definition: vtkAMRBox.h:73
This filter is a concrete instance of vtkMultiBlockDataSetAlgorithm and provides functionality for ex...
bool IsBlockWithinBounds(double *grd)
Checks if the AMR block, described by a uniform grid, is within the bounds of the ROI perscribed by t...
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
void SearchGridDecendants(double q[3], vtkOverlappingAMR *amrds, unsigned int maxLevel, unsigned int &level, unsigned int &gridId, int &id)
Writes a uniform grid to a file.
void TransferToGridNodes(vtkUniformGrid *g, vtkOverlappingAMR *amrds)
Transfer the solution from the AMR dataset to the nodes of the given uniform grid.
static vtkAMRResampleFilter * New()
void ExtractRegion(vtkOverlappingAMR *amrds, vtkMultiBlockDataSet *mbds, vtkOverlappingAMR *metadata)
Extract the region (as a multiblock) from the given AMR dataset.
vtkOverlappingAMR * AMRMetaData
bool IsParallel()
Checks if this filter instance is running on more than one processes.
bool GridsIntersect(double *g1, double *g2)
Checks if two uniform grids intersect.
void TransferToCellCenters(vtkUniformGrid *g, vtkOverlappingAMR *amrds)
Transfers the solution from the AMR dataset to the cell-centers of the given uniform grid.
int ProbeGridPointInAMR(double q[3], unsigned int &donorLevel, unsigned int &donorGridId, vtkOverlappingAMR *amrds, unsigned int maxLevel, bool hadDonorGrid)
Finds the AMR grid that contains the point q.
bool RegionIntersectsWithAMR(double domainMin[3], double domainMax[3], double regionMin[3], double regionMax[3])
Checks if the domain and requested region intersect.
vtkMultiBlockDataSet * ROI
void CopyData(vtkFieldData *target, vtkIdType targetIdx, vtkCellData *src, vtkIdType srcIdx)
Copies the data to the target from the given source.
vtkUniformGrid * GetReferenceGrid(vtkOverlappingAMR *amrds)
Returns a reference grid from the amrdataset.
void AdjustNumberOfSamplesInRegion(const double Rh[3], const bool outside[6], int N[3])
This method adjust the numbers of samples in the region, N, if the requested region falls outside,...
void ComputeAMRBlocksToLoad(vtkOverlappingAMR *metadata)
Given a user-supplied region of interest and the metadata by a module upstream, this method generates...
void ComputeRegionParameters(vtkOverlappingAMR *amrds, int N[3], double min[3], double max[3], double h[3])
Computes the region parameters.
void PrintSelf(ostream &oss, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void InitializeFields(vtkFieldData *f, vtkIdType size, vtkCellData *src)
Given the source cell data of an AMR grid, this method initializes the field values,...
void SnapBounds(const double h0[3], const double domainMin[3], const double domainMax[3], const int dims[3], bool outside[6])
This method snaps the bounds s.t.
bool SearchForDonorGridAtLevel(double q[3], vtkOverlappingAMR *amrds, unsigned int level, unsigned int &gridId, int &donorCellIdx)
Given a query point q and a target level, this method finds a suitable grid at the given level that c...
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Performs upstream requests to the reader.
void GetDomainParameters(vtkOverlappingAMR *amr, double domainMin[3], double domainMax[3], double h[3], int dims[3], double &rf)
This method accesses the domain boundaries.
~vtkAMRResampleFilter() override
void ComputeCellCentroid(vtkUniformGrid *g, const vtkIdType cellIdx, double c[3])
Given a cell index and a grid, this method computes the cell centroid.
void TransferSolution(vtkUniformGrid *g, vtkOverlappingAMR *amrds)
Transfers the solution.
vtkMultiProcessController * Controller
bool IsRegionMine(const int regionIdx)
Given the Region ID this function returns whether or not the region belongs to this process or not.
int GetRegionProcessId(const int regionIdx)
Given the Region ID, this method computes the corresponding process ID that owns the region based on ...
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
bool FoundDonor(double q[3], vtkUniformGrid *&donorGrid, int &cellIdx)
Given a query point q and a candidate donor grid, this method checks for the corresponding donor cell...
void GetRegion(double h[3])
This method gets the region of interest as perscribed by the user.
int RequestInformation(vtkInformation *rqst, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
Gets the metadata from upstream module and determines which blocks should be loaded by this instance.
int ProbeGridPointInAMRGraph(double q[3], unsigned int &donorLevel, unsigned int &donorGridId, vtkOverlappingAMR *amrds, unsigned int maxLevel, bool useCached)
Finds the AMR grid that contains the point q.
std::vector< int > BlocksToLoad
void ComputeAndAdjustRegionParameters(vtkOverlappingAMR *amrds, double h[3])
This method computes and adjusts the region parameters s.t.
void ComputeLevelOfResolution(const int N[3], const double h0[3], const double L[3], const double rf)
This method computes the level of resolution based on the number of samples requested,...
bool SearchGridAncestors(double q[3], vtkOverlappingAMR *amrds, unsigned int &level, unsigned int &gridId, int &id)
Find an ancestor of the specified grid that contains the point.
represent and manipulate cell attribute data
Definition: vtkCellData.h:142
represent and manipulate fields of data
Definition: vtkFieldData.h:164
vtkFrustumSelector is a vtkSelector that selects elements based on whether they are inside or interse...
a simple class to control print indentation
Definition: vtkIndent.h:113
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Superclass for algorithms that produce only vtkMultiBlockDataSet as output.
Composite dataset that organizes datasets into blocks.
Multiprocessing communication superclass.
hierarchical dataset of vtkUniformGrids
represent and manipulate point attribute data
Definition: vtkPointData.h:142
image data with blanking
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
int vtkIdType
Definition: vtkType.h:332
#define max(a, b)