VTK  9.3.20240420
vtkDIYUtilities.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
13#ifndef vtkDIYUtilities_h
14#define vtkDIYUtilities_h
15
16#include "vtkObject.h"
17#include "vtkParallelDIYModule.h" // for export macros
18#include "vtkSmartPointer.h" // needed for vtkSmartPointer
19
20#include <map> // For Link
21#include <set> // For Link
22#include <vector> // For GetDataSets
23
24// clang-format off
25#include "vtk_diy2.h" // needed for DIY
26#include VTK_DIY2(diy/master.hpp)
27#include VTK_DIY2(diy/mpi.hpp)
28#include VTK_DIY2(diy/serialization.hpp)
29#include VTK_DIY2(diy/types.hpp)
30// clang-format on
31
32VTK_ABI_NAMESPACE_BEGIN
33class vtkDataArray;
34class vtkBoundingBox;
35class vtkDataObject;
36class vtkDataSet;
37class vtkFieldData;
39class vtkPoints;
40class vtkStringArray;
41
42class VTKPARALLELDIY_EXPORT vtkDIYUtilities : public vtkObject
43{
44public:
45 vtkTypeMacro(vtkDIYUtilities, vtkObject);
46 void PrintSelf(ostream& os, vtkIndent indent) override;
47
53
59 static diy::mpi::communicator GetCommunicator(vtkMultiProcessController* controller);
60
62
65 static void Save(diy::BinaryBuffer& bb, vtkDataSet*);
66 static void Load(diy::BinaryBuffer& bb, vtkDataSet*&);
68
70
73 static void Save(diy::BinaryBuffer& bb, vtkFieldData*);
74 static void Load(diy::BinaryBuffer& bb, vtkFieldData*&);
76
78
81 static void Save(diy::BinaryBuffer& bb, vtkStringArray*);
82 static void Load(diy::BinaryBuffer& bb, vtkStringArray*&);
84
86
89 static void Save(diy::BinaryBuffer& bb, vtkDataArray*);
90 static void Load(diy::BinaryBuffer& bb, vtkDataArray*&);
92
96 static void AllReduce(diy::mpi::communicator& comm, vtkBoundingBox& bbox);
97
104 static diy::ContinuousBounds Convert(const vtkBoundingBox& bbox);
105
112 static vtkBoundingBox Convert(const diy::ContinuousBounds& bds);
113
118 static void Broadcast(
119 diy::mpi::communicator& comm, std::vector<vtkBoundingBox>& boxes, int source);
120
122
128 static std::vector<vtkSmartPointer<vtkPoints>> ExtractPoints(
129 const std::vector<vtkDataSet*>& datasets, bool use_cell_centers);
131
136
145 template <class DummyT>
146 static void Link(diy::Master& master, const diy::Assigner& assigner,
147 const std::vector<std::map<int, DummyT>>& linksMap);
148
149 static void Link(
150 diy::Master& master, const diy::Assigner& assigner, const std::vector<std::set<int>>& linksMap);
151
152protected:
155
156private:
157 vtkDIYUtilities(const vtkDIYUtilities&) = delete;
158 void operator=(const vtkDIYUtilities&) = delete;
159};
160VTK_ABI_NAMESPACE_END
161
162namespace diy
163{
164template <>
166{
167 static void save(BinaryBuffer& bb, vtkDataSet* const& p) { vtkDIYUtilities::Save(bb, p); }
168 static void load(BinaryBuffer& bb, vtkDataSet*& p) { vtkDIYUtilities::Load(bb, p); }
169};
170
171template <>
173{
174 static void save(BinaryBuffer& bb, vtkDataArray* const& da) { vtkDIYUtilities::Save(bb, da); }
175 static void load(BinaryBuffer& bb, vtkDataArray*& da) { vtkDIYUtilities::Load(bb, da); }
176};
177
178template <>
180{
181 static void save(BinaryBuffer& bb, vtkFieldData* const& fd) { vtkDIYUtilities::Save(bb, fd); }
182 static void load(BinaryBuffer& bb, vtkFieldData*& fd) { vtkDIYUtilities::Load(bb, fd); }
183};
184}
185
186VTK_ABI_NAMESPACE_BEGIN
187// Implementation detail for Schwarz counter idiom.
188class VTKPARALLELDIY_EXPORT vtkDIYUtilitiesCleanup
189{
190public:
193
194private:
196 void operator=(const vtkDIYUtilitiesCleanup&) = delete;
197};
199
200VTK_ABI_NAMESPACE_END
201#include "vtkDIYUtilities.txx" // for template implementations
202
203#endif
Fast, simple class for representing and operating on 3D bounds.
collection of helper functions for working with DIY
static void Broadcast(diy::mpi::communicator &comm, std::vector< vtkBoundingBox > &boxes, int source)
Broadcast a vector of bounding boxes.
static std::vector< vtkSmartPointer< vtkPoints > > ExtractPoints(const std::vector< vtkDataSet * > &datasets, bool use_cell_centers)
Extracts points from the input.
static void Load(diy::BinaryBuffer &bb, vtkFieldData *&)
Load/Save a vtkFieldData in a diy::BinaryBuffer.
static void Load(diy::BinaryBuffer &bb, vtkStringArray *&)
Load/Save a vtkStringArray in a diy::BinaryBuffer.
static void InitializeEnvironmentForDIY()
In MPI-enabled builds, DIY filters need MPI to be initialized.
static vtkBoundingBox Convert(const diy::ContinuousBounds &bds)
Convert diy::ContinuousBounds to vtkBoundingBox.
static void Save(diy::BinaryBuffer &bb, vtkFieldData *)
Load/Save a vtkFieldData in a diy::BinaryBuffer.
static void Save(diy::BinaryBuffer &bb, vtkDataArray *)
Load/Save a vtkDataArray in a diy::BinaryBuffer.
static void Link(diy::Master &master, const diy::Assigner &assigner, const std::vector< std::map< int, DummyT > > &linksMap)
Links master such that there is communication between ranks as given in linksMap.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static void Save(diy::BinaryBuffer &bb, vtkStringArray *)
Load/Save a vtkStringArray in a diy::BinaryBuffer.
static void Load(diy::BinaryBuffer &bb, vtkDataSet *&)
Load/Save a vtkDataSet in a diy::BinaryBuffer.
~vtkDIYUtilities() override
static void Load(diy::BinaryBuffer &bb, vtkDataArray *&)
Load/Save a vtkDataArray in a diy::BinaryBuffer.
static diy::ContinuousBounds Convert(const vtkBoundingBox &bbox)
Convert vtkBoundingBox to diy::ContinuousBounds.
static void Link(diy::Master &master, const diy::Assigner &assigner, const std::vector< std::set< int > > &linksMap)
static void Save(diy::BinaryBuffer &bb, vtkDataSet *)
Load/Save a vtkDataSet in a diy::BinaryBuffer.
static vtkBoundingBox GetLocalBounds(vtkDataObject *dobj)
Convenience method to get local bounds for the data object.
static void AllReduce(diy::mpi::communicator &comm, vtkBoundingBox &bbox)
Reduce bounding box.
static diy::mpi::communicator GetCommunicator(vtkMultiProcessController *controller)
Converts a vtkMultiProcessController to a diy::mpi::communicator.
abstract superclass for arrays of numeric data
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:166
represent and manipulate fields of data
a simple class to control print indentation
Definition vtkIndent.h:108
Multiprocessing communication superclass.
abstract base class for most VTK objects
Definition vtkObject.h:162
represent and manipulate 3D points
Definition vtkPoints.h:139
a vtkAbstractArray subclass for strings
static void save(BinaryBuffer &bb, vtkDataArray *const &da)
static void load(BinaryBuffer &bb, vtkDataArray *&da)
static void save(BinaryBuffer &bb, vtkDataSet *const &p)
static void load(BinaryBuffer &bb, vtkDataSet *&p)
static void load(BinaryBuffer &bb, vtkFieldData *&fd)
static void save(BinaryBuffer &bb, vtkFieldData *const &fd)
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
static vtkDIYUtilitiesCleanup vtkDIYUtilitiesCleanupInstance