xref: /petsc/src/sys/tutorials/ex1.c (revision 327415f76d85372a4417cf1aaa14db707d4d6c04)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Introductory example that illustrates printing.\n\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscsys.h>
5c4762a1bSJed Brown int main(int argc,char **argv)
6c4762a1bSJed Brown {
7c4762a1bSJed Brown   PetscMPIInt    rank,size;
8c4762a1bSJed Brown 
9c4762a1bSJed Brown   /*
10c87e60e8SJose E. Roman     Every PETSc program should begin with the PetscInitialize() routine.
11c4762a1bSJed Brown     argc, argv - These command line arguments are taken to extract the options
12c4762a1bSJed Brown                  supplied to PETSc and options supplied to MPI.
13c4762a1bSJed Brown     help       - When PETSc executable is invoked with the option -help,
14c4762a1bSJed Brown                  it prints the various options that can be applied at
15c87e60e8SJose E. Roman                  runtime.  The user can use the "help" variable to place
16c4762a1bSJed Brown                  additional help messages in this printout.
17c4762a1bSJed Brown   */
18*327415f7SBarry Smith   PetscFunctionBeginUser;
199566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc,&argv,(char*)0,help));
20c4762a1bSJed Brown 
21c4762a1bSJed Brown   /*
22c4762a1bSJed Brown      The following MPI calls return the number of processes
23c4762a1bSJed Brown      being used and the rank of this process in the group.
24c4762a1bSJed Brown    */
259566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size));
269566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank));
27c4762a1bSJed Brown 
28c4762a1bSJed Brown   /*
29c4762a1bSJed Brown      Here we would like to print only one message that represents
30c4762a1bSJed Brown      all the processes in the group.  We use PetscPrintf() with the
31c4762a1bSJed Brown      communicator PETSC_COMM_WORLD.  Thus, only one message is
32c4762a1bSJed Brown      printed representng PETSC_COMM_WORLD, i.e., all the processors.
33c4762a1bSJed Brown   */
349566063dSJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d, rank = %d\n",size,rank));
35c4762a1bSJed Brown 
36c4762a1bSJed Brown   /*
37c4762a1bSJed Brown     Here a barrier is used to separate the two program states.
38c4762a1bSJed Brown   */
399566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Barrier(PETSC_COMM_WORLD));
40c4762a1bSJed Brown 
41c4762a1bSJed Brown   /*
42c4762a1bSJed Brown     Here we simply use PetscPrintf() with the communicator PETSC_COMM_SELF,
43c4762a1bSJed Brown     where each process is considered separately and prints independently
44c4762a1bSJed Brown     to the screen.  Thus, the output from different processes does not
45c4762a1bSJed Brown     appear in any particular order.
46c4762a1bSJed Brown   */
47c4762a1bSJed Brown 
489566063dSJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_SELF,"[%d] Jumbled Hello World\n",rank));
49c4762a1bSJed Brown 
50c4762a1bSJed Brown   /*
51c4762a1bSJed Brown      Always call PetscFinalize() before exiting a program.  This routine
52c4762a1bSJed Brown        - finalizes the PETSc libraries as well as MPI
53c4762a1bSJed Brown        - provides summary and diagnostic information if certain runtime
54c4762a1bSJed Brown          options are chosen (e.g., -log_view).  See PetscFinalize()
55c4762a1bSJed Brown      manpage for more information.
56c4762a1bSJed Brown   */
579566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
58b122ec5aSJacob Faibussowitsch   return 0;
59c4762a1bSJed Brown }
60c4762a1bSJed Brown 
61c4762a1bSJed Brown /*TEST
62c4762a1bSJed Brown 
63c4762a1bSJed Brown    test:
64c4762a1bSJed Brown 
65c4762a1bSJed Brown TEST*/
66