1 #define PETSC_DLL 2 /* 3 4 This file defines part of the initialization of PETSc 5 6 This file uses regular malloc and free because it cannot know 7 what malloc is being used until it has already processed the input. 8 */ 9 10 #include "petsc.h" /*I "petsc.h" I*/ 11 #include "petscsys.h" 12 #if defined(PETSC_HAVE_STDLIB_H) 13 #include <stdlib.h> 14 #endif 15 #if defined(PETSC_HAVE_MALLOC_H) 16 #include <malloc.h> 17 #endif 18 #include "petscfix.h" 19 #include "zope.h" 20 21 /* ------------------------Nasty global variables -------------------------------*/ 22 /* 23 Indicates if PETSc started up MPI, or it was 24 already started before PETSc was initialized. 25 */ 26 PetscTruth PETSC_DLLEXPORT PetscBeganMPI = PETSC_FALSE; 27 PetscTruth PETSC_DLLEXPORT PetscInitializeCalled = PETSC_FALSE; 28 PetscTruth PETSC_DLLEXPORT PetscFinalizeCalled = PETSC_FALSE; 29 PetscMPIInt PETSC_DLLEXPORT PetscGlobalRank = -1; 30 PetscMPIInt PETSC_DLLEXPORT PetscGlobalSize = -1; 31 32 #if defined(PETSC_USE_COMPLEX) 33 #if defined(PETSC_COMPLEX_INSTANTIATE) 34 template <> class std::complex<double>; /* instantiate complex template class */ 35 #endif 36 MPI_Datatype PETSC_DLLEXPORT MPIU_COMPLEX; 37 PetscScalar PETSC_DLLEXPORT PETSC_i; 38 #else 39 PetscScalar PETSC_DLLEXPORT PETSC_i = 0.0; 40 #endif 41 MPI_Datatype PETSC_DLLEXPORT MPIU_2SCALAR = 0; 42 MPI_Datatype PETSC_DLLEXPORT MPIU_2INT = 0; 43 /* 44 These are needed by petscbt.h 45 */ 46 char PETSC_DLLEXPORT _BT_mask = ' '; 47 char PETSC_DLLEXPORT _BT_c = ' '; 48 PetscInt PETSC_DLLEXPORT _BT_idx = 0; 49 50 /* 51 Function that is called to display all error messages 52 */ 53 PetscErrorCode PETSC_DLLEXPORT (*PetscErrorPrintf)(const char [],...) = PetscErrorPrintfDefault; 54 PetscErrorCode PETSC_DLLEXPORT (*PetscHelpPrintf)(MPI_Comm,const char [],...) = PetscHelpPrintfDefault; 55 56 /* ------------------------------------------------------------------------------*/ 57 /* 58 Optional file where all PETSc output from various prints is saved 59 */ 60 FILE *petsc_history = PETSC_NULL; 61 62 #undef __FUNCT__ 63 #define __FUNCT__ "PetscLogOpenHistoryFile" 64 PetscErrorCode PETSC_DLLEXPORT PetscLogOpenHistoryFile(const char filename[],FILE **fd) 65 { 66 PetscErrorCode ierr; 67 PetscMPIInt rank,size; 68 char pfile[PETSC_MAX_PATH_LEN],pname[PETSC_MAX_PATH_LEN],fname[PETSC_MAX_PATH_LEN],date[64]; 69 char version[256]; 70 71 PetscFunctionBegin; 72 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 73 if (!rank) { 74 char arch[10]; 75 ierr = PetscGetArchType(arch,10);CHKERRQ(ierr); 76 ierr = PetscGetDate(date,64);CHKERRQ(ierr); 77 ierr = PetscGetVersion(&version,256);CHKERRQ(ierr); 78 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); 79 if (filename) { 80 ierr = PetscFixFilename(filename,fname);CHKERRQ(ierr); 81 } else { 82 ierr = PetscGetHomeDirectory(pfile,240);CHKERRQ(ierr); 83 ierr = PetscStrcat(pfile,"/.petschistory");CHKERRQ(ierr); 84 ierr = PetscFixFilename(pfile,fname);CHKERRQ(ierr); 85 } 86 87 *fd = fopen(fname,"a"); if (!fd) SETERRQ1(PETSC_ERR_FILE_OPEN,"Cannot open file: %s",fname); 88 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 89 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s %s\n",version,date);CHKERRQ(ierr); 90 ierr = PetscGetProgramName(pname,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 91 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"%s on a %s, %d proc. with options:\n",pname,arch,size);CHKERRQ(ierr); 92 ierr = PetscOptionsPrint(*fd);CHKERRQ(ierr); 93 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 94 fflush(*fd); 95 } 96 PetscFunctionReturn(0); 97 } 98 99 #undef __FUNCT__ 100 #define __FUNCT__ "PetscLogCloseHistoryFile" 101 PetscErrorCode PETSC_DLLEXPORT PetscLogCloseHistoryFile(FILE **fd) 102 { 103 PetscErrorCode ierr; 104 PetscMPIInt rank; 105 char date[64]; 106 107 PetscFunctionBegin; 108 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 109 if (!rank) { 110 ierr = PetscGetDate(date,64);CHKERRQ(ierr); 111 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 112 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"Finished at %s\n",date);CHKERRQ(ierr); 113 ierr = PetscFPrintf(PETSC_COMM_SELF,*fd,"---------------------------------------------------------\n");CHKERRQ(ierr); 114 fflush(*fd); 115 fclose(*fd); 116 } 117 PetscFunctionReturn(0); 118 } 119 120 /* ------------------------------------------------------------------------------*/ 121 122 /* 123 This is ugly and probably belongs somewhere else, but I want to 124 be able to put a true MPI abort error handler with command line args. 125 126 This is so MPI errors in the debugger will leave all the stack 127 frames. The default abort cleans up and exits. 128 */ 129 130 #undef __FUNCT__ 131 #define __FUNCT__ "Petsc_MPI_AbortOnError" 132 void Petsc_MPI_AbortOnError(MPI_Comm *comm,PetscMPIInt *flag) 133 { 134 PetscFunctionBegin; 135 (*PetscErrorPrintf)("MPI error %d\n",(int)*flag); 136 abort(); 137 } 138 139 #undef __FUNCT__ 140 #define __FUNCT__ "Petsc_MPI_DebuggerOnError" 141 void Petsc_MPI_DebuggerOnError(MPI_Comm *comm,PetscMPIInt *flag) 142 { 143 PetscErrorCode ierr; 144 145 PetscFunctionBegin; 146 (*PetscErrorPrintf)("MPI error %d\n",(int)*flag); 147 ierr = PetscAttachDebugger(); 148 if (ierr) { /* hopeless so get out */ 149 MPI_Finalize(); 150 exit(*flag); 151 } 152 } 153 154 #undef __FUNCT__ 155 #define __FUNCT__ "PetscEnd" 156 /*@C 157 PetscEnd - Calls PetscFinalize() and then ends the program. This is useful if one 158 wishes a clean exit somewhere deep in the program. 159 160 Collective on PETSC_COMM_WORLD 161 162 Options Database Keys are the same as for PetscFinalize() 163 164 Level: advanced 165 166 Note: 167 See PetscInitialize() for more general runtime options. 168 169 .seealso: PetscInitialize(), PetscOptionsPrint(), PetscMallocDump(), PetscMPIDump(), PetscFinalize() 170 @*/ 171 PetscErrorCode PETSC_DLLEXPORT PetscEnd(void) 172 { 173 PetscFunctionBegin; 174 PetscFinalize(); 175 exit(0); 176 return 0; 177 } 178 179 PetscTruth PetscOptionsPublish = PETSC_FALSE; 180 EXTERN PetscErrorCode PetscSetUseTrMalloc_Private(void); 181 extern PetscTruth petscsetmallocvisited; 182 static char emacsmachinename[256]; 183 184 PetscErrorCode (*PetscExternalVersionFunction)(MPI_Comm) = 0; 185 PetscErrorCode (*PetscExternalHelpFunction)(MPI_Comm) = 0; 186 187 #undef __FUNCT__ 188 #define __FUNCT__ "PetscSetHelpVersionFunctions" 189 /*@C 190 PetscSetHelpVersionFunctions - Sets functions that print help and version information 191 before the PETSc help and version information is printed. Must call BEFORE PetscInitialize(). 192 This routine enables a "higher-level" package that uses PETSc to print its messages first. 193 194 Input Parameter: 195 + help - the help function (may be PETSC_NULL) 196 - version - the version function (may be PETSc null) 197 198 Level: developer 199 200 Concepts: package help message 201 202 @*/ 203 PetscErrorCode PETSC_DLLEXPORT PetscSetHelpVersionFunctions(PetscErrorCode (*help)(MPI_Comm),PetscErrorCode (*version)(MPI_Comm)) 204 { 205 PetscFunctionBegin; 206 PetscExternalHelpFunction = help; 207 PetscExternalVersionFunction = version; 208 PetscFunctionReturn(0); 209 } 210 211 #undef __FUNCT__ 212 #define __FUNCT__ "PetscOptionsCheckInitial_Private" 213 PetscErrorCode PETSC_DLLEXPORT PetscOptionsCheckInitial_Private(void) 214 { 215 char string[64],mname[PETSC_MAX_PATH_LEN],*f; 216 MPI_Comm comm = PETSC_COMM_WORLD; 217 PetscTruth flg1,flg2,flg3,flag, flgz; 218 PetscErrorCode ierr; 219 PetscInt si; 220 int i; 221 PetscMPIInt rank; 222 char version[256]; 223 224 PetscFunctionBegin; 225 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 226 227 /* 228 Setup the memory management; support for tracing malloc() usage 229 */ 230 ierr = PetscOptionsHasName(PETSC_NULL,"-malloc_log",&flg3);CHKERRQ(ierr); 231 #if defined(PETSC_USE_DEBUG) 232 ierr = PetscOptionsGetTruth(PETSC_NULL,"-malloc",&flg1,&flg2);CHKERRQ(ierr); 233 if ((!flg2 || flg1) && !petscsetmallocvisited) { 234 ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr); 235 } 236 #else 237 ierr = PetscOptionsHasName(PETSC_NULL,"-malloc_dump",&flg1);CHKERRQ(ierr); 238 ierr = PetscOptionsHasName(PETSC_NULL,"-malloc",&flg2);CHKERRQ(ierr); 239 if (flg1 || flg2 || flg3) {ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr);} 240 #endif 241 if (flg3) { 242 ierr = PetscMallocSetDumpLog();CHKERRQ(ierr); 243 } 244 ierr = PetscOptionsHasName(PETSC_NULL,"-malloc_debug",&flg1);CHKERRQ(ierr); 245 if (flg1) { 246 ierr = PetscSetUseTrMalloc_Private();CHKERRQ(ierr); 247 ierr = PetscMallocDebug(PETSC_TRUE);CHKERRQ(ierr); 248 } 249 250 ierr = PetscOptionsHasName(PETSC_NULL,"-malloc_info",&flg1);CHKERRQ(ierr); 251 if (!flg1) { 252 ierr = PetscOptionsHasName(PETSC_NULL,"-memory_info",&flg1);CHKERRQ(ierr); 253 } 254 if (flg1) { 255 ierr = PetscMemorySetGetMaximumUsage();CHKERRQ(ierr); 256 } 257 258 /* 259 Set the display variable for graphics 260 */ 261 ierr = PetscSetDisplay();CHKERRQ(ierr); 262 263 /* 264 Print the PETSc version information 265 */ 266 ierr = PetscOptionsHasName(PETSC_NULL,"-v",&flg1);CHKERRQ(ierr); 267 ierr = PetscOptionsHasName(PETSC_NULL,"-version",&flg2);CHKERRQ(ierr); 268 ierr = PetscOptionsHasName(PETSC_NULL,"-help",&flg3);CHKERRQ(ierr); 269 if (flg1 || flg2 || flg3){ 270 271 /* 272 Print "higher-level" package version message 273 */ 274 if (PetscExternalVersionFunction) { 275 ierr = (*PetscExternalVersionFunction)(comm);CHKERRQ(ierr); 276 } 277 278 ierr = PetscGetVersion(&version,256);CHKERRQ(ierr); 279 ierr = (*PetscHelpPrintf)(comm,"--------------------------------------------\ 280 ------------------------------\n");CHKERRQ(ierr); 281 ierr = (*PetscHelpPrintf)(comm,"%s\n",version);CHKERRQ(ierr); 282 ierr = (*PetscHelpPrintf)(comm,"%s",PETSC_AUTHOR_INFO);CHKERRQ(ierr); 283 ierr = (*PetscHelpPrintf)(comm,"See docs/copyright.html for copyright information\n");CHKERRQ(ierr); 284 ierr = (*PetscHelpPrintf)(comm,"See docs/changes/index.html for recent updates.\n");CHKERRQ(ierr); 285 ierr = (*PetscHelpPrintf)(comm,"See docs/troubleshooting.html for problems.\n");CHKERRQ(ierr); 286 ierr = (*PetscHelpPrintf)(comm,"See docs/manualpages/index.html for help. \n");CHKERRQ(ierr); 287 ierr = (*PetscHelpPrintf)(comm,"Libraries linked from %s\n",PETSC_LIB_DIR);CHKERRQ(ierr); 288 ierr = (*PetscHelpPrintf)(comm,"--------------------------------------------\ 289 ------------------------------\n");CHKERRQ(ierr); 290 } 291 292 /* 293 Print "higher-level" package help message 294 */ 295 if (flg3){ 296 if (PetscExternalHelpFunction) { 297 ierr = (*PetscExternalHelpFunction)(comm);CHKERRQ(ierr); 298 } 299 } 300 301 /* 302 Setup the error handling 303 */ 304 ierr = PetscOptionsHasName(PETSC_NULL,"-fp_trap",&flg1);CHKERRQ(ierr); 305 if (flg1) { ierr = PetscSetFPTrap(PETSC_FP_TRAP_ON);CHKERRQ(ierr); } 306 ierr = PetscOptionsHasName(PETSC_NULL,"-on_error_abort",&flg1);CHKERRQ(ierr); 307 if (flg1) { ierr = PetscPushErrorHandler(PetscAbortErrorHandler,0);CHKERRQ(ierr)} 308 ierr = PetscOptionsHasName(PETSC_NULL,"-on_error_mpiabort",&flg1);CHKERRQ(ierr); 309 if (flg1) { ierr = PetscPushErrorHandler(PetscMPIAbortErrorHandler,0);CHKERRQ(ierr)} 310 ierr = PetscOptionsHasName(PETSC_NULL,"-mpi_return_on_error",&flg1);CHKERRQ(ierr); 311 if (flg1) { 312 ierr = MPI_Errhandler_set(comm,MPI_ERRORS_RETURN);CHKERRQ(ierr); 313 } 314 ierr = PetscOptionsHasName(PETSC_NULL,"-error_output_none",&flg1);CHKERRQ(ierr); 315 if (flg1) { 316 PetscErrorPrintf = PetscErrorPrintfNone; 317 } 318 ierr = PetscOptionsHasName(PETSC_NULL,"-no_signal_handler",&flg1);CHKERRQ(ierr); 319 if (!flg1) { ierr = PetscPushSignalHandler(PetscDefaultSignalHandler,(void*)0);CHKERRQ(ierr) } 320 321 /* 322 Setup debugger information 323 */ 324 ierr = PetscSetDefaultDebugger();CHKERRQ(ierr); 325 ierr = PetscOptionsGetString(PETSC_NULL,"-on_error_attach_debugger",string,64,&flg1);CHKERRQ(ierr); 326 if (flg1) { 327 MPI_Errhandler err_handler; 328 329 ierr = PetscSetDebuggerFromString(string);CHKERRQ(ierr); 330 ierr = MPI_Errhandler_create((MPI_Handler_function*)Petsc_MPI_DebuggerOnError,&err_handler);CHKERRQ(ierr); 331 ierr = MPI_Errhandler_set(comm,err_handler);CHKERRQ(ierr); 332 ierr = PetscPushErrorHandler(PetscAttachDebuggerErrorHandler,0);CHKERRQ(ierr); 333 } 334 ierr = PetscOptionsGetString(PETSC_NULL,"-start_in_debugger",string,64,&flg1);CHKERRQ(ierr); 335 ierr = PetscOptionsGetString(PETSC_NULL,"-stop_for_debugger",string,64,&flg2);CHKERRQ(ierr); 336 if (flg1 || flg2) { 337 PetscMPIInt size; 338 PetscInt lsize,*nodes; 339 MPI_Errhandler err_handler; 340 /* 341 we have to make sure that all processors have opened 342 connections to all other processors, otherwise once the 343 debugger has stated it is likely to receive a SIGUSR1 344 and kill the program. 345 */ 346 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); 347 if (size > 2) { 348 PetscMPIInt dummy; 349 MPI_Status status; 350 for (i=0; i<size; i++) { 351 if (rank != i) { 352 ierr = MPI_Send(&dummy,1,MPI_INT,i,109,PETSC_COMM_WORLD);CHKERRQ(ierr); 353 } 354 } 355 for (i=0; i<size; i++) { 356 if (rank != i) { 357 ierr = MPI_Recv(&dummy,1,MPI_INT,i,109,PETSC_COMM_WORLD,&status);CHKERRQ(ierr); 358 } 359 } 360 } 361 /* check if this processor node should be in debugger */ 362 ierr = PetscMalloc(size*sizeof(PetscInt),&nodes);CHKERRQ(ierr); 363 lsize = size; 364 ierr = PetscOptionsGetIntArray(PETSC_NULL,"-debugger_nodes",nodes,&lsize,&flag);CHKERRQ(ierr); 365 if (flag) { 366 for (i=0; i<lsize; i++) { 367 if (nodes[i] == rank) { flag = PETSC_FALSE; break; } 368 } 369 } 370 if (!flag) { 371 ierr = PetscSetDebuggerFromString(string);CHKERRQ(ierr); 372 ierr = PetscPushErrorHandler(PetscAbortErrorHandler,0);CHKERRQ(ierr); 373 if (flg1) { 374 ierr = PetscAttachDebugger();CHKERRQ(ierr); 375 } else { 376 ierr = PetscStopForDebugger();CHKERRQ(ierr); 377 } 378 ierr = MPI_Errhandler_create((MPI_Handler_function*)Petsc_MPI_AbortOnError,&err_handler);CHKERRQ(ierr); 379 ierr = MPI_Errhandler_set(comm,err_handler);CHKERRQ(ierr); 380 } 381 ierr = PetscFree(nodes);CHKERRQ(ierr); 382 } 383 384 ierr = PetscOptionsGetString(PETSC_NULL,"-on_error_emacs",emacsmachinename,128,&flg1);CHKERRQ(ierr); 385 if (flg1 && !rank) {ierr = PetscPushErrorHandler(PetscEmacsClientErrorHandler,emacsmachinename);CHKERRQ(ierr)} 386 387 ierr=PetscOptionsHasName(PETSC_NULL,"-zope", &flgz); CHKERRQ(ierr); 388 if(flgz){ 389 extern int PETSC_SOCKFD; 390 extern int PETSC_LISTENFD; 391 extern int PETSC_LISTEN_CHECK; 392 char hostname[256]; 393 int remoteport = 9999; 394 int listenport = 9998; 395 ierr=PetscOptionsGetString(PETSC_NULL, "-zope", hostname, 256, &flgz);CHKERRQ(ierr); 396 if(!hostname[0]){ 397 ierr=PetscGetHostName(hostname,256); CHKERRQ(ierr);} 398 PETSC_SOCKFD = PetscOpenSocket(hostname, remoteport); 399 PETSC_LISTEN_CHECK = 1; 400 PETSC_LISTENFD = PetscSocketListen(hostname, listenport); 401 PETSC_STDOUT = fdopen(PETSC_SOCKFD, "w"); 402 fprintf(PETSC_STDOUT, "<<<start>>>"); 403 } 404 405 /* 406 Setup profiling and logging 407 */ 408 #if defined (PETSC_USE_INFO) 409 ierr = PetscOptionsHasName(PETSC_NULL,"-info",&flg1);CHKERRQ(ierr); 410 if (flg1) { 411 char logname[PETSC_MAX_PATH_LEN]; logname[0] = 0; 412 ierr = PetscOptionsGetString(PETSC_NULL,"-info",logname,250,&flg1);CHKERRQ(ierr); 413 if (logname[0]) { 414 PetscInfoAllow(PETSC_TRUE,logname); 415 } else { 416 PetscInfoAllow(PETSC_TRUE,PETSC_NULL); 417 } 418 } 419 #endif 420 #if defined(PETSC_USE_LOG) 421 mname[0] = 0; 422 ierr = PetscOptionsGetString(PETSC_NULL,"-log_history",mname,PETSC_MAX_PATH_LEN,&flg1);CHKERRQ(ierr); 423 if (flg1) { 424 if (mname[0]) { 425 ierr = PetscLogOpenHistoryFile(mname,&petsc_history);CHKERRQ(ierr); 426 } else { 427 ierr = PetscLogOpenHistoryFile(0,&petsc_history);CHKERRQ(ierr); 428 } 429 } 430 #if defined(PETSC_HAVE_MPE) 431 ierr = PetscOptionsHasName(PETSC_NULL,"-log_mpe",&flg1);CHKERRQ(ierr); 432 if (flg1) PetscLogMPEBegin(); 433 #endif 434 ierr = PetscOptionsHasName(PETSC_NULL,"-log_all",&flg1);CHKERRQ(ierr); 435 ierr = PetscOptionsHasName(PETSC_NULL,"-log",&flg2);CHKERRQ(ierr); 436 ierr = PetscOptionsHasName(PETSC_NULL,"-log_summary",&flg3);CHKERRQ(ierr); 437 if (flg1) { ierr = PetscLogAllBegin();CHKERRQ(ierr); } 438 else if (flg2 || flg3) { ierr = PetscLogBegin();CHKERRQ(ierr);} 439 440 ierr = PetscOptionsGetString(PETSC_NULL,"-log_trace",mname,250,&flg1);CHKERRQ(ierr); 441 if (flg1) { 442 char name[PETSC_MAX_PATH_LEN],fname[PETSC_MAX_PATH_LEN]; 443 FILE *file; 444 if (mname[0]) { 445 sprintf(name,"%s.%d",mname,rank); 446 ierr = PetscFixFilename(name,fname);CHKERRQ(ierr); 447 file = fopen(fname,"w"); 448 if (!file) { 449 SETERRQ1(PETSC_ERR_FILE_OPEN,"Unable to open trace file: %s",fname); 450 } 451 } else { 452 file = PETSC_STDOUT; 453 } 454 ierr = PetscLogTraceBegin(file);CHKERRQ(ierr); 455 } 456 #endif 457 458 /* 459 Setup building of stack frames for all function calls 460 */ 461 #if defined(PETSC_USE_DEBUG) 462 ierr = PetscStackCreate();CHKERRQ(ierr); 463 #endif 464 465 ierr = PetscOptionsHasName(PETSC_NULL,"-options_gui",&PetscOptionsPublish);CHKERRQ(ierr); 466 467 /* 468 Print basic help message 469 */ 470 ierr = PetscOptionsHasName(PETSC_NULL,"-help",&flg1);CHKERRQ(ierr); 471 if (flg1) { 472 ierr = (*PetscHelpPrintf)(comm,"Options for all PETSc programs:\n");CHKERRQ(ierr); 473 ierr = (*PetscHelpPrintf)(comm," -on_error_abort: cause an abort when an error is");CHKERRQ(ierr); 474 ierr = (*PetscHelpPrintf)(comm," detected. Useful \n only when run in the debugger\n");CHKERRQ(ierr); 475 ierr = (*PetscHelpPrintf)(comm," -on_error_attach_debugger [gdb,dbx,xxgdb,ups,noxterm]\n");CHKERRQ(ierr); 476 ierr = (*PetscHelpPrintf)(comm," start the debugger in new xterm\n");CHKERRQ(ierr); 477 ierr = (*PetscHelpPrintf)(comm," unless noxterm is given\n");CHKERRQ(ierr); 478 ierr = (*PetscHelpPrintf)(comm," -start_in_debugger [gdb,dbx,xxgdb,ups,noxterm]\n");CHKERRQ(ierr); 479 ierr = (*PetscHelpPrintf)(comm," start all processes in the debugger\n");CHKERRQ(ierr); 480 ierr = (*PetscHelpPrintf)(comm," -on_error_emacs <machinename>\n");CHKERRQ(ierr); 481 ierr = (*PetscHelpPrintf)(comm," emacs jumps to error file\n");CHKERRQ(ierr); 482 ierr = (*PetscHelpPrintf)(comm," -debugger_nodes [n1,n2,..] Nodes to start in debugger\n");CHKERRQ(ierr); 483 ierr = (*PetscHelpPrintf)(comm," -debugger_pause [m] : delay (in seconds) to attach debugger\n");CHKERRQ(ierr); 484 ierr = (*PetscHelpPrintf)(comm," -stop_for_debugger : prints message on how to attach debugger manually\n");CHKERRQ(ierr); 485 ierr = (*PetscHelpPrintf)(comm," waits the delay for you to attach\n");CHKERRQ(ierr); 486 ierr = (*PetscHelpPrintf)(comm," -display display: Location where graphics and debuggers are displayed\n");CHKERRQ(ierr); 487 ierr = (*PetscHelpPrintf)(comm," -no_signal_handler: do not trap error signals\n");CHKERRQ(ierr); 488 ierr = (*PetscHelpPrintf)(comm," -mpi_return_on_error: MPI returns error code, rather than abort on internal error\n");CHKERRQ(ierr); 489 ierr = (*PetscHelpPrintf)(comm," -fp_trap: stop on floating point exceptions\n");CHKERRQ(ierr); 490 ierr = (*PetscHelpPrintf)(comm," note on IBM RS6000 this slows run greatly\n");CHKERRQ(ierr); 491 ierr = (*PetscHelpPrintf)(comm," -malloc_dump <optional filename>: dump list of unfreed memory at conclusion\n");CHKERRQ(ierr); 492 ierr = (*PetscHelpPrintf)(comm," -malloc: use our error checking malloc\n");CHKERRQ(ierr); 493 ierr = (*PetscHelpPrintf)(comm," -malloc no: don't use error checking malloc\n");CHKERRQ(ierr); 494 ierr = (*PetscHelpPrintf)(comm," -mallocinfo: prints total memory usage\n");CHKERRQ(ierr); 495 ierr = (*PetscHelpPrintf)(comm," -malloc_debug: enables extended checking for memory corruption\n");CHKERRQ(ierr); 496 ierr = (*PetscHelpPrintf)(comm," -options_table: dump list of options inputted\n");CHKERRQ(ierr); 497 ierr = (*PetscHelpPrintf)(comm," -options_left: dump list of unused options\n");CHKERRQ(ierr); 498 ierr = (*PetscHelpPrintf)(comm," -options_left no: don't dump list of unused options\n");CHKERRQ(ierr); 499 ierr = (*PetscHelpPrintf)(comm," -tmp tmpdir: alternative /tmp directory\n");CHKERRQ(ierr); 500 ierr = (*PetscHelpPrintf)(comm," -shared_tmp: tmp directory is shared by all processors\n");CHKERRQ(ierr); 501 ierr = (*PetscHelpPrintf)(comm," -not_shared_tmp: each processor has separate tmp directory\n");CHKERRQ(ierr); 502 ierr = (*PetscHelpPrintf)(comm," -memory_info: print memory usage at end of run\n");CHKERRQ(ierr); 503 #if defined(PETSC_USE_LOG) 504 ierr = (*PetscHelpPrintf)(comm," -get_total_flops: total flops over all processors\n");CHKERRQ(ierr); 505 ierr = (*PetscHelpPrintf)(comm," -log[_all _summary]: logging objects and events\n");CHKERRQ(ierr); 506 ierr = (*PetscHelpPrintf)(comm," -log_trace [filename]: prints trace of all PETSc calls\n");CHKERRQ(ierr); 507 #if defined(PETSC_HAVE_MPE) 508 ierr = (*PetscHelpPrintf)(comm," -log_mpe: Also create logfile viewable through upshot\n");CHKERRQ(ierr); 509 #endif 510 ierr = (*PetscHelpPrintf)(comm," -info <optional filename>: print informative messages about the calculations\n");CHKERRQ(ierr); 511 #endif 512 ierr = (*PetscHelpPrintf)(comm," -v: prints PETSc version number and release date\n");CHKERRQ(ierr); 513 ierr = (*PetscHelpPrintf)(comm," -options_file <file>: reads options from file\n");CHKERRQ(ierr); 514 ierr = (*PetscHelpPrintf)(comm," -petsc_sleep n: sleeps n seconds before running program\n");CHKERRQ(ierr); 515 ierr = (*PetscHelpPrintf)(comm,"-----------------------------------------------\n");CHKERRQ(ierr); 516 } 517 518 ierr = PetscOptionsGetInt(PETSC_NULL,"-petsc_sleep",&si,&flg1);CHKERRQ(ierr); 519 if (flg1) { 520 ierr = PetscSleep(si);CHKERRQ(ierr); 521 } 522 523 ierr = PetscOptionsGetString(PETSC_NULL,"-info_exclude",mname,PETSC_MAX_PATH_LEN,&flg1);CHKERRQ(ierr); 524 ierr = PetscStrstr(mname,"null",&f);CHKERRQ(ierr); 525 if (f) { 526 ierr = PetscInfoDeactivateClass(PETSC_NULL);CHKERRQ(ierr); 527 } 528 529 PetscFunctionReturn(0); 530 } 531 532 533