59#ifndef vtkDIYGhostUtilities_h 
   60#define vtkDIYGhostUtilities_h 
   66#include "vtkParallelDIYModule.h"  
   77#include VTK_DIY2(diy/assigner.hpp) 
   78#include VTK_DIY2(diy/master.hpp) 
   79#include VTK_DIY2(diy/partners/all-reduce.hpp) 
   82VTK_ABI_NAMESPACE_BEGIN
 
  125  template <
class DataSetT>
 
  229      const double spacing[3], 
const double orientationQuaternion[4]);
 
  231      const double spacing[3], 
vtkMatrix3x3* directionMatrix);
 
  392      int XOrientation = 0;
 
  397      int YOrientation = 0;
 
  423      return this->OutputToInputCellIdRedirectionMap != 
nullptr;
 
  722  template <
class BlockStructureT, 
class InformationT>
 
  772  template <
class DataSetT>
 
  783    std::vector<vtkImageData*>& outputs, 
int outputGhostLevels,
 
  786    std::vector<vtkRectilinearGrid*>& outputs, 
int outputGhostLevels,
 
  789    std::vector<vtkStructuredGrid*>& outputs, 
int outputGhostLevels,
 
  792    std::vector<vtkPolyData*>& outputs, 
int outputGhostLevels,
 
  795    std::vector<vtkUnstructuredGrid*>& outputs, 
int outputGhostLevels,
 
  812  template <
class DataSetT>
 
  820  template <
class DataSetT>
 
  829    std::vector<vtkImageData*>& inputs, std::vector<vtkImageData*>& outputs);
 
  831    std::vector<vtkRectilinearGrid*>& inputs, std::vector<vtkRectilinearGrid*>& outputs);
 
  833    std::vector<vtkStructuredGrid*>& inputs, std::vector<vtkStructuredGrid*>& outputs);
 
  835    std::vector<vtkUnstructuredGrid*>& inputs, std::vector<vtkUnstructuredGrid*>& outputs);
 
  837    std::vector<vtkPolyData*>& inputs, std::vector<vtkPolyData*>& outputs);
 
  848  static void InitializeBlocks(diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs);
 
  849  static void InitializeBlocks(diy::Master& master, std::vector<vtkStructuredGrid*>& inputs);
 
  850  static void InitializeBlocks(diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs);
 
  857  template <
class DataSetT>
 
  861  template <
class BlockT>
 
  873    diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs);
 
  876    diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs);
 
  887    const diy::Master& master, std::vector<vtkImageData*>& inputs, 
int outputGhostLevels);
 
  889    const diy::Master& master, std::vector<vtkRectilinearGrid*>& inputs, 
int outputGhostLevels);
 
  891    const diy::Master& master, std::vector<vtkStructuredGrid*>& inputs, 
int outputGhostLevels);
 
  893    const diy::Master& master, std::vector<vtkUnstructuredGrid*>& inputs, 
int outputGhostLevels);
 
  895    const diy::Master& master, std::vector<vtkPolyData*>& inputs, 
int outputGhostLevels);
 
  903  static void EnqueueGhosts(
const diy::Master::ProxyWithLink& cp, 
const diy::BlockID& blockId,
 
  905  static void EnqueueGhosts(
const diy::Master::ProxyWithLink& cp, 
const diy::BlockID& blockId,
 
  907  static void EnqueueGhosts(
const diy::Master::ProxyWithLink& cp, 
const diy::BlockID& blockId,
 
  909  static void EnqueueGhosts(
const diy::Master::ProxyWithLink& cp, 
const diy::BlockID& blockId,
 
  911  static void EnqueueGhosts(
const diy::Master::ProxyWithLink& cp, 
const diy::BlockID& blockId,
 
  937  template <
class DataSetT>
 
  939    diy::RegularAllReducePartners& partners, std::vector<DataSetT*>& inputs,
 
  940    std::vector<DataSetT*>& outputs, 
int outputGhostLevels);
 
  963  template <
class DataSetT>
 
  965    diy::RegularAllReducePartners& partners, std::vector<DataSetT*>& inputs);
 
  970  template <
class DataSetT>
 
  972    diy::Master& master, std::vector<DataSetT*>& outputs, 
int outputGhostLevels);
 
  978  template <
class DataSetT>
 
  979  static void AddGhostArrays(diy::Master& master, std::vector<DataSetT*>& outputs);
 
  986    const diy::Master& master, std::vector<vtkImageData*>& outputs, 
int outputGhostLevels);
 
  988    const diy::Master& master, std::vector<vtkRectilinearGrid*>& outputs, 
int outputGhostLevels);
 
  990    const diy::Master& master, std::vector<vtkStructuredGrid*>& outputs, 
int outputGhostLevels);
 
  992    const diy::Master& master, std::vector<vtkUnstructuredGrid*>& outputs, 
int outputGhostLevels);
 
  994    const diy::Master& master, std::vector<vtkPolyData*>& outputs, 
int outputGhostLevels);
 
 1009  static void InflateBoundingBoxIfNecessary(
 
 1015VTK_ABI_NAMESPACE_END
 
 1016#include "vtkDIYGhostUtilities.txx"  
abstract class to quickly locate points in 3-space
 
Superclass for all sources, filters, and sinks in VTK.
 
Fast, simple class for representing and operating on 3D bounds.
 
object to represent cell connectivity
 
assigner for use with DIY
 
Utilities to produce ghost cells between a collection of data sets of same type.
 
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 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 DeepCopyInputAndAllocateGhosts(UnstructuredGridBlock *block, vtkUnstructuredGrid *input, vtkUnstructuredGrid *outputs)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
 
static void DeepCopyInputAndAllocateGhosts(PolyDataBlock *block, vtkPolyData *input, vtkPolyData *outputs)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
 
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 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 DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, UnstructuredGridBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
 
static void InitializeBlocks(diy::Master &master, std::vector< vtkStructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
 
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 int GenerateGhostCellsRectilinearGrid(std::vector< vtkRectilinearGrid * > &inputs, std::vector< vtkRectilinearGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
 
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 DeepCopyInputAndAllocateGhosts(StructuredGridBlock *block, vtkStructuredGrid *input, vtkStructuredGrid *outputs)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
 
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.
 
static int GenerateGhostCellsStructuredGrid(std::vector< vtkStructuredGrid * > &inputs, std::vector< vtkStructuredGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
 
std::set< int > Links
Convenient typedefs.
 
static void DequeueGhosts(const diy::Master::ProxyWithLink &cp, int gid, ImageDataBlockStructure &blockStructure)
This method dequeues ghosts sent between communicating blocks.
 
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 CopyInputsAndAllocateGhosts(diy::Master &master, diy::Assigner &assigner, diy::RegularAllReducePartners &partners, std::vector< DataSetT * > &inputs, std::vector< DataSetT * > &outputs, int outputGhostLevels)
Copy the inputs into the outputs.
 
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.
 
static int GenerateGhostCellsPolyData(std::vector< vtkPolyData * > &inputs, std::vector< vtkPolyData * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
 
static void DeepCopyInputAndAllocateGhosts(ImageDataBlock *block, vtkImageData *input, vtkImageData *outputs)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
 
~vtkDIYGhostUtilities() override
 
static void EnqueueGhosts(const diy::Master::ProxyWithLink &cp, const diy::BlockID &blockId, vtkUnstructuredGrid *input, UnstructuredGridBlock *block)
This method enqueues ghosts between communicating blocks.
 
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 int GenerateGhostCellsImageData(std::vector< vtkImageData * > &inputs, std::vector< vtkImageData * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
 
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.
 
std::array< double, 3 > VectorType
Convenient typedefs.
 
std::map< int, T > BlockMapType
Convenient typedefs.
 
std::array< int, 6 > ExtentType
Convenient typedefs.
 
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 ExchangeBlockStructures(diy::Master &master, std::vector< vtkUnstructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
 
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.
 
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 int GenerateGhostCellsUnstructuredGrid(std::vector< vtkUnstructuredGrid * > &inputs, std::vector< vtkUnstructuredGrid * > &outputs, int outputGhostLevels, vtkMultiProcessController *controller)
Method that can be used to avoid the compile-time overhead of the templated method GenerateGhostCells...
 
static void DeepCopyInputAndAllocateGhosts(RectilinearGridBlock *block, vtkRectilinearGrid *input, vtkRectilinearGrid *outputs)
Method to be overloaded for each supported input data set type, This method allocates ghosts in the o...
 
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 int GenerateGhostCells(std::vector< DataSetT * > &inputsDS, std::vector< DataSetT * > &outputsDS, int outputGhostLevels, vtkMultiProcessController *controller)
Main pipeline generating ghosts.
 
static void ExchangeBlockStructures(diy::Master &master, std::vector< vtkStructuredGrid * > &inputs)
Method to be overloaded for each supported type of input data set.
 
abstract superclass for arrays of numeric data
 
abstract class to specify dataset behavior
 
represent and manipulate fields of data
 
list of point or cell ids
 
dynamic, self-adjusting array of vtkIdType
 
topologically and geometrically regular array of data
 
a simple class to control print indentation
 
represent and manipulate 3x3 transformation matrices
 
Multiprocessing communication superclass.
 
Allocate and hold a VTK object.
 
abstract base class for most VTK objects
 
concrete class for storing a set of points
 
represent and manipulate 3D points
 
concrete dataset represents vertices, lines, polygons, and triangle strips
 
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.
 
vtkSmartPointer< vtkUnsignedCharArray > GhostPointArray
 
BlockMapType< vtkBoundingBox > NeighborBoundingBoxes
 
BlockStructureT BlockStructureType
Typedef handle on block structure and block information.
 
vtkBoundingBox BoundingBox
 
vtkSmartPointer< vtkUnsignedCharArray > GhostCellArray
 
BlockMapType< BlockStructureType > BlockStructures
BlockStructures maps a neighboring block globald id to its block structure.
 
InformationT InformationType
Typedef handle on block structure and block information.
 
InformationType Information
InformationT holds any information from the current block that is necessary to exchange ghosts.
 
Base block structure for data sets.
 
This helper structure owns a typedef to the block type of DataSetT used with diy to generate ghosts.
 
Structure to inherit from for data sets having a structured grid topology.
 
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 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.
 
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...
 
vtkNew< vtkCellArray > Lines
 
vtkNew< vtkCellArray > Strips
 
vtkNew< vtkCellArray > Polys
 
vtkNew< vtkIdList > StripIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
 
TopologyBufferType ReceiveBuffer
 
vtkNew< vtkIdList > LineIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
 
TopologyBufferType SendBuffer
 
vtkNew< vtkIdList > PolyIdsToSend
This lists the ids of the cells that we own and need to send to the current neighboring block.
 
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,...
 
Grid interfacing with block's grid.
 
Block structure storing information being communicated by neighboring blocks for vtkStructuredGrid.
 
vtkNew< vtkPoints > GhostPoints
Buffer to store received ghost points from neighboring blocks.
 
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,...
 
Grid2D GridInterface
2D grid interfacing 2 blocks.
 
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< vtkFieldData > InterfacingPointData
Point data at the interface sent by our neighbor.
 
Topology information for cells to be exchanged.
 
vtkNew< vtkCellArray > CellArray
 
TopologyBufferType ReceiveBuffer
 
TopologyBufferType SendBuffer