1#---------------------------------------------------------------------
2
3cdef inline int setref(void *d, void *s) except -1:
4    cdef PetscObject *dest  = <PetscObject*> d
5    cdef PetscObject source = <PetscObject>  s
6    CHKERR( PetscINCREF(&source) )
7    dest[0] = source
8    return 0
9
10#---------------------------------------------------------------------
11
12# -- Error --
13
14cdef api int PyPetscError_Set(int ierr):
15    return SETERR(ierr)
16
17# -- Comm --
18
19cdef api object PyPetscComm_New(MPI_Comm arg):
20    cdef Comm retv = Comm()
21    retv.comm = arg
22    return retv
23
24cdef api MPI_Comm PyPetscComm_Get(object arg) except *:
25    cdef MPI_Comm retv = MPI_COMM_NULL
26    cdef Comm ob = <Comm?> arg
27    retv = ob.comm
28    return retv
29
30cdef api MPI_Comm* PyPetscComm_GetPtr(object arg) except NULL:
31    cdef MPI_Comm *retv = NULL
32    cdef Comm ob = <Comm?> arg
33    retv = &ob.comm
34    return retv
35
36# -- Object --
37
38cdef api object PyPetscObject_New(PetscObject arg):
39    cdef Object retv = subtype_Object(arg)()
40    setref(&retv.obj[0], arg)
41    return retv
42
43cdef api PetscObject PyPetscObject_Get(object arg) except ? NULL:
44    cdef PetscObject retv = NULL
45    cdef Object ob = <Object?> arg
46    retv = ob.obj[0]
47    return retv
48
49cdef api PetscObject* PyPetscObject_GetPtr(object arg) except NULL:
50    cdef PetscObject *retv = NULL
51    cdef Object ob = <Object?> arg
52    retv = ob.obj
53    return retv
54
55# -- Viewer --
56
57cdef api object PyPetscViewer_New(PetscViewer arg):
58    cdef Viewer retv = Viewer()
59    setref(&retv.vwr, arg)
60    return retv
61
62cdef api PetscViewer PyPetscViewer_Get(object arg) except ? NULL:
63    cdef PetscViewer retv = NULL
64    cdef Viewer ob = <Viewer?> arg
65    retv = ob.vwr
66    return retv
67
68# -- Random --
69
70cdef api object PyPetscRandom_New(PetscRandom arg):
71    cdef Random retv = Random()
72    setref(&retv.rnd, arg)
73    return retv
74
75cdef api PetscRandom PyPetscRandom_Get(object arg) except ? NULL:
76    cdef PetscRandom retv = NULL
77    cdef Random ob = <Random?> arg
78    retv = ob.rnd
79    return retv
80
81# -- IS --
82
83cdef api object PyPetscIS_New(PetscIS arg):
84    cdef IS retv = IS()
85    setref(&retv.iset, arg)
86    return retv
87
88cdef api PetscIS PyPetscIS_Get(object arg) except? NULL:
89    cdef PetscIS retv = NULL
90    cdef IS ob = <IS?> arg
91    retv = ob.iset
92    return retv
93
94# -- LGMap --
95
96cdef api object PyPetscLGMap_New(PetscLGMap arg):
97    cdef LGMap retv = LGMap()
98    setref(&retv.lgm, arg)
99    return retv
100
101cdef api PetscLGMap PyPetscLGMap_Get(object arg) except ? NULL:
102    cdef PetscLGMap retv = NULL
103    cdef LGMap ob = <LGMap?> arg
104    retv = ob.lgm
105    return retv
106
107# -- SF --
108
109cdef api object PyPetscSF_New(PetscSF arg):
110    cdef SF retv = SF()
111    setref(&retv.sf, arg)
112    return retv
113
114cdef api PetscSF PyPetscSF_Get(object arg) except? NULL:
115    cdef PetscSF retv = NULL
116    cdef SF ob = <SF?> arg
117    retv = ob.sf
118    return retv
119
120# -- Vec --
121
122cdef api object PyPetscVec_New(PetscVec arg):
123    cdef Vec retv = Vec()
124    setref(&retv.vec, arg)
125    return retv
126
127cdef api PetscVec PyPetscVec_Get(object arg) except ? NULL:
128    cdef PetscVec retv = NULL
129    cdef Vec ob = <Vec?> arg
130    retv = ob.vec
131    return retv
132
133# -- Scatter --
134
135cdef api object PyPetscScatter_New(PetscScatter arg):
136    cdef Scatter retv = Scatter()
137    setref(&retv.sct, arg)
138    return retv
139
140cdef api PetscScatter PyPetscScatter_Get(object arg) except ? NULL:
141    cdef PetscScatter retv = NULL
142    cdef Scatter ob = <Scatter?> arg
143    retv = ob.sct
144    return retv
145
146# -- Section --
147
148cdef api object PyPetscSection_New(PetscSection arg):
149    cdef Section retv = Section()
150    setref(&retv.sec, arg)
151    return retv
152
153cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
154    cdef PetscSection retv = NULL
155    cdef Section ob = <Section?> arg
156    retv = ob.sec
157    return retv
158
159# -- Mat --
160
161cdef api object PyPetscMat_New(PetscMat arg):
162    cdef Mat retv = Mat()
163    setref(&retv.mat, arg)
164    return retv
165
166cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:
167    cdef PetscMat retv = NULL
168    cdef Mat ob = <Mat?> arg
169    retv = ob.mat
170    return retv
171
172# -- PC --
173
174cdef api object PyPetscPC_New(PetscPC arg):
175    cdef PC retv = PC()
176    setref(&retv.pc, arg)
177    return retv
178
179cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:
180    cdef PetscPC retv = NULL
181    cdef PC ob = <PC?> arg
182    retv = ob.pc
183    return retv
184
185# -- KSP --
186
187cdef api object PyPetscKSP_New(PetscKSP arg):
188    cdef KSP retv = KSP()
189    setref(&retv.ksp, arg)
190    return retv
191
192cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:
193    cdef PetscKSP retv = NULL
194    cdef KSP ob = <KSP?> arg
195    retv = ob.ksp
196    return retv
197
198# -- SNES --
199
200cdef api object PyPetscSNES_New(PetscSNES arg):
201    cdef SNES retv = SNES()
202    setref(&retv.snes, arg)
203    return retv
204
205cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:
206    cdef PetscSNES retv = NULL
207    cdef SNES ob = <SNES?> arg
208    retv = ob.snes
209    return retv
210
211# -- TS --
212
213cdef api object PyPetscTS_New(PetscTS arg):
214    cdef TS retv = TS()
215    setref(&retv.ts, arg)
216    return retv
217
218cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:
219    cdef PetscTS retv = NULL
220    cdef TS ob = <TS?> arg
221    retv = ob.ts
222    return retv
223
224# -- TAO --
225
226cdef api object PyPetscTAO_New(PetscTAO arg):
227    cdef TAO retv = TAO()
228    setref(&retv.tao, arg)
229    return retv
230
231cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
232    cdef PetscTAO retv = NULL
233    cdef TAO ob = <TAO?> arg
234    retv = ob.tao
235    return retv
236
237# -- AO --
238
239cdef api object PyPetscAO_New(PetscAO arg):
240    cdef AO retv = AO()
241    setref(&retv.ao, arg)
242    return retv
243
244cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:
245    cdef PetscAO retv = NULL
246    cdef AO ob = <AO?> arg
247    retv = ob.ao
248    return retv
249
250# -- DM --
251
252cdef api object PyPetscDM_New(PetscDM arg):
253    cdef DM retv = subtype_DM(arg)()
254    setref(&retv.dm, arg)
255    return retv
256
257cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:
258    cdef PetscDM retv = NULL
259    cdef DM ob = <DM?> arg
260    retv = ob.dm
261    return retv
262
263# -- DS --
264
265cdef api object PyPetscDS_New(PetscDS arg):
266    cdef DS retv = DS()
267    setref(&retv.ds, arg)
268    return retv
269
270cdef api PetscDS PyPetscDS_Get(object arg) except ? NULL:
271    cdef PetscDS retv = NULL
272    cdef DS ob = <DS?> arg
273    retv = ob.ds
274    return retv
275
276# -- Partitioner --
277
278cdef api object PyPetscPartitioner_New(PetscPartitioner arg):
279    cdef Partitioner retv = Partitioner()
280    setref(&retv.part, arg)
281    return retv
282
283cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:
284    cdef PetscPartitioner retv = NULL
285    cdef Partitioner ob = <Partitioner?> arg
286    retv = ob.part
287    return retv
288
289# -- FE --
290
291cdef api object PyPetscFE_New(PetscFE arg):
292    cdef FE retv = FE()
293    setref(&retv.fe, arg)
294    return retv
295
296cdef api PetscFE PyPetscFE_Get(object arg) except ? NULL:
297    cdef PetscFE retv = NULL
298    cdef FE ob = <FE?> arg
299    retv = ob.fe
300    return retv
301
302# -- QUAD --
303
304cdef api object PyPetscQuad_New(PetscQuadrature arg):
305    cdef Quad retv = Quad()
306    setref(&retv.quad, arg)
307    return retv
308
309cdef api PetscQuadrature PyPetscQuad_Get(object arg) except ? NULL:
310    cdef PetscQuadrature retv = NULL
311    cdef Quad ob = <Quad?> arg
312    retv = ob.quad
313    return retv
314
315# -- DMLabel --
316
317cdef api object PyPetscDMLabel_New(PetscDMLabel arg):
318    cdef DMLabel retv = DMLabel()
319    setref(&retv.dmlabel, arg)
320    return retv
321
322cdef api PetscDMLabel PyPetscDMLabel_Get(object arg) except ? NULL:
323    cdef PetscDMLabel retv = NULL
324    cdef DMLabel ob = <DMLabel?> arg
325    retv = ob.dmlabel
326    return retv
327
328
329#---------------------------------------------------------------------
330