Actual source code: viewreg.c
1: #define PETSC_DLL
3: #include "src/sys/viewer/viewerimpl.h" /*I "petsc.h" I*/
5: PetscFList PetscViewerList = 0;
9: /*@C
10: PetscViewerCreate - Creates a viewing context
12: Collective on MPI_Comm
14: Input Parameter:
15: . comm - MPI communicator
17: Output Parameter:
18: . inviewer - location to put the PetscViewer context
20: Level: advanced
22: Concepts: graphics^creating PetscViewer
23: Concepts: file input/output^creating PetscViewer
24: Concepts: sockets^creating PetscViewer
26: .seealso: PetscViewerDestroy(), PetscViewerSetType()
28: @*/
29: PetscErrorCode PetscViewerCreate(MPI_Comm comm,PetscViewer *inviewer)
30: {
31: PetscViewer viewer;
35: *inviewer = 0;
36: #if !defined(PETSC_USE_DYNAMIC_LIBRARIES)
37: PetscInitializePackage(PETSC_NULL);
38: #endif
39: PetscHeaderCreate(viewer,_p_PetscViewer,struct _PetscViewerOps,PETSC_VIEWER_COOKIE,-1,"PetscViewer",comm,PetscViewerDestroy,0);
40: *inviewer = viewer;
41: viewer->data = 0;
42: return(0);
43: }
44:
47: /*@C
48: PetscViewerSetType - Builds PetscViewer for a particular implementation.
50: Collective on PetscViewer
52: Input Parameter:
53: + viewer - the PetscViewer context
54: - type - for example, "ASCII"
56: Options Database Command:
57: . -draw_type <type> - Sets the type; use -help for a list
58: of available methods (for instance, ascii)
60: Level: advanced
62: Notes:
63: See "include/petscviewer.h" for available methods (for instance,
64: PETSC_VIEWER_SOCKET)
66: .seealso: PetscViewerCreate(), PetscViewerGetType()
67: @*/
68: PetscErrorCode PetscViewerSetType(PetscViewer viewer,PetscViewerType type)
69: {
70: PetscErrorCode ierr,(*r)(PetscViewer);
71: PetscTruth match;
76: CHKMEMQ;
77: PetscTypeCompare((PetscObject)viewer,type,&match);
78: if (match) return(0);
80: if (viewer->data) {
81: /* destroy the old private PetscViewer context */
82: (*viewer->ops->destroy)(viewer);
83: viewer->data = 0;
84: }
85: CHKMEMQ;
86: /* Get the function pointers for the graphics method requested */
87: if (!PetscViewerList) {
88: PetscViewerRegisterAll(PETSC_NULL);
89: }
90: CHKMEMQ;
91: PetscFListFind(viewer->comm,PetscViewerList,type,(void (**)(void)) &r);
92: if (!r) SETERRQ1(PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown PetscViewer type given: %s",type);
93: viewer->data = 0;
94: CHKMEMQ;
95: PetscMemzero(viewer->ops,sizeof(struct _PetscViewerOps));
96: CHKMEMQ;
97: (*r)(viewer);
98: CHKMEMQ;
99: PetscObjectChangeTypeName((PetscObject)viewer,type);
100: return(0);
101: }
105: /*@C
106: PetscViewerRegisterDestroy - Frees the list of PetscViewer methods that were
107: registered by PetscViewerRegisterDynamic().
109: Not Collective
111: Level: developer
113: .seealso: PetscViewerRegisterDynamic(), PetscViewerRegisterAll()
114: @*/
115: PetscErrorCode PetscViewerRegisterDestroy(void)
116: {
120: if (PetscViewerList) {
121: PetscFListDestroy(&PetscViewerList);
122: PetscViewerList = 0;
123: }
124: return(0);
125: }
129: PetscErrorCode PetscViewerRegister(const char *sname,const char *path,const char *name,PetscErrorCode (*function)(PetscViewer))
130: {
132: char fullname[PETSC_MAX_PATH_LEN];
135: PetscFListConcat(path,name,fullname);
136: PetscFListAdd(&PetscViewerList,sname,fullname,(void (*)(void))function);
137: return(0);
138: }
142: /*@C
143: PetscViewerSetFromOptions - Sets the graphics type from the options database.
144: Defaults to a PETSc X windows graphics.
146: Collective on PetscViewer
148: Input Parameter:
149: . PetscViewer - the graphics context
151: Level: intermediate
153: Notes:
154: Must be called after PetscViewerCreate() before the PetscViewer is used.
156: Concepts: PetscViewer^setting options
158: .seealso: PetscViewerCreate(), PetscViewerSetType()
160: @*/
161: PetscErrorCode PetscViewerSetFromOptions(PetscViewer viewer)
162: {
164: char vtype[256];
165: PetscTruth flg;
170: if (!PetscViewerList) {
171: PetscViewerRegisterAll(PETSC_NULL);
172: }
173: PetscOptionsBegin(viewer->comm,viewer->prefix,"PetscViewer options","PetscViewer");
174: PetscOptionsList("-viewer_type","Type of PetscViewer","None",PetscViewerList,(char *)(viewer->type_name?viewer->type_name:PETSC_VIEWER_ASCII),vtype,256,&flg);
175: if (flg) {
176: PetscViewerSetType(viewer,vtype);
177: }
178: /* type has not been set? */
179: if (!viewer->type_name) {
180: PetscViewerSetType(viewer,PETSC_VIEWER_ASCII);
181: }
182: if (viewer->ops->setfromoptions) {
183: (*viewer->ops->setfromoptions)(viewer);
184: }
185: PetscOptionsEnd();
187: return(0);
188: }