VTK  9.2.6
vtkRedistributeDataSetFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkRedistributeDataSetFilter.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 =========================================================================*/
73 #ifndef vtkRedistributeDataSetFilter_h
74 #define vtkRedistributeDataSetFilter_h
75 
76 #include "vtkDataObjectAlgorithm.h"
77 #include "vtkFiltersParallelDIY2Module.h" // for export macros
78 #include "vtkSmartPointer.h" // for vtkSmartPointer
79 
80 #include <memory> // for std::shared_ptr
81 #include <vector> // for std::vector
82 
83 // clang-format off
84 #include "vtk_diy2.h" // for DIY2 APIs
85 #include VTK_DIY2(diy/assigner.hpp)
86 // clang-format on
87 
89 class vtkBoundingBox;
93 class vtkDataObjectTree;
94 
95 class VTKFILTERSPARALLELDIY2_EXPORT vtkRedistributeDataSetFilter : public vtkDataObjectAlgorithm
96 {
97 public:
100  void PrintSelf(ostream& os, vtkIndent indent) override;
101 
103 
107  void SetController(vtkMultiProcessController*);
108  vtkGetObjectMacro(Controller, vtkMultiProcessController);
110 
112  {
113  ASSIGN_TO_ONE_REGION = 0,
114  ASSIGN_TO_ALL_INTERSECTING_REGIONS = 1,
115  SPLIT_BOUNDARY_CELLS = 2
116  };
117 
119 
131  vtkSetClampMacro(BoundaryMode, int, ASSIGN_TO_ONE_REGION, SPLIT_BOUNDARY_CELLS);
132  vtkGetMacro(BoundaryMode, int);
133  void SetBoundaryModeToAssignToOneRegion() { this->SetBoundaryMode(ASSIGN_TO_ONE_REGION); }
135  {
136  this->SetBoundaryMode(ASSIGN_TO_ALL_INTERSECTING_REGIONS);
137  }
138  void SetBoundaryModeToSplitBoundaryCells() { this->SetBoundaryMode(SPLIT_BOUNDARY_CELLS); }
140 
142 
147  vtkSetMacro(UseExplicitCuts, bool);
148  vtkGetMacro(UseExplicitCuts, bool);
149  vtkBooleanMacro(UseExplicitCuts, bool);
151 
153 
156  void SetExplicitCuts(const std::vector<vtkBoundingBox>& boxes);
157  const std::vector<vtkBoundingBox>& GetExplicitCuts() const { return this->ExplicitCuts; }
158  void RemoveAllExplicitCuts();
159  void AddExplicitCut(const vtkBoundingBox& bbox);
160  void AddExplicitCut(const double bbox[6]);
161  int GetNumberOfExplicitCuts() const;
162  const vtkBoundingBox& GetExplicitCut(int index) const;
164 
166 
171  void SetAssigner(std::shared_ptr<diy::Assigner> assigner);
172  std::shared_ptr<diy::Assigner> GetAssigner();
173  std::shared_ptr<const diy::Assigner> GetAssigner() const;
174 
176 
186  vtkSetMacro(ExpandExplicitCuts, bool);
187  vtkGetMacro(ExpandExplicitCuts, bool);
188  vtkBooleanMacro(ExpandExplicitCuts, bool);
190 
192 
196  const std::vector<vtkBoundingBox>& GetCuts() const { return this->Cuts; }
197 
199 
217  vtkSetClampMacro(NumberOfPartitions, int, 0, VTK_INT_MAX);
218  vtkGetMacro(NumberOfPartitions, int);
220 
222 
235  vtkSetMacro(PreservePartitionsInOutput, bool);
236  vtkGetMacro(PreservePartitionsInOutput, bool);
237  vtkBooleanMacro(PreservePartitionsInOutput, bool);
239 
241 
245  vtkSetMacro(GenerateGlobalCellIds, bool);
246  vtkGetMacro(GenerateGlobalCellIds, bool);
247  vtkBooleanMacro(GenerateGlobalCellIds, bool);
249 
256  std::vector<vtkBoundingBox> ExpandCuts(
257  const std::vector<vtkBoundingBox>& cuts, const vtkBoundingBox& bounds);
258 
260 
267  vtkSetMacro(EnableDebugging, bool);
268  vtkGetMacro(EnableDebugging, bool);
269  vtkBooleanMacro(EnableDebugging, bool);
271 
273 
281  vtkSetMacro(LoadBalanceAcrossAllBlocks, bool);
282  vtkGetMacro(LoadBalanceAcrossAllBlocks, bool);
283  vtkBooleanMacro(LoadBalanceAcrossAllBlocks, bool);
285 
286 protected:
288  ~vtkRedistributeDataSetFilter() override;
289 
290  int FillInputPortInformation(int port, vtkInformation* info) override;
293 
303  virtual std::vector<vtkBoundingBox> GenerateCuts(vtkDataObject* data);
304 
315  virtual vtkSmartPointer<vtkPartitionedDataSet> SplitDataSet(
316  vtkDataSet* dataset, const std::vector<vtkBoundingBox>& cuts);
317 
318 private:
320  void operator=(const vtkRedistributeDataSetFilter&) = delete;
321 
322  bool InitializeCuts(vtkDataObjectTree* input);
323  bool Redistribute(vtkPartitionedDataSet* inputDO, vtkPartitionedDataSet* outputPDS,
324  const std::vector<vtkBoundingBox>& cuts, vtkIdType* mb_offset = nullptr);
325  bool RedistributeDataSet(
326  vtkDataSet* inputDS, vtkPartitionedDataSet* outputPDS, const std::vector<vtkBoundingBox>& cuts);
327  vtkSmartPointer<vtkDataSet> ClipDataSet(vtkDataSet* dataset, const vtkBoundingBox& bbox);
328 
329  void MarkGhostCells(vtkPartitionedDataSet* pieces);
330 
331  vtkSmartPointer<vtkPartitionedDataSet> AssignGlobalCellIds(
332  vtkPartitionedDataSet* input, vtkIdType* mb_offset = nullptr);
333  vtkSmartPointer<vtkDataSet> AssignGlobalCellIds(
334  vtkDataSet* input, vtkIdType* mb_offset = nullptr);
335 
336  void MarkValidDimensions(const vtkBoundingBox& gbounds);
337 
338  std::vector<vtkBoundingBox> ExplicitCuts;
339  std::vector<vtkBoundingBox> Cuts;
340  std::shared_ptr<diy::Assigner> Assigner;
341 
342  vtkMultiProcessController* Controller;
343  int BoundaryMode;
344  int NumberOfPartitions;
345  bool PreservePartitionsInOutput;
346  bool GenerateGlobalCellIds;
347  bool UseExplicitCuts;
348  bool ExpandExplicitCuts;
349  bool EnableDebugging;
350  bool ValidDim[3];
351  bool LoadBalanceAcrossAllBlocks;
352 };
353 
354 #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:62
static vtkDataObjectAlgorithm * New()
void SetBoundaryModeToSplitBoundaryCells()
Specify how cells on the boundaries are handled.
#define VTK_INT_MAX
Definition: vtkType.h:155
Hold a reference to a vtkObjectBase instance.
Definition: vtkMeta.h:32
int vtkIdType
Definition: vtkType.h:332
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:39
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:65
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.