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 :: rank,size 11 character(len=PETSC_MAX_PATH_LEN) :: outputString 12 13 ! Every PETSc program should begin with the PetscInitialize() routine. 14 15 PetscCallA(PetscInitialize(ierr)) 16 17 ! The following MPI calls return the number of processes 18 ! being used and the rank of this process in the group 19 20 PetscCallMPIA(MPI_Comm_size(MPI_COMM_WORLD,size,ierr)) 21 PetscCallMPIA(MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr)) 22 23 ! Here we would like to print only one message that represents 24 ! all the processes in the group 25 write(outputString,*) 'No of Processors = ', size, ', rank = ',rank,'\n' 26 PetscCallA(PetscPrintf(PETSC_COMM_WORLD,outputString,ierr)) 27 28 write(outputString,*) rank,'Synchronized Hello World\n' 29 PetscCallA(PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)) 30 31 write(outputString,*) rank,'Synchronized Hello World - Part II\n' 32 PetscCallA(PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)) 33 PetscCallA(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT,ierr)) 34 35 ! Here a barrier is used to separate the two program states. 36 PetscCallMPIA(MPI_Barrier(PETSC_COMM_WORLD,ierr)) 37 38 write(outputString,*) rank,'Jumbled Hello World\n' 39 PetscCallA(PetscPrintf(PETSC_COMM_SELF,outputString,ierr)) 40 41 PetscCallA(PetscFinalize(ierr)) 42end program main 43 44!/*TEST 45! 46! test: 47! 48!TEST*/ 49