1c4762a1bSJed Brown 2c4762a1bSJed Brown static char help[] = "Introductory example that illustrates printing.\n\n"; 3c4762a1bSJed Brown 4c4762a1bSJed Brown /*T 5c4762a1bSJed Brown Concepts: introduction to PETSc; 6c4762a1bSJed Brown Concepts: printing^in parallel 7c4762a1bSJed Brown Processors: n 8c4762a1bSJed Brown T*/ 9c4762a1bSJed Brown 10c4762a1bSJed Brown #include <petscsys.h> 11c4762a1bSJed Brown int main(int argc,char **argv) 12c4762a1bSJed Brown { 13c4762a1bSJed Brown PetscErrorCode ierr; 14c4762a1bSJed Brown PetscMPIInt rank,size; 15c4762a1bSJed Brown 16c4762a1bSJed Brown /* 17*c87e60e8SJose E. Roman Every PETSc program should begin with the PetscInitialize() routine. 18c4762a1bSJed Brown argc, argv - These command line arguments are taken to extract the options 19c4762a1bSJed Brown supplied to PETSc and options supplied to MPI. 20c4762a1bSJed Brown help - When PETSc executable is invoked with the option -help, 21c4762a1bSJed Brown it prints the various options that can be applied at 22*c87e60e8SJose E. Roman runtime. The user can use the "help" variable to place 23c4762a1bSJed Brown additional help messages in this printout. 24c4762a1bSJed Brown */ 25c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 26c4762a1bSJed Brown 27c4762a1bSJed Brown /* 28c4762a1bSJed Brown The following MPI calls return the number of processes 29c4762a1bSJed Brown being used and the rank of this process in the group. 30c4762a1bSJed Brown */ 31ffc4695bSBarry Smith ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRMPI(ierr); 32ffc4695bSBarry Smith ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRMPI(ierr); 33c4762a1bSJed Brown 34c4762a1bSJed Brown /* 35c4762a1bSJed Brown Here we would like to print only one message that represents 36c4762a1bSJed Brown all the processes in the group. We use PetscPrintf() with the 37c4762a1bSJed Brown communicator PETSC_COMM_WORLD. Thus, only one message is 38c4762a1bSJed Brown printed representng PETSC_COMM_WORLD, i.e., all the processors. 39c4762a1bSJed Brown */ 40c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_WORLD,"Number of processors = %d, rank = %d\n",size,rank);CHKERRQ(ierr); 41c4762a1bSJed Brown 42c4762a1bSJed Brown /* 43c4762a1bSJed Brown Here a barrier is used to separate the two program states. 44c4762a1bSJed Brown */ 45ffc4695bSBarry Smith ierr = MPI_Barrier(PETSC_COMM_WORLD);CHKERRMPI(ierr); 46c4762a1bSJed Brown 47c4762a1bSJed Brown /* 48c4762a1bSJed Brown Here we simply use PetscPrintf() with the communicator PETSC_COMM_SELF, 49c4762a1bSJed Brown where each process is considered separately and prints independently 50c4762a1bSJed Brown to the screen. Thus, the output from different processes does not 51c4762a1bSJed Brown appear in any particular order. 52c4762a1bSJed Brown */ 53c4762a1bSJed Brown 54c4762a1bSJed Brown ierr = PetscPrintf(PETSC_COMM_SELF,"[%d] Jumbled Hello World\n",rank);CHKERRQ(ierr); 55c4762a1bSJed Brown 56c4762a1bSJed Brown /* 57c4762a1bSJed Brown Always call PetscFinalize() before exiting a program. This routine 58c4762a1bSJed Brown - finalizes the PETSc libraries as well as MPI 59c4762a1bSJed Brown - provides summary and diagnostic information if certain runtime 60c4762a1bSJed Brown options are chosen (e.g., -log_view). See PetscFinalize() 61c4762a1bSJed Brown manpage for more information. 62c4762a1bSJed Brown */ 63c4762a1bSJed Brown ierr = PetscFinalize(); 64c4762a1bSJed Brown return ierr; 65c4762a1bSJed Brown } 66c4762a1bSJed Brown 67c4762a1bSJed Brown /*TEST 68c4762a1bSJed Brown 69c4762a1bSJed Brown test: 70c4762a1bSJed Brown 71c4762a1bSJed Brown TEST*/ 72