VTK  9.3.0
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
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
76VTK_ABI_NAMESPACE_BEGIN
78class vtkBoundingBox;
83
84class VTKFILTERSPARALLELDIY2_EXPORT vtkRedistributeDataSetFilter : public vtkDataObjectAlgorithm
85{
86public:
89 void PrintSelf(ostream& os, vtkIndent indent) override;
90
92
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; }
149 void AddExplicitCut(const double bbox[6]);
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
275protected:
278
279 int FillInputPortInformation(int port, vtkInformation* info) override;
282
292 virtual std::vector<vtkBoundingBox> GenerateCuts(vtkDataObject* data);
293
305 vtkDataSet* dataset, const std::vector<vtkBoundingBox>& cuts);
306
307private:
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
343VTK_ABI_NAMESPACE_END
344#endif
Fast, simple class for representing and operating on 3D bounds.
Superclass for algorithms that produce only data object as output.
provides implementation for most abstract methods in the superclass vtkCompositeDataSet
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:53
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Composite dataset that organizes datasets into blocks.
composite dataset to encapsulates pieces of dataset.
Multiprocessing communication superclass.
composite dataset to encapsulates a dataset consisting of partitions.
redistributes input dataset into requested number of partitions
static vtkRedistributeDataSetFilter * New()
void SetBoundaryModeToAssignToAllIntersectingRegions()
Specify how cells on the boundaries are handled.
const vtkBoundingBox & GetExplicitCut(int index) const
Specify the cuts to use when UseExplicitCuts is true.
int RequestDataObject(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void AddExplicitCut(const double bbox[6])
Specify the cuts to use when UseExplicitCuts is true.
virtual vtkSmartPointer< vtkPartitionedDataSet > SplitDataSet(vtkDataSet *dataset, const std::vector< vtkBoundingBox > &cuts)
This method is called to split a vtkDataSet into multiple datasets by the vector of vtkBoundingBox pa...
const std::vector< vtkBoundingBox > & GetExplicitCuts() const
Specify the cuts to use when UseExplicitCuts is true.
int GetNumberOfExplicitCuts() const
Specify the cuts to use when UseExplicitCuts is true.
void SetController(vtkMultiProcessController *)
Get/Set the controller to use.
void SetExplicitCuts(const std::vector< vtkBoundingBox > &boxes)
Specify the cuts to use when UseExplicitCuts is true.
~vtkRedistributeDataSetFilter() override
std::vector< vtkBoundingBox > ExpandCuts(const std::vector< vtkBoundingBox > &cuts, const vtkBoundingBox &bounds)
Helper function to expand a collection of bounding boxes to include the bounds specified.
void RemoveAllExplicitCuts()
Specify the cuts to use when UseExplicitCuts is true.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
const std::vector< vtkBoundingBox > & GetCuts() const
Returns the cuts used by the most recent RequestData call.
void SetBoundaryModeToAssignToOneRegion()
Specify how cells on the boundaries are handled.
std::shared_ptr< const diy::Assigner > GetAssigner() const
Specify the DIY assigner used for distributing cuts.
virtual std::vector< vtkBoundingBox > GenerateCuts(vtkDataObject *data)
This method is called to generate the partitions for the input dataset.
void AddExplicitCut(const vtkBoundingBox &bbox)
Specify the cuts to use when UseExplicitCuts is true.
void SetAssigner(std::shared_ptr< diy::Assigner > assigner)
Specify the DIY assigner used for distributing cuts.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetBoundaryModeToSplitBoundaryCells()
Specify how cells on the boundaries are handled.
std::shared_ptr< diy::Assigner > GetAssigner()
Specify the DIY assigner used for distributing cuts.
Hold a reference to a vtkObjectBase instance.
int vtkIdType
Definition vtkType.h:315
#define VTK_INT_MAX
Definition vtkType.h:144