1! 2! This introductory example illustrates running PETSc on a subset 3! of processes 4! 5!/*T 6! Concepts: introduction to PETSc; 7! Concepts: process^subset set PETSC_COMM_WORLD 8! Processors: 2 9!T*/ 10! ----------------------------------------------------------------------- 11 12 program main 13#include <petsc/finclude/petscsys.h> 14 use petscsys 15 implicit none 16 17 PetscErrorCode ierr 18 PetscMPIInt rank, size, two 19 20! We must call MPI_Init() first, making us, not PETSc, responsible 21! for MPI 22 23 call MPI_Init(ierr) 24 if (ierr .ne. 0) then 25 print*,'Unable to initialize MPI' 26 stop 27 endif 28 29! We can now change the communicator universe for PETSc 30 31 two = 2 32 call MPI_Comm_rank(MPI_COMM_WORLD,rank,ierr) 33 call MPI_Comm_split(MPI_COMM_WORLD,mod(rank,two),0,PETSC_COMM_WORLD,ierr) 34 35! Every PETSc routine should begin with the PetscInitialize() 36! routine. 37 38 call PetscInitialize(PETSC_NULL_CHARACTER,ierr) 39 if (ierr .ne. 0) then 40 print*,'Unable to initialize PETSc' 41 stop 42 endif 43 44! The following MPI calls return the number of processes being used 45! and the rank of this process in the group. 46 47 call MPI_Comm_size(PETSC_COMM_WORLD,size,ierr);CHKERRA(ierr) 48 call MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr);CHKERRA(ierr) 49 50 51! Here we would like to print only one message that represents all 52! the processes in the group. 53 if (rank .eq. 0) write(6,100) size,rank 54 100 format('No of Procs = ',i4,' rank = ',i4) 55 56! Always call PetscFinalize() before exiting a program. This 57! routine - finalizes the PETSc libraries as well as MPI - provides 58! summary and diagnostic information if certain runtime options are 59! chosen (e.g., -log_view). See PetscFinalize() manpage for more 60! information. 61 62 call PetscFinalize(ierr) 63 call MPI_Comm_free(PETSC_COMM_WORLD,ierr) 64 65! Since we initialized MPI, we must call MPI_Finalize() 66 67 call MPI_Finalize(ierr) 68 end 69 70! 71!/*TEST 72! 73! test: 74! 75!TEST*/ 76