1d9262e54SJed Brown 2*c6db04a5SJed Brown #include <petscsys.h> /*I "petscsys.h" I*/ 3d9262e54SJed Brown 463d6bff0SBarry Smith #if defined(PETSC_USE_DEBUG) && !defined(PETSC_USE_PTHREAD) 5d9262e54SJed Brown 67087cfbeSBarry Smith PetscStack *petscstack = 0; 7d9262e54SJed Brown 8d9262e54SJed Brown #undef __FUNCT__ 9d9262e54SJed Brown #define __FUNCT__ "PetscStackPublish" 107087cfbeSBarry Smith PetscErrorCode PetscStackPublish(void) 11d9262e54SJed Brown { 12d9262e54SJed Brown PetscFunctionBegin; 13d9262e54SJed Brown PetscFunctionReturn(0); 14d9262e54SJed Brown } 15d9262e54SJed Brown 16d9262e54SJed Brown #undef __FUNCT__ 17d9262e54SJed Brown #define __FUNCT__ "PetscStackDepublish" 187087cfbeSBarry Smith PetscErrorCode PetscStackDepublish(void) 19d9262e54SJed Brown { 20d9262e54SJed Brown PetscFunctionBegin; 21d9262e54SJed Brown PetscFunctionReturn(0); 22d9262e54SJed Brown } 23d9262e54SJed Brown 24d9262e54SJed Brown #undef __FUNCT__ 25d9262e54SJed Brown #define __FUNCT__ "PetscStackCreate" 267087cfbeSBarry Smith PetscErrorCode PetscStackCreate(void) 27d9262e54SJed Brown { 28d9262e54SJed Brown PetscErrorCode ierr; 29d9262e54SJed Brown 30d9262e54SJed Brown PetscStack *petscstack_in; 31d9262e54SJed Brown if (petscstack) return 0; 32d9262e54SJed Brown 33d9262e54SJed Brown ierr = PetscNew(PetscStack,&petscstack_in);CHKERRQ(ierr); 34d9262e54SJed Brown petscstack_in->currentsize = 0; 35d9262e54SJed Brown petscstack = petscstack_in; 36d9262e54SJed Brown 37d9262e54SJed Brown return 0; 38d9262e54SJed Brown } 39d9262e54SJed Brown 40d9262e54SJed Brown #undef __FUNCT__ 41d9262e54SJed Brown #define __FUNCT__ "PetscStackView" 427087cfbeSBarry Smith PetscErrorCode PetscStackView(PetscViewer viewer) 43d9262e54SJed Brown { 44d9262e54SJed Brown PetscErrorCode ierr; 45d9262e54SJed Brown int i; 46d9262e54SJed Brown FILE *file; 47d9262e54SJed Brown 48d9262e54SJed Brown if (!viewer) viewer = PETSC_VIEWER_STDOUT_SELF; 49d9262e54SJed Brown ierr = PetscViewerASCIIGetPointer(viewer,&file);CHKERRQ(ierr); 50d9262e54SJed Brown 51d9262e54SJed Brown if (file == PETSC_STDOUT) { 52d9262e54SJed Brown (*PetscErrorPrintf)("Note: The EXACT line numbers in the stack are not available,\n"); 53d9262e54SJed Brown (*PetscErrorPrintf)(" INSTEAD the line number of the start of the function\n"); 54d9262e54SJed Brown (*PetscErrorPrintf)(" is given.\n"); 55d9262e54SJed Brown for (i=petscstack->currentsize-1; i>=0; i--) { 56d9262e54SJed Brown (*PetscErrorPrintf)("[%d] %s line %d %s%s\n",PetscGlobalRank, 57d9262e54SJed Brown petscstack->function[i], 58d9262e54SJed Brown petscstack->line[i], 59d9262e54SJed Brown petscstack->directory[i], 60d9262e54SJed Brown petscstack->file[i]); 61d9262e54SJed Brown } 62d9262e54SJed Brown } else { 63d9262e54SJed Brown fprintf(file,"Note: The EXACT line numbers in the stack are not available,\n"); 64d9262e54SJed Brown fprintf(file," INSTEAD the line number of the start of the function\n"); 65d9262e54SJed Brown fprintf(file," is given.\n"); 66d9262e54SJed Brown for (i=petscstack->currentsize-1; i>=0; i--) { 67d9262e54SJed Brown fprintf(file,"[%d] %s line %d %s%s\n",PetscGlobalRank, 68d9262e54SJed Brown petscstack->function[i], 69d9262e54SJed Brown petscstack->line[i], 70d9262e54SJed Brown petscstack->directory[i], 71d9262e54SJed Brown petscstack->file[i]); 72d9262e54SJed Brown } 73d9262e54SJed Brown } 74d9262e54SJed Brown return 0; 75d9262e54SJed Brown } 76d9262e54SJed Brown 77d9262e54SJed Brown #undef __FUNCT__ 78d9262e54SJed Brown #define __FUNCT__ "PetscStackDestroy" 79d9262e54SJed Brown /* PetscFunctionBegin; so that make rule checkbadPetscFunctionBegin works */ 807087cfbeSBarry Smith PetscErrorCode PetscStackDestroy(void) 81d9262e54SJed Brown { 82d9262e54SJed Brown PetscErrorCode ierr; 83d9262e54SJed Brown if (petscstack){ 84d9262e54SJed Brown PetscStack *petscstack_in = petscstack; 85d9262e54SJed Brown petscstack = 0; 86d9262e54SJed Brown ierr = PetscFree(petscstack_in);CHKERRQ(ierr); 87d9262e54SJed Brown } 88d9262e54SJed Brown return 0; 89d9262e54SJed Brown } 90d9262e54SJed Brown 91d9262e54SJed Brown #undef __FUNCT__ 92d9262e54SJed Brown #define __FUNCT__ "PetscStackCopy" 93d9262e54SJed Brown /* PetscFunctionBegin; so that make rule checkbadPetscFunctionBegin works */ 947087cfbeSBarry Smith PetscErrorCode PetscStackCopy(PetscStack* sint,PetscStack* sout) 95d9262e54SJed Brown { 96d9262e54SJed Brown int i; 97d9262e54SJed Brown 98d9262e54SJed Brown if (!sint) { 99d9262e54SJed Brown sout->currentsize = 0; 100d9262e54SJed Brown } else { 101d9262e54SJed Brown for (i=0; i<sint->currentsize; i++) { 102d9262e54SJed Brown sout->function[i] = sint->function[i]; 103d9262e54SJed Brown sout->file[i] = sint->file[i]; 104d9262e54SJed Brown sout->directory[i] = sint->directory[i]; 105d9262e54SJed Brown sout->line[i] = sint->line[i]; 106d9262e54SJed Brown } 107d9262e54SJed Brown sout->currentsize = sint->currentsize; 108d9262e54SJed Brown } 109d9262e54SJed Brown return 0; 110d9262e54SJed Brown } 111d9262e54SJed Brown 112d9262e54SJed Brown #undef __FUNCT__ 113d9262e54SJed Brown #define __FUNCT__ "PetscStackPrint" 114d9262e54SJed Brown /* PetscFunctionBegin; so that make rule checkbadPetscFunctionBegin works */ 1157087cfbeSBarry Smith PetscErrorCode PetscStackPrint(PetscStack* sint,FILE *fp) 116d9262e54SJed Brown { 117d9262e54SJed Brown int i; 118d9262e54SJed Brown 119d9262e54SJed Brown if (!sint) return(0); 120d9262e54SJed Brown for (i=sint->currentsize-3; i>=0; i--) { 121d9262e54SJed Brown fprintf(fp," [%d] %s() line %d in %s%s\n",PetscGlobalRank,sint->function[i],sint->line[i],sint->directory[i],sint->file[i]); 122d9262e54SJed Brown } 123d9262e54SJed Brown return 0; 124d9262e54SJed Brown } 125d9262e54SJed Brown 126d9262e54SJed Brown #else 127d9262e54SJed Brown #undef __FUNCT__ 128d9262e54SJed Brown #define __FUNCT__ "PetscStackPublish" 1297087cfbeSBarry Smith PetscErrorCode PetscStackPublish(void) 130d9262e54SJed Brown { 131d9262e54SJed Brown PetscFunctionBegin; 132d9262e54SJed Brown PetscFunctionReturn(0); 133d9262e54SJed Brown } 134d9262e54SJed Brown #undef __FUNCT__ 135d9262e54SJed Brown #define __FUNCT__ "PetscStackDepublish" 1367087cfbeSBarry Smith PetscErrorCode PetscStackDepublish(void) 137d9262e54SJed Brown { 138d9262e54SJed Brown PetscFunctionBegin; 139d9262e54SJed Brown PetscFunctionReturn(0); 140d9262e54SJed Brown } 141d9262e54SJed Brown #undef __FUNCT__ 142d9262e54SJed Brown #define __FUNCT__ "PetscStackCreate" 1437087cfbeSBarry Smith PetscErrorCode PetscStackCreate(void) 144d9262e54SJed Brown { 145d9262e54SJed Brown PetscFunctionBegin; 146d9262e54SJed Brown PetscFunctionReturn(0); 147d9262e54SJed Brown } 148d9262e54SJed Brown #undef __FUNCT__ 149d9262e54SJed Brown #define __FUNCT__ "PetscStackView" 1507087cfbeSBarry Smith PetscErrorCode PetscStackView(PetscViewer viewer) 151d9262e54SJed Brown { 152d9262e54SJed Brown PetscFunctionBegin; 153d9262e54SJed Brown PetscFunctionReturn(0); 154d9262e54SJed Brown } 155d9262e54SJed Brown #undef __FUNCT__ 156d9262e54SJed Brown #define __FUNCT__ "PetscStackDestroy" 1577087cfbeSBarry Smith PetscErrorCode PetscStackDestroy(void) 158d9262e54SJed Brown { 159d9262e54SJed Brown PetscFunctionBegin; 160d9262e54SJed Brown PetscFunctionReturn(0); 161d9262e54SJed Brown } 162d9262e54SJed Brown 163d9262e54SJed Brown #endif 164d9262e54SJed Brown 165