1c4762a1bSJed Brown 2c4762a1bSJed Brown static char help[] = "Tests using PetscViewerGetSubViewer() recursively\n\n"; 3c4762a1bSJed Brown 4c4762a1bSJed Brown /*T 5c4762a1bSJed Brown Concepts: viewers 6c4762a1bSJed Brown Processors: n 7c4762a1bSJed Brown T*/ 8c4762a1bSJed Brown #include <petscsys.h> 9c4762a1bSJed Brown #include <petscviewer.h> 10c4762a1bSJed Brown 11c4762a1bSJed Brown int main(int argc,char **argv) 12c4762a1bSJed Brown { 13c4762a1bSJed Brown PetscViewer viewer,subviewer,subsubviewer; 14c4762a1bSJed Brown PetscViewerFormat format; 15c4762a1bSJed Brown PetscBool flg; 16c4762a1bSJed Brown PetscSubcomm psubcomm,psubsubcomm; 17c4762a1bSJed Brown MPI_Comm comm,subcomm,subsubcomm; 18c4762a1bSJed Brown PetscMPIInt size; 19c4762a1bSJed Brown 20c4762a1bSJed Brown /* 21c4762a1bSJed Brown Every PETSc routine should begin with the PetscInitialize() routine. 22c4762a1bSJed Brown argc, argv - These command line arguments are taken to extract the options 23c4762a1bSJed Brown supplied to PETSc and options supplied to MPI. 24c4762a1bSJed Brown help - When PETSc executable is invoked with the option -help, 25c4762a1bSJed Brown it prints the various options that can be applied at 26c4762a1bSJed Brown runtime. The user can use the "help" variable place 27c4762a1bSJed Brown additional help messages in this printout. 28c4762a1bSJed Brown */ 29*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc,&argv,(char*)0,help)); 30c4762a1bSJed Brown comm = PETSC_COMM_WORLD; 315f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(comm,&size)); 322c71b3e2SJacob Faibussowitsch PetscCheckFalse(size < 4,PETSC_COMM_WORLD,PETSC_ERR_SUP,"Must run with at least 4 MPI processes"); 335f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetViewer(comm,NULL,NULL,"-viewer",&viewer,&format,&flg)); 3428b400f6SJacob Faibussowitsch PetscCheck(viewer,PETSC_COMM_WORLD,PETSC_ERR_SUP,"Must use -viewer option"); 35c4762a1bSJed Brown 365f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer,"Print called on original full viewer %d\n",PetscGlobalRank)); 37c4762a1bSJed Brown 385f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommCreate(comm,&psubcomm)); 395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetNumber(psubcomm,2)); 405f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetType(psubcomm,PETSC_SUBCOMM_CONTIGUOUS)); 41c4762a1bSJed Brown /* enable runtime switch of psubcomm type, e.g., '-psubcomm_type interlaced */ 425f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetFromOptions(psubcomm)); 43c4762a1bSJed Brown subcomm = PetscSubcommChild(psubcomm); 44c4762a1bSJed Brown 455f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,subcomm,&subviewer)); 46c4762a1bSJed Brown 475f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(subviewer," Print called on sub viewers %d\n",PetscGlobalRank)); 48c4762a1bSJed Brown 495f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommCreate(subcomm,&psubsubcomm)); 505f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetNumber(psubsubcomm,2)); 515f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetType(psubsubcomm,PETSC_SUBCOMM_CONTIGUOUS)); 52c4762a1bSJed Brown /* enable runtime switch of psubcomm type, e.g., '-psubcomm_type interlaced */ 535f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetFromOptions(psubsubcomm)); 54c4762a1bSJed Brown subsubcomm = PetscSubcommChild(psubsubcomm); 55c4762a1bSJed Brown 565f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(subviewer,subsubcomm,&subsubviewer)); 57c4762a1bSJed Brown 585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(subsubviewer," Print called on sub sub viewers %d\n",PetscGlobalRank)); 59c4762a1bSJed Brown 605f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(subviewer,subsubcomm,&subsubviewer)); 615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,subcomm,&subviewer)); 62c4762a1bSJed Brown 635f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommDestroy(&psubsubcomm)); 645f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommDestroy(&psubcomm)); 655f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerDestroy(&viewer)); 66*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 67*b122ec5aSJacob Faibussowitsch return 0; 68c4762a1bSJed Brown } 69c4762a1bSJed Brown 70c4762a1bSJed Brown /*TEST 71c4762a1bSJed Brown 72c4762a1bSJed Brown test: 73c4762a1bSJed Brown nsize: 4 74c4762a1bSJed Brown args: -viewer 75c4762a1bSJed Brown 76c4762a1bSJed Brown TEST*/ 77