xref: /petsc/src/sys/tutorials/ex2f.F90 (revision 6a98f8dc3f2c9149905a87dc2e9d0fedaf64e09a)
1! Synchronized printing: Fortran Example
2
3
4program main
5#include <petsc/finclude/petscsys.h>
6      use petscsys
7
8      implicit none
9      PetscErrorCode    :: ierr
10      PetscMPIInt       :: myRank,mySize
11      character(len=80) :: 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