# 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"
    int 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, defaults to ~username/.petscrc (use PETSC_NULL for default)
| help | - [optional] Help message to print, use PETSC_NULL for no message

### 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 | - . -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
| -trmalloc | - Indicates use of PETSc error-checking malloc
| -trmalloc no | - Indicates not to use error-checking malloc
| -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
| -get_resident_set_size | - 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().
| -log_info <optional filename> | - Prints verbose information to the screen
| -log_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

### 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 name, defaults to ~username/.petscrc (use PETSC_NULL_CHARACTER for default)

### 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(), PetescGetArgs()

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

### Examples

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/ex4.c.html
src/sys/examples/tutorials/ex3f.F.html
src/vec/is/examples/tutorials/ex1.c.html
src/vec/is/examples/tutorials/ex2.c.html
src/vec/is/examples/tutorials/ex3.c.html
src/vec/is/examples/tutorials/ex4.c.html
src/vec/is/examples/tutorials/ex1f.F.html
src/vec/is/examples/tutorials/ex2f.F.html