1e5c89e4eSSatish Balay #define PETSC_DLL 2e5c89e4eSSatish Balay 3*107894f0SSatish Balay #include "petscsys.h" /*I "petscsys.h" I*/ 4*107894f0SSatish Balay #include "petscconfiginfo.h" 5e5c89e4eSSatish Balay 6e5c89e4eSSatish Balay #undef __FUNCT__ 7e5c89e4eSSatish Balay #define __FUNCT__ "PetscIgnoreErrorHandler" 8e5c89e4eSSatish Balay /*@C 9e5c89e4eSSatish Balay PetscIgnoreErrorHandler - Ignores the error, allows program to continue as if error did not occure 10e5c89e4eSSatish Balay 11e5c89e4eSSatish Balay Not Collective 12e5c89e4eSSatish Balay 13e5c89e4eSSatish Balay Input Parameters: 14e5c89e4eSSatish Balay + line - the line number of the error (indicated by __LINE__) 15e5c89e4eSSatish Balay . func - the function where error is detected (indicated by __FUNCT__) 16e5c89e4eSSatish Balay . file - the file in which the error was detected (indicated by __FILE__) 17e5c89e4eSSatish Balay . dir - the directory of the file (indicated by __SDIR__) 18e5c89e4eSSatish Balay . mess - an error text string, usually just printed to the screen 19e5c89e4eSSatish Balay . n - the generic error number 20e5c89e4eSSatish Balay . p - specific error number 21e5c89e4eSSatish Balay - ctx - error handler context 22e5c89e4eSSatish Balay 23e5c89e4eSSatish Balay Level: developer 24e5c89e4eSSatish Balay 25e5c89e4eSSatish Balay Notes: 26e5c89e4eSSatish Balay Most users need not directly employ this routine and the other error 27e5c89e4eSSatish Balay handlers, but can instead use the simplified interface SETERRQ, which has 28e5c89e4eSSatish Balay the calling sequence 29e5c89e4eSSatish Balay $ SETERRQ(number,p,mess) 30e5c89e4eSSatish Balay 31e5c89e4eSSatish Balay Notes for experienced users: 32e5c89e4eSSatish Balay Use PetscPushErrorHandler() to set the desired error handler. The 33e5c89e4eSSatish Balay currently available PETSc error handlers include PetscTraceBackErrorHandler(), 34e5c89e4eSSatish Balay PetscAttachDebuggerErrorHandler(), PetscAbortErrorHandler(), and PetscStopErrorHandler() 35e5c89e4eSSatish Balay 36e5c89e4eSSatish Balay Concepts: error handler^traceback 37e5c89e4eSSatish Balay Concepts: traceback^generating 38e5c89e4eSSatish Balay 39e5c89e4eSSatish Balay .seealso: PetscPushErrorHandler(), PetscAttachDebuggerErrorHandler(), 40e5c89e4eSSatish Balay PetscAbortErrorHandler(), PetscTraceBackErrorHandler() 41e5c89e4eSSatish Balay @*/ 42e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscIgnoreErrorHandler(int line,const char *fun,const char* file,const char *dir,PetscErrorCode n,int p,const char *mess,void *ctx) 43e5c89e4eSSatish Balay { 44e5c89e4eSSatish Balay PetscFunctionBegin; 45e5c89e4eSSatish Balay PetscFunctionReturn(n); 46e5c89e4eSSatish Balay } 47e5c89e4eSSatish Balay 48*107894f0SSatish Balay /* ---------------------------------------------------------------------------------------*/ 49*107894f0SSatish Balay 50*107894f0SSatish Balay static char arch[10],hostname[64],username[16],pname[PETSC_MAX_PATH_LEN],date[64]; 51*107894f0SSatish Balay static PetscTruth PetscErrorPrintfInitializeCalled = PETSC_FALSE; 52*107894f0SSatish Balay 53*107894f0SSatish Balay #undef __FUNCT__ 54*107894f0SSatish Balay #define __FUNCT__ "PetscErrorPrintfInitialize" 55*107894f0SSatish Balay /* 56*107894f0SSatish Balay Initializes arch, hostname, username,date so that system calls do NOT need 57*107894f0SSatish Balay to be made during the error handler. 58*107894f0SSatish Balay */ 59*107894f0SSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscErrorPrintfInitialize() 60*107894f0SSatish Balay { 61*107894f0SSatish Balay PetscErrorCode ierr; 62*107894f0SSatish Balay 63*107894f0SSatish Balay PetscFunctionBegin; 64*107894f0SSatish Balay ierr = PetscGetArchType(arch,10);CHKERRQ(ierr); 65*107894f0SSatish Balay ierr = PetscGetHostName(hostname,64);CHKERRQ(ierr); 66*107894f0SSatish Balay ierr = PetscGetUserName(username,16);CHKERRQ(ierr); 67*107894f0SSatish Balay ierr = PetscGetProgramName(pname,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 68*107894f0SSatish Balay ierr = PetscGetDate(date,64);CHKERRQ(ierr); 69*107894f0SSatish Balay PetscErrorPrintfInitializeCalled = PETSC_TRUE; 70*107894f0SSatish Balay PetscFunctionReturn(0); 71*107894f0SSatish Balay } 72*107894f0SSatish Balay 73*107894f0SSatish Balay 74e5c89e4eSSatish Balay 75e5c89e4eSSatish Balay #undef __FUNCT__ 76e5c89e4eSSatish Balay #define __FUNCT__ "PetscTraceBackErrorHandler" 77e5c89e4eSSatish Balay /*@C 78e5c89e4eSSatish Balay 79e5c89e4eSSatish Balay PetscTraceBackErrorHandler - Default error handler routine that generates 80e5c89e4eSSatish Balay a traceback on error detection. 81e5c89e4eSSatish Balay 82e5c89e4eSSatish Balay Not Collective 83e5c89e4eSSatish Balay 84e5c89e4eSSatish Balay Input Parameters: 85e5c89e4eSSatish Balay + line - the line number of the error (indicated by __LINE__) 86e5c89e4eSSatish Balay . func - the function where error is detected (indicated by __FUNCT__) 87e5c89e4eSSatish Balay . file - the file in which the error was detected (indicated by __FILE__) 88e5c89e4eSSatish Balay . dir - the directory of the file (indicated by __SDIR__) 89e5c89e4eSSatish Balay . mess - an error text string, usually just printed to the screen 90e5c89e4eSSatish Balay . n - the generic error number 91e5c89e4eSSatish Balay . p - specific error number 92e5c89e4eSSatish Balay - ctx - error handler context 93e5c89e4eSSatish Balay 94e5c89e4eSSatish Balay Level: developer 95e5c89e4eSSatish Balay 96e5c89e4eSSatish Balay Notes: 97e5c89e4eSSatish Balay Most users need not directly employ this routine and the other error 98e5c89e4eSSatish Balay handlers, but can instead use the simplified interface SETERRQ, which has 99e5c89e4eSSatish Balay the calling sequence 100e5c89e4eSSatish Balay $ SETERRQ(number,p,mess) 101e5c89e4eSSatish Balay 102e5c89e4eSSatish Balay Notes for experienced users: 103e5c89e4eSSatish Balay Use PetscPushErrorHandler() to set the desired error handler. The 104e5c89e4eSSatish Balay currently available PETSc error handlers include PetscTraceBackErrorHandler(), 105e5c89e4eSSatish Balay PetscAttachDebuggerErrorHandler(), PetscAbortErrorHandler(), and PetscStopErrorHandler() 106e5c89e4eSSatish Balay 107e5c89e4eSSatish Balay Concepts: error handler^traceback 108e5c89e4eSSatish Balay Concepts: traceback^generating 109e5c89e4eSSatish Balay 110e5c89e4eSSatish Balay .seealso: PetscPushErrorHandler(), PetscAttachDebuggerErrorHandler(), 111e5c89e4eSSatish Balay PetscAbortErrorHandler() 112e5c89e4eSSatish Balay @*/ 113e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscTraceBackErrorHandler(int line,const char *fun,const char* file,const char *dir,PetscErrorCode n,int p,const char *mess,void *ctx) 114e5c89e4eSSatish Balay { 115e5c89e4eSSatish Balay PetscLogDouble mem,rss; 116e5c89e4eSSatish Balay PetscTruth flg1,flg2; 117*107894f0SSatish Balay char version[256]; 118*107894f0SSatish Balay PetscErrorCode ierr; 119e5c89e4eSSatish Balay 120e5c89e4eSSatish Balay PetscFunctionBegin; 121e5c89e4eSSatish Balay 122e5c89e4eSSatish Balay if (p == 1) { 123*107894f0SSatish Balay (*PetscErrorPrintf)("--------------------- Error Message ------------------------------------\n"); 124e5c89e4eSSatish Balay if (n == PETSC_ERR_MEM) { 125e5c89e4eSSatish Balay (*PetscErrorPrintf)("Out of memory. This could be due to allocating\n"); 126e5c89e4eSSatish Balay (*PetscErrorPrintf)("too large an object or bleeding by not properly\n"); 127e5c89e4eSSatish Balay (*PetscErrorPrintf)("destroying unneeded objects.\n"); 128e5c89e4eSSatish Balay PetscMallocGetCurrentUsage(&mem); 129e5c89e4eSSatish Balay PetscMemoryGetCurrentUsage(&rss); 130e5c89e4eSSatish Balay PetscOptionsHasName(PETSC_NULL,"-malloc_dump",&flg1); 131e5c89e4eSSatish Balay PetscOptionsHasName(PETSC_NULL,"-malloc_log",&flg2); 132e5c89e4eSSatish Balay if (flg2) { 133e5c89e4eSSatish Balay PetscMallocDumpLog(stdout); 134e5c89e4eSSatish Balay } else { 135e5c89e4eSSatish Balay (*PetscErrorPrintf)("Memory allocated %D Memory used by process %D\n",(PetscInt)mem,(PetscInt)rss); 136e5c89e4eSSatish Balay if (flg1) { 137e5c89e4eSSatish Balay PetscMallocDump(stdout); 138e5c89e4eSSatish Balay } else { 139e5c89e4eSSatish Balay (*PetscErrorPrintf)("Try running with -malloc_dump or -malloc_log for info.\n"); 140e5c89e4eSSatish Balay } 141e5c89e4eSSatish Balay } 142e5c89e4eSSatish Balay } else { 143e5c89e4eSSatish Balay const char *text; 144e5c89e4eSSatish Balay PetscErrorMessage(n,&text,PETSC_NULL); 145e5c89e4eSSatish Balay if (text) (*PetscErrorPrintf)("%s!\n",text); 146e5c89e4eSSatish Balay } 147e5c89e4eSSatish Balay if (mess) { 148e5c89e4eSSatish Balay (*PetscErrorPrintf)("%s!\n",mess); 149e5c89e4eSSatish Balay } 150*107894f0SSatish Balay ierr = PetscGetVersion(&version); 151*107894f0SSatish Balay (*PetscErrorPrintf)("------------------------------------------------------------------------\n"); 152*107894f0SSatish Balay (*PetscErrorPrintf)("%s\n",version); 153*107894f0SSatish Balay (*PetscErrorPrintf)("See docs/changes/index.html for recent updates.\n"); 154*107894f0SSatish Balay (*PetscErrorPrintf)("See docs/faq.html for hints about trouble shooting.\n"); 155*107894f0SSatish Balay (*PetscErrorPrintf)("See docs/index.html for manual pages.\n"); 156*107894f0SSatish Balay (*PetscErrorPrintf)("------------------------------------------------------------------------\n"); 157*107894f0SSatish Balay if (PetscErrorPrintfInitializeCalled) { 158*107894f0SSatish Balay (*PetscErrorPrintf)("%s on a %s named %s by %s %s\n",pname,arch,hostname,username,date); 159e5c89e4eSSatish Balay } 160*107894f0SSatish Balay (*PetscErrorPrintf)("Libraries linked from %s\n",PETSC_LIB_DIR); 161*107894f0SSatish Balay (*PetscErrorPrintf)("Configure run at %s\n",petscconfigureruntime); 162*107894f0SSatish Balay (*PetscErrorPrintf)("Configure options %s\n",petscconfigureoptions); 163*107894f0SSatish Balay (*PetscErrorPrintf)("------------------------------------------------------------------------\n"); 164*107894f0SSatish Balay } 165*107894f0SSatish Balay 166*107894f0SSatish Balay 167*107894f0SSatish Balay /* first line in stack trace? */ 168f5ad10bcSSatish Balay (*PetscErrorPrintf)("%s() line %d in %s%s\n",fun,line,dir,file); 169*107894f0SSatish Balay 170*107894f0SSatish Balay 171e5c89e4eSSatish Balay PetscFunctionReturn(n); 172e5c89e4eSSatish Balay } 173e5c89e4eSSatish Balay 174