VTK  9.5.20250928
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
27#ifndef vtkAMRResampleFilter_h
28#define vtkAMRResampleFilter_h
29
30#include "vtkFiltersAMRModule.h" // For export macro
32#include <vector> // For STL vector
33
34VTK_ABI_NAMESPACE_BEGIN
35class vtkInformation;
37class vtkUniformGrid;
41class vtkFieldData;
42class vtkCellData;
43class vtkPointData;
44class vtkIndent;
45
46class vtkAMRBox;
47class VTKFILTERSAMR_EXPORT vtkAMRResampleFilter : public vtkMultiBlockDataSetAlgorithm
48{
49public:
52 void PrintSelf(ostream& oss, vtkIndent indent) override;
53
55
59 vtkSetVector3Macro(NumberOfSamples, int);
60 vtkGetVector3Macro(NumberOfSamples, int);
62
64
67 vtkSetMacro(TransferToNodes, vtkTypeBool);
68 vtkGetMacro(TransferToNodes, vtkTypeBool);
70
72
76 vtkSetMacro(DemandDrivenMode, int);
77 vtkGetMacro(DemandDrivenMode, int);
79
81
84 vtkSetMacro(NumberOfPartitions, int);
85 vtkGetMacro(NumberOfPartitions, int);
87
89
92 vtkSetVector3Macro(Min, double);
93 vtkGetVector3Macro(Min, double);
95
97
100 vtkSetVector3Macro(Max, double);
101 vtkGetVector3Macro(Max, double);
103
105
108 vtkSetMacro(UseBiasVector, bool);
109 vtkGetMacro(UseBiasVector, bool);
111
113
118 vtkSetVector3Macro(BiasVector, double);
119 vtkGetVector3Macro(BiasVector, double);
121
123
127 vtkGetObjectMacro(Controller, vtkMultiProcessController);
129
130 // Standard pipeline routines
131
137 vtkInformationVector* outputVector) override;
138
140 int FillInputPortInformation(int port, vtkInformation* info) override;
141 int FillOutputPortInformation(int port, vtkInformation* info) override;
142
147
148protected:
151
153 vtkMultiBlockDataSet* ROI; // Pointer to the region of interest.
154 int NumberOfSamples[3];
155 int GridNumberOfSamples[3];
156 double Min[3];
157 double Max[3];
158 double GridMin[3];
159 double GridMax[3];
166 double BiasVector[3];
167
168 // Debugging Stuff
177
178 std::vector<int> BlocksToLoad; // Holds the ids of the blocks to load.
179
184
189 bool IsRegionMine(int regionIdx);
190
195 int GetRegionProcessId(int regionIdx);
196
200 void ComputeCellCentroid(vtkUniformGrid* g, vtkIdType cellIdx, double c[3]);
201
209
214
219 bool FoundDonor(double q[3], vtkUniformGrid*& donorGrid, int& cellIdx);
220
226 bool SearchForDonorGridAtLevel(double q[3], vtkOverlappingAMR* amrds, unsigned int level,
227 unsigned int& gridId, int& donorCellIdx);
228
235 int ProbeGridPointInAMR(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
236 vtkOverlappingAMR* amrds, unsigned int maxLevel, bool hadDonorGrid);
237
244 int ProbeGridPointInAMRGraph(double q[3], unsigned int& donorLevel, unsigned int& donorGridId,
245 vtkOverlappingAMR* amrds, unsigned int maxLevel, bool useCached);
246
252
258
263
269
274 bool IsBlockWithinBounds(double* grd);
275
282
287 vtkOverlappingAMR* amrds, int N[3], double min[3], double max[3], double h[3]);
288
292 void GetDomainParameters(vtkOverlappingAMR* amr, double domainMin[3], double domainMax[3],
293 double h[3], int dims[3], double& rf);
294
299 double domainMin[3], double domainMax[3], double regionMin[3], double regionMax[3]);
300
305 void AdjustNumberOfSamplesInRegion(const double Rh[3], const bool outside[6], int N[3]);
306
312 void ComputeLevelOfResolution(const int N[3], const double h0[3], const double L[3], double rf);
313
320 void SnapBounds(const double h0[3], const double domainMin[3], const double domainMax[3],
321 const int dims[3], bool outside[6]);
322
329
333 void GetRegion(double h[3]);
334
338 bool GridsIntersect(double* g1, double* g2);
339
344
358 void SearchGridDecendants(double q[3], vtkOverlappingAMR* amrds, unsigned int maxLevel,
359 unsigned int& level, unsigned int& gridId, int& id);
360
366 double q[3], vtkOverlappingAMR* amrds, unsigned int& level, unsigned int& gridId, int& id);
367
368private:
370 void operator=(const vtkAMRResampleFilter&) = delete;
371};
372
373VTK_ABI_NAMESPACE_END
374#endif /* vtkAMRResampleFilter_h */
Encloses a rectangular region of voxel like cells.
Definition vtkAMRBox.h:69
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
Represents and manipulates a collection of data arrays.
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.
a multi-resolution dataset based on vtkCartesianGrid allowing overlaps
represent and manipulate point attribute data
Computes the portion of a dataset which is inside a selection.
Deprecated vtkImageData.
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:334
#define max(a, b)