diff options
-rw-r--r-- | src/comm/Reduction.c | 49 | ||||
-rw-r--r-- | src/include/FortranString.h | 22 | ||||
-rw-r--r-- | src/include/Reduction.h | 22 | ||||
-rw-r--r-- | src/include/WarnLevel.h | 2 | ||||
-rw-r--r-- | src/include/cctk.h | 11 | ||||
-rw-r--r-- | src/main/Coord.c | 4 | ||||
-rw-r--r-- | src/main/Groups.c | 16 | ||||
-rw-r--r-- | src/main/GroupsOnGH.c | 2 | ||||
-rw-r--r-- | src/main/WarnLevel.c | 44 | ||||
-rw-r--r-- | src/param.ccl | 4 | ||||
-rw-r--r-- | src/util/Misc.c | 8 |
11 files changed, 128 insertions, 56 deletions
diff --git a/src/comm/Reduction.c b/src/comm/Reduction.c index a54ef998..20646eb6 100644 --- a/src/comm/Reduction.c +++ b/src/comm/Reduction.c @@ -69,7 +69,7 @@ int CCTK_RegisterReductionOperator(void (*function)(REGISTER_ARGLIST), else { /* Reduction operator with this name already exists. */ - CCTK_Warn(1,"CCTK","Reduction operator with this name already exists"); + CCTK_WARN(1,"Reduction operator with this name already exists"); handle = -1; } @@ -104,7 +104,7 @@ int CCTK_GetReductionHandle(const char *reduction) #endif if (handle < 0) - CCTK_Warn(1,"CCTK","No handle found for this reduction operator"); + CCTK_WARN(1,"No handle found for this reduction operator"); return handle; @@ -124,29 +124,40 @@ int CCTK_Reduce( cGH *GH, va_list indices; int i; int *in_fields = malloc(num_in_fields*sizeof(int)); - void (*function)(REGISTER_ARGLIST); + void (*function)(REGISTER_ARGLIST)=NULL; /* Get the pointer to the reduction operator */ - function = (void (*)(REGISTER_ARGLIST)) - CCTK_GetHandledData(ReductionOperators,operation_handle); - if (function) - { - /* Fill in the array of variable indices from the variable argument list */ - va_start(indices, num_in_fields); - for (i=0; i<num_in_fields; i++) - in_fields[i] = va_arg(indices,int); - va_end(indices); - - function(GH,proc,num_out_vals,type_out_vals,out_vals,num_in_fields,in_fields); + if (operation_handle < 0) - if (in_fields) free(in_fields); + CCTK_WARN(3,"Invalid handle passed to CCTK_Reduce"); - } else - CCTK_Warn(3,"CCTK","Reduction operation is not registered and cannot be called"); - + { + function = (void (*)(REGISTER_ARGLIST)) + CCTK_GetHandledData(ReductionOperators,operation_handle); + + if (function) + { + + /* Fill in the array of variable indices from the variable argument list */ + va_start(indices, num_in_fields); + for (i=0; i<num_in_fields; i++) + in_fields[i] = va_arg(indices,int); + va_end(indices); + + function(GH,proc,num_out_vals,type_out_vals,out_vals,num_in_fields,in_fields); + + if (in_fields) free(in_fields); + + } + else + CCTK_WARN(3,"Reduction operation is not registered and cannot be called"); + } + + return 1; + } @@ -156,3 +167,5 @@ int CCTK_Reduce( cGH *GH, + + diff --git a/src/include/FortranString.h b/src/include/FortranString.h index a9081234..8a0a2e79 100644 --- a/src/include/FortranString.h +++ b/src/include/FortranString.h @@ -24,6 +24,13 @@ _fcd fcdarg #define TWO_FORTSTRINGS_ARGS\ _fcd fcd_n, _fcd fcd_w +#define THREE_FORTSTRINGS_ARGS\ + const char *CCTK_str1,\ + const char *CCTK_str2,\ + const char *CCTK_str3,\ + unsigned int CCTK_len1,\ + unsigned int CCTK_len2,\ + unsigned int CCTK_len3 #define ONE_FORTSTRING_CREATE(argn)\ int len = _fcdlen(fcdarg); \ char *argn = CCTK_NullTerminateString(_fcdtocp(fcdarg),len);; @@ -32,6 +39,10 @@ int wl = _fcdlen(fcd_w);\ char *argn = CCTK_NullTerminateString(_fcdtocp(fcd_n),nl);\ char *argw = CCTK_NullTerminateString(_fcdtocp(fcd_w),wl); +#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\ + char *arg1 = CCTK_NullTerminateString(CCTK_str1,CCTK_len1);\ + char *arg2 = CCTK_NullTerminateString(CCTK_str2,CCTK_len2);\ + char *arg3 = CCTK_NullTerminateString(CCTK_str3,CCTK_len3); #elif defined WIN32 @@ -39,11 +50,22 @@ char *n, unsigned int nl #define TWO_FORTSTRINGS_ARGS\ char *n, int nl, char *w, int wl +#define THREE_FORTSTRINGS_ARGS\ + const char *CCTK_str1,\ + const char *CCTK_str2,\ + const char *CCTK_str3,\ + unsigned int CCTK_len1,\ + unsigned int CCTK_len2,\ + unsigned int CCTK_len3 #define ONE_FORTSTRING_CREATE(argn)\ char *argn = CCTK_NullTerminateString(n,nl); #define TWO_FORTSTRINGS_CREATE(argn,argw)\ char *argn = CCTK_NullTerminateString(n,nl);\ char *argw = CCTK_NullTerminateString(w,wl); +#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\ + char *arg1 = CCTK_NullTerminateString(CCTK_str1,CCTK_len1);\ + char *arg2 = CCTK_NullTerminateString(CCTK_str2,CCTK_len2);\ + char *arg3 = CCTK_NullTerminateString(CCTK_str3,CCTK_len3); #else diff --git a/src/include/Reduction.h b/src/include/Reduction.h index 9c42c550..fc1c7af9 100644 --- a/src/include/Reduction.h +++ b/src/include/Reduction.h @@ -17,15 +17,29 @@ extern "C" { #endif +#define REGISTER_ARGLIST \ + cGH *, \ + int, \ + int, \ + int, \ + void *, \ + int, \ + int * + int CCTK_Reduce(cGH *GH, - int retvaltype, - int retvalnum, - void *retval, + int proc, int operation_handle, - int index, ...); + int num_out_vals, + int type_out_vals, + void *out_vals, + int num_in_fields, ...); int CCTK_GetReductionHandle(const char *reduction); +int CCTK_RegisterReductionOperator(void (*function)(REGISTER_ARGLIST), + const char *name); + + #ifdef __cplusplus } #endif diff --git a/src/include/WarnLevel.h b/src/include/WarnLevel.h index c14cab95..12108aa1 100644 --- a/src/include/WarnLevel.h +++ b/src/include/WarnLevel.h @@ -15,7 +15,7 @@ extern "C" { #endif int CCTK_SetWarnLevel(int level); -int CCTK_Warn(int level, const char *thorn, const char *message); +int CCTK_Warn(int level, int line, const char *file, const char *thorn, const char *message); void CCTK_ParamWarn(const char *thorn, const char *message); void CCTKi_FinaliseParamWarn(void); int CCTK_SetErrorLevel(int level); diff --git a/src/include/cctk.h b/src/include/cctk.h index ea19ce8c..a9687a22 100644 --- a/src/include/cctk.h +++ b/src/include/cctk.h @@ -47,6 +47,9 @@ INTEGER cctk_iteration&&\ CCTK_POINTER cctkGH&&\ +#define CCTK_WARN(a,b) CCTK_Warn(a,__LINE__,"unknown file",CCTK_THORNSTRING,b) + + #endif /*FCODE*/ #ifdef CCODE @@ -107,18 +110,20 @@ extern int _cctk_one; +#define CCTK_WARN(a,b) CCTK_Warn(a,__LINE__,__FILE__,CCTK_THORNSTRING,b) + + #endif /*CCODE*/ #define CCTK_VARIABLE_CHAR 1 -#define CCTK_VARIABLE_INTEGER 2 +#define CCTK_VARIABLE_INT 2 #define CCTK_VARIABLE_REAL 3 #define CCTK_VARIABLE_COMPLEX 4 /*#define CCTK_MAKESTRING(x) CCTK_REALSTRING(x) #define CCTK_REALSTRING(x) #x -#define CCTK_WARN(a,b) CCTK_Warn(a,CCTK_MAKESTRING(CCTK_THORN),b) +#define CCTK_WARN(a,b) CCTK_Warn(a,CCTK_MAKESTRING(CCTK_THORN),b,__LINE__,__FILE__) */ -#define CCTK_WARN(a,b) CCTK_Warn(a,CCTK_THORNSTRING,b) #define CCTK_INFO(a) CCTK_Info(CCTK_THORNSTRING,a) #define CCTK_PARAMWARN(a) CCTK_ParamWarn(CCTK_THORNSTRING,a) diff --git a/src/main/Coord.c b/src/main/Coord.c index b9ac9516..d332d096 100644 --- a/src/main/Coord.c +++ b/src/main/Coord.c @@ -111,7 +111,7 @@ int CCTK_RegisterCoord_ByIndex(const char *name, int index, int dir) char *msg; msg = (char *)malloc(200*sizeof(char)+sizeof(name)); sprintf(msg,"Coordinate with name -%s- already registered",name); - CCTK_Warn(1,"CCTK",msg); + CCTK_WARN(1,msg); if (msg) free(msg); handle = -1; } @@ -204,7 +204,7 @@ int CCTK_GetCoordIndex(const char *name) char *msg; msg = (char *)malloc( 100*sizeof(char)+sizeof(name) ); sprintf(msg,"Could not find registered coordinate %s",name); - CCTK_Warn(2,"CCTK",msg); + CCTK_WARN(2,msg); if (msg) free(msg); return ERROR_COORDNOTFOUND; } diff --git a/src/main/Groups.c b/src/main/Groups.c index 1cf7e604..cc5974fc 100644 --- a/src/main/Groups.c +++ b/src/main/Groups.c @@ -72,13 +72,13 @@ int CCTK_GetGroupIndex(const char *fullgroupname) { case 1: - CCTK_Warn(2,"CCTK","Group name not in correct format implementation::group"); + CCTK_WARN(2,"Group name not in correct format implementation::group"); retval = -3; break; case 2: - CCTK_Warn(2,"CCTK","Memory allocation failed"); + CCTK_WARN(2,"Memory allocation failed"); retval = -4; break; @@ -102,7 +102,7 @@ int CCTK_GetGroupIndex(const char *fullgroupname) char *message; message = (char *)malloc( (100+strlen(fullgroupname))*sizeof(char) ); sprintf(message,"No group found with the name %s",fullgroupname); - CCTK_Warn(2,"CCTK",message); + CCTK_WARN(2,message); if (message) free(message); retval = -1; } @@ -165,7 +165,7 @@ int CCTK_CreateGroup(const char *gname, const char *thorn, const char *imp, } else { - CCTK_Warn(1,"CCTK","Unrecognised group scope in CCTK_CreateGroup"); + CCTK_WARN(1,"Unrecognised group scope in CCTK_CreateGroup"); } /* Allocate storage for the group and setup some stuff. */ @@ -402,18 +402,18 @@ int CCTK_GetVarIndex(const char *variable_name) message = (char *)malloc( (100+strlen(variable_name))*sizeof(char) ); sprintf(message,"Full name %s in wrong format in CCTK_GetVarNum", variable_name); - CCTK_Warn(2,"CCTK",message); + CCTK_WARN(2,message); if (message) free(message); retval = -3; } else if (ierr == 2) { - CCTK_Warn(2,"CCTK","Memory allocation failed"); + CCTK_WARN(2,"Memory allocation failed"); retval = -4; } else { - CCTK_Warn(1,"CCTK","Error failed to be caught"); + CCTK_WARN(1,"Error failed to be caught"); } #ifdef DEBUG_GROUPS @@ -677,7 +677,7 @@ int CCTK_VTypeNumber(const char *type) if(!strcmp(type, "INT")) { - retval = CCTK_VARIABLE_INTEGER; + retval = CCTK_VARIABLE_INT; } if(!strcmp(type, "REAL")) diff --git a/src/main/GroupsOnGH.c b/src/main/GroupsOnGH.c index fc23bec5..d3b1d597 100644 --- a/src/main/GroupsOnGH.c +++ b/src/main/GroupsOnGH.c @@ -75,7 +75,7 @@ void *CCTK_GetVarDataPtr_ByName(cGH *GH, int timelevel, char *fullvarname) retval = GH->data[index][timelevel]; } else - CCTK_Warn(1,"CCTK","Invalid index in CCTK_GetVarDataPtr_ByName"); + CCTK_WARN(1,"Invalid index in CCTK_GetVarDataPtr_ByName"); #ifdef DEBUG_GROUPS CCTK_PRINTSEPARATOR diff --git a/src/main/WarnLevel.c b/src/main/WarnLevel.c index dc4236d5..6ae17e62 100644 --- a/src/main/WarnLevel.c +++ b/src/main/WarnLevel.c @@ -64,19 +64,19 @@ int CCTK_SetWarnLevel(int level) if(level > old_level) { sprintf(warning_message, "Increasing warning level from %d to %d\n", old_level, level); - CCTK_Warn(1,"CCTK", warning_message); + CCTK_Warn(1, __LINE__,__FILE__,"Cactus",warning_message); retval = 1; } else if(level == old_level) { sprintf(warning_message, "Warning level is already %d\n", level); - CCTK_Warn(1,"CCTK", warning_message); + CCTK_Warn(1, __LINE__,__FILE__,"Cactus",warning_message); retval = 0; } else { sprintf(warning_message, "Decreasing warning level from %d to %d\n", old_level, level); - CCTK_Warn(1,"CCTK", warning_message); + CCTK_Warn(1,__LINE__,__FILE__,"Cactus", warning_message); retval = -1; } @@ -85,7 +85,7 @@ int CCTK_SetWarnLevel(int level) { error_level = warning_level; sprintf(warning_message, "Decreasing error level to warning_level\n"); - CCTK_Warn(2, "CCTK", warning_message); + CCTK_Warn(2, __LINE__,__FILE__,"Cactus",warning_message); } return retval; } @@ -104,15 +104,28 @@ int CCTK_SetWarnLevel(int level) @endhistory @@*/ -int CCTK_Warn(int level, const char *thorn, const char *message) +int CCTK_Warn(int level, int line, const char *file, const char *thorn, const char *message) { + + DECLARE_CCTK_PARAMETERS + int retval; if(level <= warning_level) { - fprintf(stderr, "WARNING (%s): %s\n", thorn, message); - fflush(stderr); - retval = 1; + if (cctk_full_warnings) + { + fprintf(stderr, "WARNING level %d in thorn %s (line %d of %s): \n", level, thorn, line, file); + fprintf(stderr, " -> %s\n",message); + fflush(stderr); + retval = 1; + } + else + { + fprintf(stderr, "WARNING (%s): %s\n", thorn, message); + fflush(stderr); + retval = 1; + } } else { @@ -127,13 +140,14 @@ int CCTK_Warn(int level, const char *thorn, const char *message) return retval; } -int FMODIFIER FORTRAN_NAME(CCTK_Warn)(int *level, TWO_FORTSTRINGS_ARGS) +int FMODIFIER FORTRAN_NAME(CCTK_Warn)(int *level, int *line, THREE_FORTSTRINGS_ARGS) { - TWO_FORTSTRINGS_CREATE(thorn,message) + THREE_FORTSTRINGS_CREATE(file,thorn,message) int retval; - retval = CCTK_Warn(*level,thorn,message); + retval = CCTK_Warn(*level,*line,file,thorn,message); free(thorn); free(message); + free(file); return(retval); } @@ -238,26 +252,26 @@ int CCTK_SetErrorLevel(int level) if(level > old_level) { sprintf(warning_message, "Increasing error level from %d to %d\n", old_level, level); - CCTK_Warn(1,"CCTK", warning_message); + CCTK_Warn(1, __LINE__,__FILE__,"Cactus",warning_message); retval = 1; } else if(level == old_level) { sprintf(warning_message, "Error level is already %d\n", level); - CCTK_Warn(3, "CCTK", warning_message); + CCTK_Warn(3, __LINE__,__FILE__,"Cactus",warning_message); retval = 0; } else { sprintf(warning_message, "Decreasing error level from %d to %d\n", old_level, level); - CCTK_Warn(1, "CCTK", warning_message); + CCTK_Warn(1,__LINE__,__FILE__,"Cactus", warning_message); retval = -1; } } else { sprintf(warning_message, "Error level cannot be higher than warning level\n"); - CCTK_Warn(1, "CCTK", warning_message); + CCTK_Warn(1,__LINE__,__FILE__,"Cactus", warning_message); retval = 0; } diff --git a/src/param.ccl b/src/param.ccl index 99ec215d..c275a005 100644 --- a/src/param.ccl +++ b/src/param.ccl @@ -4,6 +4,10 @@ private: +LOGICAL cctk_full_warnings "Give detailed information for each warning statement" +{ +} "yes" + LOGICAL cctk_strong_param_check "Die on parameter errors in CCTK_PARAMCHECK" { : :: diff --git a/src/util/Misc.c b/src/util/Misc.c index 2c6b5874..6af6cf1d 100644 --- a/src/util/Misc.c +++ b/src/util/Misc.c @@ -117,17 +117,17 @@ int CCTK_Equals(const char *string1, const char *string2) { message = (char *)malloc((100+sizeof(string2))*sizeof(char)); sprintf(message,"First string null in CCTK_Equals (2nd is %s)",string2); - CCTK_Warn(0,"CCTK",message); + CCTK_WARN(0,message); } else if (string1 && !string2) { message = (char *)malloc((100+sizeof(string1))*sizeof(char)); sprintf(message,"Second string null in CCTK_Equals (1st is %s)",string1); - CCTK_Warn(0,"CCTK",message); + CCTK_WARN(0,message); } else { - CCTK_Warn(0,"CCTK","Both strings null in CCTK_Equals"); + CCTK_WARN(0,"Both strings null in CCTK_Equals"); } } @@ -682,7 +682,7 @@ int CCTK_SetLogical(int *data, const char *value) } else { - CCTK_Warn(1,"CCTK","Logical not set in CCTK_SetLogical"); + CCTK_WARN(1,"Logical not set in CCTK_SetLogical"); retval = -1; } |