diff options
Diffstat (limited to 'src/Ell_Register.c')
-rw-r--r-- | src/Ell_Register.c | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/src/Ell_Register.c b/src/Ell_Register.c index ee233b7..d296c6d 100644 --- a/src/Ell_Register.c +++ b/src/Ell_Register.c @@ -32,6 +32,7 @@ int Ell_RegisterEq(void *(function)(const char *, void*), const char *eqname) DECLARE_CCTK_PARAMETERS + int retval = ELL_FAILURE; /* Register if function not already there with this name */ if (!GetNamedData(EqNameDB, eqname)) @@ -47,6 +48,7 @@ int Ell_RegisterEq(void *(function)(const char *, void*), const char *eqname) CCTK_INFO(msg); free(msg); } + retval = ELL_SUCCESS; } else { @@ -62,10 +64,13 @@ int Ell_RegisterEq(void *(function)(const char *, void*), const char *eqname) char *msg; msg = (char *)malloc( (200+strlen(eqname))*sizeof(char) ); sprintf(msg,"Elliptic class %s already registered",eqname); - CCTK_INFO(msg); + CCTK_WARN(0,msg); free(msg); + retval = ELL_CLASSEXISTS; } + return retval; + } /* Ell_RegisterSolver takes a routine ("function") and registers that @@ -86,34 +91,58 @@ int Ell_RegisterSolver(void (*function), DECLARE_CCTK_PARAMETERS - int retval; - void (*fn)(void *, const char *); + int retval=ELL_FAILURE; + int ierr; + int (*fn)(void *, const char *); - fn = (void(*)(void (*function), const char *sname)) + fn = (int(*)(void (*function), const char *sname)) GetNamedData(EqNameDB, eqname); if (fn) { - fn(function,sname); + ierr = fn(function,sname); - if CCTK_EQUALS(elliptic_verbose,"yes") + if (ierr==ELL_SUCCESS) + { + + if CCTK_EQUALS(elliptic_verbose,"yes") + { + char *msg; + msg = (char *)malloc((200+strlen(eqname)+strlen(sname))*sizeof(char)); + sprintf(msg,"Registered elliptic solver %s for %s",sname,eqname); + CCTK_INFO(msg); + free(msg); + } + + retval = ELL_SUCCESS; + } + else if (ierr==ELL_SOLVEREXISTS) { char *msg; - msg = (char *)malloc( (200+strlen(eqname)+strlen(sname))*sizeof(char) ); - sprintf(msg,"Registered elliptic solver %s for %s",sname,eqname); - CCTK_INFO(msg); + msg = (char *)malloc((200+strlen(eqname)+strlen(sname))*sizeof(char)); + sprintf(msg,"Registered second solver %s for %s",sname,eqname); + CCTK_WARN(0,msg); + free(msg); + + retval = ELL_SOLVEREXISTS; + } + else + { + char *msg; + msg = (char *)malloc((200+strlen(eqname)+strlen(sname))*sizeof(char)); + sprintf(msg,"Failed to register solver %s for %s",sname,eqname); + CCTK_WARN(1,msg); free(msg); } - retval = ELL_SUCCESS; } else { - CCTK_WARN(0,"Cannot get function in EqName"); - retval = ELL_NOCLASS; + CCTK_WARN(0,"Cannot get function in EqName"); + retval = ELL_NOCLASS; } - - return retval; + + return retval; } |