VTK  9.6.20260605
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
84VTK_ABI_NAMESPACE_BEGIN
86class vtkAlgorithm;
87class vtkCellArray;
88class vtkDataArray;
89class vtkDataSet;
90class vtkFieldData;
91class vtkIdList;
92class vtkIdTypeArray;
93class vtkImageData;
94class vtkMatrix3x3;
96class vtkPoints;
97class vtkPointSet;
98class vtkPolyData;
103
104class VTKPARALLELDIY_EXPORT vtkDIYGhostUtilities : public vtkObject
105{
106public:
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
130protected:
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
279
307
342
348 {
353 StructuredGridBlockStructure(const int extent[6], int dim, vtkDataArray* points[6]);
354
359
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
395
400
405 int ExtentId = -1;
406 };
407
414
419 };
420
490
562
603
629
685
726
727private:
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
738public:
747 template <class BlockStructureT, class InformationT>
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
838protected:
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
879 const diy::Master& master, bool syncCell, bool syncPoint);
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>
905 typename DataSetTypeToBlockTypeConverter<DataSetT>::BlockType* block, DataSetT* output);
906
911 template <class DataSetT>
913 typename DataSetTypeToBlockTypeConverter<DataSetT>::BlockType* block, DataSetT* output);
914
916
920 std::vector<vtkImageData*>& inputs, std::vector<vtkImageData*>& outputs);
922 std::vector<vtkRectilinearGrid*>& inputs, std::vector<vtkRectilinearGrid*>& outputs);
924 std::vector<vtkStructuredGrid*>& inputs, std::vector<vtkStructuredGrid*>& outputs);
926 std::vector<vtkUnstructuredGrid*>& inputs, std::vector<vtkUnstructuredGrid*>& outputs);
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>
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);
964 diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs);
965 static void ExchangeBlockStructures(diy::Master& master, std::vector<vtkStructuredGrid*>& inputs);
967 diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs);
968 static void ExchangeBlockStructures(diy::Master& master, std::vector<vtkPolyData*>& inputs);
970
972
978 const diy::Master& master, std::vector<vtkImageData*>& inputs, int outputGhostLevels);
980 const diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs, int outputGhostLevels);
982 const diy::Master& master, std::vector<vtkStructuredGrid*>& inputs, int outputGhostLevels);
984 const diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs, int outputGhostLevels);
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,
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
1042 ImageDataBlock* block, vtkImageData* input, vtkImageData* outputs, bool cloneArrays);
1044 vtkRectilinearGrid* outputs, bool cloneArrays);
1046 vtkStructuredGrid* outputs, bool cloneArrays);
1048 vtkUnstructuredGrid* input, vtkUnstructuredGrid* outputs, bool cloneArrays);
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>
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
1110private:
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
1128VTK_ABI_NAMESPACE_END
1129#include "vtkDIYGhostUtilities.txx" // for template implementations
1130
1131#endif
abstract class to quickly locate points in 3-space
Fast, simple class for representing and operating on 3D bounds.
object to represent cell connectivity
assigner for use with DIY
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkImageData *input, ImageDataBlock *block)
This method enqueues ghosts between communicating blocks.
static void InitializeGhostPointArray(typename DataSetTypeToBlockTypeConverter< DataSetT >::BlockType *block, DataSetT *output)
This method will set all ghosts points in output to zero.
static void FillGhostArrays(const diy::Master &master, std::vector< vtkImageData * > &outputs, int outputGhostLevels)
This method sets the ghost arrays in the output.
static void InitializeBlocks(diy::Master &master, std::vector< vtkDataSet * > &inputs, bool syncCell, bool syncPoint)
Initialize vtkDataSet blocks for synchronizing ghost data.
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, RectilinearGridBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
static void InitializeGhostCellArray(typename DataSetTypeToBlockTypeConverter< DataSetT >::BlockType *block, DataSetT *output)
This method will set all ghosts cells in output to zero.
static void FillGhostArrays(const diy::Master &master, std::vector< vtkRectilinearGrid * > &outputs, int outputGhostLevels)
This method sets the ghost arrays in the output.
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkRectilinearGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
static void FillImplicitGhostArrays(const diy::Master &master, std::vector< vtkStructuredGrid * > &inputs, std::vector< vtkStructuredGrid * > &outputs, int outputGhostLevels)
This method create the implicit arrays in the output using the inputs array and the ghost data.
static LinkMap ComputeLinkMap(const diy::Master &master, std::vector< vtkRectilinearGrid * > &inputs, int outputGhostLevels)
Method to be overloaded for each supported input data set type, that computes the minimal link map be...
static LinkMap ComputeLinkMap(const diy::Master &master, std::vector< vtkUnstructuredGrid * > &inputs, int outputGhostLevels)
Method to be overloaded for each supported input data set type, that computes the minimal link map be...
static void FillGhostArrays(const diy::Master &master, std::vector< vtkStructuredGrid * > &outputs, int outputGhostLevels)
This method sets the ghost arrays in the output.
static void DeepCopyInputAndAllocateGhosts(UnstructuredGridBlock *block, vtkUnstructuredGrid *input, vtkUnstructuredGrid *outputs, bool cloneArrays)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, UnstructuredGridBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
static void ComputeLinksUsingNeededIds(Links &links, vtkDIYGhostUtilities::DataSetBlock *block, int fieldType)
Compute link map using known information from blocks, eg.
static void DeepCopyInputAndAllocateGhosts(PolyDataBlock *block, vtkPolyData *input, vtkPolyData *outputs, bool cloneArrays)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
static void InitializeBlocks(diy::Master &master, std::vector< vtkStructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
static void DeepCopyInputAndAllocateGhosts(StructuredGridBlock *block, vtkStructuredGrid *input, vtkStructuredGrid *outputs, bool cloneArrays)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static void CloneGeometricStructures(std::vector< vtkUnstructuredGrid * > &inputs, std::vector< vtkUnstructuredGrid * > &outputs)
static void InitializeBlocks(diy::Master &master, std::vector< vtkUnstructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
static void CloneGeometricStructures(std::vector< vtkImageData * > &inputs, std::vector< vtkImageData * > &outputs)
static void FillImplicitGhostArrays(const diy::Master &master, std::vector< vtkRectilinearGrid * > &inputs, std::vector< vtkRectilinearGrid * > &outputs, int outputGhostLevels)
This method create the implicit arrays in the output using the inputs array and the ghost data.
static int GenerateGhostCellsUnstructuredGrid(std::vector< vtkUnstructuredGrid * > &inputs, std::vector< vtkUnstructuredGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays=false)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
Block< RectilinearGridBlockStructure, RectilinearGridInformation > RectilinearGridBlock
Block typedefs.
static void ReinitializeSelectedBits(vtkUnsignedCharArray *ghosts, unsigned char mask)
Reinitializes the bits that match the input bit mask in the input array to zero.
static void CloneInputData(vtkDataSet *input, vtkDataSet *output, int fieldType)
Clone input data into output.
static void CloneGeometricStructures(std::vector< vtkPolyData * > &inputs, std::vector< vtkPolyData * > &outputs)
static void InitializeBlocks(diy::Master &master, std::vector< vtkImageData * > &inputs)
Method to be overloaded for each supported type of input data set.
static void CloneGeometricStructures(std::vector< vtkStructuredGrid * > &inputs, std::vector< vtkStructuredGrid * > &outputs)
static bool ExchangeGhosts(diy::Master &master, diy::Assigner &assigner, diy::RegularAllReducePartners &partners, std::vector< DataSetT * > &inputs)
This method exchanges ghosts between connected blocks.
std::set< int > Links
Convenient typedefs.
static void FillImplicitGhostArrays(const diy::Master &master, std::vector< vtkUnstructuredGrid * > &inputs, std::vector< vtkUnstructuredGrid * > &outputs, int outputGhostLevels)
This method create the implicit arrays in the output using the inputs array and the ghost data.
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, ImageDataBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
static void ExchangeNeededIds(diy::Master &master, const vtkDIYExplicitAssigner &assigner, int fieldType)
Exchange global ids of data that needs to be synced to owners of the data.
static int GenerateGhostCells(std::vector< DataSetT * > &inputsDS, std::vector< DataSetT * > &outputsDS, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays)
Main pipeline generating ghosts.
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkPolyData *input, PolyDataBlock *block)
This method enqueues ghosts between communicating blocks.
static void DeepCopyInputAndAllocateGhosts(RectilinearGridBlock *block, vtkRectilinearGrid *input, vtkRectilinearGrid *outputs, bool cloneArrays)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
Block< PolyDataBlockStructure, PolyDataInformation > PolyDataBlock
Block typedefs.
static void InitializeBlocks(diy::Master &master, std::vector< vtkPolyData * > &inputs)
Method to be overloaded for each supported type of input data set.
static void InitializeGhostArrays(diy::Master &master, std::vector< DataSetT * > &outputs, int outputGhostLevels)
This methods allocate a point and cell ghost array and fills it with 0.
static void ExchangeBoundingBoxes(diy::Master &master, const vtkDIYExplicitAssigner &assigner, std::vector< DataSetT * > &inputs)
This method exchanges the bounding boxes among blocks.
static void FillGhostArrays(const diy::Master &master, std::vector< vtkUnstructuredGrid * > &outputs, int outputGhostLevels)
This method sets the ghost arrays in the output.
~vtkDIYGhostUtilities() override
static void ExchangeNeededIds(diy::Master &master, const vtkDIYExplicitAssigner &assigner, bool syncCell, bool syncPoint)
Exchange global ids of data that needs to be synced to owners of the data.
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkUnstructuredGrid *input, UnstructuredGridBlock *block)
This method enqueues ghosts between communicating blocks.
static void ExchangeFieldData(diy::Master &master, std::vector< vtkDataSet * > &inputs, std::vector< vtkDataSet * > &outputs, int fieldType)
This method exchanges ghost data across partitions.
vtkQuaternion< double > QuaternionType
Convenient typedefs.
static LinkMap ComputeLinkMap(const diy::Master &master, std::vector< vtkStructuredGrid * > &inputs, int outputGhostLevels)
Method to be overloaded for each supported input data set type, that computes the minimal link map be...
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkStructuredGrid *input, StructuredGridBlock *block)
This method enqueues ghosts between communicating blocks.
static void CloneGeometricStructures(std::vector< vtkRectilinearGrid * > &inputs, std::vector< vtkRectilinearGrid * > &outputs)
static void FillGhostArrays(const diy::Master &master, std::vector< vtkPolyData * > &outputs, int outputGhostLevels)
This method sets the ghost arrays in the output.
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, StructuredGridBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkImageData * > &inputs)
Method to be overloaded for each supported type of input data set.
static void InitializeBlocks(diy::Master &master, std::vector< vtkDataSet * > &inputs, int fieldType, unsigned char ghostFlag)
Initialize vtkDataSet blocks for synchronizing ghost data.
std::array< double, 3 > VectorType
Convenient typedefs.
Block< UnstructuredDataBlockStructure, UnstructuredDataInformation > UnstructuredDataBlock
Block typedefs.
static int GenerateGhostCellsStructuredGrid(std::vector< vtkStructuredGrid * > &inputs, std::vector< vtkStructuredGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays=false)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
static void CopyInputsAndAllocateGhosts(diy::Master &master, diy::Assigner &assigner, diy::RegularAllReducePartners &partners, std::vector< DataSetT * > &inputs, std::vector< DataSetT * > &outputs, int outputGhostLevels, bool useImplicitArrays)
Copy the inputs into the outputs.
std::map< int, T > BlockMapType
Convenient typedefs.
Block< UnstructuredGridBlockStructure, UnstructuredGridInformation > UnstructuredGridBlock
Block typedefs.
Block< StructuredGridBlockStructure, StructuredGridInformation > StructuredGridBlock
Block typedefs.
static int GenerateGhostCellsImageData(std::vector< vtkImageData * > &inputs, std::vector< vtkImageData * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays=false)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
std::array< int, 6 > ExtentType
Convenient typedefs.
static int GenerateGhostCellsPolyData(std::vector< vtkPolyData * > &inputs, std::vector< vtkPolyData * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays=false)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkPolyData * > &inputs)
Method to be overloaded for each supported type of input data set.
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, PolyDataBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
static void FillImplicitGhostArrays(const diy::Master &master, std::vector< vtkPolyData * > &inputs, std::vector< vtkPolyData * > &outputs, int outputGhostLevels)
This method create the implicit arrays in the output using the inputs array and the ghost data.
static int SynchronizeGhostData(std::vector< vtkDataSet * > &inputsDS, std::vector< vtkDataSet * > &outputsDS, vtkMultiProcessController *controller, bool syncCell, bool SyncPoint)
Synchronize ghost data to match non-ghost data.
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkUnstructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
static int GenerateGhostCellsRectilinearGrid(std::vector< vtkRectilinearGrid * > &inputs, std::vector< vtkRectilinearGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller, bool useImplicitArrays=false)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
static void CloneInputData(std::vector< vtkDataSet * > &inputs, std::vector< vtkDataSet * > &outputs, bool syncCell, bool syncPoint)
Clone input data into output.
static LinkMap ComputeLinkMap(const diy::Master &master, std::vector< vtkPolyData * > &inputs, int outputGhostLevels)
Method to be overloaded for each supported input data set type, that computes the minimal link map be...
std::vector< Links > LinkMap
Convenient typedefs.
Block< ImageDataBlockStructure, ImageDataInformation > ImageDataBlock
Block typedefs.
static void AddGhostArrays(diy::Master &master, std::vector< DataSetT * > &outputs)
Adds ghost arrays, which are present in blocks of master, to outputs point and / or cell data.
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkRectilinearGrid *input, RectilinearGridBlock *block)
This method enqueues ghosts between communicating blocks.
static void DeepCopyInputAndAllocateGhosts(ImageDataBlock *block, vtkImageData *input, vtkImageData *outputs, bool cloneArrays)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
static LinkMap ComputeLinkMapUsingNeededIds(const diy::Master &master, bool syncCell, bool syncPoint)
Compute link map using known information from blocks, eg.
static LinkMap ComputeLinkMapUsingBoundingBoxes(const diy::Master &master)
static LinkMap ComputeLinkMap(const diy::Master &master, std::vector< vtkImageData * > &inputs, int outputGhostLevels)
Method to be overloaded for each supported input data set type, that computes the minimal link map be...
static void InitializeBlocks(diy::Master &master, std::vector< vtkRectilinearGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
static void FillImplicitGhostArrays(const diy::Master &master, std::vector< vtkImageData * > &inputs, std::vector< vtkImageData * > &outputs, int outputGhostLevels)
This method create the implicit arrays in the output using the inputs array and the ghost data.
static void ExchangeFieldData(diy::Master &master, std::vector< vtkDataSet * > &inputs, std::vector< vtkDataSet * > &outputs, bool syncCell, bool syncPoint)
This method exchanges ghost data across partitions.
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkStructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
Represents and manipulates a collection of data arrays.
list of point or cell ids
Definition vtkIdList.h:135
dynamic, self-adjusting array of vtkIdType
topologically and geometrically regular array of data
a simple class to control print indentation
Definition vtkIndent.h:108
represent and manipulate 3x3 transformation matrices
Multiprocessing communication superclass.
Allocate and hold a VTK object.
Definition vtkNew.h:168
concrete class for storing a set of points
Definition vtkPointSet.h:98
represent and manipulate 3D points
Definition vtkPoints.h:140
concrete dataset represents vertices, lines, polygons, and triangle strips
templated base type for storage of quaternions.
a dataset that is topologically regular with variable spacing in the three coordinate directions
Hold a reference to a vtkObjectBase instance.
topologically regular array of data
dynamic, self-adjusting array of unsigned char
dataset represents arbitrary combinations of all possible cell types
Block structure to be used for diy communication.
BlockStructureT BlockStructureType
Typedef handle on block structure and block information.
InformationT InformationType
Typedef handle on block structure and block information.
Base block structure for data sets.
vtkSmartPointer< vtkFieldData > GhostCellData
vtkSmartPointer< vtkFieldData > GhostPointData
virtual bool InputNeedsGhostsPeeledOff() const =0
This helper structure owns a typedef to the block type of DataSetT used with diy to generate ghosts.
GridBlockStructure(const int *extent, int dim)
GridBlockStructure constructor.
ExtentType ShiftedExtentWithNewGhosts
Extent of neighboring block that include ghost layers, shifted to match our mapping of the extent in ...
ExtentType Extent
Extent of neighboring block with no ghosts.
ExtentType ShiftedExtent
Extent of the neighboring block, shifted to match our mapping of the extent in the 3D world.
int DataDimension
This stores the dimension of the grid (1D, 2D, or 3D).
unsigned char AdjacencyMask
Binary mask encoding the adjacency of the neighboring block w.r.t.
Structure storing information needed by a block on it's own grid structure.
ExtentType Extent
Extent without ghost layers.
ExtentType InputExtent
Input extent without any modification.
Block structure storing information being communicated by neighboring blocks for vtkImageData.
VectorType Origin
Origin of the neighboring vtkImageData.
ImageDataBlockStructure(vtkImageData *image, const ImageDataInformation &info)
Copy constructor.
VectorType Spacing
Spacing of the neighboring vtkImageData.
ImageDataBlockStructure(const int extent[6], int dim, const double origin[3], const double spacing[3], vtkMatrix3x3 *directionMatrix)
Constructor taking the extent (without ghosts) of the neighboring vtkImageData, as well as well as th...
QuaternionType OrientationQuaternion
Orientation of the neighboring vtkImageData.
ImageDataBlockStructure(const int extent[6], int dim, const double origin[3], const double spacing[3], const double orientationQuaternion[4])
Constructor taking the extent (without ghosts) of the neighboring vtkImageData, as well as well as th...
vtkIdType NumberOfStripsToSend
Handle on the number of cells to send of the corresponding type.
vtkNew< vtkIdList > StripIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
vtkIdType StripConnectivitySize
Handle on the number of cells of corresponding type to be sent to the neighbor block.
vtkIdType PolyConnectivitySize
Handle on the number of cells of corresponding type to be sent to the neighbor block.
vtkNew< vtkIdList > LineIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
vtkIdType NumberOfLinesToSend
Handle on the number of cells to send of the corresponding type.
vtkIdType LineConnectivitySize
Handle on the number of cells of corresponding type to be sent to the neighbor block.
vtkIdType NumberOfPolysToSend
Handle on the number of cells to send of the corresponding type.
vtkNew< vtkIdList > PolyIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
vtkIdType CurrentMaxStripId
This is a cursor telling how many cells of corresponding types have been added so far.
vtkIdType CurrentMaxPolyId
This is a cursor telling how many cells of corresponding types have been added so far.
vtkIdType CurrentPolyConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
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.
vtkIdType CurrentLineConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
vtkIdType NumberOfInputStrips
Number of cells of respective type when the input has its ghost cells removed.
vtkNew< vtkIdList > OutputToInputLineCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
vtkNew< vtkIdList > OutputToInputStripCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
vtkIdType CurrentStripConnectivitySize
This is a cursor telling how much the corresponding output connectivity array is filled.
vtkIdType InputPolyConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
vtkIdType NumberOfInputLines
Number of cells of respective type when the input has its ghost cells removed.
vtkIdType InputStripConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
vtkNew< vtkIdList > OutputToInputVertCellIdRedirectionMap
In the event that the input has ghost cells, this maps the output cells (with input ghosts removed) t...
vtkIdType InputLineConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
vtkIdType CurrentMaxLineId
This is a cursor telling how many cells of corresponding types have been added so far.
vtkNew< vtkIdList > OutputToInputPolyCellIdRedirectionMap
Cell connectivity array size of the input if ghost cells are removed.
vtkIdType InputVertConnectivitySize
Cell connectivity array size of the input if ghost cells are removed.
Block structure storing information being communicated by neighboring blocks for vtkRectilinearGrid.
vtkSmartPointer< vtkDataArray > ZCoordinates
Point coordinate arrays of the rectilinear grid.
vtkSmartPointer< vtkDataArray > YCoordinates
Point coordinate arrays of the rectilinear grid.
vtkSmartPointer< vtkDataArray > XCoordinates
Point coordinate arrays of the rectilinear grid.
RectilinearGridBlockStructure(vtkRectilinearGrid *grid, const RectilinearGridInformation &info)
Copy constructor.
RectilinearGridBlockStructure(const int extent[6], int dim, vtkDataArray *xCoordinates, vtkDataArray *yCoordinates, vtkDataArray *zCoordinates)
Constructor taking the extent (without ghosts) of the neighboring vtkRectilinearGrid,...
vtkSmartPointer< vtkDataArray > YCoordinates
Point coordinates without ghosts.
vtkSmartPointer< vtkDataArray > XCoordinates
Point coordinates without ghosts.
vtkSmartPointer< vtkDataArray > CoordinateGhosts[6]
Coordinates of ghosts copied from connected neighbors.
vtkSmartPointer< vtkDataArray > ZCoordinates
Point coordinates without ghosts.
int ExtentId
Index of the extent of the current grid.
int EndY
End point extent coordinate in the y dimension.
int StartY
Start point extent coordinate in the y dimension.
int EndX
End point extent coordinate in the x dimension.
int StartX
Start point extent coordinate in the x dimension.
Block structure storing information being communicated by neighboring blocks for vtkStructuredGrid.
vtkNew< vtkPoints > GhostPoints
Buffer to store received ghost points from neighboring blocks.
vtkSmartPointer< vtkPoints > OuterPointLayers[6]
Point coordinate arrays of the structured grid.
StructuredGridBlockStructure(vtkStructuredGrid *grid, const StructuredGridInformation &info)
Copy constructor.
StructuredGridBlockStructure(const int extent[6], int dim, vtkDataArray *points[6])
Constructor taking the extent (without ghosts) of the neighboring vtkStructuredGrid,...
This structure represents the set of points and their corresponding extent of an external face of the...
ExtentType Extent
Extent (which represents a 2D, 1D, or 0D grid), of an external face.
vtkSmartPointer< vtkPoints > Points
Points of an external face.
OuterPointLayersType OuterPointLayers[6]
Array of 6 external faces.
vtkPoints * InputPoints
Handle on input points for current block.
vtkSmartPointer< vtkIdTypeArray > GhostGlobalPointIds
Point global ids sent to us by neighboring block, if present.
std::map< vtkIdType, vtkIdType > RedirectionMapForDuplicatePointIds
This is a mapping from points that have been sent by the current neighboring block and have already b...
vtkNew< vtkIdList > PointIdsToSend
This lists the ids of the points that we own and need to send to the current neighboring block.
vtkSmartPointer< vtkIdTypeArray > ReceivedSharedPointIds
It can happen that a point can be sent by multiple blocks.
vtkNew< vtkIdTypeArray > SharedPointIds
It can happen that a point can be sent by multiple blocks.
vtkNew< vtkIdList > MatchingReceivedPointIds
This lists the matching point ids to the interfacing points that are exchanged with current neighbori...
vtkNew< vtkIdList > CellIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
vtkNew< vtkIdList > RemappedMatchingReceivedPointIdsSortedLikeTarget
This array describes the same points as MatchingReceivedPointIds, but points are ordered like in the ...
vtkNew< vtkPoints > GhostPoints
Ghost points sent by the current neighboring block.
vtkNew< vtkPoints > InterfacingPoints
These are the interfacing points sent by the current neighboring block.
vtkSmartPointer< vtkIdTypeArray > InterfacingGlobalPointIds
Point global ids of the interfacing surface sent to us by corresponding block, if present.
vtkSmartPointer< vtkFieldData > InterfacingPointData
Point data at the interface sent by our neighbor.
vtkIdTypeArray * InterfacePointIds
Handle to the local point ids of the surface of the input.
vtkSmartPointer< vtkIdList > InputToOutputPointIdRedirectionMap
When the input has ghosts, this map is being used to copy input points / point data into the output (...
vtkIdType NumberOfInputPoints
Number of input points / cell in the input when ghosts are removed.
vtkSmartPointer< vtkIdList > OutputToInputCellIdRedirectionMap
When the input has ghosts, this map is being used to copy input cells / cell data into the output (wi...
vtkIdType NumberOfInputCells
Number of input points / cell in the input when ghosts are removed.
vtkDataArray * InterfacePoints
Handle to the points of the surface of the input.
vtkSmartPointer< vtkAlgorithm > InterfaceExtractor
Filter that is being used to extract the surface of the input.
vtkSmartPointer< vtkIdTypeArray > InterfaceGlobalPointIds
Handle to the point ids of the input surface, if present.
vtkSmartPointer< vtkIdList > OutputToInputPointIdRedirectionMap
When the input has ghosts, this map is being used to copy input points / point data into the output (...
vtkBoundingBox BoundingBox
Bounding box of input.
vtkIdType FacesSize
Handle to the faces / connectivity size that we have to send to the neighboring block.
vtkIdType ConnectivitySize
Handle to the faces / connectivity size that we have to send to the neighboring block.
vtkIdType FacesNum
Handle to the faces / connectivity size that we have to send to the neighboring block.
vtkIdType InputConnectivitySize
Cell connectivity array size of the input if the ghost cells are removed.
vtkIdType CurrentConnectivitySize
This is a cursor telling how much the output connectivity array is filled.
vtkIdType InputFacesSize
Faces array size of the input if the ghost cells are removed.
vtkIdType CurrentFacesSize
This is a cursor telling the amount of faces information, that has already been added to the output.
vtkIdType InputNumberOfFaces
Number of Faces stored in Faces array of the input if the ghost cells are removed.
vtkIdType CurrentMaxFaceId
This is a cursor telling the amount of faces information, that has already been added to the output.
#define vtkDataArray
int vtkIdType
Definition vtkType.h:363
#define vtkAlgorithm