diff --git a/CMakeLists.txt b/CMakeLists.txt index b72bb57eb..b7517a130 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 17b2f392e..b02c0a9f8 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 c910210db..c730674ab 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 c00006c8d..ad07987eb 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 000000000..d17219f31 --- /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