VTK
vtkExtentRCBPartitioner.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkExtentRCBPartitioner.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  =========================================================================*/
23 #ifndef vtkExtentRCBPartitioner_h
24 #define vtkExtentRCBPartitioner_h
25 
26 #include "vtkCommonExecutionModelModule.h" // For export macro
27 #include "vtkObject.h"
28 #include <vector> // For STL vector
29 #include <cassert> // For assert
30 #include <string> // For std::string
31 
32 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkExtentRCBPartitioner : public vtkObject
33 {
34  public:
35  static vtkExtentRCBPartitioner *New();
37  void PrintSelf(ostream &oss, vtkIndent indent ) override;
38 
40 
43  void SetNumberOfPartitions( const int N )
44  {
45  assert( "pre: Number of partitions requested must be > 0" && (N >= 0) );
46  this->Reset();
47  this->NumberOfPartitions = N;
48  }
50 
52 
57  void SetGlobalExtent(int imin,int imax,int jmin,int jmax,int kmin,int kmax)
58  {
59  this->Reset();
60  this->GlobalExtent[0] = imin;
61  this->GlobalExtent[1] = imax;
62  this->GlobalExtent[2] = jmin;
63  this->GlobalExtent[3] = jmax;
64  this->GlobalExtent[4] = kmin;
65  this->GlobalExtent[5] = kmax;
66  }
67  void SetGlobalExtent( int ext[6] )
68  {
69  this->SetGlobalExtent( ext[0], ext[1], ext[2], ext[3], ext[4], ext[5] );
70  }
72 
74 
77  vtkSetMacro(DuplicateNodes,vtkTypeBool);
78  vtkGetMacro(DuplicateNodes,vtkTypeBool);
79  vtkBooleanMacro(DuplicateNodes,vtkTypeBool);
81 
83 
86  vtkSetMacro(NumberOfGhostLayers,int);
87  vtkGetMacro(NumberOfGhostLayers,int);
89 
91 
94  vtkGetMacro(NumExtents,int);
96 
100  void Partition();
101 
105  void GetPartitionExtent( const int idx, int ext[6] );
106 
107  protected:
109  ~vtkExtentRCBPartitioner() override;
110 
112 
116  void Reset()
117  {
118  this->PartitionExtents.clear();
119  this->NumExtents = 0;
120  this->ExtentIsPartitioned = false;
121  }
123 
129  void ExtendGhostLayers( int ext[6] );
130 
132 
138  int ext[6], const int minIdx, const int maxIdx )
139  {
140  ext[minIdx]-=this->NumberOfGhostLayers;
141  ext[maxIdx]+=this->NumberOfGhostLayers;
142  ext[minIdx] = (ext[minIdx] < this->GlobalExtent[minIdx])?
143  this->GlobalExtent[minIdx] : ext[minIdx];
144  ext[maxIdx] = (ext[maxIdx] > this->GlobalExtent[maxIdx])?
145  this->GlobalExtent[maxIdx] : ext[maxIdx];
146  }
148 
152  void AcquireDataDescription();
153 
157  void GetExtent( const int idx, int ext[6] );
158 
162  void AddExtent(int ext[6]);
163 
168  void ReplaceExtent(const int idx, int ext[6]);
169 
173  void SplitExtent(int parent[6],int s1[6],int s2[6],int splitDimension);
174 
179  int GetNumberOfTotalExtents();
180 
184  int GetNumberOfNodes( int ext[6] );
185 
189  int GetNumberOfCells( int ext[6] );
190 
194  int GetLongestDimensionLength( int ext[6] );
195 
199  int GetLongestDimension( int ext[6] );
200 
204  void PrintExtent( const std::string& name, int ext[6] );
205 
208  int GlobalExtent[6];
211 
212  vtkTypeBool DuplicateNodes; // indicates whether nodes are duplicated between
213  // partitions, so that they are abutting. This is
214  // set to true by default. If disabled, the resulting
215  // partitions will have gaps.
216 
218 
219  std::vector<int> PartitionExtents;
220 
221  private:
223  void operator=( const vtkExtentRCBPartitioner& ) = delete;
224 };
225 
226 #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:53
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetGlobalExtent(int ext[6])
Set/Get the global extent array to be partitioned.
int vtkTypeBool
Definition: vtkABI.h:69
This method partitions a global extent to N partitions where N is a user supplied parameter.
void GetGhostedExtent(int ext[6], const int minIdx, const int maxIdx)
Givent an extent and the min/max of the dimension we are looking at, this method will produce a ghost...
a simple class to control print indentation
Definition: vtkIndent.h:33
void SetNumberOfPartitions(const int N)
Set/Get the number of requested partitions.
std::vector< int > PartitionExtents
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.