xref: /petsc/src/sys/classes/viewer/impls/python/pythonviewer.c (revision 3f02e49b19195914bf17f317a25cb39636853415)
1 #include "petscsystypes.h"
2 #include <petsc/private/viewerimpl.h> /*I     "petscsys.h"   I*/
3 
4 /*@
5    PetscViewerPythonSetType - Initialize a `PetscViewer` object implemented in Python.
6 
7    Collective
8 
9    Input Parameters:
10 +  viewer - the viewer object.
11 -  pyname - full dotted Python name [package].module[.{class|function}]
12 
13    Options Database Key:
14 .  -viewer_python_type <pyname> - python class
15 
16    Level: intermediate
17 
18 .seealso: [](sec_viewers), `PetscViewer`, `PetscViewerType`, `PetscViewerCreate()`, `PetscViewerSetType()`, `PETSCVIEWERPYTHON`, `PetscPythonInitialize()`
19 @*/
20 PetscErrorCode PetscViewerPythonSetType(PetscViewer viewer, const char pyname[])
21 {
22   PetscFunctionBegin;
23   PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 1);
24   PetscAssertPointer(pyname, 2);
25   PetscTryMethod(viewer, "PetscViewerPythonSetType_C", (PetscViewer, const char[]), (viewer, pyname));
26   PetscFunctionReturn(PETSC_SUCCESS);
27 }
28 
29 /*@
30    PetscViewerPythonGetType - Get the Python name of a `PetscViewer` object implemented in Python.
31 
32    Not Collective
33 
34    Input Parameter:
35 .  viewer - the viewer
36 
37    Output Parameter:
38 .  pyname - full dotted Python name [package].module[.{class|function}]
39 
40    Level: intermediate
41 
42 .seealso: [](sec_viewers), `PetscViewer`, `PetscViewerType`, `PetscViewerCreate()`, `PetscViewerSetType()`, `PETSCVIEWERPYTHON`, `PetscPythonInitialize()`, `PetscViewerPythonSetType()`
43 @*/
44 PetscErrorCode PetscViewerPythonGetType(PetscViewer viewer, const char *pyname[])
45 {
46   PetscFunctionBegin;
47   PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 1);
48   PetscAssertPointer(pyname, 2);
49   PetscUseMethod(viewer, "PetscViewerPythonGetType_C", (PetscViewer, const char *[]), (viewer, pyname));
50   PetscFunctionReturn(PETSC_SUCCESS);
51 }
52 
53 /*@
54    PetscViewerPythonViewObject - View a `PetscObject`.
55 
56    Collective
57 
58    Input Parameters:
59 +  viewer - the viewer object.
60 -  obj - the object to be viewed.
61 
62    Level: intermediate
63 
64 .seealso: [](sec_viewers), `PetscViewer`, `PetscViewerPythonCreate()`
65 @*/
66 PetscErrorCode PetscViewerPythonViewObject(PetscViewer viewer, PetscObject obj)
67 {
68   PetscFunctionBegin;
69   PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 1);
70   PetscValidHeader(obj, 2);
71   PetscTryMethod(viewer, "PetscViewerPythonViewObject_C", (PetscViewer, PetscObject), (viewer, obj));
72   PetscFunctionReturn(PETSC_SUCCESS);
73 }
74 
75 /*@
76    PetscViewerPythonCreate - Create a `PetscViewer` object implemented in Python.
77 
78    Collective
79 
80    Input Parameters:
81 +  comm - MPI communicator
82 -  pyname - full dotted Python name [package].module[.{class|function}]
83 
84    Output Parameter:
85 .  viewer - the viewer
86 
87    Level: intermediate
88 
89 .seealso: [](sec_viewers), `PetscViewer`, `PetscViewerType`, `PETSCVIEWERPYTHON`, `PetscViewerPythonSetType()`, `PetscPythonInitialize()`, `PetscViewerPythonViewObject()`
90 @*/
91 PetscErrorCode PetscViewerPythonCreate(MPI_Comm comm, const char pyname[], PetscViewer *viewer)
92 {
93   PetscFunctionBegin;
94   PetscAssertPointer(pyname, 2);
95   PetscAssertPointer(viewer, 3);
96   PetscCall(PetscViewerCreate(comm, viewer));
97   PetscCall(PetscViewerSetType(*viewer, PETSCVIEWERPYTHON));
98   PetscCall(PetscViewerPythonSetType(*viewer, pyname));
99   PetscFunctionReturn(PETSC_SUCCESS);
100 }
101 
102 /*@C
103      PETSC_VIEWER_PYTHON_ - Creates a Python `PetscViewer` shared by all MPI processes in a communicator.
104 
105      Collective
106 
107      Input Parameter:
108 .    comm - the MPI communicator to share the `PetscViewer`
109 
110      Level: developer
111 
112      Note:
113      Unlike almost all other PETSc routines, `PETSC_VIEWER_PYTHON_()` does not return
114      an error code.  It is usually used in the form
115    .vb
116           XXXView(XXX object, PETSC_VIEWER_PYTHON_(comm));
117    .ve
118 
119 .seealso: [](sec_viewers), `PetscViewer`
120 @*/
121 PetscViewer PETSC_VIEWER_PYTHON_(MPI_Comm comm)
122 {
123   PetscViewer viewer;
124 
125   PetscFunctionBegin;
126   PetscCallNull(PetscViewerCreate(comm, &viewer));
127   PetscCallNull(PetscViewerSetType(viewer, PETSCVIEWERPYTHON));
128   PetscCallNull(PetscObjectRegisterDestroy((PetscObject)viewer));
129   PetscFunctionReturn(viewer);
130 }
131 
132 /*MC
133    PETSCVIEWERPYTHON - A viewer implemented using Python code
134 
135   Level: beginner
136 
137   Notes:
138   This is the parent viewer for any implemented in Python.
139 
140 .seealso: [](sec_viewers), `PetscViewer`, `PetscViewerCreate()`, `VecView()`, `DMView()`, `DMPLEX`, `PETSCVIEWERPYVISTA`
141 M*/
142