xref: /petsc/src/sys/classes/viewer/interface/view.c (revision fc31e74df696c5bb27cacc190f3f0be2538cc7ed)
1 
2 #include <petsc-private/viewerimpl.h>  /*I "petscviewer.h" I*/
3 
4 PetscClassId PETSC_VIEWER_CLASSID;
5 
6 static PetscBool PetscViewerPackageInitialized = PETSC_FALSE;
7 #undef __FUNCT__
8 #define __FUNCT__ "PetscViewerFinalizePackage"
9 /*@C
10   PetscViewerFinalizePackage - This function destroys everything in the Petsc interface to Mathematica. It is
11   called from PetscFinalize().
12 
13   Level: developer
14 
15 .keywords: Petsc, destroy, package, mathematica
16 .seealso: PetscFinalize()
17 @*/
18 PetscErrorCode  PetscViewerFinalizePackage(void)
19 {
20   PetscErrorCode ierr;
21 
22   PetscFunctionBegin;
23   ierr = PetscFunctionListDestroy(&PetscViewerList);CHKERRQ(ierr);
24   PetscViewerPackageInitialized = PETSC_FALSE;
25   PetscFunctionReturn(0);
26 }
27 
28 #undef __FUNCT__
29 #define __FUNCT__ "PetscViewerInitializePackage"
30 /*@C
31   PetscViewerInitializePackage - This function initializes everything in the main PetscViewer package.
32 
33   Level: developer
34 
35 .keywords: Petsc, initialize, package
36 .seealso: PetscInitialize()
37 @*/
38 PetscErrorCode  PetscViewerInitializePackage(void)
39 {
40   char           logList[256];
41   char           *className;
42   PetscBool      opt;
43   PetscErrorCode ierr;
44 
45   PetscFunctionBegin;
46   if (PetscViewerPackageInitialized) PetscFunctionReturn(0);
47   PetscViewerPackageInitialized = PETSC_TRUE;
48   /* Register Classes */
49   ierr = PetscClassIdRegister("Viewer",&PETSC_VIEWER_CLASSID);CHKERRQ(ierr);
50 
51   /* Register Constructors */
52   ierr = PetscViewerRegisterAll();CHKERRQ(ierr);
53 
54   /* Process info exclusions */
55   ierr = PetscOptionsGetString(NULL, "-info_exclude", logList, 256, &opt);CHKERRQ(ierr);
56   if (opt) {
57     ierr = PetscStrstr(logList, "viewer", &className);CHKERRQ(ierr);
58     if (className) {
59       ierr = PetscInfoDeactivateClass(0);CHKERRQ(ierr);
60     }
61   }
62   /* Process summary exclusions */
63   ierr = PetscOptionsGetString(NULL, "-log_summary_exclude", logList, 256, &opt);CHKERRQ(ierr);
64   if (opt) {
65     ierr = PetscStrstr(logList, "viewer", &className);CHKERRQ(ierr);
66     if (className) {
67       ierr = PetscLogEventDeactivateClass(0);CHKERRQ(ierr);
68     }
69   }
70 #if defined(PETSC_HAVE_MATHEMATICA)
71   ierr = PetscViewerMathematicaInitializePackage();CHKERRQ(ierr);
72 #endif
73   ierr = PetscRegisterFinalize(PetscViewerFinalizePackage);CHKERRQ(ierr);
74   PetscFunctionReturn(0);
75 }
76 
77 #undef __FUNCT__
78 #define __FUNCT__ "PetscViewerDestroy"
79 /*@
80    PetscViewerDestroy - Destroys a PetscViewer.
81 
82    Collective on PetscViewer
83 
84    Input Parameters:
85 .  viewer - the PetscViewer to be destroyed.
86 
87    Level: beginner
88 
89 .seealso: PetscViewerSocketOpen(), PetscViewerASCIIOpen(), PetscViewerCreate(), PetscViewerDrawOpen()
90 
91 @*/
92 PetscErrorCode  PetscViewerDestroy(PetscViewer *viewer)
93 {
94   PetscErrorCode ierr;
95 
96   PetscFunctionBegin;
97   if (!*viewer) PetscFunctionReturn(0);
98   PetscValidHeaderSpecific(*viewer,PETSC_VIEWER_CLASSID,1);
99 
100   ierr = PetscViewerFlush(*viewer);CHKERRQ(ierr);
101   if (--((PetscObject)(*viewer))->refct > 0) {*viewer = 0; PetscFunctionReturn(0);}
102 
103   ierr = PetscObjectSAWsViewOff((PetscObject)*viewer);CHKERRQ(ierr);
104   if ((*viewer)->ops->destroy) {
105     ierr = (*(*viewer)->ops->destroy)(*viewer);CHKERRQ(ierr);
106   }
107   ierr = PetscHeaderDestroy(viewer);CHKERRQ(ierr);
108   PetscFunctionReturn(0);
109 }
110 
111 #undef __FUNCT__
112 #define __FUNCT__ "PetscViewerGetType"
113 /*@C
114    PetscViewerGetType - Returns the type of a PetscViewer.
115 
116    Not Collective
117 
118    Input Parameter:
119 .   viewer - the PetscViewer
120 
121    Output Parameter:
122 .  type - PetscViewer type (see below)
123 
124    Available Types Include:
125 .  PETSCVIEWERSOCKET - Socket PetscViewer
126 .  PETSCVIEWERASCII - ASCII PetscViewer
127 .  PETSCVIEWERBINARY - binary file PetscViewer
128 .  PETSCVIEWERSTRING - string PetscViewer
129 .  PETSCVIEWERDRAW - drawing PetscViewer
130 
131    Level: intermediate
132 
133    Note:
134    See include/petscviewer.h for a complete list of PetscViewers.
135 
136    PetscViewerType is actually a string
137 
138 .seealso: PetscViewerCreate(), PetscViewerSetType(), PetscViewerType
139 
140 @*/
141 PetscErrorCode  PetscViewerGetType(PetscViewer viewer,PetscViewerType *type)
142 {
143   PetscFunctionBegin;
144   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
145   PetscValidPointer(type,2);
146   *type = ((PetscObject)viewer)->type_name;
147   PetscFunctionReturn(0);
148 }
149 
150 #undef __FUNCT__
151 #define __FUNCT__ "PetscViewerSetOptionsPrefix"
152 /*@C
153    PetscViewerSetOptionsPrefix - Sets the prefix used for searching for all
154    PetscViewer options in the database.
155 
156    Logically Collective on PetscViewer
157 
158    Input Parameter:
159 +  viewer - the PetscViewer context
160 -  prefix - the prefix to prepend to all option names
161 
162    Notes:
163    A hyphen (-) must NOT be given at the beginning of the prefix name.
164    The first character of all runtime options is AUTOMATICALLY the hyphen.
165 
166    Level: advanced
167 
168 .keywords: PetscViewer, set, options, prefix, database
169 
170 .seealso: PetscViewerSetFromOptions()
171 @*/
172 PetscErrorCode  PetscViewerSetOptionsPrefix(PetscViewer viewer,const char prefix[])
173 {
174   PetscErrorCode ierr;
175 
176   PetscFunctionBegin;
177   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
178   ierr = PetscObjectSetOptionsPrefix((PetscObject)viewer,prefix);CHKERRQ(ierr);
179   PetscFunctionReturn(0);
180 }
181 
182 #undef __FUNCT__
183 #define __FUNCT__ "PetscViewerAppendOptionsPrefix"
184 /*@C
185    PetscViewerAppendOptionsPrefix - Appends to the prefix used for searching for all
186    PetscViewer options in the database.
187 
188    Logically Collective on PetscViewer
189 
190    Input Parameters:
191 +  viewer - the PetscViewer context
192 -  prefix - the prefix to prepend to all option names
193 
194    Notes:
195    A hyphen (-) must NOT be given at the beginning of the prefix name.
196    The first character of all runtime options is AUTOMATICALLY the hyphen.
197 
198    Level: advanced
199 
200 .keywords: PetscViewer, append, options, prefix, database
201 
202 .seealso: PetscViewerGetOptionsPrefix()
203 @*/
204 PetscErrorCode  PetscViewerAppendOptionsPrefix(PetscViewer viewer,const char prefix[])
205 {
206   PetscErrorCode ierr;
207 
208   PetscFunctionBegin;
209   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
210   ierr = PetscObjectAppendOptionsPrefix((PetscObject)viewer,prefix);CHKERRQ(ierr);
211   PetscFunctionReturn(0);
212 }
213 
214 #undef __FUNCT__
215 #define __FUNCT__ "PetscViewerGetOptionsPrefix"
216 /*@C
217    PetscViewerGetOptionsPrefix - Sets the prefix used for searching for all
218    PetscViewer options in the database.
219 
220    Not Collective
221 
222    Input Parameter:
223 .  viewer - the PetscViewer context
224 
225    Output Parameter:
226 .  prefix - pointer to the prefix string used
227 
228    Notes: On the fortran side, the user should pass in a string 'prefix' of
229    sufficient length to hold the prefix.
230 
231    Level: advanced
232 
233 .keywords: PetscViewer, get, options, prefix, database
234 
235 .seealso: PetscViewerAppendOptionsPrefix()
236 @*/
237 PetscErrorCode  PetscViewerGetOptionsPrefix(PetscViewer viewer,const char *prefix[])
238 {
239   PetscErrorCode ierr;
240 
241   PetscFunctionBegin;
242   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
243   ierr = PetscObjectGetOptionsPrefix((PetscObject)viewer,prefix);CHKERRQ(ierr);
244   PetscFunctionReturn(0);
245 }
246 
247 #undef __FUNCT__
248 #define __FUNCT__ "PetscViewerSetUp"
249 /*@
250    PetscViewerSetUp - Sets up the internal viewer data structures for the later use.
251 
252    Collective on PetscViewer
253 
254    Input Parameters:
255 .  viewer - the PetscViewer context
256 
257    Notes:
258    For basic use of the PetscViewer classes the user need not explicitly call
259    PetscViewerSetUp(), since these actions will happen automatically.
260 
261    Level: advanced
262 
263 .keywords: PetscViewer, setup
264 
265 .seealso: PetscViewerCreate(), PetscViewerDestroy()
266 @*/
267 PetscErrorCode  PetscViewerSetUp(PetscViewer viewer)
268 {
269   PetscFunctionBegin;
270   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,1);
271   PetscFunctionReturn(0);
272 }
273 
274 #undef __FUNCT__
275 #define __FUNCT__ "PetscViewerView"
276 /*@C
277    PetscViewerView - Visualizes a viewer object.
278 
279    Collective on PetscViewer
280 
281    Input Parameters:
282 +  v - the viewer
283 -  viewer - visualization context
284 
285   Notes:
286   The available visualization contexts include
287 +    PETSC_VIEWER_STDOUT_SELF - standard output (default)
288 .    PETSC_VIEWER_STDOUT_WORLD - synchronized standard
289         output where only the first processor opens
290         the file.  All other processors send their
291         data to the first processor to print.
292 -     PETSC_VIEWER_DRAW_WORLD - graphical display of nonzero structure
293 
294    Level: beginner
295 
296 .seealso: PetscViewerSetFormat(), PetscViewerASCIIOpen(), PetscViewerDrawOpen(),
297           PetscViewerSocketOpen(), PetscViewerBinaryOpen(), PetscViewerLoad()
298 @*/
299 PetscErrorCode  PetscViewerView(PetscViewer v,PetscViewer viewer)
300 {
301   PetscErrorCode    ierr;
302   PetscBool         iascii;
303   PetscViewerFormat format;
304 #if defined(PETSC_HAVE_SAWS)
305   PetscBool         isams;
306 #endif
307 
308   PetscFunctionBegin;
309   PetscValidHeaderSpecific(v,PETSC_VIEWER_CLASSID,1);
310   PetscValidType(v,1);
311   if (!viewer) {
312     ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)v),&viewer);CHKERRQ(ierr);
313   }
314   PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2);
315   PetscCheckSameComm(v,1,viewer,2);
316 
317   ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&iascii);CHKERRQ(ierr);
318 #if defined(PETSC_HAVE_SAWS)
319   ierr = PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERSAWS,&isams);CHKERRQ(ierr);
320 #endif
321   if (iascii) {
322     ierr = PetscViewerGetFormat(viewer,&format);CHKERRQ(ierr);
323     ierr = PetscObjectPrintClassNamePrefixType((PetscObject)v,viewer);CHKERRQ(ierr);
324     if (format == PETSC_VIEWER_DEFAULT || format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) {
325       if (v->format) {
326         ierr = PetscViewerASCIIPrintf(viewer,"  Viewer format = %s\n",PetscViewerFormats[v->format]);CHKERRQ(ierr);
327       }
328       ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr);
329       if (v->ops->view) {
330         ierr = (*v->ops->view)(v,viewer);CHKERRQ(ierr);
331       }
332       ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr);
333     }
334 #if defined(PETSC_HAVE_SAWS)
335   } else if (isams) {
336     if (!((PetscObject)v)->amsmem) {
337       ierr = PetscObjectViewSAWs((PetscObject)v,viewer);CHKERRQ(ierr);
338       if (v->ops->view) {
339         ierr = (*v->ops->view)(v,viewer);CHKERRQ(ierr);
340       }
341     }
342 #endif
343   }
344   PetscFunctionReturn(0);
345 }
346