VTK  9.2.20230321
vtkDistributedGraphHelper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDistributedGraphHelper.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 =========================================================================*/
15 /*
16  * Copyright (C) 2008 The Trustees of Indiana University.
17  * Use, modification and distribution is subject to the Boost Software
18  * License, Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt)
19  */
20 
53 #ifndef vtkDistributedGraphHelper_h
54 #define vtkDistributedGraphHelper_h
55 
56 #include "vtkCommonDataModelModule.h" // For export macro
57 #include "vtkObject.h"
58 
59 VTK_ABI_NAMESPACE_BEGIN
60 class vtkDistributedGraphHelperInternals;
61 struct vtkEdgeType;
62 class vtkGraph;
63 class vtkVariant;
64 class vtkVariantArray;
66 
67 // .NAME vtkVertexPedigreeIdDistributionFunction - The type of a
68 // function used to determine how to distribute vertex pedigree IDs
69 // across processors in a vtkGraph. The pedigree ID distribution
70 // function takes the pedigree ID of the vertex and a user-supplied
71 // void pointer and returns a hash value V. A vertex with that
72 // pedigree ID will reside on processor V % P, where P is the number
73 // of processors. This type is used in conjunction with the
74 // vtkDistributedGraphHelper class.
75 typedef vtkIdType (*vtkVertexPedigreeIdDistribution)(const vtkVariant& pedigreeId, void* userData);
76 
77 class VTKCOMMONDATAMODEL_EXPORT vtkDistributedGraphHelper : public vtkObject
78 {
79 public:
81  void PrintSelf(ostream& os, vtkIndent indent) override;
82 
87 
92 
97 
103 
108 
117 
122 
131  virtual void Synchronize() = 0;
132 
139 
141 
151 
152 protected:
155 
163  virtual void AddVertexInternal(vtkVariantArray* propertyArr, vtkIdType* vertex) = 0;
164 
169  virtual void AddVertexInternal(const vtkVariant& pedigreeId, vtkIdType* vertex) = 0;
170 
177  virtual void AddEdgeInternal(
178  vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge) = 0;
179 
188  virtual void AddEdgeInternal(const vtkVariant& uPedigreeId, vtkIdType v, bool directed,
189  vtkVariantArray* propertyArr, vtkEdgeType* edge) = 0;
190 
199  virtual void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigreeId, bool directed,
200  vtkVariantArray* propertyArr, vtkEdgeType* edge) = 0;
201 
211  virtual void AddEdgeInternal(const vtkVariant& uPedigreeId, const vtkVariant& vPedigreeId,
212  bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge) = 0;
213 
219  virtual vtkIdType FindVertex(const vtkVariant& pedigreeId) = 0;
220 
227 
232  virtual void AttachToGraph(vtkGraph* graph);
233 
238 
243 
248 
253 
258 
262  int procBits;
263 
268 
269 private:
271  void operator=(const vtkDistributedGraphHelper&) = delete;
272 
273  friend class vtkGraph;
274 };
275 
276 VTK_ABI_NAMESPACE_END
277 #endif // vtkDistributedGraphHelper_h
helper for the vtkGraph class that allows the graph to be distributed across multiple memory spaces.
vtkIdType GetEdgeOwner(vtkIdType e_id) const
Returns owner of edge with ID e_id, by extracting top ceil(log2 P) bits of e_id.
virtual vtkDistributedGraphHelper * Clone()=0
Clones the distributed graph helper, returning another distributed graph helper of the same kind that...
virtual void FindEdgeSourceAndTarget(vtkIdType id, vtkIdType *source, vtkIdType *target)=0
Determine the source and target of the edge with the given ID.
vtkIdType MakeDistributedId(int owner, vtkIdType local)
Builds a distributed ID consisting of the given owner and the local ID.
vtkIdType GetVertexOwner(vtkIdType v) const
Returns owner of vertex v, by extracting top ceil(log2 P) bits of v.
virtual void AddVertexInternal(vtkVariantArray *propertyArr, vtkIdType *vertex)=0
Add a vertex, optionally with properties, to the distributed graph.
static vtkInformationIntegerKey * DISTRIBUTEDEDGEIDS()
Information Keys that distributed graphs can append to attribute arrays to flag them as containing di...
virtual void AddEdgeInternal(vtkIdType u, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)=0
Add an edge (u, v) to the distributed graph.
vtkIdType GetEdgeIndex(vtkIdType e_id) const
Returns local index of edge with ID e_id, by masking off top ceil(log2 P) bits of e_id.
virtual void AddEdgeInternal(const vtkVariant &uPedigreeId, const vtkVariant &vPedigreeId, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)=0
Adds an edge (u, v) and returns the new edge.
virtual void AddEdgeInternal(const vtkVariant &uPedigreeId, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)=0
Adds an edge (u, v) and returns the new edge.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkVertexPedigreeIdDistribution VertexDistribution
The distribution function used to map a pedigree ID to a processor.
void SetVertexPedigreeIdDistribution(vtkVertexPedigreeIdDistribution Func, void *userData)
Set the pedigreeId -> processor distribution function that determines how vertices are distributed wh...
virtual void AttachToGraph(vtkGraph *graph)
Attach this distributed graph helper to the given graph.
virtual void AddVertexInternal(const vtkVariant &pedigreeId, vtkIdType *vertex)=0
Add a vertex with the given pedigreeId to the distributed graph.
vtkIdType GetVertexOwnerByPedigreeId(const vtkVariant &pedigreeId)
Determine which processor owns the vertex with the given pedigree ID.
virtual void AddEdgeInternal(vtkIdType u, const vtkVariant &vPedigreeId, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)=0
Adds an edge (u, v) and returns the new edge.
vtkIdType signBitMask
Bit mask to speed up decoding graph info {owner,index}.
vtkIdType GetVertexIndex(vtkIdType v) const
Returns local index of vertex v, by masking off top ceil(log2 P) bits of v.
int procBits
Number of bits required to represent # of processors (owner)
virtual vtkIdType FindVertex(const vtkVariant &pedigreeId)=0
Try to find the vertex with the given pedigree ID.
static vtkInformationIntegerKey * DISTRIBUTEDVERTEXIDS()
Information Keys that distributed graphs can append to attribute arrays to flag them as containing di...
void * VertexDistributionUserData
Extra, user-specified data to be passed into the distribution function.
~vtkDistributedGraphHelper() override
vtkGraph * Graph
The graph to which this distributed graph helper is already attached.
vtkIdType highBitShiftMask
Bit mask to speed up decoding graph info {owner,index}.
int indexBits
Number of bits required to represent {vertex,edge} index.
virtual void Synchronize()=0
Synchronizes all of the processors involved in this distributed graph, so that all processors have a ...
Base class for graph data types.
Definition: vtkGraph.h:346
a simple class to control print indentation
Definition: vtkIndent.h:120
Key for integer values in vtkInformation.
abstract base class for most VTK objects
Definition: vtkObject.h:83
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition: vtkVariant.h:150
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
boost::graph_traits< vtkGraph * >::vertex_descriptor target(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
vtkIdType(* vtkVertexPedigreeIdDistribution)(const vtkVariant &pedigreeId, void *userData)
int vtkIdType
Definition: vtkType.h:327