Actual source code: ex2f.F90
petsc-3.11.4 2019-09-28
1: ! Synchronized printing: Fortran Example
2:
3:
4: program 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:
55: end program main