23 #include "rheolef/distributed.h"
24 #ifndef _RHEOLEF_HAVE_MPI
32 environment::~environment()
38 #else // _RHEOLEF_HAVE_MPI
42 #if (MPI_VERSION >= 2)
43 #define MPI_Errhandler_set MPI_Comm_set_errhandler
44 #define MPI_Attr_get MPI_Comm_get_attr
52 MPI_Initialized(&flag);
61 : _rheolef_has_init(false), _oldcw(0)
66 status = MPI_Init (&argc, &argv);
68 int obtained_thread_level;
71 warning_macro (
"mpi_init: obtained thread level="<<obtained_thread_level <<
" while asking for thread level="<<opt.
thread_level);
76 if (!_rheolef_has_init) {
77 #ifdef _RHEOLEF_HAVE_OBSOLETE_MPI_V1
78 MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_RETURN);
80 MPI_Comm_set_errhandler (MPI_COMM_WORLD, MPI_ERRORS_RETURN);
82 _rheolef_has_init =
true;
88 boost::mpi::detail::mpi_datatype_cache().clear();
94 MPI_Abort(MPI_COMM_WORLD, errcode);
100 MPI_Attr_get(MPI_COMM_WORLD, MPI_TAG_UB, &max_tag_value, &found);
102 return *max_tag_value - _num_reserved_tags;
112 MPI_Attr_get(MPI_COMM_WORLD, MPI_HOST, &host, &found);
113 if (!found || *host == MPI_PROC_NULL) {
114 return boost::optional<int>();
123 MPI_Attr_get(MPI_COMM_WORLD, MPI_IO, &io, &found);
124 if (!found || *io == MPI_PROC_NULL) {
125 return boost::optional<int>();
132 char name[MPI_MAX_PROCESSOR_NAME];
134 MPI_Get_processor_name(
name, &len);
135 return std::string(
name, len);
139 #endif // _RHEOLEF_HAVE_MPI