00001
00009 #ifndef GENMACROS_H
00010 #define GENMACROS_H
00011
00024 #define retype_arraycp( to_t, to, from, size ) \
00025 { \
00026 for( size_t _k = 0; _k < (size); ++_k ) (to)[_k] = (to_t) (from)[_k]; \
00027 }
00028
00034 #define NC_STATUS_CHECK( f ) \
00035 { \
00036 int status = (f); \
00037 if ( status != NC_NOERR ) \
00038 { \
00039 fprintf( stderr, __FILE__ ":%d, netCDF API: ", __LINE__); \
00040 fprintf( stderr, "%s\n", nc_strerror( status ) ); \
00041 exit( status ); \
00042 } \
00043 }
00044
00045 #ifdef MPI_VERSION
00046
00048 # define message(...) \
00049 { \
00050 int my_rank; \
00051 MPI_Comm_rank ( MPI_COMM_WORLD, &my_rank ); \
00052 if ( my_rank == 0 ) \
00053 { \
00054 printf( "(" PROGRAM_NAME_BRIEF ") " __VA_ARGS__ ); \
00055 printf( "\n" ); \
00056 } \
00057 }
00058
00059 #else
00060
00062 # define message(...) \
00063 { \
00064 printf( "(" PROGRAM_NAME_BRIEF ") " __VA_ARGS__ ); \
00065 printf( "\n" ); \
00066 }
00067
00068 #endif
00069
00087 #define fatal( errcode, ... ) \
00088 { \
00089 fprintf( stderr, __FILE__ ":%d\n", __LINE__ ); \
00090 fprintf( stderr, " Error %d (" PROGRAM_NAME_BRIEF \
00091 ") at function %s:\n", errcode, __func__ ); \
00092 fprintf( stderr, " " __VA_ARGS__ ); \
00093 fprintf( stderr, "\n" ); \
00094 exit( errcode ); \
00095 }
00096
00101 #define warning( ... ) \
00102 { \
00103 fprintf( stderr, __FILE__ ":%d\n", __LINE__ ); \
00104 fprintf( stderr, " Warning (" PROGRAM_NAME_BRIEF \
00105 ") at function %s:\n", __func__ ); \
00106 fprintf( stderr, " " __VA_ARGS__ ); \
00107 fprintf( stderr, "\n" ); \
00108 }
00109
00110
00111 #endif