Actual source code: viewreg.c
2: #include "src/sys/src/viewer/viewerimpl.h" /*I "petsc.h" I*/
4: PetscFList PetscViewerList = 0;
8: /*@C
9: PetscViewerCreate - Creates a viewing context
11: Collective on MPI_Comm
13: Input Parameter:
14: . comm - MPI communicator
16: Output Parameter:
17: . inviewer - location to put the PetscViewer context
19: Level: advanced
21: Concepts: graphics^creating PetscViewer
22: Concepts: file input/output^creating PetscViewer
23: Concepts: sockets^creating PetscViewer
25: .seealso: PetscViewerDestroy(), PetscViewerSetType()
27: @*/
28: PetscErrorCode PetscViewerCreate(MPI_Comm comm,PetscViewer *inviewer)
29: {
30: PetscViewer viewer;
33: *inviewer = 0;
34: PetscHeaderCreate(viewer,_p_PetscViewer,struct _PetscViewerOps,PETSC_VIEWER_COOKIE,-1,"PetscViewer",comm,PetscViewerDestroy,0);
35: PetscLogObjectCreate(viewer);
36: *inviewer = viewer;
37: viewer->data = 0;
38: return(0);
39: }
40:
43: /*@C
44: PetscViewerSetType - Builds PetscViewer for a particular implementation.
46: Collective on PetscViewer
48: Input Parameter:
49: + viewer - the PetscViewer context
50: - type - for example, "ASCII"
52: Options Database Command:
53: . -draw_type <type> - Sets the type; use -help for a list
54: of available methods (for instance, ascii)
56: Level: advanced
58: Notes:
59: See "include/petscviewer.h" for available methods (for instance,
60: PETSC_VIEWER_SOCKET)
62: .seealso: PetscViewerCreate(), PetscViewerGetType()
63: @*/
64: PetscErrorCode PetscViewerSetType(PetscViewer viewer,const PetscViewerType type)
65: {
66: PetscErrorCode ierr,(*r)(PetscViewer);
67: PetscTruth match;
73: PetscTypeCompare((PetscObject)viewer,type,&match);
74: if (match) return(0);
76: if (viewer->data) {
77: /* destroy the old private PetscViewer context */
78: (*viewer->ops->destroy)(viewer);
79: viewer->data = 0;
80: }
81: /* Get the function pointers for the graphics method requested */
82: if (!PetscViewerList) {
83: PetscViewerRegisterAll(PETSC_NULL);
84: }
86: PetscFListFind(viewer->comm,PetscViewerList,type,(void (**)(void)) &r);
87: if (!r) SETERRQ1(PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type);
88: viewer->data = 0;
89: PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));
90: (*r)(viewer);
91: PetscObjectChangeTypeName((PetscObject)viewer,type);
92: return(0);
93: }
97: /*@C
98: PetscViewerRegisterDestroy - Frees the list of PetscViewer methods that were
99: registered by PetscViewerRegisterDynamic().
101: Not Collective
103: Level: developer
105: .seealso: PetscViewerRegisterDynamic(), PetscViewerRegisterAll()
106: @*/
107: PetscErrorCode PetscViewerRegisterDestroy(void)
108: {
112: if (PetscViewerList) {
113: PetscFListDestroy(&PetscViewerList);
114: PetscViewerList = 0;
115: }
116: return(0);
117: }
121: PetscErrorCode PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer))
122: {
124: char fullname[PETSC_MAX_PATH_LEN];
127: PetscFListConcat(path,name,fullname);
128: PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);
129: return(0);
130: }
134: /*@C
135: PetscViewerSetFromOptions - Sets the graphics type from the options database.
136: Defaults to a PETSc X windows graphics.
138: Collective on PetscViewer
140: Input Parameter:
141: . PetscViewer - the graphics context
143: Level: intermediate
145: Notes:
146: Must be called after PetscViewerCreate() before the PetscViewer is used.
148: Concepts: PetscViewer^setting options
150: .seealso: PetscViewerCreate(), PetscViewerSetType()
152: @*/
153: PetscErrorCode PetscViewerSetFromOptions(PetscViewer viewer)
154: {
156: char vtype[256];
157: PetscTruth flg;
162: if (!PetscViewerList) {
163: PetscViewerRegisterAll(PETSC_NULL);
164: }
165: PetscOptionsBegin(viewer->comm,viewer->prefix,"PetscViewer options","PetscViewer");
166: PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(viewer->type_name?viewer->type_name:PETSC_VIEWER_ASCII),vtype,256,&flg);
167: if (flg) {
168: PetscViewerSetType(viewer,vtype);
169: }
170: /* type has not been set? */
171: if (!viewer->type_name) {
172: PetscViewerSetType(viewer,PETSC_VIEWER_ASCII);
173: }
174: if (viewer->ops->setfromoptions) {
175: (*viewer->ops->setfromoptions)(viewer);
176: }
177: PetscOptionsEnd();
179: return(0);
180: }