1c4762a1bSJed Brown! 2c4762a1bSJed Brown! This introductory example illustrates running PETSc on a subset 3c4762a1bSJed Brown! of processes 4c4762a1bSJed Brown! 5c4762a1bSJed Brown! ----------------------------------------------------------------------- 6c4762a1bSJed Brown#include <petsc/finclude/petscsys.h> 7*c5e229c2SMartin Diehlprogram main 8c4762a1bSJed Brown use petscsys 9c4762a1bSJed Brown implicit none 10c4762a1bSJed Brown 11c4762a1bSJed Brown PetscErrorCode ierr 124a713726SSatish Balay PetscMPIInt rank, size, zero, two 13c4762a1bSJed Brown 14c4762a1bSJed Brown! We must call MPI_Init() first, making us, not PETSc, responsible 15c4762a1bSJed Brown! for MPI 16c4762a1bSJed Brown 17f8402805SBarry Smith PetscCallMPIA(MPI_Init(ierr)) 18c4762a1bSJed Brown 19c4762a1bSJed Brown! We can now change the communicator universe for PETSc 20c4762a1bSJed Brown 214a713726SSatish Balay zero = 0 22c4762a1bSJed Brown two = 2 23f8402805SBarry Smith PetscCallMPIA(MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)) 24f8402805SBarry Smith PetscCallMPIA(MPI_Comm_split(MPI_COMM_WORLD, mod(rank, two), zero, PETSC_COMM_WORLD, ierr)) 25c4762a1bSJed Brown 26c4762a1bSJed Brown! Every PETSc routine should begin with the PetscInitialize() 27c4762a1bSJed Brown! routine. 28c4762a1bSJed Brown 29d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 30c4762a1bSJed Brown 31c4762a1bSJed Brown! The following MPI calls return the number of processes being used 32c4762a1bSJed Brown! and the rank of this process in the group. 33c4762a1bSJed Brown 34f8402805SBarry Smith PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, size, ierr)) 35f8402805SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr)) 36c4762a1bSJed Brown 37c4762a1bSJed Brown! Here we would like to print only one message that represents all 38c4762a1bSJed Brown! the processes in the group. 394820e4eaSBarry Smith if (rank == 0) write (6, 100) size, rank 40c4762a1bSJed Brown100 format('No of Procs = ', i4, ' rank = ', i4) 41c4762a1bSJed Brown 42c4762a1bSJed Brown! Always call PetscFinalize() before exiting a program. This 43c4762a1bSJed Brown! routine - finalizes the PETSc libraries as well as MPI - provides 44c4762a1bSJed Brown! summary and diagnostic information if certain runtime options are 45c4762a1bSJed Brown! chosen (e.g., -log_view). See PetscFinalize() manpage for more 46c4762a1bSJed Brown! information. 47c4762a1bSJed Brown 48f8402805SBarry Smith PetscCallA(PetscFinalize(ierr)) 49f8402805SBarry Smith PetscCallMPIA(MPI_Comm_free(PETSC_COMM_WORLD, ierr)) 50c4762a1bSJed Brown 51c4762a1bSJed Brown! Since we initialized MPI, we must call MPI_Finalize() 52c4762a1bSJed Brown 53f8402805SBarry Smith PetscCallMPIA(MPI_Finalize(ierr)) 54c4762a1bSJed Brownend 55c4762a1bSJed Brown 56c4762a1bSJed Brown! 57c4762a1bSJed Brown!/*TEST 58c4762a1bSJed Brown! 59c4762a1bSJed Brown! test: 60c4762a1bSJed Brown! 61c4762a1bSJed Brown!TEST*/ 62