VTK  9.3.20240424
vtkAMRResampleFilter.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
24#ifndef vtkAMRResampleFilter_h
25#define vtkAMRResampleFilter_h
26
27#include "vtkFiltersAMRModule.h" // For export macro
29#include <vector> // For STL vector
30
31VTK_ABI_NAMESPACE_BEGIN
32class vtkInformation;
34class vtkUniformGrid;
38class vtkFieldData;
39class vtkCellData;
40class vtkPointData;
41class vtkIndent;
42
43class vtkAMRBox;
44class VTKFILTERSAMR_EXPORT vtkAMRResampleFilter : public vtkMultiBlockDataSetAlgorithm
45{
46public:
49 void PrintSelf(ostream& oss, vtkIndent indent) override;
50
52
56 vtkSetVector3Macro(NumberOfSamples, int);
57 vtkGetVector3Macro(NumberOfSamples, int);
59
61
64 vtkSetMacro(TransferToNodes, vtkTypeBool);
65 vtkGetMacro(TransferToNodes, vtkTypeBool);
67
69
73 vtkSetMacro(DemandDrivenMode, int);
74 vtkGetMacro(DemandDrivenMode, int);
76
78
81 vtkSetMacro(NumberOfPartitions, int);
82 vtkGetMacro(NumberOfPartitions, int);
84
86
89 vtkSetVector3Macro(Min, double);
90 vtkGetVector3Macro(Min, double);
92
94
97 vtkSetVector3Macro(Max, double);
98 vtkGetVector3Macro(Max, double);
100
102
105 vtkSetMacro(UseBiasVector, bool);
106 vtkGetMacro(UseBiasVector, bool);
108
110
115 vtkSetVector3Macro(BiasVector, double);
116 vtkGetVector3Macro(BiasVector, double);
118
120
124 vtkGetObjectMacro(Controller, vtkMultiProcessController);
126
127 // Standard pipeline routines
128
134 vtkInformationVector* outputVector) override;
135
137 int FillInputPortInformation(int port, vtkInformation* info) override;
138 int FillOutputPortInformation(int port, vtkInformation* info) override;
139
144
145protected:
148
150 vtkMultiBlockDataSet* ROI; // Pointer to the region of interest.
151 int NumberOfSamples[3];
152 int GridNumberOfSamples[3];
153 double Min[3];
154 double Max[3];
155 double GridMin[3];
156 double GridMax[3];
163 double BiasVector[3];
164
165 // Debugging Stuff
174
175 std::vector<int> BlocksToLoad; // Holds the ids of the blocks to load.
176
181
186 bool IsRegionMine(int regionIdx);
187
192 int GetRegionProcessId(int regionIdx);
193
197 void ComputeCellCentroid(vtkUniformGrid* g, vtkIdType cellIdx, double c[3]);
198
206
211
216 bool FoundDonor(double q[3], vtkUniformGrid*& donorGrid, int& cellIdx);
217
223 bool SearchForDonorGridAtLevel(double q[3], vtkOverlappingAMR* amrds, unsigned int level,
224 unsigned int& gridId, int& donorCellIdx);
225
232 int ProbeGridPointInAMR(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
233 vtkOverlappingAMR* amrds, unsigned int maxLevel, bool hadDonorGrid);
234
241 int ProbeGridPointInAMRGraph(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
242 vtkOverlappingAMR* amrds, unsigned int maxLevel, bool useCached);
243
249
255
260
266
271 bool IsBlockWithinBounds(double* grd);
272
279
284 vtkOverlappingAMR* amrds, int N[3], double min[3], double max[3], double h[3]);
285
289 void GetDomainParameters(vtkOverlappingAMR* amr, double domainMin[3], double domainMax[3],
290 double h[3], int dims[3], double& rf);
291
296 double domainMin[3], double domainMax[3], double regionMin[3], double regionMax[3]);
297
302 void AdjustNumberOfSamplesInRegion(const double Rh[3], const bool outside[6], int N[3]);
303
309 void ComputeLevelOfResolution(const int N[3], const double h0[3], const double L[3], double rf);
310
317 void SnapBounds(const double h0[3], const double domainMin[3], const double domainMax[3],
318 const int dims[3], bool outside[6]);
319
326
330 void GetRegion(double h[3]);
331
335 bool GridsIntersect(double* g1, double* g2);
336
341
355 void SearchGridDecendants(double q[3], vtkOverlappingAMR* amrds, unsigned int maxLevel,
356 unsigned int& level, unsigned int& gridId, int& id);
357
363 double q[3], vtkOverlappingAMR* amrds, unsigned int& level, unsigned int& gridId, int& id);
364
365private:
367 void operator=(const vtkAMRResampleFilter&) = delete;
368};
369
370VTK_ABI_NAMESPACE_END
371#endif /* vtkAMRResampleFilter_h */
Encloses a rectangular region of voxel like cells.
Definition vtkAMRBox.h:68
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 ComputeCellCentroid(vtkUniformGrid *g, vtkIdType cellIdx, double c[3])
Given a cell index and a grid, this method computes the cell centroid.
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.
bool IsRegionMine(int regionIdx)
Given the Region ID this function returns whether or not the region belongs to this process or not.
void ComputeLevelOfResolution(const int N[3], const double h0[3], const double L[3], double rf)
This method computes the level of resolution based on the number of samples requested,...
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.
int GetRegionProcessId(int regionIdx)
Given the Region ID, this method computes the corresponding process ID that owns the region based on ...
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.
virtual void SetController(vtkMultiProcessController *)
Set & Get macro for the multi-process controller.
~vtkAMRResampleFilter() override
void TransferSolution(vtkUniformGrid *g, vtkOverlappingAMR *amrds)
Transfers the solution.
vtkMultiProcessController * Controller
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.
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
represent and manipulate fields of data
a simple class to control print indentation
Definition vtkIndent.h:108
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
Computes the portion of a dataset which is inside a selection.
image data with blanking
int vtkTypeBool
Definition vtkABI.h:64
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
int vtkIdType
Definition vtkType.h:315
#define max(a, b)