xref: /petsc/src/sys/tutorials/ex4f90.F90 (revision 749c190bad46ba447444c173d8c7a4080c70750e)
1c4762a1bSJed Brown!
2c4762a1bSJed Brown!     This introductory example illustrates running PETSc on a subset
3c4762a1bSJed Brown!     of processes
4c4762a1bSJed Brown!
5c4762a1bSJed Brown! -----------------------------------------------------------------------
6c4762a1bSJed Brown#include <petsc/finclude/petscsys.h>
7*c5e229c2SMartin Diehlprogram main
8c4762a1bSJed Brown  use petscsys
9c4762a1bSJed Brown  implicit none
10c4762a1bSJed Brown
11c4762a1bSJed Brown  PetscErrorCode ierr
124a713726SSatish Balay  PetscMPIInt rank, size, zero, two
13c4762a1bSJed Brown
14c4762a1bSJed Brown!     We must call MPI_Init() first, making us, not PETSc, responsible
15c4762a1bSJed Brown!     for MPI
16c4762a1bSJed Brown
17f8402805SBarry Smith  PetscCallMPIA(MPI_Init(ierr))
18c4762a1bSJed Brown
19c4762a1bSJed Brown!     We can now change the communicator universe for PETSc
20c4762a1bSJed Brown
214a713726SSatish Balay  zero = 0
22c4762a1bSJed Brown  two = 2
23f8402805SBarry Smith  PetscCallMPIA(MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr))
24f8402805SBarry Smith  PetscCallMPIA(MPI_Comm_split(MPI_COMM_WORLD, mod(rank, two), zero, PETSC_COMM_WORLD, ierr))
25c4762a1bSJed Brown
26c4762a1bSJed Brown!     Every PETSc routine should begin with the PetscInitialize()
27c4762a1bSJed Brown!     routine.
28c4762a1bSJed Brown
29d8606c27SBarry Smith  PetscCallA(PetscInitialize(ierr))
30c4762a1bSJed Brown
31c4762a1bSJed Brown!     The following MPI calls return the number of processes being used
32c4762a1bSJed Brown!     and the rank of this process in the group.
33c4762a1bSJed Brown
34f8402805SBarry Smith  PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size, ierr))
35f8402805SBarry Smith  PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr))
36c4762a1bSJed Brown
37c4762a1bSJed Brown!     Here we would like to print only one message that represents all
38c4762a1bSJed Brown!     the processes in the group.
394820e4eaSBarry Smith  if (rank == 0) write (6, 100) size, rank
40c4762a1bSJed Brown100 format('No of Procs = ', i4, ' rank = ', i4)
41c4762a1bSJed Brown
42c4762a1bSJed Brown!     Always call PetscFinalize() before exiting a program.  This
43c4762a1bSJed Brown!     routine - finalizes the PETSc libraries as well as MPI - provides
44c4762a1bSJed Brown!     summary and diagnostic information if certain runtime options are
45c4762a1bSJed Brown!     chosen (e.g., -log_view).  See PetscFinalize() manpage for more
46c4762a1bSJed Brown!     information.
47c4762a1bSJed Brown
48f8402805SBarry Smith  PetscCallA(PetscFinalize(ierr))
49f8402805SBarry Smith  PetscCallMPIA(MPI_Comm_free(PETSC_COMM_WORLD, ierr))
50c4762a1bSJed Brown
51c4762a1bSJed Brown!     Since we initialized MPI, we must call MPI_Finalize()
52c4762a1bSJed Brown
53f8402805SBarry Smith  PetscCallMPIA(MPI_Finalize(ierr))
54c4762a1bSJed Brownend
55c4762a1bSJed Brown
56c4762a1bSJed Brown!
57c4762a1bSJed Brown!/*TEST
58c4762a1bSJed Brown!
59c4762a1bSJed Brown!   test:
60c4762a1bSJed Brown!
61c4762a1bSJed Brown!TEST*/
62