# 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
 `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
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/sys/classes/viewer/interface/viewreg.c.html#PetscOptionsGetViewer">src/sys/classes/viewer/interface/viewreg.c</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/sys/classes/viewer/tutorials/ex2.c.html">src/sys/classes/viewer/tutorials/ex2.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/vec/utils/tagger/tutorials/ex1.c.html">src/vec/vec/utils/tagger/tutorials/ex1.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex17.c.html">src/snes/tutorials/ex17.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex36.c.html">src/snes/tutorials/ex36.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex56.c.html">src/snes/tutorials/ex56.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex62.c.html">src/snes/tutorials/ex62.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex53.c.html">src/ts/tutorials/ex53.c.html</A><BR>


---
[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](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
