Actual source code: petscdraw.h
1: /*
2: Interface to the PETSc graphics
3: */
4: #pragma once
5: #include <petscdrawtypes.h>
6: #include <petscviewertypes.h>
7: #include <petscmath.h>
9: /* MANSEC = Sys */
10: /* SUBMANSEC = Draw */
12: PETSC_EXTERN PetscClassId PETSC_DRAW_CLASSID;
14: PETSC_EXTERN PetscFunctionList PetscDrawList;
15: PETSC_EXTERN PetscErrorCode PetscDrawInitializePackage(void);
16: PETSC_EXTERN PetscErrorCode PetscDrawFinalizePackage(void);
17: PETSC_EXTERN PetscErrorCode PetscDrawRegister(const char[], PetscErrorCode (*)(PetscDraw));
19: PETSC_EXTERN PetscErrorCode PetscDrawGetType(PetscDraw, PetscDrawType *);
20: PETSC_EXTERN PetscErrorCode PetscDrawSetType(PetscDraw, PetscDrawType);
21: PETSC_EXTERN PetscErrorCode PetscDrawCreate(MPI_Comm, const char[], const char[], int, int, int, int, PetscDraw *);
22: PETSC_EXTERN PetscErrorCode PetscDrawSetOptionsPrefix(PetscDraw, const char[]);
23: PETSC_EXTERN PetscErrorCode PetscDrawSetFromOptions(PetscDraw);
24: PETSC_EXTERN PetscErrorCode PetscDrawSetSave(PetscDraw, const char[]);
25: PETSC_EXTERN PetscErrorCode PetscDrawSetSaveMovie(PetscDraw, const char[]);
26: PETSC_EXTERN PetscErrorCode PetscDrawSetSaveFinalImage(PetscDraw, const char[]);
27: PETSC_EXTERN PetscErrorCode PetscDrawView(PetscDraw, PetscViewer);
28: PETSC_EXTERN PetscErrorCode PetscDrawViewFromOptions(PetscDraw, PetscObject, const char[]);
30: /*MC
31: PetscDrawRealToColor - Maps a real value within an interval to a color.
32: The color is an integer value in the range [`PETSC_DRAW_BASIC_COLORS` to 255]
33: that can be passed to various drawing routines.
35: Synopsis:
36: #include <petscdraw.h>
37: int PetscDrawRealToColor(PetscReal value, PetscReal min, PetscReal max)
39: Not Collective
41: Input Parameters:
42: + value - value to map within the interval [`min`, `max`]
43: . min - lower end of interval
44: - max - upper end of interval
46: Returns:
47: The result as integer
49: Level: intermediate
51: Note:
52: Values outside the interval [`min`, `max`] are clipped.
54: .seealso: `PetscDraw`, `PetscDrawPointPixel()`, `PetscDrawPoint()`, `PetscDrawLine()`, `PetscDrawTriangle()`, `PetscDrawRectangle()`
55: M*/
56: static inline int PetscDrawRealToColor(PetscReal value, PetscReal min, PetscReal max)
57: {
58: value = PetscClipInterval(value, min, max);
59: return PETSC_DRAW_BASIC_COLORS + (int)((255 - PETSC_DRAW_BASIC_COLORS) * (value - min) / (max - min));
60: }
62: PETSC_EXTERN PetscErrorCode PetscDrawOpenX(MPI_Comm, const char[], const char[], int, int, int, int, PetscDraw *);
64: PETSC_EXTERN PetscErrorCode PetscDrawOpenImage(MPI_Comm, const char[], int, int, PetscDraw *);
65: PETSC_EXTERN PetscErrorCode PetscDrawOpenNull(MPI_Comm, PetscDraw *);
66: PETSC_EXTERN PetscErrorCode PetscDrawDestroy(PetscDraw *);
67: PETSC_EXTERN PetscErrorCode PetscDrawIsNull(PetscDraw, PetscBool *);
69: PETSC_EXTERN PetscErrorCode PetscDrawGetPopup(PetscDraw, PetscDraw *);
70: PETSC_EXTERN PetscErrorCode PetscDrawScalePopup(PetscDraw, PetscReal, PetscReal);
72: PETSC_EXTERN PetscErrorCode PetscDrawCheckResizedWindow(PetscDraw);
73: PETSC_EXTERN PetscErrorCode PetscDrawResizeWindow(PetscDraw, int, int);
74: PETSC_EXTERN PetscErrorCode PetscDrawGetWindowSize(PetscDraw, int *, int *);
75: PETSC_EXTERN PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw, int, int, PetscReal *, PetscReal *);
76: PETSC_EXTERN PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw, PetscReal, PetscReal, int *, int *);
78: PETSC_EXTERN PetscErrorCode PetscDrawIndicatorFunction(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, int, PetscErrorCode (*)(void *, PetscReal, PetscReal, PetscBool *), void *);
80: PETSC_EXTERN PetscErrorCode PetscDrawLine(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, int);
81: PETSC_EXTERN PetscErrorCode PetscDrawArrow(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, int);
82: PETSC_EXTERN PetscErrorCode PetscDrawLineSetWidth(PetscDraw, PetscReal);
83: PETSC_EXTERN PetscErrorCode PetscDrawLineGetWidth(PetscDraw, PetscReal *);
85: PETSC_EXTERN PetscErrorCode PetscDrawMarker(PetscDraw, PetscReal, PetscReal, int);
86: PETSC_EXTERN PetscErrorCode PetscDrawSetMarkerType(PetscDraw, PetscDrawMarkerType);
87: PETSC_EXTERN PetscErrorCode PetscDrawGetMarkerType(PetscDraw, PetscDrawMarkerType *);
89: PETSC_EXTERN PetscErrorCode PetscDrawPoint(PetscDraw, PetscReal, PetscReal, int);
90: PETSC_EXTERN PetscErrorCode PetscDrawPointPixel(PetscDraw, int, int, int);
91: PETSC_EXTERN PetscErrorCode PetscDrawPointSetSize(PetscDraw, PetscReal);
93: PETSC_EXTERN PetscErrorCode PetscDrawRectangle(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, int, int, int, int);
94: PETSC_EXTERN PetscErrorCode PetscDrawTriangle(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, PetscReal, PetscReal, int, int, int);
95: PETSC_EXTERN PetscErrorCode PetscDrawEllipse(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal, int);
96: PETSC_EXTERN PetscErrorCode PetscDrawTensorContourPatch(PetscDraw, int, int, PetscReal *, PetscReal *, PetscReal, PetscReal, PetscReal *);
97: PETSC_EXTERN PetscErrorCode PetscDrawTensorContour(PetscDraw, int, int, const PetscReal[], const PetscReal[], PetscReal *);
99: PETSC_EXTERN PetscErrorCode PetscDrawString(PetscDraw, PetscReal, PetscReal, int, const char[]);
100: PETSC_EXTERN PetscErrorCode PetscDrawStringCentered(PetscDraw, PetscReal, PetscReal, int, const char[]);
101: PETSC_EXTERN PetscErrorCode PetscDrawStringBoxed(PetscDraw, PetscReal, PetscReal, int, int, const char[], PetscReal *, PetscReal *);
102: PETSC_EXTERN PetscErrorCode PetscDrawStringVertical(PetscDraw, PetscReal, PetscReal, int, const char[]);
103: PETSC_EXTERN PetscErrorCode PetscDrawStringSetSize(PetscDraw, PetscReal, PetscReal);
104: PETSC_EXTERN PetscErrorCode PetscDrawStringGetSize(PetscDraw, PetscReal *, PetscReal *);
106: PETSC_EXTERN PetscErrorCode PetscDrawSetViewPort(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal);
107: PETSC_EXTERN PetscErrorCode PetscDrawGetViewPort(PetscDraw, PetscReal *, PetscReal *, PetscReal *, PetscReal *);
108: PETSC_EXTERN PetscErrorCode PetscDrawSplitViewPort(PetscDraw);
110: PETSC_EXTERN PetscErrorCode PetscDrawSetCoordinates(PetscDraw, PetscReal, PetscReal, PetscReal, PetscReal);
111: PETSC_EXTERN PetscErrorCode PetscDrawGetCoordinates(PetscDraw, PetscReal *, PetscReal *, PetscReal *, PetscReal *);
113: PETSC_EXTERN PetscErrorCode PetscDrawSetTitle(PetscDraw, const char[]);
114: PETSC_EXTERN PetscErrorCode PetscDrawAppendTitle(PetscDraw, const char[]);
115: PETSC_EXTERN PetscErrorCode PetscDrawGetTitle(PetscDraw, const char *[]);
117: PETSC_EXTERN PetscErrorCode PetscDrawSetPause(PetscDraw, PetscReal);
118: PETSC_EXTERN PetscErrorCode PetscDrawGetPause(PetscDraw, PetscReal *);
119: PETSC_EXTERN PetscErrorCode PetscDrawPause(PetscDraw);
120: PETSC_EXTERN PetscErrorCode PetscDrawSetDoubleBuffer(PetscDraw);
121: PETSC_EXTERN PetscErrorCode PetscDrawClear(PetscDraw);
122: PETSC_EXTERN PetscErrorCode PetscDrawFlush(PetscDraw);
123: PETSC_EXTERN PetscErrorCode PetscDrawSave(PetscDraw);
124: PETSC_EXTERN PetscErrorCode PetscDrawSaveMovie(PetscDraw);
125: PETSC_EXTERN PetscErrorCode PetscDrawBOP(PetscDraw);
126: PETSC_EXTERN PetscErrorCode PetscDrawEOP(PetscDraw);
128: PETSC_EXTERN PetscErrorCode PetscDrawSetDisplay(PetscDraw, const char[]);
129: PETSC_EXTERN PetscErrorCode PetscDrawGetSingleton(PetscDraw, PetscDraw *);
130: PETSC_EXTERN PetscErrorCode PetscDrawRestoreSingleton(PetscDraw, PetscDraw *);
132: PETSC_EXTERN PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw, PetscReal *, PetscReal *);
133: PETSC_EXTERN PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw, PetscReal, PetscReal);
134: PETSC_EXTERN PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw, PetscReal, PetscReal);
135: PETSC_EXTERN PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw);
136: PETSC_EXTERN PetscErrorCode PetscDrawGetBoundingBox(PetscDraw, PetscReal *, PetscReal *, PetscReal *, PetscReal *);
138: PETSC_EXTERN PetscErrorCode PetscDrawSetVisible(PetscDraw, PetscBool);
140: PETSC_EXTERN PetscErrorCode PetscDrawGetMouseButton(PetscDraw, PetscDrawButton *, PetscReal *, PetscReal *, PetscReal *, PetscReal *);
142: PETSC_EXTERN PetscErrorCode PetscDrawZoom(PetscDraw, PetscErrorCode (*)(PetscDraw, void *), void *);
144: PETSC_EXTERN PetscErrorCode PetscDrawViewPortsCreate(PetscDraw, PetscInt, PetscDrawViewPorts **);
145: PETSC_EXTERN PetscErrorCode PetscDrawViewPortsCreateRect(PetscDraw, PetscInt, PetscInt, PetscDrawViewPorts **);
146: PETSC_EXTERN PetscErrorCode PetscDrawViewPortsDestroy(PetscDrawViewPorts *);
147: PETSC_EXTERN PetscErrorCode PetscDrawViewPortsSet(PetscDrawViewPorts *, PetscInt);
149: PETSC_EXTERN PetscClassId PETSC_DRAWAXIS_CLASSID;
151: PETSC_EXTERN PetscErrorCode PetscDrawAxisCreate(PetscDraw, PetscDrawAxis *);
152: PETSC_EXTERN PetscErrorCode PetscDrawAxisDestroy(PetscDrawAxis *);
153: PETSC_EXTERN PetscErrorCode PetscDrawAxisDraw(PetscDrawAxis);
154: PETSC_EXTERN PetscErrorCode PetscDrawAxisSetLimits(PetscDrawAxis, PetscReal, PetscReal, PetscReal, PetscReal);
155: PETSC_EXTERN PetscErrorCode PetscDrawAxisGetLimits(PetscDrawAxis, PetscReal *, PetscReal *, PetscReal *, PetscReal *);
156: PETSC_EXTERN PetscErrorCode PetscDrawAxisSetHoldLimits(PetscDrawAxis, PetscBool);
157: PETSC_EXTERN PetscErrorCode PetscDrawAxisSetColors(PetscDrawAxis, int, int, int);
158: PETSC_EXTERN PetscErrorCode PetscDrawAxisSetLabels(PetscDrawAxis, const char[], const char[], const char[]);
160: PETSC_EXTERN PetscClassId PETSC_DRAWLG_CLASSID;
162: PETSC_EXTERN PetscErrorCode PetscDrawLGCreate(PetscDraw, PetscInt, PetscDrawLG *);
163: PETSC_EXTERN PetscErrorCode PetscDrawLGDestroy(PetscDrawLG *);
164: PETSC_EXTERN PetscErrorCode PetscDrawLGAddPoint(PetscDrawLG, const PetscReal *, const PetscReal *);
165: PETSC_EXTERN PetscErrorCode PetscDrawLGAddCommonPoint(PetscDrawLG, const PetscReal, const PetscReal *);
166: PETSC_EXTERN PetscErrorCode PetscDrawLGAddPoints(PetscDrawLG, PetscInt, PetscReal **, PetscReal **);
167: PETSC_EXTERN PetscErrorCode PetscDrawLGDraw(PetscDrawLG);
168: PETSC_EXTERN PetscErrorCode PetscDrawLGSave(PetscDrawLG);
169: PETSC_EXTERN PetscErrorCode PetscDrawLGView(PetscDrawLG, PetscViewer);
170: PETSC_EXTERN PetscErrorCode PetscDrawLGReset(PetscDrawLG);
171: PETSC_EXTERN PetscErrorCode PetscDrawLGSetDimension(PetscDrawLG, PetscInt);
172: PETSC_EXTERN PetscErrorCode PetscDrawLGGetDimension(PetscDrawLG, PetscInt *);
173: PETSC_EXTERN PetscErrorCode PetscDrawLGSetLegend(PetscDrawLG, const char *const *);
174: PETSC_EXTERN PetscErrorCode PetscDrawLGGetAxis(PetscDrawLG, PetscDrawAxis *);
175: PETSC_EXTERN PetscErrorCode PetscDrawLGGetDraw(PetscDrawLG, PetscDraw *);
176: PETSC_EXTERN PetscErrorCode PetscDrawLGSetUseMarkers(PetscDrawLG, PetscBool);
177: PETSC_EXTERN PetscErrorCode PetscDrawLGSetLimits(PetscDrawLG, PetscReal, PetscReal, PetscReal, PetscReal);
178: PETSC_EXTERN PetscErrorCode PetscDrawLGSetColors(PetscDrawLG, const int[]);
179: PETSC_EXTERN PetscErrorCode PetscDrawLGSetOptionsPrefix(PetscDrawLG, const char[]);
180: PETSC_EXTERN PetscErrorCode PetscDrawLGSetFromOptions(PetscDrawLG);
181: PETSC_EXTERN PetscErrorCode PetscDrawLGGetData(PetscDrawLG, PetscInt *, PetscInt *, const PetscReal *[], const PetscReal *[]);
183: PETSC_EXTERN PetscClassId PETSC_DRAWSP_CLASSID;
185: PETSC_EXTERN PetscErrorCode PetscDrawSPCreate(PetscDraw, int, PetscDrawSP *);
186: PETSC_EXTERN PetscErrorCode PetscDrawSPDestroy(PetscDrawSP *);
187: PETSC_EXTERN PetscErrorCode PetscDrawSPAddPoint(PetscDrawSP, PetscReal *, PetscReal *);
188: PETSC_EXTERN PetscErrorCode PetscDrawSPAddPoints(PetscDrawSP, int, PetscReal **, PetscReal **);
189: PETSC_EXTERN PetscErrorCode PetscDrawSPDraw(PetscDrawSP, PetscBool);
190: PETSC_EXTERN PetscErrorCode PetscDrawSPSave(PetscDrawSP);
191: PETSC_EXTERN PetscErrorCode PetscDrawSPReset(PetscDrawSP);
192: PETSC_EXTERN PetscErrorCode PetscDrawSPGetDimension(PetscDrawSP, int *);
193: PETSC_EXTERN PetscErrorCode PetscDrawSPSetDimension(PetscDrawSP, int);
194: PETSC_EXTERN PetscErrorCode PetscDrawSPGetAxis(PetscDrawSP, PetscDrawAxis *);
195: PETSC_EXTERN PetscErrorCode PetscDrawSPGetDraw(PetscDrawSP, PetscDraw *);
196: PETSC_EXTERN PetscErrorCode PetscDrawSPSetLimits(PetscDrawSP, PetscReal, PetscReal, PetscReal, PetscReal);
197: PETSC_EXTERN PetscErrorCode PetscDrawLGSPDraw(PetscDrawLG, PetscDrawSP);
198: PETSC_EXTERN PetscErrorCode PetscDrawSPAddPointColorized(PetscDrawSP, PetscReal *, PetscReal *, PetscReal *);
200: PETSC_EXTERN PetscClassId PETSC_DRAWHG_CLASSID;
202: PETSC_EXTERN PetscErrorCode PetscDrawHGCreate(PetscDraw, int, PetscDrawHG *);
203: PETSC_EXTERN PetscErrorCode PetscDrawHGDestroy(PetscDrawHG *);
204: PETSC_EXTERN PetscErrorCode PetscDrawHGAddValue(PetscDrawHG, PetscReal);
205: PETSC_EXTERN PetscErrorCode PetscDrawHGAddWeightedValue(PetscDrawHG, PetscReal, PetscReal);
206: PETSC_EXTERN PetscErrorCode PetscDrawHGDraw(PetscDrawHG);
207: PETSC_EXTERN PetscErrorCode PetscDrawHGSave(PetscDrawHG);
208: PETSC_EXTERN PetscErrorCode PetscDrawHGView(PetscDrawHG, PetscViewer);
209: PETSC_EXTERN PetscErrorCode PetscDrawHGReset(PetscDrawHG);
210: PETSC_EXTERN PetscErrorCode PetscDrawHGGetAxis(PetscDrawHG, PetscDrawAxis *);
211: PETSC_EXTERN PetscErrorCode PetscDrawHGGetDraw(PetscDrawHG, PetscDraw *);
212: PETSC_EXTERN PetscErrorCode PetscDrawHGSetLimits(PetscDrawHG, PetscReal, PetscReal, int, int);
213: PETSC_EXTERN PetscErrorCode PetscDrawHGSetNumberBins(PetscDrawHG, int);
214: PETSC_EXTERN PetscErrorCode PetscDrawHGSetColor(PetscDrawHG, int);
215: PETSC_EXTERN PetscErrorCode PetscDrawHGCalcStats(PetscDrawHG, PetscBool);
216: PETSC_EXTERN PetscErrorCode PetscDrawHGIntegerBins(PetscDrawHG, PetscBool);
218: PETSC_EXTERN PetscClassId PETSC_DRAWBAR_CLASSID;
220: PETSC_EXTERN PetscErrorCode PetscDrawBarCreate(PetscDraw, PetscDrawBar *);
221: PETSC_EXTERN PetscErrorCode PetscDrawBarSetData(PetscDrawBar, PetscInt, const PetscReal[], const char *const *);
222: PETSC_EXTERN PetscErrorCode PetscDrawBarDestroy(PetscDrawBar *);
223: PETSC_EXTERN PetscErrorCode PetscDrawBarDraw(PetscDrawBar);
224: PETSC_EXTERN PetscErrorCode PetscDrawBarSave(PetscDrawBar);
225: PETSC_EXTERN PetscErrorCode PetscDrawBarSetColor(PetscDrawBar, int);
226: PETSC_EXTERN PetscErrorCode PetscDrawBarSetLimits(PetscDrawBar, PetscReal, PetscReal);
227: PETSC_EXTERN PetscErrorCode PetscDrawBarSort(PetscDrawBar, PetscBool, PetscReal);
228: PETSC_EXTERN PetscErrorCode PetscDrawBarSetFromOptions(PetscDrawBar);
229: PETSC_EXTERN PetscErrorCode PetscDrawBarGetAxis(PetscDrawBar, PetscDrawAxis *);
230: PETSC_EXTERN PetscErrorCode PetscDrawBarGetDraw(PetscDrawBar, PetscDraw *);
232: PETSC_EXTERN PetscErrorCode PetscDrawUtilitySetCmap(const char[], int, unsigned char[], unsigned char[], unsigned char[]);
233: PETSC_EXTERN PetscErrorCode PetscDrawUtilitySetGamma(PetscReal);
235: /*
236: Handling of X11 I/O window resizing, window closing and errors in parallel
237: */
238: #if PetscDefined(HAVE_X) && PetscDefined(HAVE_SETJMP_H)
239: #include <setjmp.h>
241: PETSC_EXTERN jmp_buf PetscXIOErrorHandlerJumpBuf;
242: PETSC_EXTERN void PetscXIOErrorHandlerJump(void *);
243: /*S
244: PetscXIOErrorHandlerFn - Function type for the X11 I/O error handler installed by `PetscSetXIOErrorHandler()`, called when the X server connection is lost
246: Calling Sequence:
247: . display - the X `Display *` whose connection has failed (passed as `void *` to avoid pulling in X headers)
249: Level: developer
251: Note:
252: By default PETSc installs a handler that gracefully aborts the program rather than letting Xlib call `exit()`.
254: .seealso: `PetscDraw`, `PetscSetXIOErrorHandler()`
255: S*/
256: PETSC_EXTERN_TYPEDEF typedef void PetscXIOErrorHandlerFn(void *display);
257: PETSC_EXTERN_TYPEDEF typedef PetscXIOErrorHandlerFn *PetscXIOErrorHandler PETSC_DEPRECATED_TYPEDEF(3, 26, 0, "PetscXIOErrorHandlerFn*", );
258: PETSC_EXTERN PetscXIOErrorHandlerFn *PetscSetXIOErrorHandler(PetscXIOErrorHandlerFn *);
260: /*MC
261: PetscDrawCollectiveBegin - Begins a set of draw operations
263: Collective
265: Synopsis:
266: #include <petscdraw.h>
267: PetscErrorCode PetscDrawCollectiveBegin(PetscDraw draw)
269: Collective
271: Input Parameter:
272: . draw - the draw object
274: Level: advanced
276: Notes:
277: This is a macro that handles its own error checking, it does not return an error code.
279: The set of operations needs to be ended by a call to `PetscDrawCollectiveEnd()`.
281: X windows draw operations that are enclosed by these routines handle correctly resizing or closing of
282: the window without crashing the program.
284: Developer Note:
285: This only applies to X windows and so should have a more specific name such as `PetscDrawXCollectiveBegin()`
287: .seealso: `PetscDraw`, `PetscDrawCollectiveEnd()`
288: M*/
289: #define PetscDrawCollectiveBegin(draw) \
290: do { \
291: jmp_buf _Petsc_jmpbuf; \
292: PetscXIOErrorHandlerFn *volatile _Petsc_xioerrhdl = PETSC_NULLPTR; \
293: PetscBool _Petsc_isdrawx, _Petsc_xioerr = PETSC_FALSE; \
294: PetscCall(PetscObjectTypeCompare((PetscObject)(draw), PETSC_DRAW_X, &_Petsc_isdrawx)); \
295: if (_Petsc_isdrawx) { \
296: PetscCall(PetscMemcpy(&_Petsc_jmpbuf, &PetscXIOErrorHandlerJumpBuf, sizeof(_Petsc_jmpbuf))); \
297: _Petsc_xioerrhdl = PetscSetXIOErrorHandler(PetscXIOErrorHandlerJump); \
298: if (setjmp(PetscXIOErrorHandlerJumpBuf)) { \
299: _Petsc_xioerr = PETSC_TRUE; \
300: do { \
301: PetscDrawCollectiveEnd(draw); \
302: } \
303: } \
304: do { \
305: } while (0)
307: /*MC
308: PetscDrawCollectiveEnd - Ends a set of draw operations begun with `PetscDrawCollectiveBegin()`
310: Collective
312: Synopsis:
313: #include <petscdraw.h>
314: PetscErrorCode PetscDrawCollectiveEnd(PetscDraw draw)
316: Collective
318: Input Parameter:
319: . draw - the draw object
321: Level: advanced
323: Notes:
324: This is a macro that handles its own error checking, it does not return an error code.
326: X windows draw operations that are enclosed by these routines handle correctly resizing or closing of
327: the window without crashing the program.
329: Developer Note:
330: This only applies to X windows and so should have a more specific name such as `PetscDrawXCollectiveEnd()`
332: .seealso: `PetscDraw`, `PetscDrawCollectiveBegin()`
333: M*/
334: #define PetscDrawCollectiveEnd(draw) \
335: if (_Petsc_isdrawx) { \
336: (void)PetscSetXIOErrorHandler(_Petsc_xioerrhdl); \
337: PetscCall(PetscMemcpy(&PetscXIOErrorHandlerJumpBuf, &_Petsc_jmpbuf, sizeof(PetscXIOErrorHandlerJumpBuf))); \
338: PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE, &_Petsc_xioerr, 1, MPI_C_BOOL, MPI_LOR, PetscObjectComm((PetscObject)(draw)))); \
339: if (_Petsc_xioerr) { \
340: PetscCall(PetscDrawSetType((draw), PETSC_DRAW_NULL)); \
341: PetscFunctionReturn(PETSC_SUCCESS); \
342: } \
343: } \
344: } \
345: while (0)
347: #else
348: #define PetscDrawCollectiveBegin(draw)
349: #define PetscDrawCollectiveEnd(draw)
350: #endif /* PetscDefined(HAVE_X) && PetscDefined(HAVE_SETJMP_H) */
352: PETSC_EXTERN PetscErrorCode PetscViewerDrawGetDrawType(PetscViewer, PetscDrawType *);
353: PETSC_EXTERN PetscErrorCode PetscViewerDrawSetTitle(PetscViewer, const char[]);
354: PETSC_EXTERN PetscErrorCode PetscViewerDrawGetTitle(PetscViewer, const char *[]);
355: PETSC_EXTERN PetscErrorCode PetscViewerDrawGetDraw(PetscViewer, PetscInt, PetscDraw *);
356: PETSC_EXTERN PetscErrorCode PetscViewerDrawBaseAdd(PetscViewer, PetscInt);
357: PETSC_EXTERN PetscErrorCode PetscViewerDrawBaseSet(PetscViewer, PetscInt);
358: PETSC_EXTERN PetscErrorCode PetscViewerDrawGetDrawLG(PetscViewer, PetscInt, PetscDrawLG *);
359: PETSC_EXTERN PetscErrorCode PetscViewerDrawGetDrawAxis(PetscViewer, PetscInt, PetscDrawAxis *);