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