Anasazi  Version of the Day
Tsqr_MpiCommFactory.hpp
1 #ifndef __TSQR_MpiCommFactory_hpp
2 #define __TSQR_MpiCommFactory_hpp
3 
4 #include <mpi.h>
5 #include <Tsqr_Config.hpp>
6 #include <Tsqr_MpiMessenger.hpp>
7 #include <Teuchos_RCP.hpp>
8 
11 
12 namespace TSQR {
13  namespace MPI {
14 
15  namespace details {
16 
17  template< class Scalar >
18  Teuchos::RCP< MessengerBase< Scalar > >
19  makeMpiComm (MPI_Comm comm)
20  {
21  return Teuchos::rcp_implicit_cast< MessengerBase< Scalar > >(new MpiMessenger< Scalar > (comm));
22  }
23  } // namespace details
24 
25 #ifdef HAVE_MPI_COMM_NETWORK
26  template< class Scalar >
29  Teuchos::RCP< MessengerBase< Scalar > >
30  makeMpiCommNetwork ()
31  {
32  makeMpiComm (MPI_COMM_NETWORK);
33  }
34 #endif // HAVE_MPI_COMM_NETWORK
35 
36 #ifdef HAVE_MPI_COMM_NODE
37  template< class Scalar >
40  Teuchos::RCP< MessengerBase< Scalar > >
41  makeMpiCommNode ()
42  {
43  makeMpiComm (MPI_COMM_NODE);
44  }
45 #endif // HAVE_MPI_COMM_NODE
46 
51  template< class Scalar >
52  Teuchos::RCP< MessengerBase< Scalar > >
53  makeMpiCommWorld ()
54  {
55  makeMpiComm (MPI_COMM_WORLD);
56  }
57 
58  } // namespace MPI
59 } // namespace TSQR
60 
61 #endif // __TSQR_MpiCommFactory_hpp
62