Actual source code: stack.c

  1: #define PETSC_DLL

 3:  #include petsc.h
 4:  #include petscsys.h

  6: #if defined(PETSC_USE_DEBUG)

  8: PetscStack  *petscstack = 0;

 12: PetscErrorCode  PetscStackPublish(void)
 13: {
 15:   return(0);
 16: }

 20: PetscErrorCode  PetscStackDepublish(void)
 21: {
 23:   return(0);
 24: }
 25: 
 28: PetscErrorCode  PetscStackCreate(void)
 29: {

 32:   PetscStack *petscstack_in;
 33:   if (petscstack) return 0;
 34: 
 35:   PetscNew(PetscStack,&petscstack_in);
 36:   petscstack_in->currentsize = 0;
 37:   petscstack = petscstack_in;

 39:   return 0;
 40: }

 44: PetscErrorCode  PetscStackView(PetscViewer viewer)
 45: {
 47:   int  i;
 48:   FILE *file;

 50:   if (!viewer) viewer = PETSC_VIEWER_STDOUT_SELF;
 51:   PetscViewerASCIIGetPointer(viewer,&file);

 53:   if (file == stdout) {
 54:     (*PetscErrorPrintf)("Note: The EXACT line numbers in the stack are not available,\n");
 55:     (*PetscErrorPrintf)("      INSTEAD the line number of the start of the function\n");
 56:     (*PetscErrorPrintf)("      is given.\n");
 57:     for (i=petscstack->currentsize-1; i>=0; i--) {
 58:       (*PetscErrorPrintf)("[%d] %s line %d %s%s\n",PetscGlobalRank,
 59:                                                    petscstack->function[i],
 60:                                                    petscstack->line[i],
 61:                                                    petscstack->directory[i],
 62:                                                    petscstack->file[i]);
 63:     }
 64:   } else {
 65:     fprintf(file,"Note: The EXACT line numbers in the stack are not available,\n");
 66:     fprintf(file,"      INSTEAD the line number of the start of the function\n");
 67:     fprintf(file,"      is given.\n");
 68:     for (i=petscstack->currentsize-1; i>=0; i--) {
 69:       fprintf(file,"[%d] %s line %d %s%s\n",PetscGlobalRank,
 70:                                             petscstack->function[i],
 71:                                             petscstack->line[i],
 72:                                             petscstack->directory[i],
 73:                                             petscstack->file[i]);
 74:     }
 75:   }
 76:   return 0;
 77: }

 82: PetscErrorCode  PetscStackDestroy(void)
 83: {
 85:   if (petscstack){
 86:     PetscStack *petscstack_in = petscstack;
 87:     petscstack = 0;
 88:     PetscFree(petscstack_in);
 89:   }
 90:   return 0;
 91: }

 96: PetscErrorCode  PetscStackCopy(PetscStack* sint,PetscStack* sout)
 97: {
 98:   int i;

100:   if (!sint) {
101:     sout->currentsize = 0;
102:   } else {
103:     for (i=0; i<sint->currentsize; i++) {
104:       sout->function[i]  = sint->function[i];
105:       sout->file[i]      = sint->file[i];
106:       sout->directory[i] = sint->directory[i];
107:       sout->line[i]      = sint->line[i];
108:     }
109:     sout->currentsize = sint->currentsize;
110:   }
111:   return 0;
112: }

117: PetscErrorCode  PetscStackPrint(PetscStack* sint,FILE *fp)
118: {
119:   int i;

121:   if (!sint) return(0);
122:   for (i=sint->currentsize-3; i>=0; i--) {
123:     fprintf(fp,"      [%d]  %s() line %d in %s%s\n",PetscGlobalRank,sint->function[i],sint->line[i],sint->directory[i],sint->file[i]);
124:   }
125:   return 0;
126: }

128: #else
131: PetscErrorCode  PetscStackPublish(void)
132: {
134:   return(0);
135: }
138: PetscErrorCode  PetscStackDepublish(void)
139: {
141:   return(0);
142: }
145: PetscErrorCode  PetscStackCreate(void)
146: {
148:   return(0);
149: }
152: PetscErrorCode  PetscStackView(PetscViewer viewer)
153: {
155:   return(0);
156: }
159: PetscErrorCode  PetscStackDestroy(void)
160: {
162:   return(0);
163: }

165: #endif