--- trunk/OOPSE/libBASS/simError.c 2003/04/03 20:21:54 447 +++ trunk/OOPSE/libBASS/simError.c 2004/06/04 02:38:23 1233 @@ -1,5 +1,7 @@ #include #include +#include +#include "config.h" #ifdef IS_MPI #include @@ -22,6 +24,7 @@ void initSimError( void ){ void initSimError( void ){ painCave.errMsg[0] = '\0'; painCave.isFatal = 0; + painCave.severity = OOPSE_ERROR; #ifdef IS_MPI painCave.isEventLoop = 0; nChecks = 0; @@ -31,56 +34,54 @@ int simError( void ) { int simError( void ) { -#ifdef IS_MPI int myError = 1; int isError; - - if( painCave.isEventLoop ){ - fprintf( stderr, - "MPI Event Error on node %d: %s\n", - worldRank, - painCave.errMsg ); - return 1; - } - else{ - if( painCave.isFatal ){ - fprintf( stderr, - "MPI Fatal Error on node %d: %s\n", - worldRank, - painCave.errMsg ); - MPI_Allreduce( &myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD ); - - MPI_Finalize(); - exit(0); + char errorMsg[MAX_SIM_ERROR_MSG_LENGTH]; + char nodeMsg[MAX_SIM_ERROR_MSG_LENGTH]; + + strcpy(errorMsg, "OOPSE "); + switch( painCave.severity ) { + case OOPSE_WARNING: + strcat(errorMsg, "WARNING"); + break; + case OOPSE_INFO: + strcat(errorMsg, "INFO"); + break; + default: + if( painCave.isFatal ) { + strcat(errorMsg, "FATAL "); } - else{ - fprintf( stderr, - "MPI Warning on node %d: %s\n", - worldRank, - painCave.errMsg ); - } - return 1; + strcat(errorMsg, "ERROR"); } + +#ifdef IS_MPI + if ( painCave.isEventLoop ) { + sprintf( nodeMsg, " (reported by MPI node %d)", worldRank); + strncat(errorMsg, nodeMsg, strlen(nodeMsg)); + } +#endif -#else + strcat(errorMsg, ":\n\t"); - if( painCave.isFatal ){ - fprintf( stderr, - "Fatal Error: %s\n", - painCave.errMsg ); + strncat(errorMsg, painCave.errMsg, strlen(painCave.errMsg)); + + strcat(errorMsg, "\n"); + fprintf(stderr, errorMsg); + +#ifdef IS_MPI + if (painCave.isEventLoop) + return 1; +#endif + + if (painCave.isFatal) { +#ifdef IS_MPI + MPI_Allreduce( &myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD ); + MPI_Finalize(); +#endif exit(0); - } - else{ - fprintf( stderr, - "Warning: %s\n", - painCave.errMsg ); - } - return 1; - -#endif // IS_MPI - - return 0; // in case nobody caught that. + } + return 1; }