# PetscInitialize

Initializes the PETSc database and MPI. PetscInitialize() calls MPI_Init() if that has yet to be called, so this routine should always be called near the beginning of your program -- usually the very first line!

### Synopsis

    #include "petsc.h"
    PetscErrorCode  PetscInitialize(int *argc,char ***args,const char file[],const char help[])

Collective on MPI_COMM_WORLD or PETSC_COMM_WORLD if it has been set

### Input Parameters

| argc | - count of number of command line arguments
| args | - the command line arguments
| file | - [optional] PETSc database file, also checks ~username/.petscrc and .petscrc use PETSC_NULL to not check for code specific file. Use -skip_petscrc in the code specific file to skip the .petscrc files
| help | - [optional] Help message to print, use PETSC_NULL for no message

If you wish PETSc to run on a subcommunicator of MPI_COMM_WORLD, create that communicator first and assign it to PETSC_COMM_WORLD BEFORE calling PetscInitialize()

### Options Database Keys

| -start_in_debugger [noxterm,dbx,xdb,gdb,...] | - Starts program in debugger
| -on_error_attach_debugger [noxterm,dbx,xdb,gdb,...] | - Starts debugger when error detected
| -on_error_emacs <machinename> causes emacsclient to jump to error file | - . -on_error_abort calls abort() when error detected (no traceback)
| -on_error_mpiabort calls MPI_abort() when error detected | - . -error_output_stderr prints error messages to stderr instead of the default stdout
| -error_output_none does not print the error messages (but handles errors in the same way as if this was not called) | - . -debugger_nodes [node1,node2,...] - Indicates nodes to start in debugger
| -debugger_pause [sleeptime] (in seconds) | - Pauses debugger
| -stop_for_debugger | - Print message on how to attach debugger manually to process and wait (-debugger_pause) seconds for attachment
| -malloc | - Indicates use of PETSc error-checking malloc (on by default for debug version of libraries)
| -malloc no | - Indicates not to use error-checking malloc
| -malloc_debug | - check for memory corruption at EVERY malloc or free
| -fp_trap | - Stops on floating point exceptions (Note that on the IBM RS6000 this slows code by at least a factor of 10.)
| -no_signal_handler | - Indicates not to trap error signals
| -shared_tmp | - indicates /tmp directory is shared by all processors
| -not_shared_tmp | - each processor has own /tmp
| -tmp | - alternative name of /tmp directory
| -get_total_flops | - returns total flops done by all processors
| -memory_info | - Print memory usage at end of run

### Options Database Keys for Profiling

See the Profiling chapter of the users manual for details.

| -log_trace [filename] | - Print traces of all PETSc calls to the screen (useful to determine where a program hangs without running in the debugger). See PetscLogTraceBegin().
| -info <optional filename> | - Prints verbose information to the screen
| -info_exclude <null,vec,mat,pc,ksp,snes,ts> | - Excludes some of the verbose messages

### Environmental Variables

| PETSC_TMP | - alternative tmp directory
| PETSC_SHARED_TMP | - tmp is shared by all processes
| PETSC_NOT_SHARED_TMP | - each process has its own private tmp
| PETSC_VIEWER_SOCKET_PORT | - socket number to use for socket viewer
| PETSC_VIEWER_SOCKET_MACHINE | - machine to use for socket viewer to connect to

### C++ variants

| PetscInitialize(int *argc,char ***args) |  | -> |  | PetscInitialize(argc,args,PETSC_NULL,PETSC_NULL)

### Notes

If for some reason you must call MPI_Init() separately, call it before PetscInitialize().

### Fortran Version

In Fortran this routine has the format

          call PetscInitialize(file,ierr)

| ierr | - error return code
| file | - [optional] PETSc database file, also checks ~username/.petscrc and .petscrc use PETSC_CHARACTER_NULL to not check for code specific file. Use -skip_petscrc in the code specific file to skip the .petscrc files

### Important Fortran Note

In Fortran, you MUST use PETSC_NULL_CHARACTER to indicate a null character string; you CANNOT just use PETSC_NULL as in the C version. See the users manual for details.

### See Also

PetscFinalize(), PetscInitializeFortran(), PetscGetArgs()

Level:beginner
Location:src/sys/objects/pinit.c
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages

### Examples

src/sys/viewer/examples/tutorials/ex1f90.F90.html
src/sys/examples/tutorials/ex1.c.html
src/sys/examples/tutorials/ex2.c.html
src/sys/examples/tutorials/ex3.c.html
src/sys/examples/tutorials/ex5.c.html
src/sys/examples/tutorials/ex3f.F.html
src/sys/examples/tutorials/ex5f90.F90.html
src/vec/vec/examples/tutorials/ex1.c.html
src/vec/vec/examples/tutorials/ex1e.c.html
src/vec/vec/examples/tutorials/ex2.c.html
src/vec/vec/examples/tutorials/ex3.c.html