:orphan:
# PetscOptionsGetViewer
Gets a viewer appropriate for the type indicated by the user
## Synopsis
```
#include "petscviewer.h"
PetscErrorCode PetscOptionsGetViewer(MPI_Comm comm, PetscOptions options, const char pre[], const char name[], PetscViewer *viewer, PetscViewerFormat *format, PetscBool *set)
```
Collective
## Input Parameters
- ***comm -*** the communicator to own the viewer
- ***options -*** options database, use `NULL` for default global database
- ***pre -*** the string to prepend to the name or `NULL`
- ***name -*** the option one is seeking
## Output Parameters
- ***viewer -*** the viewer, pass `NULL` if not needed
- ***format -*** the `PetscViewerFormat` requested by the user, pass `NULL` if not needed
- ***set -*** `PETSC_TRUE` if found, else `PETSC_FALSE`
## Notes
If no value is provided ascii:stdout is used
- ***ascii[:[filename][:[format][:append]]] -*** defaults to stdout - format can be one of ascii_info, ascii_info_detail, or ascii_matlab,
for example ascii::ascii_info prints just the information about the object not all details
unless :append is given filename opens in write mode, overwriting what was already there
- ***binary[:[filename][:[format][:append]]] -*** defaults to the file binaryoutput
- ***draw[:drawtype[:filename]] -*** for example, draw:tikz, draw:tikz:figure.tex or draw:x
- ***socket[:port] -*** defaults to the standard output port
- ***saws[:communicatorname] -*** publishes object to the Scientific Application Webserver (SAWs)
Use `PetscViewerDestroy()` after using the viewer, otherwise a memory leak will occur
You can control whether calls to this function create a viewer (or return early with *set of `PETSC_FALSE`) with
`PetscOptionsPushGetViewerOff()`. This is useful if calling many small subsolves, in which case XXXViewFromOptions can take
an appreciable fraction of the runtime.
If PETSc is configured with `--with-viewfromoptions=0` this function always returns with *set of `PETSC_FALSE`
## See Also
[](sec_viewers), `PetscOptionsGetReal()`, `PetscOptionsHasName()`, `PetscOptionsGetString()`,
`PetscOptionsGetIntArray()`, `PetscOptionsGetRealArray()`, `PetscOptionsBool()`
`PetscOptionsInt()`, `PetscOptionsString()`, `PetscOptionsReal()`, `PetscOptionsBool()`,
`PetscOptionsName()`, `PetscOptionsBegin()`, `PetscOptionsEnd()`, `PetscOptionsHeadBegin()`,
`PetscOptionsStringArray()`, `PetscOptionsRealArray()`, `PetscOptionsScalar()`,
`PetscOptionsBoolGroupBegin()`, `PetscOptionsBoolGroup()`, `PetscOptionsBoolGroupEnd()`,
`PetscOptionsFList()`, `PetscOptionsEList()`, `PetscOptionsPushGetViewerOff()`, `PetscOptionsPopGetViewerOff()`,
`PetscOptionsGetViewerOff()`
## Level
intermediate
## Location
src/sys/classes/viewer/interface/viewreg.c
## Examples
src/snes/tutorials/ex17.c
src/snes/tutorials/ex36.c
src/snes/tutorials/ex56.c
src/snes/tutorials/ex62.c
src/sys/classes/viewer/tutorials/ex2.c
src/ts/tutorials/ex53.c
src/vec/vec/utils/tagger/tutorials/ex1.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/sys/classes/viewer/interface/viewreg.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)