ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/interface_implementation/simError.c
Revision: 156
Committed: Thu Oct 24 20:40:52 2002 UTC (22 years, 6 months ago) by mmeineke
Content type: text/plain
File size: 1485 byte(s)
Log Message:
*** empty log message ***

File Contents

# Content
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #ifdef IS_MPI
5 #include <mpi.h>
6 #endif // IS_MPI
7
8 #include "simError.h"
9
10
11 void initSimError( void ){
12 painCave.errMsg[0] = '\0';
13 painCave.isFatal = 0;
14 #ifdef IS_MPI
15 painCave.isEventLoop = 0;
16 #endif
17 }
18
19 int simError( void ) {
20
21 #ifdef IS_MPI
22 int myRank;
23 int myError = 1;
24 int isError;
25 int isFatal;
26
27 MPI_Comm_rank( MPI_COMM_WORLD, &myRank );
28
29 if( painCave.isEventLoop ){
30 fprintf( stderr,
31 "MPI Error on node %d: %s\n",
32 myRank,
33 painCave.errMsg );
34 return 1;
35 }
36 else{
37 if( painCave.isFatal ){
38 fprintf( stderr,
39 "MPI Fatal Error on node %d: %s\n",
40 myRank,
41 painCave.errMsg );
42 MPI_Allreduce( &myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD );
43
44 MPI_Finalize();
45 exit(0);
46 }
47 else{
48 fprintf( stderr,
49 "MPI Non-Fatal Error on node %d: %s\n",
50 myRank,
51 painCave.errMsg );
52 }
53 return 1;
54 }
55
56 #else
57
58 if( painCave.isFatal ){
59 fprintf( stderr,
60 "Fatal Error: %s\n",
61 painCave.errMsg );
62 exit(0);
63 }
64 else{
65 fprintf( stderr,
66 "Warning: %s\n",
67 painCave.errMsg );
68 }
69 return 1;
70
71 #endif // IS_MPI
72
73 return 0; // in case nobody caught that.
74
75 }
76
77
78 #ifdef IS_MPI
79
80 void checkMPIError( void ){
81
82 int myError = 0;
83 int isError;
84
85 MPI_Allreduce( &myError, &isError, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD );
86 if( isError ){
87 MPI_Finalize();
88 exit(0);
89 }
90 }
91
92 #endif // IS_MPI