VTK  9.7.1
vtkDIYGhostUtilities.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
59 #ifndef vtkDIYGhostUtilities_h
60 #define vtkDIYGhostUtilities_h
61 
62 #include "vtkBoundingBox.h" // For ComputeLinkMap
63 #include "vtkDIYExplicitAssigner.h" // For DIY assigner
64 #include "vtkDIYUtilities.h" // For Block
65 #include "vtkNew.h" // For vtkNew
66 #include "vtkObject.h"
67 #include "vtkParallelDIYModule.h" // For export macros
68 #include "vtkQuaternion.h" // For vtkImageData
69 #include "vtkSmartPointer.h" // For vtkSmartPointer
70 
71 #include <array> // For VectorType and ExtentType
72 #include <map> // For BlockMapType
73 #include <set> // For Link
74 #include <unordered_map> // For BlockMapType
75 #include <vector> // For LinkMap
76 
77 // clang-format off
78 #include "vtk_diy2.h" // Third party include
79 #include VTK_DIY2(diy/assigner.hpp)
80 #include VTK_DIY2(diy/master.hpp)
81 #include VTK_DIY2(diy/partners/all-reduce.hpp)
82 // clang-format on
83 
84 VTK_ABI_NAMESPACE_BEGIN
86 class vtkAlgorithm;
87 class vtkCellArray;
88 class vtkDataArray;
89 class vtkDataSet;
90 class vtkFieldData;
91 class vtkIdList;
92 class vtkIdTypeArray;
93 class vtkImageData;
94 class vtkMatrix3x3;
96 class vtkPoints;
97 class vtkPointSet;
98 class vtkPolyData;
99 class vtkRectilinearGrid;
100 class vtkStructuredGrid;
102 class vtkUnstructuredGrid;
103 
104 class VTKPARALLELDIY_EXPORT vtkDIYGhostUtilities : public vtkObject
105 {
106 public:
108  void PrintSelf(ostream& os, vtkIndent indent) override;
109 
111 
114  using VectorType = std::array<double, 3>;
116  using ExtentType = std::array<int, 6>;
117  template <class T>
118  using BlockMapType = std::map<int, T>;
119  using Links = std::set<int>;
120  using LinkMap = std::vector<Links>;
122 
127  template <class DataSetT>
129 
130 protected:
135  {
136  vtkSmartPointer<vtkFieldData> GhostCellData = nullptr;
137  vtkSmartPointer<vtkFieldData> GhostPointData = nullptr;
138  };
139 
141  {
142  virtual ~DataSetInformation() = default;
143 
147  virtual bool InputNeedsGhostsPeeledOff() const = 0;
148  };
149 
154  {
158  GridBlockStructure(const int* extent, int dim);
159 
163  ExtentType Extent = ExtentType{ 1, -1, 1, -1, 1, -1 };
164 
170 
175 
176  ExtentType ReceivedGhostExtent = ExtentType{ 1, -1, 1, -1, 1, -1 };
177 
182  unsigned char AdjacencyMask;
183 
188  };
189 
194  {
195  ~GridInformation() override = default;
196 
197  bool InputNeedsGhostsPeeledOff() const override { return this->Extent != this->InputExtent; }
198 
202  ExtentType Extent = ExtentType{ 1, -1, 1, -1, 1, -1 };
203 
207  ExtentType InputExtent = ExtentType{ 1, -1, 1, -1, 1, -1 };
208 
210  };
211 
213  {
214  ~ImageDataInformation() override = default;
215 
217  };
218 
224  {
226 
230  ImageDataBlockStructure(const int extent[6], int dim, const double origin[3],
231  const double spacing[3], const double orientationQuaternion[4]);
232  ImageDataBlockStructure(const int extent[6], int dim, const double origin[3],
233  const double spacing[3], vtkMatrix3x3* directionMatrix);
235 
240 
245 
250 
255  };
256 
258  {
259  ~RectilinearGridInformation() override = default;
260 
262 
269 
275  vtkSmartPointer<vtkDataArray> CoordinateGhosts[6];
276 
278  };
279 
285  {
290  RectilinearGridBlockStructure(const int extent[6], int dim, vtkDataArray* xCoordinates,
291  vtkDataArray* yCoordinates, vtkDataArray* zCoordinates);
292 
297 
299 
306  };
307 
309  {
310  ~StructuredGridInformation() override = default;
311 
317  {
322 
327  };
328 
333  OuterPointLayersType OuterPointLayers[6];
334 
339 
341  };
342 
348  {
353  StructuredGridBlockStructure(const int extent[6], int dim, vtkDataArray* points[6]);
354 
359 
363  vtkSmartPointer<vtkPoints> OuterPointLayers[6];
364 
369  struct Grid2D
370  {
374  int StartX = 0;
375 
379  int StartY = 0;
380 
384  int EndX = 0;
385 
389  int EndY = 0;
390 
394  int XOrientation = 0;
395 
399  int YOrientation = 0;
400 
405  int ExtentId = -1;
406  };
407 
414 
419  };
420 
422  {
424  {
425  return this->OutputToInputCellIdRedirectionMap != nullptr;
426  }
427 
432 
437  vtkSmartPointer<vtkIdList> OutputToInputCellIdRedirectionMap = nullptr;
438 
440 
444  vtkSmartPointer<vtkIdList> InputToOutputPointIdRedirectionMap = nullptr;
445  vtkSmartPointer<vtkIdList> OutputToInputPointIdRedirectionMap = nullptr;
447 
454 
461 
466 
471 
473  /*
474  * This is a cursor telling the amount of points / cells information,
475  * that has
476  * already been added to the output. This variable is used at the very end of the pipeline.
477  */
481 
483 
489  };
490 
492  {
498 
504 
510 
514  vtkSmartPointer<vtkIdTypeArray> InterfacingGlobalPointIds = nullptr;
515 
520  vtkSmartPointer<vtkIdTypeArray> GhostGlobalPointIds = nullptr;
521 
526 
532 
534 
543 
548  std::map<vtkIdType, vtkIdType> RedirectionMapForDuplicatePointIds;
549 
555 
561  };
562 
564  {
569  vtkIdType CurrentFacesSize = 0;
570 
575  vtkIdType CurrentMaxFaceId = 0;
576 
581  vtkIdType CurrentConnectivitySize = 0;
582 
583  vtkCellArray* Faces = nullptr;
584  vtkCellArray* FaceLocations = nullptr;
585 
587 
591  vtkIdType InputConnectivitySize = 0;
592 
596  vtkIdType InputFacesSize = 0;
597 
601  vtkIdType InputNumberOfFaces = 0;
602  };
603 
605  {
610  {
613  vtkSmartPointer<vtkCellArray> FaceLocations = nullptr;
615  };
616 
619 
621 
624  vtkIdType FacesSize = 0;
625  vtkIdType FacesNum = 0;
626  vtkIdType ConnectivitySize = 0;
628  };
629 
631  {
633 
635 
643 
645 
649  vtkIdType CurrentMaxPolyId = 0;
650  vtkIdType CurrentMaxStripId = 0;
651  vtkIdType CurrentMaxLineId = 0;
653 
655 
663 
665 
673 
675 
684  };
685 
687  {
689 
697 
699  {
703  };
704 
707 
709 
712  vtkIdType NumberOfPolysToSend = 0;
713  vtkIdType NumberOfStripsToSend = 0;
714  vtkIdType NumberOfLinesToSend = 0;
716 
718 
721  vtkIdType PolyConnectivitySize = 0;
722  vtkIdType StripConnectivitySize = 0;
723  vtkIdType LineConnectivitySize = 0;
725  };
726 
727 private:
728  struct DataSetBlock
729  {
730  std::unordered_map<int, std::unordered_map<vtkIdType, vtkIdType>>
731  GlobalToLocalIds; // Per attribute
732  std::unordered_map<int, std::unordered_map<vtkIdType, vtkNew<vtkIdTypeArray>>>
733  NeededGidsForBlocks; // Ghosts of this block per process id (per attribute)
734  std::unordered_map<int, std::unordered_map<vtkIdType, vtkNew<vtkIdTypeArray>>>
735  GhostGidsFromBlocks; // Ghosts of other blocks per partition id (per attribute)
736  };
737 
738 public:
747  template <class BlockStructureT, class InformationT>
748  struct Block
749  {
751 
754  typedef BlockStructureT BlockStructureType;
755  typedef InformationT InformationType;
757 
762 
767  InformationType Information;
768 
770 
772 
775  };
776 
778 
788 
796  static int SynchronizeGhostData(std::vector<vtkDataSet*>& inputsDS,
797  std::vector<vtkDataSet*>& outputsDS, vtkMultiProcessController* controller, bool syncCell,
798  bool SyncPoint);
799 
811  template <class DataSetT>
812  static int GenerateGhostCells(std::vector<DataSetT*>& inputsDS, std::vector<DataSetT*>& outputsDS,
813  int outputGhostLevels, vtkMultiProcessController* controller, bool useImplicitArrays);
814 
816 
821  static int GenerateGhostCellsImageData(std::vector<vtkImageData*>& inputs,
822  std::vector<vtkImageData*>& outputs, int outputGhostLevels,
823  vtkMultiProcessController* controller, bool useImplicitArrays = false);
824  static int GenerateGhostCellsRectilinearGrid(std::vector<vtkRectilinearGrid*>& inputs,
825  std::vector<vtkRectilinearGrid*>& outputs, int outputGhostLevels,
826  vtkMultiProcessController* controller, bool useImplicitArrays = false);
827  static int GenerateGhostCellsStructuredGrid(std::vector<vtkStructuredGrid*>& inputs,
828  std::vector<vtkStructuredGrid*>& outputs, int outputGhostLevels,
829  vtkMultiProcessController* controller, bool useImplicitArrays = false);
830  static int GenerateGhostCellsPolyData(std::vector<vtkPolyData*>& inputs,
831  std::vector<vtkPolyData*>& outputs, int outputGhostLevels,
832  vtkMultiProcessController* controller, bool useImplicitArrays = false);
833  static int GenerateGhostCellsUnstructuredGrid(std::vector<vtkUnstructuredGrid*>& inputs,
834  std::vector<vtkUnstructuredGrid*>& outputs, int outputGhostLevels,
835  vtkMultiProcessController* controller, bool useImplicitArrays = false);
837 
838 protected:
840  ~vtkDIYGhostUtilities() override;
841 
843 
847  static void CloneInputData(std::vector<vtkDataSet*>& inputs, std::vector<vtkDataSet*>& outputs,
848  bool syncCell, bool syncPoint);
849  static void CloneInputData(vtkDataSet* input, vtkDataSet* output, int fieldType);
851 
853 
856  static void InitializeBlocks(
857  diy::Master& master, std::vector<vtkDataSet*>& inputs, bool syncCell, bool syncPoint);
858  static void InitializeBlocks(
859  diy::Master& master, std::vector<vtkDataSet*>& inputs, int fieldType, unsigned char ghostFlag);
861 
863 
867  static void ExchangeNeededIds(
868  diy::Master& master, const vtkDIYExplicitAssigner& assigner, bool syncCell, bool syncPoint);
869  static void ExchangeNeededIds(
870  diy::Master& master, const vtkDIYExplicitAssigner& assigner, int fieldType);
872 
874 
878  static LinkMap ComputeLinkMapUsingNeededIds(
879  const diy::Master& master, bool syncCell, bool syncPoint);
880  static void ComputeLinksUsingNeededIds(
881  Links& links, vtkDIYGhostUtilities::DataSetBlock* block, int fieldType);
883 
885 
888  static void ExchangeFieldData(diy::Master& master, std::vector<vtkDataSet*>& inputs,
889  std::vector<vtkDataSet*>& outputs, bool syncCell, bool syncPoint);
890  static void ExchangeFieldData(diy::Master& master, std::vector<vtkDataSet*>& inputs,
891  std::vector<vtkDataSet*>& outputs, int fieldType);
893 
897  static void ReinitializeSelectedBits(vtkUnsignedCharArray* ghosts, unsigned char mask);
898 
903  template <class DataSetT>
904  static void InitializeGhostPointArray(
905  typename DataSetTypeToBlockTypeConverter<DataSetT>::BlockType* block, DataSetT* output);
906 
911  template <class DataSetT>
912  static void InitializeGhostCellArray(
913  typename DataSetTypeToBlockTypeConverter<DataSetT>::BlockType* block, DataSetT* output);
914 
916 
919  static void CloneGeometricStructures(
920  std::vector<vtkImageData*>& inputs, std::vector<vtkImageData*>& outputs);
921  static void CloneGeometricStructures(
922  std::vector<vtkRectilinearGrid*>& inputs, std::vector<vtkRectilinearGrid*>& outputs);
923  static void CloneGeometricStructures(
924  std::vector<vtkStructuredGrid*>& inputs, std::vector<vtkStructuredGrid*>& outputs);
925  static void CloneGeometricStructures(
926  std::vector<vtkUnstructuredGrid*>& inputs, std::vector<vtkUnstructuredGrid*>& outputs);
927  static void CloneGeometricStructures(
928  std::vector<vtkPolyData*>& inputs, std::vector<vtkPolyData*>& outputs);
930 
932 
938  static void InitializeBlocks(diy::Master& master, std::vector<vtkImageData*>& inputs);
939  static void InitializeBlocks(diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs);
940  static void InitializeBlocks(diy::Master& master, std::vector<vtkStructuredGrid*>& inputs);
941  static void InitializeBlocks(diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs);
942  static void InitializeBlocks(diy::Master& master, std::vector<vtkPolyData*>& inputs);
944 
948  template <class DataSetT>
949  static void ExchangeBoundingBoxes(
950  diy::Master& master, const vtkDIYExplicitAssigner& assigner, std::vector<DataSetT*>& inputs);
951 
952  template <class BlockT>
953  static LinkMap ComputeLinkMapUsingBoundingBoxes(const diy::Master& master);
954 
956 
962  static void ExchangeBlockStructures(diy::Master& master, std::vector<vtkImageData*>& inputs);
963  static void ExchangeBlockStructures(
964  diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs);
965  static void ExchangeBlockStructures(diy::Master& master, std::vector<vtkStructuredGrid*>& inputs);
966  static void ExchangeBlockStructures(
967  diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs);
968  static void ExchangeBlockStructures(diy::Master& master, std::vector<vtkPolyData*>& inputs);
970 
972 
977  static LinkMap ComputeLinkMap(
978  const diy::Master& master, std::vector<vtkImageData*>& inputs, int outputGhostLevels);
979  static LinkMap ComputeLinkMap(
980  const diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs, int outputGhostLevels);
981  static LinkMap ComputeLinkMap(
982  const diy::Master& master, std::vector<vtkStructuredGrid*>& inputs, int outputGhostLevels);
983  static LinkMap ComputeLinkMap(
984  const diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs, int outputGhostLevels);
985  static LinkMap ComputeLinkMap(
986  const diy::Master& master, std::vector<vtkPolyData*>& inputs, int outputGhostLevels);
988 
990 
994  static void EnqueueGhosts(const diy::Master::ProxyWithLink& cp, const diy::BlockID& blockId,
995  vtkImageData* input, ImageDataBlock* block);
996  static void EnqueueGhosts(const diy::Master::ProxyWithLink& cp, const diy::BlockID& blockId,
998  static void EnqueueGhosts(const diy::Master::ProxyWithLink& cp, const diy::BlockID& blockId,
999  vtkStructuredGrid* input, StructuredGridBlock* block);
1000  static void EnqueueGhosts(const diy::Master::ProxyWithLink& cp, const diy::BlockID& blockId,
1002  static void EnqueueGhosts(const diy::Master::ProxyWithLink& cp, const diy::BlockID& blockId,
1003  vtkPolyData* input, PolyDataBlock* block);
1005 
1007 
1012  static void DequeueGhosts(
1013  const diy::Master::ProxyWithLink& cp, int gid, ImageDataBlockStructure& blockStructure);
1014  static void DequeueGhosts(
1015  const diy::Master::ProxyWithLink& cp, int gid, RectilinearGridBlockStructure& blockStructure);
1016  static void DequeueGhosts(
1017  const diy::Master::ProxyWithLink& cp, int gid, StructuredGridBlockStructure& blockStructure);
1018  static void DequeueGhosts(
1019  const diy::Master::ProxyWithLink& cp, int gid, UnstructuredGridBlockStructure& blockStructure);
1020  static void DequeueGhosts(
1021  const diy::Master::ProxyWithLink& cp, int gid, PolyDataBlockStructure& blockStructure);
1023 
1028  template <class DataSetT>
1029  static void CopyInputsAndAllocateGhosts(diy::Master& master, diy::Assigner& assigner,
1030  diy::RegularAllReducePartners& partners, std::vector<DataSetT*>& inputs,
1031  std::vector<DataSetT*>& outputs, int outputGhostLevels, bool useImplicitArrays);
1032 
1034 
1041  static void DeepCopyInputAndAllocateGhosts(
1042  ImageDataBlock* block, vtkImageData* input, vtkImageData* outputs, bool cloneArrays);
1043  static void DeepCopyInputAndAllocateGhosts(RectilinearGridBlock* block, vtkRectilinearGrid* input,
1044  vtkRectilinearGrid* outputs, bool cloneArrays);
1045  static void DeepCopyInputAndAllocateGhosts(StructuredGridBlock* block, vtkStructuredGrid* input,
1046  vtkStructuredGrid* outputs, bool cloneArrays);
1047  static void DeepCopyInputAndAllocateGhosts(UnstructuredGridBlock* block,
1048  vtkUnstructuredGrid* input, vtkUnstructuredGrid* outputs, bool cloneArrays);
1049  static void DeepCopyInputAndAllocateGhosts(
1050  PolyDataBlock* block, vtkPolyData* input, vtkPolyData* outputs, bool cloneArrays);
1052 
1056  template <class DataSetT>
1057  static bool ExchangeGhosts(diy::Master& master, diy::Assigner& assigner,
1058  diy::RegularAllReducePartners& partners, std::vector<DataSetT*>& inputs);
1059 
1063  template <class DataSetT>
1064  static void InitializeGhostArrays(
1065  diy::Master& master, std::vector<DataSetT*>& outputs, int outputGhostLevels);
1066 
1071  template <class DataSetT>
1072  static void AddGhostArrays(diy::Master& master, std::vector<DataSetT*>& outputs);
1073 
1075 
1078  static void FillGhostArrays(
1079  const diy::Master& master, std::vector<vtkImageData*>& outputs, int outputGhostLevels);
1080  static void FillGhostArrays(
1081  const diy::Master& master, std::vector<vtkRectilinearGrid*>& outputs, int outputGhostLevels);
1082  static void FillGhostArrays(
1083  const diy::Master& master, std::vector<vtkStructuredGrid*>& outputs, int outputGhostLevels);
1084  static void FillGhostArrays(
1085  const diy::Master& master, std::vector<vtkUnstructuredGrid*>& outputs, int outputGhostLevels);
1086  static void FillGhostArrays(
1087  const diy::Master& master, std::vector<vtkPolyData*>& outputs, int outputGhostLevels);
1089 
1091 
1095  static void FillImplicitGhostArrays(const diy::Master& master, std::vector<vtkImageData*>& inputs,
1096  std::vector<vtkImageData*>& outputs, int outputGhostLevels);
1097  static void FillImplicitGhostArrays(const diy::Master& master,
1098  std::vector<vtkRectilinearGrid*>& inputs, std::vector<vtkRectilinearGrid*>& outputs,
1099  int outputGhostLevels);
1100  static void FillImplicitGhostArrays(const diy::Master& master,
1101  std::vector<vtkStructuredGrid*>& inputs, std::vector<vtkStructuredGrid*>& outputs,
1102  int outputGhostLevels);
1103  static void FillImplicitGhostArrays(const diy::Master& master,
1104  std::vector<vtkUnstructuredGrid*>& inputs, std::vector<vtkUnstructuredGrid*>& outputs,
1105  int outputGhostLevels);
1106  static void FillImplicitGhostArrays(const diy::Master& master, std::vector<vtkPolyData*>& inputs,
1107  std::vector<vtkPolyData*>& outputs, int outputGhostLevels);
1109 
1110 private:
1111  vtkDIYGhostUtilities(const vtkDIYGhostUtilities&) = delete;
1112  void operator=(const vtkDIYGhostUtilities&) = delete;
1113 
1115 
1122  static void InflateBoundingBoxIfNecessary(
1123  vtkDataSet* vtkNotUsed(input), vtkBoundingBox& vtkNotUsed(bb));
1124  static void InflateBoundingBoxIfNecessary(vtkPointSet* input, vtkBoundingBox& bb);
1126 };
1127 
1128 VTK_ABI_NAMESPACE_END
1129 #include "vtkDIYGhostUtilities.txx" // for template implementations
1130 
1131 #endif
int DataDimension
This stores the dimension of the grid (1D, 2D, or 3D).
vtkDataArray * InterfacePoints
Handle to the points of the surface of the input.
vtkNew< vtkPoints > GhostPoints
Buffer to store received ghost points from neighboring blocks.
a dataset that is topologically regular with variable spacing in the three coordinate directions ...
Structure storing information needed by a block on it's own grid structure.
vtkSmartPointer< vtkDataArray > ZCoordinates
Point coordinates without ghosts.
abstract base class for most VTK objects
Definition: vtkObject.h:52
Grid2D GridInterface
2D grid interfacing 2 blocks.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkSmartPointer< vtkDataArray > YCoordinates
Point coordinate arrays of the rectilinear grid.
Structure to inherit from for data sets having a structured grid topology.
This structure represents the set of points and their corresponding extent of an external face of the...
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
vtkIdType NumberOfInputLines
Number of cells of respective type when the input has its ghost cells removed.
vtkSmartPointer< vtkPoints > Points
Points of an external face.
vtkNew< vtkPoints > GhostPoints
Ghost points sent by the current neighboring block.
vtkSmartPointer< vtkDataArray > ZCoordinates
Point coordinate arrays of the rectilinear grid.
InformationT InformationType
Typedef handle on block structure and block information.
vtkIdType InputVertConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
vtkNew< vtkIdList > OutputToInputLineCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
unsigned char AdjacencyMask
Binary mask encoding the adjacency of the neighboring block w.r.t.
vtkIdType NumberOfInputStrips
Number of cells of respective type when the input has its ghost cells removed.
BlockStructureT BlockStructureType
Typedef handle on block structure and block information.
concrete class for storing a set of points
Definition: vtkPointSet.h:58
vtkIdType CurrentStripConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
dynamic, self-adjusting array of vtkIdType
int vtkIdType
Definition: vtkType.h:363
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:71
vtkIdType NumberOfInputPoints
Number of input points / cell in the input when ghosts are removed.
vtkNew< vtkIdTypeArray > SharedPointIds
It can happen that a point can be sent by multiple blocks.
This helper structure owns a typedef to the block type of DataSetT used with diy to generate ghosts...
vtkSmartPointer< vtkDataArray > XCoordinates
Point coordinates without ghosts.
vtkNew< vtkIdList > RemappedMatchingReceivedPointIdsSortedLikeTarget
This array describes the same points as MatchingReceivedPointIds, but points are ordered like in the ...
vtkNew< vtkPoints > InterfacingPoints
These are the interfacing points sent by the current neighboring block.
vtkIdType CurrentPolyConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
vtkNew< vtkIdList > StripIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block...
vtkNew< vtkIdList > LineIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block...
vtkIdType InputLineConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
ExtentType Extent
Extent (which represents a 2D, 1D, or 0D grid), of an external face.
std::set< int > Links
Convenient typedefs.
ExtentType ShiftedExtent
Extent of the neighboring block, shifted to match our mapping of the extent in the 3D world...
vtkPoints * InputPoints
Handle on input points for current block.
Superclass for all sources, filters, and sinks in VTK.
Definition: vtkAlgorithm.h:53
std::array< double, 3 > VectorType
Convenient typedefs.
vtkSmartPointer< vtkUnsignedCharArray > GhostCellArray
vtkNew< vtkIdList > PolyIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block...
vtkSmartPointer< vtkUnsignedCharArray > GhostPointArray
vtkIdType InputStripConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
a simple class to control print indentation
Definition: vtkIndent.h:28
Utilities to produce ghost cells between a collection of data sets of same type.
vtkIdType NumberOfInputPolys
Number of cells of respective type when the input has its ghost cells removed.
vtkIdType NumberOfInputVerts
Number of cells of respective type when the input has its ghost cells removed.
abstract class to quickly locate points in 3-space
vtkNew< vtkIdList > OutputToInputStripCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
VectorType Spacing
Spacing of the neighboring vtkImageData.
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
list of point or cell ids
Definition: vtkIdList.h:25
vtkSmartPointer< vtkDataArray > XCoordinates
Point coordinate arrays of the rectilinear grid.
std::map< int, T > BlockMapType
Convenient typedefs.
vtkSmartPointer< vtkFieldData > InterfacingPointData
Point data at the interface sent by our neighbor.
dataset represents arbitrary combinations of all possible cell types
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
vtkNew< vtkIdList > OutputToInputPolyCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
vtkNew< vtkIdList > MatchingReceivedPointIds
This lists the matching point ids to the interfacing points that are exchanged with current neighbori...
InformationType Information
InformationT holds any information from the current block that is necessary to exchange ghosts...
std::array< int, 6 > ExtentType
Convenient typedefs.
VectorType Origin
Origin of the neighboring vtkImageData.
vtkSmartPointer< vtkAlgorithm > InterfaceExtractor
Filter that is being used to extract the surface of the input.
Base block structure for data sets.
dynamic, self-adjusting array of unsigned char
QuaternionType OrientationQuaternion
Orientation of the neighboring vtkImageData.
vtkNew< vtkIdList > PointIdsToSend
This lists the ids of the points that we own and need to send to the current neighboring block...
Block structure storing information being communicated by neighboring blocks for vtkImageData.
object to represent cell connectivity
Definition: vtkCellArray.h:177
std::vector< Links > LinkMap
Convenient typedefs.
Block structure to be used for diy communication.
topologically regular array of data
vtkIdType CurrentLineConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
std::map< vtkIdType, vtkIdType > RedirectionMapForDuplicatePointIds
This is a mapping from points that have been sent by the current neighboring block and have already b...
vtkIdType NumberOfInputCells
Number of input points / cell in the input when ghosts are removed.
Block structure storing information being communicated by neighboring blocks for vtkStructuredGrid.
ExtentType ShiftedExtentWithNewGhosts
Extent of neighboring block that include ghost layers, shifted to match our mapping of the extent in ...
vtkIdTypeArray * InterfacePointIds
Handle to the local point ids of the surface of the input.
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:26
vtkIdType InputPolyConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
vtkSmartPointer< vtkIdTypeArray > ReceivedSharedPointIds
It can happen that a point can be sent by multiple blocks.
vtkNew< vtkIdList > OutputToInputVertCellIdRedirectionMap
In the event that the input has ghost cells, this maps the output cells (with input ghosts removed) t...
vtkSmartPointer< vtkDataArray > YCoordinates
Point coordinates without ghosts.
vtkNew< vtkIdList > CellIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block...
BlockMapType< vtkBoundingBox > NeighborBoundingBoxes
Block structure storing information being communicated by neighboring blocks for vtkRectilinearGrid.
represent and manipulate 3D points
Definition: vtkPoints.h:30
vtkSmartPointer< vtkIdTypeArray > InterfaceGlobalPointIds
Handle to the point ids of the input surface, if present.
Fast, simple class for representing and operating on 3D bounds.
assigner for use with DIY
Represents and manipulates a collection of data arrays.
Definition: vtkFieldData.h:51
BlockMapType< BlockStructureType > BlockStructures
BlockStructures maps a neighboring block globald id to its block structure.
vtkBoundingBox BoundingBox
Bounding box of input.
Multiprocessing communication superclass.