VTK  9.3.1
vtkExtentRCBPartitioner.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
12 #ifndef vtkExtentRCBPartitioner_h
13 #define vtkExtentRCBPartitioner_h
14 
15 #include "vtkCommonExecutionModelModule.h" // For export macro
16 #include "vtkObject.h"
17 #include <cassert> // For assert
18 #include <string> // For std::string
19 #include <vector> // For STL vector
20 
21 VTK_ABI_NAMESPACE_BEGIN
22 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkExtentRCBPartitioner : public vtkObject
23 {
24 public:
25  static vtkExtentRCBPartitioner* New();
27  void PrintSelf(ostream& oss, vtkIndent indent) override;
28 
30 
34  {
35  assert("pre: Number of partitions requested must be > 0" && (N >= 0));
36  this->Reset();
37  this->NumberOfPartitions = N;
38  }
40 
42 
47  void SetGlobalExtent(int imin, int imax, int jmin, int jmax, int kmin, int kmax)
48  {
49  this->Reset();
50  this->GlobalExtent[0] = imin;
51  this->GlobalExtent[1] = imax;
52  this->GlobalExtent[2] = jmin;
53  this->GlobalExtent[3] = jmax;
54  this->GlobalExtent[4] = kmin;
55  this->GlobalExtent[5] = kmax;
56  }
57  void SetGlobalExtent(int ext[6])
58  {
59  this->SetGlobalExtent(ext[0], ext[1], ext[2], ext[3], ext[4], ext[5]);
60  }
62 
64 
67  vtkSetMacro(DuplicateNodes, vtkTypeBool);
68  vtkGetMacro(DuplicateNodes, vtkTypeBool);
69  vtkBooleanMacro(DuplicateNodes, vtkTypeBool);
71 
73 
76  vtkSetMacro(NumberOfGhostLayers, int);
77  vtkGetMacro(NumberOfGhostLayers, int);
79 
81 
84  vtkGetMacro(NumExtents, int);
86 
90  void Partition();
91 
95  void GetPartitionExtent(int idx, int ext[6]);
96 
97 protected:
99  ~vtkExtentRCBPartitioner() override;
100 
102 
106  void Reset()
107  {
108  this->PartitionExtents.clear();
109  this->NumExtents = 0;
110  this->ExtentIsPartitioned = false;
111  }
113 
119  void ExtendGhostLayers(int ext[6]);
120 
122 
127  void GetGhostedExtent(int ext[6], int minIdx, int maxIdx)
128  {
129  ext[minIdx] -= this->NumberOfGhostLayers;
130  ext[maxIdx] += this->NumberOfGhostLayers;
131  ext[minIdx] =
132  (ext[minIdx] < this->GlobalExtent[minIdx]) ? this->GlobalExtent[minIdx] : ext[minIdx];
133  ext[maxIdx] =
134  (ext[maxIdx] > this->GlobalExtent[maxIdx]) ? this->GlobalExtent[maxIdx] : ext[maxIdx];
135  }
137 
141  void AcquireDataDescription();
142 
146  void GetExtent(int idx, int ext[6]);
147 
151  void AddExtent(int ext[6]);
152 
157  void ReplaceExtent(int idx, int ext[6]);
158 
162  void SplitExtent(int parent[6], int s1[6], int s2[6], int splitDimension);
163 
168  int GetNumberOfTotalExtents();
169 
173  int GetNumberOfNodes(int ext[6]);
174 
178  int GetNumberOfCells(int ext[6]);
179 
183  int GetLongestDimensionLength(int ext[6]);
184 
188  int GetLongestDimension(int ext[6]);
189 
193  void PrintExtent(const std::string& name, int ext[6]);
194 
197  int GlobalExtent[6];
200 
201  vtkTypeBool DuplicateNodes; // indicates whether nodes are duplicated between
202  // partitions, so that they are abutting. This is
203  // set to true by default. If disabled, the resulting
204  // partitions will have gaps.
205 
207 
208  std::vector<int> PartitionExtents;
209 
210 private:
212  void operator=(const vtkExtentRCBPartitioner&) = delete;
213 };
214 
215 VTK_ABI_NAMESPACE_END
216 #endif /* VTKEXTENTRCBPARTITIONER_H_ */
void SetGlobalExtent(int imin, int imax, int jmin, int jmax, int kmin, int kmax)
Set/Get the global extent array to be partitioned.
abstract base class for most VTK objects
Definition: vtkObject.h:51
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetNumberOfPartitions(int N)
Set/Get the number of requested partitions.
void SetGlobalExtent(int ext[6])
Set/Get the global extent array to be partitioned.
int vtkTypeBool
Definition: vtkABI.h:64
This method partitions a global extent to N partitions where N is a user supplied parameter...
a simple class to control print indentation
Definition: vtkIndent.h:28
std::vector< int > PartitionExtents
void GetGhostedExtent(int ext[6], int minIdx, int maxIdx)
Givent an extent and the min/max of the dimension we are looking at, this method will produce a ghost...
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
void Reset()
Resets the partitioner to the initial state, all previous partition extents are cleared.