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