Teuchos - Trilinos Tools Package
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
comm
src
Teuchos_DefaultMpiComm.cpp
1
// @HEADER
2
// *****************************************************************************
3
// Teuchos: Common Tools Package
4
//
5
// Copyright 2004 NTESS and the Teuchos contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
10
#include <
Teuchos_DefaultMpiComm.hpp
>
11
12
// Only enable the contents of this file if building with MPI.
13
#ifdef HAVE_TEUCHOS_MPI
14
15
namespace
Teuchos
{
16
17
std::string
18
mpiErrorCodeToString (
const
int
errCode)
19
{
20
if
(errCode == MPI_SUCCESS) {
21
return
"MPI_SUCCESS"
;
22
}
23
else
{
24
char
rawErrString[MPI_MAX_ERROR_STRING];
25
int
len = 0;
26
int
err = MPI_Error_string (errCode, rawErrString, &len);
27
if
(err != MPI_SUCCESS) {
28
// Assume that the string wasn't written. This means it might
29
// not be null terminated, so make it a valid empty string by
30
// writing the null termination character to it.
31
if
(MPI_MAX_ERROR_STRING > 0) {
32
rawErrString[0] =
'\0'
;
33
}
34
}
35
return
std::string (rawErrString);
36
}
37
}
38
39
namespace
details {
40
void
safeCommFree (MPI_Comm* comm) {
41
// FIXME (mfh 08 Dec 2014) Use the MPI_Finalize hook trick to
42
// call MPI_Comm_free at MPI_Finalize automatically, if it
43
// hasn't already been called on the object. Store the MPI_Comm
44
// (by allocated pointer) as the value of the (key,value) pair
45
// (used in the hook), and be sure to free the pair if the free
46
// function is called before MPI_Finalize.
47
int
finalized = 0;
48
const
int
err = MPI_Finalized (&finalized);
49
// Just to be safe, don't do anything if calling MPI_Finalized
50
// didn't succeed. It's better to leak memory than to crash.
51
if
(err == MPI_SUCCESS && ! finalized) {
52
// Don't throw an exception if MPI_Comm_free reports an error,
53
// since we're likely to be in a destructor and destructors
54
// shouldn't throw exceptions.
55
(void) MPI_Comm_free (comm);
56
}
57
}
58
59
int
setCommErrhandler (MPI_Comm comm, MPI_Errhandler handler) {
60
#if MPI_VERSION >= 2
61
return
MPI_Comm_set_errhandler (comm, handler);
62
#else
// MPI 1
63
return
MPI_Errhandler_set (comm, handler);
64
#endif
// MPI_VERSION >= 2
65
}
66
}
// namespace details
67
68
}
// namespace Teuchos
69
70
#endif
// HAVE_TEUCHOS_MPI
Teuchos_DefaultMpiComm.hpp
Implementation of Teuchos wrappers for MPI.
Teuchos
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
Generated by
1.17.0