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 PetscErrorCode ierr; 14c4762a1bSJed Brown PetscViewer viewer,subviewer,subsubviewer; 15c4762a1bSJed Brown PetscViewerFormat format; 16c4762a1bSJed Brown PetscBool flg; 17c4762a1bSJed Brown PetscSubcomm psubcomm,psubsubcomm; 18c4762a1bSJed Brown MPI_Comm comm,subcomm,subsubcomm; 19c4762a1bSJed Brown PetscMPIInt size; 20c4762a1bSJed Brown 21c4762a1bSJed Brown /* 22c4762a1bSJed Brown Every PETSc routine should begin with the PetscInitialize() routine. 23c4762a1bSJed Brown argc, argv - These command line arguments are taken to extract the options 24c4762a1bSJed Brown supplied to PETSc and options supplied to MPI. 25c4762a1bSJed Brown help - When PETSc executable is invoked with the option -help, 26c4762a1bSJed Brown it prints the various options that can be applied at 27c4762a1bSJed Brown runtime. The user can use the "help" variable place 28c4762a1bSJed Brown additional help messages in this printout. 29c4762a1bSJed Brown */ 30c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 31c4762a1bSJed Brown comm = PETSC_COMM_WORLD; 325f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(comm,&size)); 332c71b3e2SJacob Faibussowitsch PetscCheckFalse(size < 4,PETSC_COMM_WORLD,PETSC_ERR_SUP,"Must run with at least 4 MPI processes"); 345f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetViewer(comm,NULL,NULL,"-viewer",&viewer,&format,&flg)); 35*28b400f6SJacob Faibussowitsch PetscCheck(viewer,PETSC_COMM_WORLD,PETSC_ERR_SUP,"Must use -viewer option"); 36c4762a1bSJed Brown 375f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer,"Print called on original full viewer %d\n",PetscGlobalRank)); 38c4762a1bSJed Brown 395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommCreate(comm,&psubcomm)); 405f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetNumber(psubcomm,2)); 415f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetType(psubcomm,PETSC_SUBCOMM_CONTIGUOUS)); 42c4762a1bSJed Brown /* enable runtime switch of psubcomm type, e.g., '-psubcomm_type interlaced */ 435f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetFromOptions(psubcomm)); 44c4762a1bSJed Brown subcomm = PetscSubcommChild(psubcomm); 45c4762a1bSJed Brown 465f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(viewer,subcomm,&subviewer)); 47c4762a1bSJed Brown 485f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(subviewer," Print called on sub viewers %d\n",PetscGlobalRank)); 49c4762a1bSJed Brown 505f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommCreate(subcomm,&psubsubcomm)); 515f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetNumber(psubsubcomm,2)); 525f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetType(psubsubcomm,PETSC_SUBCOMM_CONTIGUOUS)); 53c4762a1bSJed Brown /* enable runtime switch of psubcomm type, e.g., '-psubcomm_type interlaced */ 545f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommSetFromOptions(psubsubcomm)); 55c4762a1bSJed Brown subsubcomm = PetscSubcommChild(psubsubcomm); 56c4762a1bSJed Brown 575f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerGetSubViewer(subviewer,subsubcomm,&subsubviewer)); 58c4762a1bSJed Brown 595f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(subsubviewer," Print called on sub sub viewers %d\n",PetscGlobalRank)); 60c4762a1bSJed Brown 615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(subviewer,subsubcomm,&subsubviewer)); 625f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerRestoreSubViewer(viewer,subcomm,&subviewer)); 63c4762a1bSJed Brown 645f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommDestroy(&psubsubcomm)); 655f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSubcommDestroy(&psubcomm)); 665f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerDestroy(&viewer)); 67c4762a1bSJed Brown ierr = PetscFinalize(); 68c4762a1bSJed Brown return ierr; 69c4762a1bSJed Brown } 70c4762a1bSJed Brown 71c4762a1bSJed Brown /*TEST 72c4762a1bSJed Brown 73c4762a1bSJed Brown test: 74c4762a1bSJed Brown nsize: 4 75c4762a1bSJed Brown args: -viewer 76c4762a1bSJed Brown 77c4762a1bSJed Brown TEST*/ 78