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