This is an example of an MPI-aware error handler.
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(HAVE_MPI)
# include <mpi.h>
#endif
#include "bft_intl.h"
#ifdef __cplusplus
extern "C" {
#if 0
}
#endif
#endif
void
const int line_num,
const int sys_error_code,
const char *const format,
const va_list arg_ptr)
{
fprintf(stderr, "\n");
if (sys_error_code != 0)
fprintf(stderr,
_(
"\nSystem error: %s\n"), strerror(sys_error_code));
fprintf(stderr,
_(
"\n%s:%d: Fatal error.\n\n"), file_name, line_num);
vfprintf(stderr, format, arg_ptr);
fprintf(stderr, "\n\n");
assert(0);
#if defined(HAVE_MPI)
{
int mpi_flag;
MPI_Initialized(&mpi_flag);
if (mpi_flag != 0) {
MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
}
}
#endif
exit(EXIT_FAILURE);
}
#ifdef __cplusplus
}
#endif