There are five different types of communicators:
MPI::Comm,
MPI::Intercomm,
MPI::Intracomm, MPI::Cartcomm, and
MPI::Graphcomm.
MPI::Comm is the abstract base communicator class,
encapsulating the functionality common to all MPI-/
communicators.
MPI::Intercomm and
MPI::Intracomm are derived from MPI::Comm.
MPI::Cartcomm and
MPI::Graphcomm are derived from MPI::Intracomm.
Advice to users.
Initializing a derived class with an instance of a base class is
not legal in C++. For instance, it is not legal to initialize
a Cartcomm from an Intracomm. Moreover, because MPI::Comm
is an abstract base class, it is non-instantiable, so that it is
not possible to have an object of class MPI::Comm. However, it
is possible to have a reference or a pointer to an MPI::Comm.
Example 10..4 The following code is erroneous.
Intracomm intra = MPI::COMM_WORLD.Dup();
Cartcomm cart(intra); // This is erroneous