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*/