Actual source code: ex2f.F90

      1: ! Synchronized printing: Fortran Example

      3: program main
      4: #include <petsc/finclude/petscsys.h>
      5:   use petscmpi  ! or mpi or mpi_f08
      6:   use petscsys

      8:   implicit none
      9:   PetscErrorCode                    :: ierr
     10:   PetscMPIInt                       :: rank, size
     11:   character(len=PETSC_MAX_PATH_LEN) :: outputString

     13:   ! Every PETSc program should begin with the PetscInitialize() routine.

     15:   PetscCallA(PetscInitialize(ierr))

     17:   ! The following MPI calls return the number of processes
     18:   ! being used and the rank of this process in the group

     20:   PetscCallMPIA(MPI_Comm_size(MPI_COMM_WORLD, size, ierr))
     21:   PetscCallMPIA(MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr))

     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))

     28:   write (outputString, *) rank, 'Synchronized Hello World\n'
     29:   PetscCallA(PetscSynchronizedPrintf(PETSC_COMM_WORLD, outputString, ierr))

     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))

     35:   ! Here a barrier is used to separate the two program states.
     36:   PetscCallMPIA(MPI_Barrier(PETSC_COMM_WORLD, ierr))

     38:   write (outputString, *) rank, 'Jumbled Hello World\n'
     39:   PetscCallA(PetscPrintf(PETSC_COMM_SELF, outputString, ierr))

     41:   PetscCallA(PetscFinalize(ierr))
     42: end program main

     44: !/*TEST
     45: !
     46: !   test:
     47: !
     48: !TEST*/