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