xref: /petsc/src/sys/tutorials/ex2f.F90 (revision 4e278199b78715991f5c71ebbd945c1489263e6c)
1! Synchronized printing: Fortran Example
2
3program main
4#include <petsc/finclude/petscsys.h>
5      use petscmpi  ! or mpi or mpi_f08
6      use petscsys
7
8      implicit none
9      PetscErrorCode                    :: ierr
10      PetscMPIInt                       :: myRank,mySize
11      character(len=PETSC_MAX_PATH_LEN) :: outputString
12
13      ! Every PETSc program should begin with the PetscInitialize() routine.
14
15      call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
16      if (ierr /= 0) then
17        write(6,*) 'Unable to initialize PETSc'
18        stop
19      endif
20
21      ! The following MPI calls return the number of processes
22      ! being used and the rank of this process in the group
23
24      call MPI_Comm_size(MPI_COMM_WORLD,mySize,ierr)
25      CHKERRA(ierr)
26      call MPI_Comm_rank(MPI_COMM_WORLD,myRank,ierr)
27      CHKERRA(ierr)
28
29      ! Here we would like to print only one message that represents
30      ! all the processes in the group
31      write(outputString,*) 'No of Processors = ', mysize, ', rank = ',myRank,'\n'
32      call PetscPrintf(PETSC_COMM_WORLD,outputString,ierr)
33      CHKERRA(ierr)
34
35      write(outputString,*) myRank,'Synchronized Hello World\n'
36      call PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)
37      CHKERRA(ierr)
38      write(outputString,*) myRank,'Synchronized Hello World - Part II\n'
39      call PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)
40      CHKERRA(ierr)
41      call PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT,ierr)
42      CHKERRA(ierr)
43
44      ! Here a barrier is used to separate the two program states.
45      call MPI_Barrier(PETSC_COMM_WORLD,ierr)
46      CHKERRA(ierr)
47
48      write(outputString,*) myRank,'Jumbled Hello World\n'
49      call PetscPrintf(PETSC_COMM_SELF,outputString,ierr)
50      CHKERRA(ierr)
51
52      call PetscFinalize(ierr)
53      CHKERRA(ierr)
54
55end program main
56
57!/*TEST
58!
59!   test:
60!
61!TEST*/
62