1e5c89e4eSSatish Balay #define PETSC_DLL 2db135669SBarry Smith 3e5c89e4eSSatish Balay /* 4e5c89e4eSSatish Balay 5e5c89e4eSSatish Balay This file defines part of the initialization of PETSc 6e5c89e4eSSatish Balay 7e5c89e4eSSatish Balay This file uses regular malloc and free because it cannot know 8e5c89e4eSSatish Balay what malloc is being used until it has already processed the input. 9e5c89e4eSSatish Balay */ 10e5c89e4eSSatish Balay 11d382aafbSBarry Smith #include "petscsys.h" /*I "petscsys.h" I*/ 12e5c89e4eSSatish Balay #if defined(PETSC_HAVE_STDLIB_H) 13e5c89e4eSSatish Balay #include <stdlib.h> 14e5c89e4eSSatish Balay #endif 15e5c89e4eSSatish Balay #if defined(PETSC_HAVE_MALLOC_H) 16e5c89e4eSSatish Balay #include <malloc.h> 17e5c89e4eSSatish Balay #endif 18555d055bSBarry Smith #if defined(PETSC_HAVE_VALGRIND) 19555d055bSBarry Smith #include <valgrind/valgrind.h> 20555d055bSBarry Smith #endif 21555d055bSBarry Smith 22e5c89e4eSSatish Balay /* ------------------------Nasty global variables -------------------------------*/ 23e5c89e4eSSatish Balay /* 24e5c89e4eSSatish Balay Indicates if PETSc started up MPI, or it was 25e5c89e4eSSatish Balay already started before PETSc was initialized. 26e5c89e4eSSatish Balay */ 27e5c89e4eSSatish Balay PetscTruth PETSC_DLLEXPORT PetscBeganMPI = PETSC_FALSE; 28e5c89e4eSSatish Balay PetscTruth PETSC_DLLEXPORT PetscInitializeCalled = PETSC_FALSE; 29e5c89e4eSSatish Balay PetscTruth PETSC_DLLEXPORT PetscFinalizeCalled = PETSC_FALSE; 30e5c89e4eSSatish Balay PetscMPIInt PETSC_DLLEXPORT PetscGlobalRank = -1; 31e5c89e4eSSatish Balay PetscMPIInt PETSC_DLLEXPORT PetscGlobalSize = -1; 32e5c89e4eSSatish Balay 33e5c89e4eSSatish Balay #if defined(PETSC_USE_COMPLEX) 34e5c89e4eSSatish Balay #if defined(PETSC_COMPLEX_INSTANTIATE) 35e5c89e4eSSatish Balay template <> class std::complex<double>; /* instantiate complex template class */ 36e5c89e4eSSatish Balay #endif 372c876bd9SBarry Smith #if !defined(PETSC_HAVE_MPI_C_DOUBLE_COMPLEX) 382c876bd9SBarry Smith MPI_Datatype PETSC_DLLEXPORT MPI_C_DOUBLE_COMPLEX; 39a83b8d76SBarry Smith MPI_Datatype PETSC_DLLEXPORT MPI_C_COMPLEX; 402c876bd9SBarry Smith #endif 41e5c89e4eSSatish Balay PetscScalar PETSC_DLLEXPORT PETSC_i; 42e5c89e4eSSatish Balay #else 43e5c89e4eSSatish Balay PetscScalar PETSC_DLLEXPORT PETSC_i = 0.0; 44e5c89e4eSSatish Balay #endif 45e5c89e4eSSatish Balay MPI_Datatype PETSC_DLLEXPORT MPIU_2SCALAR = 0; 46e5c89e4eSSatish Balay MPI_Datatype PETSC_DLLEXPORT MPIU_2INT = 0; 4775567043SBarry Smith 4875567043SBarry Smith #if defined(PETSC_USE_SCALAR_QD_DD) 4975567043SBarry Smith MPI_Datatype PETSC_DLLEXPORT MPIU_QD_DD; 5075567043SBarry Smith #endif 51e5c89e4eSSatish Balay /* 52e5c89e4eSSatish Balay These are needed by petscbt.h 53e5c89e4eSSatish Balay */ 54421d60dfSSatish Balay #include "petscbt.h" 55e5c89e4eSSatish Balay char PETSC_DLLEXPORT _BT_mask = ' '; 56e5c89e4eSSatish Balay char PETSC_DLLEXPORT _BT_c = ' '; 57e5c89e4eSSatish Balay PetscInt PETSC_DLLEXPORT _BT_idx = 0; 58e5c89e4eSSatish Balay 59e5c89e4eSSatish Balay /* 60e5c89e4eSSatish Balay Function that is called to display all error messages 61e5c89e4eSSatish Balay */ 62e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT (*PetscErrorPrintf)(const char [],...) = PetscErrorPrintfDefault; 63e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT (*PetscHelpPrintf)(MPI_Comm,const char [],...) = PetscHelpPrintfDefault; 641179db26SBarry Smith PetscErrorCode PETSC_DLLEXPORT (*PetscVFPrintf)(FILE*,const char[],va_list) = PetscVFPrintfDefault; 65e5c89e4eSSatish Balay 66e5c89e4eSSatish Balay /* ------------------------------------------------------------------------------*/ 67e5c89e4eSSatish Balay /* 68e5c89e4eSSatish Balay Optional file where all PETSc output from various prints is saved 69e5c89e4eSSatish Balay */ 70e5c89e4eSSatish Balay FILE *petsc_history = PETSC_NULL; 71e5c89e4eSSatish Balay 72e5c89e4eSSatish Balay #undef __FUNCT__ 73e5c89e4eSSatish Balay #define __FUNCT__ "PetscLogOpenHistoryFile" 74e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscLogOpenHistoryFile(const char filename[],FILE **fd) 75e5c89e4eSSatish Balay { 76e5c89e4eSSatish Balay PetscErrorCode ierr; 77e5c89e4eSSatish Balay PetscMPIInt rank,size; 78e5c89e4eSSatish Balay char pfile[PETSC_MAX_PATH_LEN],pname[PETSC_MAX_PATH_LEN],fname[PETSC_MAX_PATH_LEN],date[64]; 79e5c89e4eSSatish Balay char version[256]; 80e5c89e4eSSatish Balay 81e5c89e4eSSatish Balay PetscFunctionBegin; 82e5c89e4eSSatish Balay ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 83e5c89e4eSSatish Balay if (!rank) { 84e5c89e4eSSatish Balay char arch[10]; 85f56c2debSBarry Smith int err; 86f56c2debSBarry Smith 87e5c89e4eSSatish Balay ierr = PetscGetArchType(arch,10);CHKERRQ(ierr); 88e5c89e4eSSatish Balay ierr = PetscGetDate(date,64);CHKERRQ(ierr); 89a523d312SBarry Smith ierr = PetscGetVersion(version,256);CHKERRQ(ierr); 90e5c89e4eSSatish Balay ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); 91e5c89e4eSSatish Balay if (filename) { 92e5c89e4eSSatish Balay ierr = PetscFixFilename(filename,fname);CHKERRQ(ierr); 93e5c89e4eSSatish Balay } else { 94e5c89e4eSSatish Balay ierr = PetscGetHomeDirectory(pfile,240);CHKERRQ(ierr); 95e5c89e4eSSatish Balay ierr = PetscStrcat(pfile,"/.petschistory");CHKERRQ(ierr); 96e5c89e4eSSatish Balay ierr = PetscFixFilename(pfile,fname);CHKERRQ(ierr); 97e5c89e4eSSatish Balay } 98e5c89e4eSSatish Balay 99*e32f2f54SBarry Smith *fd = fopen(fname,"a"); if (!fd) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open file: %s",fname); 100e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 101e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s %s\n",version,date);CHKERRQ(ierr); 102e5c89e4eSSatish Balay ierr = PetscGetProgramName(pname,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 103e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s on a %s, %d proc. with options:\n",pname,arch,size);CHKERRQ(ierr); 104e5c89e4eSSatish Balay ierr = PetscOptionsPrint(*fd);CHKERRQ(ierr); 105e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 106f56c2debSBarry Smith err = fflush(*fd); 107*e32f2f54SBarry Smith if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fflush() failed on file"); 108e5c89e4eSSatish Balay } 109e5c89e4eSSatish Balay PetscFunctionReturn(0); 110e5c89e4eSSatish Balay } 111e5c89e4eSSatish Balay 112e5c89e4eSSatish Balay #undef __FUNCT__ 113e5c89e4eSSatish Balay #define __FUNCT__ "PetscLogCloseHistoryFile" 114e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscLogCloseHistoryFile(FILE **fd) 115e5c89e4eSSatish Balay { 116e5c89e4eSSatish Balay PetscErrorCode ierr; 117e5c89e4eSSatish Balay PetscMPIInt rank; 118e5c89e4eSSatish Balay char date[64]; 119f56c2debSBarry Smith int err; 120e5c89e4eSSatish Balay 121e5c89e4eSSatish Balay PetscFunctionBegin; 122e5c89e4eSSatish Balay ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 123e5c89e4eSSatish Balay if (!rank) { 124e5c89e4eSSatish Balay ierr = PetscGetDate(date,64);CHKERRQ(ierr); 125e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 126e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"Finished at %s\n",date);CHKERRQ(ierr); 127e5c89e4eSSatish Balay ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 128f56c2debSBarry Smith err = fflush(*fd); 129*e32f2f54SBarry Smith if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fflush() failed on file"); 130f56c2debSBarry Smith err = fclose(*fd); 131*e32f2f54SBarry Smith if (err) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SYS,"fclose() failed on file"); 132e5c89e4eSSatish Balay } 133e5c89e4eSSatish Balay PetscFunctionReturn(0); 134e5c89e4eSSatish Balay } 135e5c89e4eSSatish Balay 136e5c89e4eSSatish Balay /* ------------------------------------------------------------------------------*/ 137e5c89e4eSSatish Balay 138e5c89e4eSSatish Balay /* 139e5c89e4eSSatish Balay This is ugly and probably belongs somewhere else, but I want to 140e5c89e4eSSatish Balay be able to put a true MPI abort error handler with command line args. 141e5c89e4eSSatish Balay 142e5c89e4eSSatish Balay This is so MPI errors in the debugger will leave all the stack 143e5c89e4eSSatish Balay frames. The default abort cleans up and exits. 144e5c89e4eSSatish Balay */ 145e5c89e4eSSatish Balay 146e5c89e4eSSatish Balay #undef __FUNCT__ 147e5c89e4eSSatish Balay #define __FUNCT__ "Petsc_MPI_AbortOnError" 148e5c89e4eSSatish Balay void Petsc_MPI_AbortOnError(MPI_Comm *comm,PetscMPIInt *flag) 149e5c89e4eSSatish Balay { 150e5c89e4eSSatish Balay PetscFunctionBegin; 151e5c89e4eSSatish Balay (*PetscErrorPrintf)("MPI error %d\n",(int)*flag); 152e5c89e4eSSatish Balay abort(); 153e5c89e4eSSatish Balay } 154e5c89e4eSSatish Balay 155e5c89e4eSSatish Balay #undef __FUNCT__ 156e5c89e4eSSatish Balay #define __FUNCT__ "Petsc_MPI_DebuggerOnError" 157e5c89e4eSSatish Balay void Petsc_MPI_DebuggerOnError(MPI_Comm *comm,PetscMPIInt *flag) 158e5c89e4eSSatish Balay { 159e5c89e4eSSatish Balay PetscErrorCode ierr; 160e5c89e4eSSatish Balay 161e5c89e4eSSatish Balay PetscFunctionBegin; 162e5c89e4eSSatish Balay (*PetscErrorPrintf)("MPI error %d\n",(int)*flag); 163e5c89e4eSSatish Balay ierr = PetscAttachDebugger(); 164e5c89e4eSSatish Balay if (ierr) { /* hopeless so get out */ 165e5c89e4eSSatish Balay MPI_Finalize(); 166e5c89e4eSSatish Balay exit(*flag); 167e5c89e4eSSatish Balay } 168e5c89e4eSSatish Balay } 169e5c89e4eSSatish Balay 170e5c89e4eSSatish Balay #undef __FUNCT__ 171e5c89e4eSSatish Balay #define __FUNCT__ "PetscEnd" 172e5c89e4eSSatish Balay /*@C 173e5c89e4eSSatish Balay PetscEnd - Calls PetscFinalize() and then ends the program. This is useful if one 174e5c89e4eSSatish Balay wishes a clean exit somewhere deep in the program. 175e5c89e4eSSatish Balay 176e5c89e4eSSatish Balay Collective on PETSC_COMM_WORLD 177e5c89e4eSSatish Balay 178e5c89e4eSSatish Balay Options Database Keys are the same as for PetscFinalize() 179e5c89e4eSSatish Balay 180e5c89e4eSSatish Balay Level: advanced 181e5c89e4eSSatish Balay 182e5c89e4eSSatish Balay Note: 183e5c89e4eSSatish Balay See PetscInitialize() for more general runtime options. 184e5c89e4eSSatish Balay 185e5c89e4eSSatish Balay .seealso: PetscInitialize(), PetscOptionsPrint(), PetscMallocDump(), PetscMPIDump(), PetscFinalize() 186e5c89e4eSSatish Balay @*/ 187e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscEnd(void) 188e5c89e4eSSatish Balay { 189e5c89e4eSSatish Balay PetscFunctionBegin; 190e5c89e4eSSatish Balay PetscFinalize(); 191e5c89e4eSSatish Balay exit(0); 192e5c89e4eSSatish Balay return 0; 193e5c89e4eSSatish Balay } 194e5c89e4eSSatish Balay 195e5c89e4eSSatish Balay PetscTruth PetscOptionsPublish = PETSC_FALSE; 196e5c89e4eSSatish Balay EXTERN PetscErrorCode PetscSetUseTrMalloc_Private(void); 197e5c89e4eSSatish Balay extern PetscTruth petscsetmallocvisited; 198e5c89e4eSSatish Balay static char emacsmachinename[256]; 199e5c89e4eSSatish Balay 200e5c89e4eSSatish Balay PetscErrorCode (*PetscExternalVersionFunction)(MPI_Comm) = 0; 201e5c89e4eSSatish Balay PetscErrorCode (*PetscExternalHelpFunction)(MPI_Comm) = 0; 202e5c89e4eSSatish Balay 203e5c89e4eSSatish Balay #undef __FUNCT__ 204e5c89e4eSSatish Balay #define __FUNCT__ "PetscSetHelpVersionFunctions" 205e5c89e4eSSatish Balay /*@C 206e5c89e4eSSatish Balay PetscSetHelpVersionFunctions - Sets functions that print help and version information 207e5c89e4eSSatish Balay before the PETSc help and version information is printed. Must call BEFORE PetscInitialize(). 208e5c89e4eSSatish Balay This routine enables a "higher-level" package that uses PETSc to print its messages first. 209e5c89e4eSSatish Balay 210e5c89e4eSSatish Balay Input Parameter: 211e5c89e4eSSatish Balay + help - the help function (may be PETSC_NULL) 212da93591fSBarry Smith - version - the version function (may be PETSC_NULL) 213e5c89e4eSSatish Balay 214e5c89e4eSSatish Balay Level: developer 215e5c89e4eSSatish Balay 216e5c89e4eSSatish Balay Concepts: package help message 217e5c89e4eSSatish Balay 218e5c89e4eSSatish Balay @*/ 219e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscSetHelpVersionFunctions(PetscErrorCode (*help)(MPI_Comm),PetscErrorCode (*version)(MPI_Comm)) 220e5c89e4eSSatish Balay { 221e5c89e4eSSatish Balay PetscFunctionBegin; 222e5c89e4eSSatish Balay PetscExternalHelpFunction = help; 223e5c89e4eSSatish Balay PetscExternalVersionFunction = version; 224e5c89e4eSSatish Balay PetscFunctionReturn(0); 225e5c89e4eSSatish Balay } 226e5c89e4eSSatish Balay 227e5c89e4eSSatish Balay #undef __FUNCT__ 228e5c89e4eSSatish Balay #define __FUNCT__ "PetscOptionsCheckInitial_Private" 229e5c89e4eSSatish Balay PetscErrorCode PETSC_DLLEXPORT PetscOptionsCheckInitial_Private(void) 230e5c89e4eSSatish Balay { 231e5c89e4eSSatish Balay char string[64],mname[PETSC_MAX_PATH_LEN],*f; 232e5c89e4eSSatish Balay MPI_Comm comm = PETSC_COMM_WORLD; 23390d69ab7SBarry Smith PetscTruth flg1 = PETSC_FALSE,flg2 = PETSC_FALSE,flg3 = PETSC_FALSE,flag,flgz,flgzout; 234e5c89e4eSSatish Balay PetscErrorCode ierr; 235a6d0e24fSJed Brown PetscReal si; 236e5c89e4eSSatish Balay int i; 237e5c89e4eSSatish Balay PetscMPIInt rank; 238e5c89e4eSSatish Balay char version[256]; 239e5c89e4eSSatish Balay 240e5c89e4eSSatish Balay PetscFunctionBegin; 241e5c89e4eSSatish Balay ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 242e5c89e4eSSatish Balay 243e5c89e4eSSatish Balay /* 244e5c89e4eSSatish Balay Setup the memory management; support for tracing malloc() usage 245e5c89e4eSSatish Balay */ 24690d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc_log",&flg3,PETSC_NULL);CHKERRQ(ierr); 247e5c89e4eSSatish Balay #if defined(PETSC_USE_DEBUG) 248e5c89e4eSSatish Balay ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc",&flg1,&flg2);CHKERRQ(ierr); 249e5c89e4eSSatish Balay if ((!flg2 || flg1) && !petscsetmallocvisited) { 250555d055bSBarry Smith #if defined(PETSC_HAVE_VALGRIND) 251555d055bSBarry Smith if (flg2 || !(RUNNING_ON_VALGRIND)) { 252555d055bSBarry Smith /* turn off default -malloc if valgrind is being used */ 253555d055bSBarry Smith #endif 254e5c89e4eSSatish Balay ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr); 255555d055bSBarry Smith #if defined(PETSC_HAVE_VALGRIND) 256555d055bSBarry Smith } 257555d055bSBarry Smith #endif 258e5c89e4eSSatish Balay } 259e5c89e4eSSatish Balay #else 26090d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc_dump",&flg1,PETSC_NULL);CHKERRQ(ierr); 26190d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc",&flg2,PETSC_NULL);CHKERRQ(ierr); 262e5c89e4eSSatish Balay if (flg1 || flg2 || flg3) {ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr);} 263e5c89e4eSSatish Balay #endif 264e5c89e4eSSatish Balay if (flg3) { 265e5c89e4eSSatish Balay ierr = PetscMallocSetDumpLog();CHKERRQ(ierr); 266e5c89e4eSSatish Balay } 26790d69ab7SBarry Smith flg1 = PETSC_FALSE; 26890d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc_debug",&flg1,PETSC_NULL);CHKERRQ(ierr); 269e5c89e4eSSatish Balay if (flg1) { 270e5c89e4eSSatish Balay ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr); 271e5c89e4eSSatish Balay ierr = PetscMallocDebug(PETSC_TRUE);CHKERRQ(ierr); 272e5c89e4eSSatish Balay } 273e5c89e4eSSatish Balay 27490d69ab7SBarry Smith flg1 = PETSC_FALSE; 27590d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc_info",&flg1,PETSC_NULL);CHKERRQ(ierr); 2767783f70dSSatish Balay if (!flg1) { 27790d69ab7SBarry Smith flg1 = PETSC_FALSE; 27890d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-memory_info",&flg1,PETSC_NULL);CHKERRQ(ierr); 2797783f70dSSatish Balay } 280e5c89e4eSSatish Balay if (flg1) { 281e5c89e4eSSatish Balay ierr = PetscMemorySetGetMaximumUsage();CHKERRQ(ierr); 282e5c89e4eSSatish Balay } 283e5c89e4eSSatish Balay 284e5c89e4eSSatish Balay /* 285e5c89e4eSSatish Balay Set the display variable for graphics 286e5c89e4eSSatish Balay */ 287e5c89e4eSSatish Balay ierr = PetscSetDisplay();CHKERRQ(ierr); 288e5c89e4eSSatish Balay 289e5c89e4eSSatish Balay /* 290e5c89e4eSSatish Balay Print the PETSc version information 291e5c89e4eSSatish Balay */ 292e5c89e4eSSatish Balay ierr = PetscOptionsHasName(PETSC_NULL,"-v",&flg1);CHKERRQ(ierr); 293e5c89e4eSSatish Balay ierr = PetscOptionsHasName(PETSC_NULL,"-version",&flg2);CHKERRQ(ierr); 294e5c89e4eSSatish Balay ierr = PetscOptionsHasName(PETSC_NULL,"-help",&flg3);CHKERRQ(ierr); 295e5c89e4eSSatish Balay if (flg1 || flg2 || flg3){ 296e5c89e4eSSatish Balay 297e5c89e4eSSatish Balay /* 298e5c89e4eSSatish Balay Print "higher-level" package version message 299e5c89e4eSSatish Balay */ 300e5c89e4eSSatish Balay if (PetscExternalVersionFunction) { 301e5c89e4eSSatish Balay ierr = (*PetscExternalVersionFunction)(comm);CHKERRQ(ierr); 302e5c89e4eSSatish Balay } 303e5c89e4eSSatish Balay 304a523d312SBarry Smith ierr = PetscGetVersion(version,256);CHKERRQ(ierr); 305e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"--------------------------------------------\ 306e5c89e4eSSatish Balay ------------------------------\n");CHKERRQ(ierr); 307e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"%s\n",version);CHKERRQ(ierr); 308e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"%s",PETSC_AUTHOR_INFO);CHKERRQ(ierr); 309e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"See docs/copyright.html for copyright information\n");CHKERRQ(ierr); 310e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"See docs/changes/index.html for recent updates.\n");CHKERRQ(ierr); 31184e42920SBarry Smith ierr = (*PetscHelpPrintf)(comm,"See docs/faq.html for problems.\n");CHKERRQ(ierr); 312e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"See docs/manualpages/index.html for help. \n");CHKERRQ(ierr); 313e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"Libraries linked from %s\n",PETSC_LIB_DIR);CHKERRQ(ierr); 314e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"--------------------------------------------\ 315e5c89e4eSSatish Balay ------------------------------\n");CHKERRQ(ierr); 316e5c89e4eSSatish Balay } 317e5c89e4eSSatish Balay 318e5c89e4eSSatish Balay /* 319e5c89e4eSSatish Balay Print "higher-level" package help message 320e5c89e4eSSatish Balay */ 321e5c89e4eSSatish Balay if (flg3){ 322e5c89e4eSSatish Balay if (PetscExternalHelpFunction) { 323e5c89e4eSSatish Balay ierr = (*PetscExternalHelpFunction)(comm);CHKERRQ(ierr); 324e5c89e4eSSatish Balay } 325e5c89e4eSSatish Balay } 326e5c89e4eSSatish Balay 327e5c89e4eSSatish Balay /* 328e5c89e4eSSatish Balay Setup the error handling 329e5c89e4eSSatish Balay */ 33090d69ab7SBarry Smith flg1 = PETSC_FALSE; 33190d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-on_error_abort",&flg1,PETSC_NULL);CHKERRQ(ierr); 332e5c89e4eSSatish Balay if (flg1) { ierr = PetscPushErrorHandler(PetscAbortErrorHandler,0);CHKERRQ(ierr)} 33390d69ab7SBarry Smith flg1 = PETSC_FALSE; 33490d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-on_error_mpiabort",&flg1,PETSC_NULL);CHKERRQ(ierr); 335e8fb0fc0SBarry Smith if (flg1) { ierr = PetscPushErrorHandler(PetscMPIAbortErrorHandler,0);CHKERRQ(ierr)} 33690d69ab7SBarry Smith flg1 = PETSC_FALSE; 3371c2628b8SHong Zhang ierr = PetscOptionsGetTruth(PETSC_NULL,"-mpi_return_on_error",&flg1,PETSC_NULL);CHKERRQ(ierr); 338e5c89e4eSSatish Balay if (flg1) { 339e5c89e4eSSatish Balay ierr = MPI_Errhandler_set(comm,MPI_ERRORS_RETURN);CHKERRQ(ierr); 340e5c89e4eSSatish Balay } 34190d69ab7SBarry Smith flg1 = PETSC_FALSE; 34290d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-no_signal_handler",&flg1,PETSC_NULL);CHKERRQ(ierr); 343e5c89e4eSSatish Balay if (!flg1) { ierr = PetscPushSignalHandler(PetscDefaultSignalHandler,(void*)0);CHKERRQ(ierr) } 34496cc47afSJed Brown flg1 = PETSC_FALSE; 34596cc47afSJed Brown ierr = PetscOptionsGetTruth(PETSC_NULL,"-fp_trap",&flg1,PETSC_NULL);CHKERRQ(ierr); 34696cc47afSJed Brown if (flg1) { ierr = PetscSetFPTrap(PETSC_FP_TRAP_ON);CHKERRQ(ierr); } 347e5c89e4eSSatish Balay 348e5c89e4eSSatish Balay /* 349e5c89e4eSSatish Balay Setup debugger information 350e5c89e4eSSatish Balay */ 351e5c89e4eSSatish Balay ierr = PetscSetDefaultDebugger();CHKERRQ(ierr); 352e5c89e4eSSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-on_error_attach_debugger",string,64,&flg1);CHKERRQ(ierr); 353e5c89e4eSSatish Balay if (flg1) { 354e5c89e4eSSatish Balay MPI_Errhandler err_handler; 355e5c89e4eSSatish Balay 356e5c89e4eSSatish Balay ierr = PetscSetDebuggerFromString(string);CHKERRQ(ierr); 357e5c89e4eSSatish Balay ierr = MPI_Errhandler_create((MPI_Handler_function*)Petsc_MPI_DebuggerOnError,&err_handler);CHKERRQ(ierr); 358e5c89e4eSSatish Balay ierr = MPI_Errhandler_set(comm,err_handler);CHKERRQ(ierr); 359e5c89e4eSSatish Balay ierr = PetscPushErrorHandler(PetscAttachDebuggerErrorHandler,0);CHKERRQ(ierr); 360e5c89e4eSSatish Balay } 3615e96ac45SJed Brown ierr = PetscOptionsGetString(PETSC_NULL,"-debug_terminal",string,64,&flg1);CHKERRQ(ierr); 3625e96ac45SJed Brown if (flg1) { ierr = PetscSetDebugTerminal(string);CHKERRQ(ierr); } 363e5c89e4eSSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-start_in_debugger",string,64,&flg1);CHKERRQ(ierr); 364e5c89e4eSSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-stop_for_debugger",string,64,&flg2);CHKERRQ(ierr); 365e5c89e4eSSatish Balay if (flg1 || flg2) { 366e5c89e4eSSatish Balay PetscMPIInt size; 367e5c89e4eSSatish Balay PetscInt lsize,*nodes; 368e5c89e4eSSatish Balay MPI_Errhandler err_handler; 369e5c89e4eSSatish Balay /* 370e5c89e4eSSatish Balay we have to make sure that all processors have opened 371e5c89e4eSSatish Balay connections to all other processors, otherwise once the 372e5c89e4eSSatish Balay debugger has stated it is likely to receive a SIGUSR1 373e5c89e4eSSatish Balay and kill the program. 374e5c89e4eSSatish Balay */ 375e5c89e4eSSatish Balay ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); 376e5c89e4eSSatish Balay if (size > 2) { 377533163c2SBarry Smith PetscMPIInt dummy = 0; 378e5c89e4eSSatish Balay MPI_Status status; 379e5c89e4eSSatish Balay for (i=0; i<size; i++) { 380e5c89e4eSSatish Balay if (rank != i) { 381e5c89e4eSSatish Balay ierr = MPI_Send(&dummy,1,MPI_INT,i,109,PETSC_COMM_WORLD);CHKERRQ(ierr); 382e5c89e4eSSatish Balay } 383e5c89e4eSSatish Balay } 384e5c89e4eSSatish Balay for (i=0; i<size; i++) { 385e5c89e4eSSatish Balay if (rank != i) { 386e5c89e4eSSatish Balay ierr = MPI_Recv(&dummy,1,MPI_INT,i,109,PETSC_COMM_WORLD,&status);CHKERRQ(ierr); 387e5c89e4eSSatish Balay } 388e5c89e4eSSatish Balay } 389e5c89e4eSSatish Balay } 390e5c89e4eSSatish Balay /* check if this processor node should be in debugger */ 391e5c89e4eSSatish Balay ierr = PetscMalloc(size*sizeof(PetscInt),&nodes);CHKERRQ(ierr); 392e5c89e4eSSatish Balay lsize = size; 393e5c89e4eSSatish Balay ierr = PetscOptionsGetIntArray(PETSC_NULL,"-debugger_nodes",nodes,&lsize,&flag);CHKERRQ(ierr); 394e5c89e4eSSatish Balay if (flag) { 395e5c89e4eSSatish Balay for (i=0; i<lsize; i++) { 396e5c89e4eSSatish Balay if (nodes[i] == rank) { flag = PETSC_FALSE; break; } 397e5c89e4eSSatish Balay } 398e5c89e4eSSatish Balay } 399e5c89e4eSSatish Balay if (!flag) { 400e5c89e4eSSatish Balay ierr = PetscSetDebuggerFromString(string);CHKERRQ(ierr); 401e5c89e4eSSatish Balay ierr = PetscPushErrorHandler(PetscAbortErrorHandler,0);CHKERRQ(ierr); 402e5c89e4eSSatish Balay if (flg1) { 403e5c89e4eSSatish Balay ierr = PetscAttachDebugger();CHKERRQ(ierr); 404e5c89e4eSSatish Balay } else { 405e5c89e4eSSatish Balay ierr = PetscStopForDebugger();CHKERRQ(ierr); 406e5c89e4eSSatish Balay } 407e5c89e4eSSatish Balay ierr = MPI_Errhandler_create((MPI_Handler_function*)Petsc_MPI_AbortOnError,&err_handler);CHKERRQ(ierr); 408e5c89e4eSSatish Balay ierr = MPI_Errhandler_set(comm,err_handler);CHKERRQ(ierr); 409e5c89e4eSSatish Balay } 410e5c89e4eSSatish Balay ierr = PetscFree(nodes);CHKERRQ(ierr); 411e5c89e4eSSatish Balay } 412e5c89e4eSSatish Balay 413e5c89e4eSSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-on_error_emacs",emacsmachinename,128,&flg1);CHKERRQ(ierr); 414e5c89e4eSSatish Balay if (flg1 && !rank) {ierr = PetscPushErrorHandler(PetscEmacsClientErrorHandler,emacsmachinename);CHKERRQ(ierr)} 415e5c89e4eSSatish Balay 41693ba235fSBarry Smith #if defined(PETSC_USE_SOCKET_VIEWER) 41722b84c2fSbcordonn /* 41822b84c2fSbcordonn Activates new sockets for zope if needed 41922b84c2fSbcordonn */ 42084ab5442Sbcordonn ierr=PetscOptionsHasName(PETSC_NULL,"-zope", &flgz);CHKERRQ(ierr); 421d8c6e182Sbcordonn ierr=PetscOptionsHasName(PETSC_NULL,"-nostdout", &flgzout);CHKERRQ(ierr); 4226dc8fec2Sbcordonn if(flgz){ 423d8c6e182Sbcordonn extern FILE* PETSC_ZOPEFD; 42422b84c2fSbcordonn int sockfd; 425f1384234SBarry Smith char hostname[256]; 42622b84c2fSbcordonn char username[256]; 4276dc8fec2Sbcordonn int remoteport = 9999; 42884ab5442Sbcordonn ierr=PetscOptionsGetString(PETSC_NULL, "-zope", hostname, 256, &flgz);CHKERRQ(ierr); 42984ab5442Sbcordonn if(!hostname[0]){ 43084ab5442Sbcordonn ierr=PetscGetHostName(hostname,256);CHKERRQ(ierr);} 43122b84c2fSbcordonn ierr=PetscOpenSocket(hostname, remoteport, &sockfd);CHKERRQ(ierr); 432606f100bSbcordonn ierr = PetscGetUserName(username, 256); 43322b84c2fSbcordonn PETSC_ZOPEFD = fdopen(sockfd, "w"); 43422b84c2fSbcordonn if(flgzout){ 43522b84c2fSbcordonn PETSC_STDOUT = PETSC_ZOPEFD; 436606f100bSbcordonn fprintf(PETSC_STDOUT, "<<<user>>> %s\n",username); 4376dc8fec2Sbcordonn fprintf(PETSC_STDOUT, "<<<start>>>"); 4386dc8fec2Sbcordonn } 439d8c6e182Sbcordonn else{ 440d8c6e182Sbcordonn fprintf(PETSC_ZOPEFD, "<<<user>>> %s\n",username); 441d8c6e182Sbcordonn fprintf(PETSC_ZOPEFD, "<<<start>>>"); 442d8c6e182Sbcordonn }} 44393ba235fSBarry Smith #endif 4446dc8fec2Sbcordonn 445e5c89e4eSSatish Balay /* 446e5c89e4eSSatish Balay Setup profiling and logging 447e5c89e4eSSatish Balay */ 4486cf91177SBarry Smith #if defined (PETSC_USE_INFO) 44990d69ab7SBarry Smith flg1 = PETSC_FALSE; 45090d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-info",&flg1,PETSC_NULL);CHKERRQ(ierr); 451e5c89e4eSSatish Balay if (flg1) { 452e5c89e4eSSatish Balay char logname[PETSC_MAX_PATH_LEN]; logname[0] = 0; 4536cf91177SBarry Smith ierr = PetscOptionsGetString(PETSC_NULL,"-info",logname,250,&flg1);CHKERRQ(ierr); 454e5c89e4eSSatish Balay if (logname[0]) { 4556cf91177SBarry Smith PetscInfoAllow(PETSC_TRUE,logname); 456e5c89e4eSSatish Balay } else { 4576cf91177SBarry Smith PetscInfoAllow(PETSC_TRUE,PETSC_NULL); 458e5c89e4eSSatish Balay } 459e5c89e4eSSatish Balay } 460865f6aa8SSatish Balay #endif 461865f6aa8SSatish Balay #if defined(PETSC_USE_LOG) 462865f6aa8SSatish Balay mname[0] = 0; 463865f6aa8SSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-log_history",mname,PETSC_MAX_PATH_LEN,&flg1);CHKERRQ(ierr); 464865f6aa8SSatish Balay if (flg1) { 465865f6aa8SSatish Balay if (mname[0]) { 466865f6aa8SSatish Balay ierr = PetscLogOpenHistoryFile(mname,&petsc_history);CHKERRQ(ierr); 467865f6aa8SSatish Balay } else { 468865f6aa8SSatish Balay ierr = PetscLogOpenHistoryFile(0,&petsc_history);CHKERRQ(ierr); 469865f6aa8SSatish Balay } 470865f6aa8SSatish Balay } 471e5c89e4eSSatish Balay #if defined(PETSC_HAVE_MPE) 47290d69ab7SBarry Smith flg1 = PETSC_FALSE; 47390d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-log_mpe",&flg1,PETSC_NULL);CHKERRQ(ierr); 474e5c89e4eSSatish Balay if (flg1) PetscLogMPEBegin(); 475e5c89e4eSSatish Balay #endif 47690d69ab7SBarry Smith flg1 = PETSC_FALSE; 47790d69ab7SBarry Smith flg2 = PETSC_FALSE; 47890d69ab7SBarry Smith flg3 = PETSC_FALSE; 47990d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-log_all",&flg1,PETSC_NULL);CHKERRQ(ierr); 48090d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-log",&flg2,PETSC_NULL);CHKERRQ(ierr); 481d44e083bSSatish Balay ierr = PetscOptionsHasName(PETSC_NULL,"-log_summary",&flg3);CHKERRQ(ierr); 482e5c89e4eSSatish Balay if (flg1) { ierr = PetscLogAllBegin();CHKERRQ(ierr); } 483e5c89e4eSSatish Balay else if (flg2 || flg3) { ierr = PetscLogBegin();CHKERRQ(ierr);} 484e5c89e4eSSatish Balay 485e5c89e4eSSatish Balay ierr = PetscOptionsGetString(PETSC_NULL,"-log_trace",mname,250,&flg1);CHKERRQ(ierr); 486e5c89e4eSSatish Balay if (flg1) { 487e5c89e4eSSatish Balay char name[PETSC_MAX_PATH_LEN],fname[PETSC_MAX_PATH_LEN]; 488e5c89e4eSSatish Balay FILE *file; 489e5c89e4eSSatish Balay if (mname[0]) { 490e5c89e4eSSatish Balay sprintf(name,"%s.%d",mname,rank); 491e5c89e4eSSatish Balay ierr = PetscFixFilename(name,fname);CHKERRQ(ierr); 492e5c89e4eSSatish Balay file = fopen(fname,"w"); 493e5c89e4eSSatish Balay if (!file) { 494*e32f2f54SBarry Smith SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Unable to open trace file: %s",fname); 495e5c89e4eSSatish Balay } 496e5c89e4eSSatish Balay } else { 497da9f1d6bSBarry Smith file = PETSC_STDOUT; 498e5c89e4eSSatish Balay } 499e5c89e4eSSatish Balay ierr = PetscLogTraceBegin(file);CHKERRQ(ierr); 500e5c89e4eSSatish Balay } 501e5c89e4eSSatish Balay #endif 502e5c89e4eSSatish Balay 503e5c89e4eSSatish Balay /* 504e5c89e4eSSatish Balay Setup building of stack frames for all function calls 505e5c89e4eSSatish Balay */ 506e5c89e4eSSatish Balay #if defined(PETSC_USE_DEBUG) 507e5c89e4eSSatish Balay ierr = PetscStackCreate();CHKERRQ(ierr); 508e5c89e4eSSatish Balay #endif 509e5c89e4eSSatish Balay 51090d69ab7SBarry Smith ierr = PetscOptionsGetTruth(PETSC_NULL,"-options_gui",&PetscOptionsPublish,PETSC_NULL);CHKERRQ(ierr); 511e5c89e4eSSatish Balay 512e5c89e4eSSatish Balay /* 513e5c89e4eSSatish Balay Print basic help message 514e5c89e4eSSatish Balay */ 515e5c89e4eSSatish Balay ierr = PetscOptionsHasName(PETSC_NULL,"-help",&flg1);CHKERRQ(ierr); 516e5c89e4eSSatish Balay if (flg1) { 517e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"Options for all PETSc programs:\n");CHKERRQ(ierr); 5184161f2a3SBarry Smith ierr = (*PetscHelpPrintf)(comm," -help: prints help method for each option");CHKERRQ(ierr); 519e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -on_error_abort: cause an abort when an error is");CHKERRQ(ierr); 520e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," detected. Useful \n only when run in the debugger\n");CHKERRQ(ierr); 521e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -on_error_attach_debugger [gdb,dbx,xxgdb,ups,noxterm]\n");CHKERRQ(ierr); 522e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," start the debugger in new xterm\n");CHKERRQ(ierr); 523e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," unless noxterm is given\n");CHKERRQ(ierr); 524e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -start_in_debugger [gdb,dbx,xxgdb,ups,noxterm]\n");CHKERRQ(ierr); 525e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," start all processes in the debugger\n");CHKERRQ(ierr); 526e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -on_error_emacs <machinename>\n");CHKERRQ(ierr); 527e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," emacs jumps to error file\n");CHKERRQ(ierr); 528e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -debugger_nodes [n1,n2,..] Nodes to start in debugger\n");CHKERRQ(ierr); 529e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -debugger_pause [m] : delay (in seconds) to attach debugger\n");CHKERRQ(ierr); 530e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -stop_for_debugger : prints message on how to attach debugger manually\n");CHKERRQ(ierr); 531e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," waits the delay for you to attach\n");CHKERRQ(ierr); 532e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -display display: Location where graphics and debuggers are displayed\n");CHKERRQ(ierr); 533e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -no_signal_handler: do not trap error signals\n");CHKERRQ(ierr); 534e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -mpi_return_on_error: MPI returns error code, rather than abort on internal error\n");CHKERRQ(ierr); 535e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -fp_trap: stop on floating point exceptions\n");CHKERRQ(ierr); 536e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," note on IBM RS6000 this slows run greatly\n");CHKERRQ(ierr); 537e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -malloc_dump <optional filename>: dump list of unfreed memory at conclusion\n");CHKERRQ(ierr); 538e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -malloc: use our error checking malloc\n");CHKERRQ(ierr); 539e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -malloc no: don't use error checking malloc\n");CHKERRQ(ierr); 5404161f2a3SBarry Smith ierr = (*PetscHelpPrintf)(comm," -malloc_info: prints total memory usage\n");CHKERRQ(ierr); 5414161f2a3SBarry Smith ierr = (*PetscHelpPrintf)(comm," -malloc_log: keeps log of all memory allocations\n");CHKERRQ(ierr); 542e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -malloc_debug: enables extended checking for memory corruption\n");CHKERRQ(ierr); 543e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -options_table: dump list of options inputted\n");CHKERRQ(ierr); 544e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -options_left: dump list of unused options\n");CHKERRQ(ierr); 545e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -options_left no: don't dump list of unused options\n");CHKERRQ(ierr); 546e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -tmp tmpdir: alternative /tmp directory\n");CHKERRQ(ierr); 547e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -shared_tmp: tmp directory is shared by all processors\n");CHKERRQ(ierr); 548a8c7a070SBarry Smith ierr = (*PetscHelpPrintf)(comm," -not_shared_tmp: each processor has separate tmp directory\n");CHKERRQ(ierr); 549e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -memory_info: print memory usage at end of run\n");CHKERRQ(ierr); 550e5c89e4eSSatish Balay #if defined(PETSC_USE_LOG) 551e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -get_total_flops: total flops over all processors\n");CHKERRQ(ierr); 552e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -log[_all _summary]: logging objects and events\n");CHKERRQ(ierr); 553e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -log_trace [filename]: prints trace of all PETSc calls\n");CHKERRQ(ierr); 554e5c89e4eSSatish Balay #if defined(PETSC_HAVE_MPE) 555e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -log_mpe: Also create logfile viewable through upshot\n");CHKERRQ(ierr); 556e5c89e4eSSatish Balay #endif 5576cf91177SBarry Smith ierr = (*PetscHelpPrintf)(comm," -info <optional filename>: print informative messages about the calculations\n");CHKERRQ(ierr); 558e5c89e4eSSatish Balay #endif 559e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -v: prints PETSc version number and release date\n");CHKERRQ(ierr); 560e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -options_file <file>: reads options from file\n");CHKERRQ(ierr); 561e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm," -petsc_sleep n: sleeps n seconds before running program\n");CHKERRQ(ierr); 562e5c89e4eSSatish Balay ierr = (*PetscHelpPrintf)(comm,"-----------------------------------------------\n");CHKERRQ(ierr); 563e5c89e4eSSatish Balay } 564e5c89e4eSSatish Balay 565a6d0e24fSJed Brown ierr = PetscOptionsGetReal(PETSC_NULL,"-petsc_sleep",&si,&flg1);CHKERRQ(ierr); 566e5c89e4eSSatish Balay if (flg1) { 567e5c89e4eSSatish Balay ierr = PetscSleep(si);CHKERRQ(ierr); 568e5c89e4eSSatish Balay } 569e5c89e4eSSatish Balay 5706cf91177SBarry Smith ierr = PetscOptionsGetString(PETSC_NULL,"-info_exclude",mname,PETSC_MAX_PATH_LEN,&flg1);CHKERRQ(ierr); 571e5c89e4eSSatish Balay ierr = PetscStrstr(mname,"null",&f);CHKERRQ(ierr); 572e5c89e4eSSatish Balay if (f) { 5736cf91177SBarry Smith ierr = PetscInfoDeactivateClass(PETSC_NULL);CHKERRQ(ierr); 574e5c89e4eSSatish Balay } 575e5c89e4eSSatish Balay 576192daf7cSBarry Smith 577e5c89e4eSSatish Balay PetscFunctionReturn(0); 578e5c89e4eSSatish Balay } 579e5c89e4eSSatish Balay 580e5c89e4eSSatish Balay 581