! Synchronized printing: Fortran Example program main #include use petscmpi ! or mpi or mpi_f08 use petscsys implicit none PetscErrorCode :: ierr PetscMPIInt :: rank,size character(len=PETSC_MAX_PATH_LEN) :: outputString ! Every PETSc program should begin with the PetscInitialize() routine. PetscCallA(PetscInitialize(ierr)) ! The following MPI calls return the number of processes ! being used and the rank of this process in the group PetscCallMPIA(MPI_Comm_size(MPI_COMM_WORLD,size,ierr)) PetscCallMPIA(MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr)) ! Here we would like to print only one message that represents ! all the processes in the group write(outputString,*) 'No of Processors = ', size, ', rank = ',rank,'\n' PetscCallA(PetscPrintf(PETSC_COMM_WORLD,outputString,ierr)) write(outputString,*) rank,'Synchronized Hello World\n' PetscCallA(PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)) write(outputString,*) rank,'Synchronized Hello World - Part II\n' PetscCallA(PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)) PetscCallA(PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT,ierr)) ! Here a barrier is used to separate the two program states. PetscCallMPIA(MPI_Barrier(PETSC_COMM_WORLD,ierr)) write(outputString,*) rank,'Jumbled Hello World\n' PetscCallA(PetscPrintf(PETSC_COMM_SELF,outputString,ierr)) PetscCallA(PetscFinalize(ierr)) end program main !/*TEST ! ! test: ! !TEST*/