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