VTK  9.3.1
vtkRedistributeDataSetFilter.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
61 #ifndef vtkRedistributeDataSetFilter_h
62 #define vtkRedistributeDataSetFilter_h
63 
64 #include "vtkDataObjectAlgorithm.h"
65 #include "vtkFiltersParallelDIY2Module.h" // for export macros
66 #include "vtkSmartPointer.h" // for vtkSmartPointer
67 
68 #include <memory> // for std::shared_ptr
69 #include <vector> // for std::vector
70 
71 // clang-format off
72 #include "vtk_diy2.h" // for DIY2 APIs
73 #include VTK_DIY2(diy/assigner.hpp)
74 // clang-format on
75 
76 VTK_ABI_NAMESPACE_BEGIN
78 class vtkBoundingBox;
82 class vtkDataObjectTree;
83 
84 class VTKFILTERSPARALLELDIY2_EXPORT vtkRedistributeDataSetFilter : public vtkDataObjectAlgorithm
85 {
86 public:
89  void PrintSelf(ostream& os, vtkIndent indent) override;
90 
92 
96  void SetController(vtkMultiProcessController*);
97  vtkGetObjectMacro(Controller, vtkMultiProcessController);
99 
101  {
102  ASSIGN_TO_ONE_REGION = 0,
103  ASSIGN_TO_ALL_INTERSECTING_REGIONS = 1,
104  SPLIT_BOUNDARY_CELLS = 2
105  };
106 
108 
120  vtkSetClampMacro(BoundaryMode, int, ASSIGN_TO_ONE_REGION, SPLIT_BOUNDARY_CELLS);
121  vtkGetMacro(BoundaryMode, int);
122  void SetBoundaryModeToAssignToOneRegion() { this->SetBoundaryMode(ASSIGN_TO_ONE_REGION); }
124  {
125  this->SetBoundaryMode(ASSIGN_TO_ALL_INTERSECTING_REGIONS);
126  }
127  void SetBoundaryModeToSplitBoundaryCells() { this->SetBoundaryMode(SPLIT_BOUNDARY_CELLS); }
129 
131 
136  vtkSetMacro(UseExplicitCuts, bool);
137  vtkGetMacro(UseExplicitCuts, bool);
138  vtkBooleanMacro(UseExplicitCuts, bool);
140 
142 
145  void SetExplicitCuts(const std::vector<vtkBoundingBox>& boxes);
146  const std::vector<vtkBoundingBox>& GetExplicitCuts() const { return this->ExplicitCuts; }
147  void RemoveAllExplicitCuts();
148  void AddExplicitCut(const vtkBoundingBox& bbox);
149  void AddExplicitCut(const double bbox[6]);
150  int GetNumberOfExplicitCuts() const;
151  const vtkBoundingBox& GetExplicitCut(int index) const;
153 
155 
160  void SetAssigner(std::shared_ptr<diy::Assigner> assigner);
161  std::shared_ptr<diy::Assigner> GetAssigner();
162  std::shared_ptr<const diy::Assigner> GetAssigner() const;
163 
165 
175  vtkSetMacro(ExpandExplicitCuts, bool);
176  vtkGetMacro(ExpandExplicitCuts, bool);
177  vtkBooleanMacro(ExpandExplicitCuts, bool);
179 
181 
185  const std::vector<vtkBoundingBox>& GetCuts() const { return this->Cuts; }
186 
188 
206  vtkSetClampMacro(NumberOfPartitions, int, 0, VTK_INT_MAX);
207  vtkGetMacro(NumberOfPartitions, int);
209 
211 
224  vtkSetMacro(PreservePartitionsInOutput, bool);
225  vtkGetMacro(PreservePartitionsInOutput, bool);
226  vtkBooleanMacro(PreservePartitionsInOutput, bool);
228 
230 
234  vtkSetMacro(GenerateGlobalCellIds, bool);
235  vtkGetMacro(GenerateGlobalCellIds, bool);
236  vtkBooleanMacro(GenerateGlobalCellIds, bool);
238 
245  std::vector<vtkBoundingBox> ExpandCuts(
246  const std::vector<vtkBoundingBox>& cuts, const vtkBoundingBox& bounds);
247 
249 
256  vtkSetMacro(EnableDebugging, bool);
257  vtkGetMacro(EnableDebugging, bool);
258  vtkBooleanMacro(EnableDebugging, bool);
260 
262 
270  vtkSetMacro(LoadBalanceAcrossAllBlocks, bool);
271  vtkGetMacro(LoadBalanceAcrossAllBlocks, bool);
272  vtkBooleanMacro(LoadBalanceAcrossAllBlocks, bool);
274 
275 protected:
277  ~vtkRedistributeDataSetFilter() override;
278 
279  int FillInputPortInformation(int port, vtkInformation* info) override;
282 
292  virtual std::vector<vtkBoundingBox> GenerateCuts(vtkDataObject* data);
293 
304  virtual vtkSmartPointer<vtkPartitionedDataSet> SplitDataSet(
305  vtkDataSet* dataset, const std::vector<vtkBoundingBox>& cuts);
306 
307 private:
309  void operator=(const vtkRedistributeDataSetFilter&) = delete;
310 
311  bool InitializeCuts(vtkDataObjectTree* input);
312  bool Redistribute(vtkPartitionedDataSet* inputDO, vtkPartitionedDataSet* outputPDS,
313  const std::vector<vtkBoundingBox>& cuts, vtkIdType* mb_offset = nullptr);
314  bool RedistributeDataSet(
315  vtkDataSet* inputDS, vtkPartitionedDataSet* outputPDS, const std::vector<vtkBoundingBox>& cuts);
316  vtkSmartPointer<vtkDataSet> ClipDataSet(vtkDataSet* dataset, const vtkBoundingBox& bbox);
317 
318  void MarkGhostCells(vtkPartitionedDataSet* pieces);
319 
320  vtkSmartPointer<vtkPartitionedDataSet> AssignGlobalCellIds(
321  vtkPartitionedDataSet* input, vtkIdType* mb_offset = nullptr);
322  vtkSmartPointer<vtkDataSet> AssignGlobalCellIds(
323  vtkDataSet* input, vtkIdType* mb_offset = nullptr);
324 
325  void MarkValidDimensions(const vtkBoundingBox& gbounds);
326 
327  std::vector<vtkBoundingBox> ExplicitCuts;
328  std::vector<vtkBoundingBox> Cuts;
329  std::shared_ptr<diy::Assigner> Assigner;
330 
331  vtkMultiProcessController* Controller;
332  int BoundaryMode;
333  int NumberOfPartitions;
334  bool PreservePartitionsInOutput;
335  bool GenerateGlobalCellIds;
336  bool UseExplicitCuts;
337  bool ExpandExplicitCuts;
338  bool EnableDebugging;
339  bool ValidDim[3];
340  bool LoadBalanceAcrossAllBlocks;
341 };
342 
343 VTK_ABI_NAMESPACE_END
344 #endif
virtual int RequestDataObject(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
composite dataset to encapsulates a dataset consisting of partitions.
provides implementation for most abstract methods in the superclass vtkCompositeDataSet ...
Store vtkAlgorithm input/output information.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:52
static vtkDataObjectAlgorithm * New()
void SetBoundaryModeToSplitBoundaryCells()
Specify how cells on the boundaries are handled.
#define VTK_INT_MAX
Definition: vtkType.h:144
Hold a reference to a vtkObjectBase instance.
Definition: vtkMeta.h:23
int vtkIdType
Definition: vtkType.h:315
const std::vector< vtkBoundingBox > & GetCuts() const
Returns the cuts used by the most recent RequestData call.
a simple class to control print indentation
Definition: vtkIndent.h:28
void SetBoundaryModeToAssignToOneRegion()
Specify how cells on the boundaries are handled.
composite dataset to encapsulates pieces of dataset.
const std::vector< vtkBoundingBox > & GetExplicitCuts() const
Specify the cuts to use when UseExplicitCuts is true.
Superclass for algorithms that produce only data object as output.
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
Composite dataset that organizes datasets into blocks.
Store zero or more vtkInformation instances.
void SetBoundaryModeToAssignToAllIntersectingRegions()
Specify how cells on the boundaries are handled.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
redistributes input dataset into requested number of partitions
general representation of visualization data
Definition: vtkDataObject.h:54
Fast, simple class for representing and operating on 3D bounds.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
Multiprocessing communication superclass.