ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/interface_implementation/simError.c
Revision: 176
Committed: Thu Nov 14 22:00:44 2002 UTC (21 years, 7 months ago) by mmeineke
Content type: text/plain
File size: 1713 byte(s)
Log Message:
*** empty log message ***

File Contents

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