Actual source code: ex2f.F90

      1: ! Synchronized printing: Fortran Example

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

      9:       implicit none
     10:       PetscErrorCode                    :: ierr
     11:       PetscMPIInt                       :: myRank,mySize
     12:       character(len=PETSC_MAX_PATH_LEN) :: outputString

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

     16:       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
     17:       if (ierr /= 0) then
     18:         write(6,*) 'Unable to initialize PETSc'
     19:         stop
     20:       endif

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

     25:       call MPI_Comm_size(MPI_COMM_WORLD,mySize,ierr)
     26:       CHKERRA(ierr)
     27:       call MPI_Comm_rank(MPI_COMM_WORLD,myRank,ierr)
     28:       CHKERRA(ierr)

     30:       ! Here we would like to print only one message that represents
     31:       ! all the processes in the group
     32:       write(outputString,*) 'No of Processors = ', mysize, ', rank = ',myRank,'\n'
     33:       call PetscPrintf(PETSC_COMM_WORLD,outputString,ierr)
     34:       CHKERRA(ierr)

     36:       write(outputString,*) myRank,'Synchronized Hello World\n'
     37:       call PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)
     38:       CHKERRA(ierr)
     39:       write(outputString,*) myRank,'Synchronized Hello World - Part II\n'
     40:       call PetscSynchronizedPrintf(PETSC_COMM_WORLD,outputString,ierr)
     41:       CHKERRA(ierr)
     42:       call PetscSynchronizedFlush(PETSC_COMM_WORLD,PETSC_STDOUT,ierr)
     43:       CHKERRA(ierr)

     45:       ! Here a barrier is used to separate the two program states.
     46:       call MPI_Barrier(PETSC_COMM_WORLD,ierr)
     47:       CHKERRA(ierr)

     49:       write(outputString,*) myRank,'Jumbled Hello World\n'
     50:       call PetscPrintf(PETSC_COMM_SELF,outputString,ierr)
     51:       CHKERRA(ierr)

     53:       call PetscFinalize(ierr)
     54:       CHKERRA(ierr)

     56: end program main

     58: !/*TEST
     59: !
     60: !   test:
     61: !
     62: !TEST*/