VTK  9.4.20250322
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.
a multi-resolution dataset based on vtkUniformGrid allowing overlaps
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:332
#define max(a, b)