1 #ifndef MOAB_PARALLEL_DATA_HPP
2 #define MOAB_PARALLEL_DATA_HPP
3
4 #include "moab/Forward.hpp"
5 #include "moab/Range.hpp"
6
7 namespace moab
8 {
9
10 class ParallelComm;
11
12 /**
13 * \brief Parallel data in MOAB
14 * \author Tim Tautges
15 *
16 * This class implements methods to retrieve information about
17 * the parallel mesh from MOAB. Most of this data can be retrieved
18 * directly from MOAB as sets and tags; this class provides convenience
19 * methods implemented on top of other MOAB functions.
20 *
21 */
22 class ParallelData
23 {
24 public:
25 //! constructor; if non-null parallelcomm, that is used to
26 //! determine rank, otherwise rank is taken from impl
27 ParallelData( Interface* impl, ParallelComm* pcomm = NULL );
28
29 //! return partition sets; if tag_name is input, gets sets with
30 //! that tag name, otherwise uses PARALLEL_PARTITION tag
31 ErrorCode get_partition_sets( Range& part_sets, const char* tag_name = NULL );
32
33 //! get communication interface sets and the processors with which
34 //! this processor communicates; sets are sorted by processor
35 ErrorCode get_interface_sets( std::vector< EntityHandle >& iface_sets, std::vector< int >& iface_procs );
36
37 private:
38 //! interface instance to which this instance corresponds
39 Interface* mbImpl;
40
41 //! ParallelComm object to which this is bound
42 ParallelComm* parallelComm;
43 };
44
45 inline ParallelData::ParallelData( Interface* impl, ParallelComm* pcomm ) : mbImpl( impl ), parallelComm( pcomm ) {}
46
47 } // namespace moab
48
49 #endif