48#include "utils/simError.h"
64char checkPointMsg[MAX_SIM_ERROR_MSG_LENGTH];
67void initSimError(
void) {
68 painCave.errMsg[0] =
'\0';
70 painCave.severity = OPENMD_ERROR;
71 painCave.isEventLoop = 0;
74 MPI_Comm_rank(MPI_COMM_WORLD, &worldRank);
81 char errorMsg[MAX_SIM_ERROR_MSG_LENGTH];
86 char nodeMsg[MAX_SIM_ERROR_MSG_LENGTH];
89 strcpy(errorMsg,
"OpenMD ");
90 switch (painCave.severity) {
92 strcat(errorMsg,
"warning");
95 strcat(errorMsg,
"info");
98 if (painCave.isFatal) { strcat(errorMsg,
"FATAL "); }
99 strcat(errorMsg,
"ERROR");
103 if (worldRank == 0) {
104 if (painCave.isEventLoop) {
105 snprintf(nodeMsg, MAX_SIM_ERROR_MSG_LENGTH,
" (reported by MPI node %d)",
107 strncat(errorMsg, nodeMsg,
108 MAX_SIM_ERROR_MSG_LENGTH - strlen(errorMsg) - 1);
109 errorMsg[MAX_SIM_ERROR_MSG_LENGTH - 1] =
'\0';
113 strcat(errorMsg,
":\n\t");
114 strncat(errorMsg, painCave.errMsg,
115 MAX_SIM_ERROR_MSG_LENGTH - strlen(errorMsg) - 1);
116 errorMsg[MAX_SIM_ERROR_MSG_LENGTH - 1] =
'\0';
117 strcat(errorMsg,
"\n");
119 switch (painCave.severity) {
122 fprintf(stdout,
"%s", errorMsg);
125 fprintf(stderr,
"%s", errorMsg);
129 if (painCave.isEventLoop)
return 1;
133 if (painCave.isFatal) {
135 MPI_Allreduce(&myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
143void errorCheckPoint(
void) {
148 MPI_Allreduce(&myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
160#ifdef CHECKPOINT_VERBOSE
164 if (worldRank == 0) {
167 fprintf(stderr,
"Checkpoint #%d reached: %s\n", nChecks, checkPointMsg);