From 6ba4d68cb9cfa3132c32f08848781bffc846c8d5 Mon Sep 17 00:00:00 2001 From: Paul Romano Date: Wed, 10 Oct 2018 07:50:30 -0500 Subject: [PATCH] Move call to MPI_Abort to C++ side --- CMakeLists.txt | 1 + include/openmc/error.h | 5 ++++- include/openmc/message_passing.h | 2 +- src/error.F90 | 12 +++++++++--- src/error.cpp | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/error.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index b72bb57eb9..b7517a1305 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -407,6 +407,7 @@ add_library(libopenmc SHARED src/distribution_spatial.cpp src/eigenvalue.cpp src/endf.cpp + src/error.cpp src/initialize.cpp src/finalize.cpp src/geometry.cpp diff --git a/include/openmc/error.h b/include/openmc/error.h index 17b2f392ed..b02c0a9f85 100644 --- a/include/openmc/error.h +++ b/include/openmc/error.h @@ -9,7 +9,6 @@ namespace openmc { - extern "C" void fatal_error_from_c(const char* message, int message_len); extern "C" void warning_from_c(const char* message, int message_len); extern "C" void write_message_from_c(const char* message, int message_len, @@ -81,5 +80,9 @@ void write_message(const std::stringstream& message, int level) write_message(message.str(), level); } +#ifdef OPENMC_MPI +extern "C" void abort_mpi(int code); +#endif + } // namespace openmc #endif // OPENMC_ERROR_H diff --git a/include/openmc/message_passing.h b/include/openmc/message_passing.h index c910210db5..c730674ab4 100644 --- a/include/openmc/message_passing.h +++ b/include/openmc/message_passing.h @@ -2,7 +2,7 @@ #define OPENMC_MESSAGE_PASSING_H #ifdef OPENMC_MPI -#include "mpi.h" +#include #endif namespace openmc { diff --git a/src/error.F90 b/src/error.F90 index c00006c8d0..ad07987ebe 100644 --- a/src/error.F90 +++ b/src/error.F90 @@ -130,14 +130,20 @@ contains character(*) :: message integer, optional :: error_code ! error code - integer :: code ! error code + integer(C_INT) :: code ! error code integer :: i_start ! starting position integer :: i_end ! ending position integer :: line_wrap ! length of line integer :: length ! length of message integer :: indent ! length of indentation + #ifdef OPENMC_MPI - integer :: mpi_err + interface + subroutine abort_mpi(code) bind(C) + import C_INT + integer(C_INT), value :: code + end subroutine + end interface #endif @@ -190,7 +196,7 @@ contains #ifdef OPENMC_MPI ! Abort MPI - call MPI_ABORT(mpi_intracomm, code, mpi_err) + call abort_mpi(code) #endif ! Abort program diff --git a/src/error.cpp b/src/error.cpp new file mode 100644 index 0000000000..d17219f31d --- /dev/null +++ b/src/error.cpp @@ -0,0 +1,14 @@ +#include "openmc/error.h" + +#include "openmc/message_passing.h" + +namespace openmc { + +#ifdef OPENMC_MPI +void abort_mpi(int code) +{ + MPI_Abort(mpi::intracomm, code); +} +#endif + +} // namespace openmc