xref: /petsc/src/sys/tutorials/ex4f90.F90 (revision 53efea5c680dffccb0b7659435e1dc1aa9e95c12)
1!
2!     This introductory example illustrates running PETSc on a subset
3!     of processes
4!
5!/*T
6!   Concepts: introduction to PETSc;
7!   Concepts: process^subset set PETSC_COMM_WORLD
8!   Processors: 2
9!T*/
10! -----------------------------------------------------------------------
11
12      program main
13#include <petsc/finclude/petscsys.h>
14      use petscsys
15      implicit none
16
17      PetscErrorCode ierr
18      PetscMPIInt rank, size, two
19
20!     We must call MPI_Init() first, making us, not PETSc, responsible
21!     for MPI
22
23      call MPI_Init(ierr)
24      if (ierr .ne. 0) then
25         print*,'Unable to initialize MPI'
26         stop
27      endif
28
29!     We can now change the communicator universe for PETSc
30
31      two = 2
32      call MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr)
33      call MPI_Comm_split(MPI_COMM_WORLD,mod(rank,two),0,PETSC_COMM_WORLD,ierr)
34
35!     Every PETSc routine should begin with the PetscInitialize()
36!     routine.
37
38      call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
39      if (ierr .ne. 0) then
40        print*,'Unable to initialize PETSc'
41        stop
42      endif
43
44!     The following MPI calls return the number of processes being used
45!     and the rank of this process in the group.
46
47      call MPI_Comm_size(PETSC_COMM_WORLD,size,ierr);CHKERRA(ierr)
48      call MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr);CHKERRA(ierr)
49
50
51!     Here we would like to print only one message that represents all
52!     the processes in the group.
53      if (rank .eq. 0) write(6,100) size,rank
54 100  format('No of Procs = ',i4,' rank = ',i4)
55
56!     Always call PetscFinalize() before exiting a program.  This
57!     routine - finalizes the PETSc libraries as well as MPI - provides
58!     summary and diagnostic information if certain runtime options are
59!     chosen (e.g., -log_view).  See PetscFinalize() manpage for more
60!     information.
61
62      call PetscFinalize(ierr)
63      call MPI_Comm_free(PETSC_COMM_WORLD,ierr)
64
65!     Since we initialized MPI, we must call MPI_Finalize()
66
67      call  MPI_Finalize(ierr)
68      end
69
70!
71!/*TEST
72!
73!   test:
74!
75!TEST*/
76