1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Cartcomm : public Intracomm {
23 public:
24
25
26 Cartcomm() { }
27
28 Cartcomm(const Comm_Null& data) : Intracomm(data) { }
29
30 inline Cartcomm(const MPI_Comm& data);
31 #if 0
32 Cartcomm(const Cartcomm& data) : Intracomm(data), pmpi_comm(data) { }
33 Cartcomm(const PMPI::Cartcomm& d) :
34 Intracomm((const PMPI::Intracomm&)d),
35 pmpi_comm(d) { }
36
37
38 Cartcomm& operator=(const Cartcomm& data) {
39 Intracomm::operator=(data);
40 pmpi_comm = data.pmpi_comm; return *this; }
41 Cartcomm& operator=(const Comm_Null& data) {
42 Intracomm::operator=(data);
43 pmpi_comm = (PMPI::Cartcomm)data; return *this; }
44
45 Cartcomm& operator=(const MPI_Comm& data) {
46 Intracomm::operator=(data);
47 pmpi_comm = data; return *this; }
48 #else
49 Cartcomm(const Cartcomm& data) : Intracomm(data.mpi_comm) { }
50
51 Cartcomm& operator=(const Cartcomm& data) {
52 mpi_comm = data.mpi_comm; return *this; }
53 Cartcomm& operator=(const Comm_Null& data) {
54 mpi_comm = data; return *this; }
55
56 Cartcomm& operator=(const MPI_Comm& data) {
57 mpi_comm = data; return *this; }
58 #endif
59
60
61
62
63 Cartcomm Dup() const;
64
65 virtual Cartcomm& Clone() const;
66
67
68
69
70
71
72 virtual int Get_dim() const;
73
74 virtual void Get_topo(int maxdims, int dims[], bool periods[],
75 int coords[]) const;
76
77 virtual int Get_cart_rank(const int coords[]) const;
78
79 virtual void Get_coords(int rank, int maxdims, int coords[]) const;
80
81 virtual void Shift(int direction, int disp,
82 int &rank_source, int &rank_dest) const;
83
84 virtual Cartcomm Sub(const bool remain_dims[]) const;
85
86 virtual int Map(int ndims, const int dims[], const bool periods[]) const;
87
88 #if 0
89 private:
90 PMPI::Cartcomm pmpi_comm;
91 #endif
92 };
93
94
95
96
97
98
99 class Graphcomm : public Intracomm {
100 public:
101
102
103 Graphcomm() { }
104
105 Graphcomm(const Comm_Null& data) : Intracomm(data) { }
106
107 inline Graphcomm(const MPI_Comm& data);
108 #if 0
109 Graphcomm(const Graphcomm& data) : Intracomm(data), pmpi_comm(data) { }
110 Graphcomm(const PMPI::Graphcomm& d) :
111 Intracomm((const PMPI::Intracomm&)d), pmpi_comm(d) { }
112
113
114 Graphcomm& operator=(const Graphcomm& data) {
115 Intracomm::operator=(data);
116 pmpi_comm = data.pmpi_comm; return *this; }
117 Graphcomm& operator=(const Comm_Null& data) {
118 Intracomm::operator=(data);
119 pmpi_comm = (PMPI::Graphcomm)data; return *this; }
120
121 Graphcomm& operator=(const MPI_Comm& data) {
122 Intracomm::operator=(data);
123 pmpi_comm = data; return *this; }
124
125 #else
126 Graphcomm(const Graphcomm& data) : Intracomm(data.mpi_comm) { }
127
128 Graphcomm& operator=(const Graphcomm& data) {
129 mpi_comm = data.mpi_comm; return *this; }
130 Graphcomm& operator=(const Comm_Null& data) {
131 mpi_comm = data; return *this; }
132
133 Graphcomm& operator=(const MPI_Comm& data) {
134 mpi_comm = data; return *this; }
135 #endif
136
137
138
139
140
141 Graphcomm Dup() const;
142
143 virtual Graphcomm& Clone() const;
144
145
146
147
148
149 virtual void Get_dims(int nnodes[], int nedges[]) const;
150
151 virtual void Get_topo(int maxindex, int maxedges, int index[],
152 int edges[]) const;
153
154 virtual int Get_neighbors_count(int rank) const;
155
156 virtual void Get_neighbors(int rank, int maxneighbors,
157 int neighbors[]) const;
158
159 virtual int Map(int nnodes, const int index[],
160 const int edges[]) const;
161
162 #if 0
163 private:
164 PMPI::Graphcomm pmpi_comm;
165 #endif
166 };
167