:orphan: # PetscViewerGetSubViewer Creates a new `PetscViewer` (same type as the old) that lives on a subcommunicator of the original viewer's communicator ## Synopsis ``` #include "petscviewer.h" PetscErrorCode PetscViewerGetSubViewer(PetscViewer viewer, MPI_Comm comm, PetscViewer *outviewer) ``` Collective ## Input Parameter - ***viewer -*** the `PetscViewer` to be reproduced ## Output Parameter - ***outviewer -*** new `PetscViewer` ## Notes The output of the subviewers is synchronized against the original viewer. For example, if a viewer on two MPI processes is decomposed into two subviewers, the output from the first viewer is all printed before the output from the second viewer. You must call `PetscViewerFlush()` after the call to `PetscViewerRestoreSubViewer()`. Call `PetscViewerRestoreSubViewer()` to destroy this `PetscViewer`, NOT `PetscViewerDestroy()` This is most commonly used to view a sequential object that is part of a parallel object. For example `PCView()` on a `PCBJACOBI` could use this to obtain a `PetscViewer` that is used with the sequential `KSP` on one block of the preconditioner. Between the calls to `PetscViewerGetSubViewer()` and `PetscViewerRestoreSubViewer()` the original viewer should not be used `PETSCVIEWERDRAW` and `PETSCVIEWERBINARY` only support returning a singleton viewer on MPI rank 0, all other ranks will return a `NULL` viewer ## Developer Notes There is currently incomplete error checking to ensure the user does not use the original viewer between the the calls to `PetscViewerGetSubViewer()` and `PetscViewerRestoreSubViewer()`. If the user does there could be errors in the viewing that go undetected or crash the code. It would be nice if the call to `PetscViewerFlush()` was not required and was handled by `PetscViewerRestoreSubViewer()` ## See Also [](sec_viewers), `PetscViewer`, `PetscViewerSocketOpen()`, `PetscViewerASCIIOpen()`, `PetscViewerDrawOpen()`, `PetscViewerRestoreSubViewer()` ## Level advanced ## Location src/sys/classes/viewer/interface/dupl.c ## Examples src/dm/tutorials/ex6.c
src/vec/vec/tutorials/ex14f.F90
src/vec/vec/tutorials/ex9f.F90
## Implementations PetscViewerGetSubViewer_ASCII in src/sys/classes/viewer/impls/ascii/filev.c
PetscViewerGetSubViewer_Binary in src/sys/classes/viewer/impls/binary/binv.c
PetscViewerGetSubViewer_Draw in src/sys/classes/viewer/impls/draw/drawv.c
PetscViewerGetSubViewer_String in src/sys/classes/viewer/impls/string/stringv.c
--- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/sys/classes/viewer/interface/dupl.c) [Index of all Viewer routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)