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