1 | /** \file errors.c
|
---|
2 | * Error reporting.
|
---|
3 | * Contains just one function Error() which prints out a certain error message
|
---|
4 | * class and starts the debugger.
|
---|
5 | *
|
---|
6 | * Project: ParallelCarParrinello
|
---|
7 | * \author Jan Hamaekers
|
---|
8 | * \date 2000
|
---|
9 | *
|
---|
10 | * File: errors.c
|
---|
11 | * $Id: errors.c,v 1.11 2006/03/31 10:38:04 foo Exp $
|
---|
12 | *
|
---|
13 | */
|
---|
14 |
|
---|
15 | #include<stdlib.h>
|
---|
16 | #include<stdio.h>
|
---|
17 | #include"data.h"
|
---|
18 | #include"opt.h"
|
---|
19 | #include"errors.h"
|
---|
20 |
|
---|
21 |
|
---|
22 | /** Deals with occuring errors.
|
---|
23 | * Prints process id followed by error according to \ref Errors.
|
---|
24 | * In the case of MallocError \a *SpecialData contains additional text.
|
---|
25 | * Launches debugger, does afterwards MPI_abort and exit
|
---|
26 | *
|
---|
27 | * \note One could add another pointer to a function
|
---|
28 | *
|
---|
29 | * \sa StartDebugger()
|
---|
30 | * \param error is the type of error(enum Errors) on error_msg array
|
---|
31 | * \param *SpecialData is a typeless pointer on special data for error treatment, here detailed error message.
|
---|
32 | */
|
---|
33 | void Error(enum Errors error, const void *SpecialData)
|
---|
34 | {
|
---|
35 | const char *const error_msg[] = {
|
---|
36 | "SomeError",
|
---|
37 | "FileOpenParams\nUnable to open parameter file",
|
---|
38 | "InitReading\n",
|
---|
39 | "MallocError\nUnable to allocate memory!",
|
---|
40 | };
|
---|
41 | int mytid;
|
---|
42 | MPI_Comm_rank(MPI_COMM_WORLD, &mytid);
|
---|
43 | fprintf(stderr, "\nProcess %i: ", mytid);
|
---|
44 | fprintf(stderr, "It has occured an error (%i): %s\n", error, error_msg[error]);
|
---|
45 | switch (error) {
|
---|
46 | case InitReading:
|
---|
47 | case SomeError:
|
---|
48 | case MallocError:
|
---|
49 | if (SpecialData) fprintf(stderr, "%s\n", (const char*)SpecialData);
|
---|
50 | break;
|
---|
51 | default:
|
---|
52 | break;
|
---|
53 | }
|
---|
54 |
|
---|
55 | StartDebugger();
|
---|
56 | MPI_Abort(MPI_COMM_WORLD, (int)error);
|
---|
57 | exit(EXIT_FAILURE); /* exit schreibt sowieso alle Dateipuffer aus */
|
---|
58 | }
|
---|