xref: /petsc/src/binding/petsc4py/src/petsc4py/PETSc/CAPI.pyx (revision 8aa39e1bf17a5ea28fa0458095c26b0a3b4f2478)
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(PetscErrorCode 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? MPI_COMM_NULL:
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# -- Device --
82
83cdef api Device PyPetscDevice_New(PetscDevice arg):
84    cdef Device ret = Device()
85    CHKERR(PetscDeviceReference(arg))
86    ret.device = arg
87    return ret
88
89cdef api PetscDevice PyPetscDevice_Get(object arg) except ? NULL:
90    cdef Device      obj = <Device?>arg
91    cdef PetscDevice ret = obj.device
92    return ret
93
94# -- DeviceContext --
95
96cdef api DeviceContext PyPetscDeviceContext_New(PetscDeviceContext arg):
97    cdef DeviceContext retv = DeviceContext()
98    setref(&retv.dctx, arg)
99    return retv
100
101cdef api PetscDeviceContext PyPetscDeviceContext_Get(object arg) except ? NULL:
102    cdef DeviceContext      obj = <DeviceContext?>arg
103    cdef PetscDeviceContext ret = obj.dctx
104    return ret
105
106# -- IS --
107
108cdef api object PyPetscIS_New(PetscIS arg):
109    cdef IS retv = IS()
110    setref(&retv.iset, arg)
111    return retv
112
113cdef api PetscIS PyPetscIS_Get(object arg) except? NULL:
114    cdef PetscIS retv = NULL
115    cdef IS ob = <IS?> arg
116    retv = ob.iset
117    return retv
118
119# -- LGMap --
120
121cdef api object PyPetscLGMap_New(PetscLGMap arg):
122    cdef LGMap retv = LGMap()
123    setref(&retv.lgm, arg)
124    return retv
125
126cdef api PetscLGMap PyPetscLGMap_Get(object arg) except ? NULL:
127    cdef PetscLGMap retv = NULL
128    cdef LGMap ob = <LGMap?> arg
129    retv = ob.lgm
130    return retv
131
132# -- SF --
133
134cdef api object PyPetscSF_New(PetscSF arg):
135    cdef SF retv = SF()
136    setref(&retv.sf, arg)
137    return retv
138
139cdef api PetscSF PyPetscSF_Get(object arg) except? NULL:
140    cdef PetscSF retv = NULL
141    cdef SF ob = <SF?> arg
142    retv = ob.sf
143    return retv
144
145# -- Vec --
146
147cdef api object PyPetscVec_New(PetscVec arg):
148    cdef Vec retv = Vec()
149    setref(&retv.vec, arg)
150    return retv
151
152cdef api PetscVec PyPetscVec_Get(object arg) except ? NULL:
153    cdef PetscVec retv = NULL
154    cdef Vec ob = <Vec?> arg
155    retv = ob.vec
156    return retv
157
158# -- Scatter --
159
160cdef api object PyPetscScatter_New(PetscScatter arg):
161    cdef Scatter retv = Scatter()
162    setref(&retv.sct, arg)
163    return retv
164
165cdef api PetscScatter PyPetscScatter_Get(object arg) except ? NULL:
166    cdef PetscScatter retv = NULL
167    cdef Scatter ob = <Scatter?> arg
168    retv = ob.sct
169    return retv
170
171# -- Section --
172
173cdef api object PyPetscSection_New(PetscSection arg):
174    cdef Section retv = Section()
175    setref(&retv.sec, arg)
176    return retv
177
178cdef api PetscSection PyPetscSection_Get(object arg) except ? NULL:
179    cdef PetscSection retv = NULL
180    cdef Section ob = <Section?> arg
181    retv = ob.sec
182    return retv
183
184# -- Mat --
185
186cdef api object PyPetscMat_New(PetscMat arg):
187    cdef Mat retv = Mat()
188    setref(&retv.mat, arg)
189    return retv
190
191cdef api PetscMat PyPetscMat_Get(object arg) except ? NULL:
192    cdef PetscMat retv = NULL
193    cdef Mat ob = <Mat?> arg
194    retv = ob.mat
195    return retv
196
197# -- MatPartitioning --
198
199cdef api object PyPetscMatPartitioning_New(PetscMatPartitioning arg):
200    cdef MatPartitioning retv = MatPartitioning()
201    setref(&retv.part, arg)
202    return retv
203
204cdef api PetscMatPartitioning PyPetscMatPartitioning_Get(object arg) except ? NULL:
205    cdef PetscMatPartitioning retv = NULL
206    cdef MatPartitioning ob = <MatPartitioning?> arg
207    retv = ob.part
208    return retv
209
210# -- PC --
211
212cdef api object PyPetscPC_New(PetscPC arg):
213    cdef PC retv = PC()
214    setref(&retv.pc, arg)
215    return retv
216
217cdef api PetscPC PyPetscPC_Get(object arg) except ? NULL:
218    cdef PetscPC retv = NULL
219    cdef PC ob = <PC?> arg
220    retv = ob.pc
221    return retv
222
223# -- KSP --
224
225cdef api object PyPetscKSP_New(PetscKSP arg):
226    cdef KSP retv = KSP()
227    setref(&retv.ksp, arg)
228    return retv
229
230cdef api PetscKSP PyPetscKSP_Get(object arg) except ? NULL:
231    cdef PetscKSP retv = NULL
232    cdef KSP ob = <KSP?> arg
233    retv = ob.ksp
234    return retv
235
236# -- SNES --
237
238cdef api object PyPetscSNES_New(PetscSNES arg):
239    cdef SNES retv = SNES()
240    setref(&retv.snes, arg)
241    return retv
242
243cdef api PetscSNES PyPetscSNES_Get(object arg) except ? NULL:
244    cdef PetscSNES retv = NULL
245    cdef SNES ob = <SNES?> arg
246    retv = ob.snes
247    return retv
248
249cdef api object PyPetscSNESLineSearch_New(PetscSNESLineSearch arg):
250    cdef SNESLineSearch retv = SNESLineSearch()
251    setref(&retv.snesls, arg)
252    return retv
253
254cdef api PetscSNESLineSearch PyPetscSNESLineSearch_Get(object arg) except ? NULL:
255    cdef PetscSNESLineSearch retv = NULL
256    cdef SNESLineSearch ob = <SNESLineSearch?> arg
257    retv = ob.snesls
258    return retv
259
260# -- TS --
261
262cdef api object PyPetscTS_New(PetscTS arg):
263    cdef TS retv = TS()
264    setref(&retv.ts, arg)
265    return retv
266
267cdef api PetscTS PyPetscTS_Get(object arg) except ? NULL:
268    cdef PetscTS retv = NULL
269    cdef TS ob = <TS?> arg
270    retv = ob.ts
271    return retv
272
273# -- TAO --
274
275cdef api object PyPetscTAO_New(PetscTAO arg):
276    cdef TAO retv = TAO()
277    setref(&retv.tao, arg)
278    return retv
279
280cdef api PetscTAO PyPetscTAO_Get(object arg) except ? NULL:
281    cdef PetscTAO retv = NULL
282    cdef TAO ob = <TAO?> arg
283    retv = ob.tao
284    return retv
285
286cdef api object PyPetscTAOLineSearch_New(PetscTAOLineSearch arg):
287    cdef TAOLineSearch retv = TAOLineSearch()
288    setref(&retv.taols, arg)
289    return retv
290
291cdef api PetscTAOLineSearch PyPetscTAOLineSearch_Get(object arg) except ? NULL:
292    cdef PetscTAOLineSearch retv = NULL
293    cdef TAOLineSearch ob = <TAOLineSearch?> arg
294    retv = ob.taols
295    return retv
296
297
298# -- AO --
299
300cdef api object PyPetscAO_New(PetscAO arg):
301    cdef AO retv = AO()
302    setref(&retv.ao, arg)
303    return retv
304
305cdef api PetscAO PyPetscAO_Get(object arg) except ? NULL:
306    cdef PetscAO retv = NULL
307    cdef AO ob = <AO?> arg
308    retv = ob.ao
309    return retv
310
311# -- DM --
312
313cdef api object PyPetscDM_New(PetscDM arg):
314    cdef DM retv = subtype_DM(arg)()
315    setref(&retv.dm, arg)
316    return retv
317
318cdef api PetscDM PyPetscDM_Get(object arg) except ? NULL:
319    cdef PetscDM retv = NULL
320    cdef DM ob = <DM?> arg
321    retv = ob.dm
322    return retv
323
324# -- DS --
325
326cdef api object PyPetscDS_New(PetscDS arg):
327    cdef DS retv = DS()
328    setref(&retv.ds, arg)
329    return retv
330
331cdef api PetscDS PyPetscDS_Get(object arg) except ? NULL:
332    cdef PetscDS retv = NULL
333    cdef DS ob = <DS?> arg
334    retv = ob.ds
335    return retv
336
337# -- Partitioner --
338
339cdef api object PyPetscPartitioner_New(PetscPartitioner arg):
340    cdef Partitioner retv = Partitioner()
341    setref(&retv.part, arg)
342    return retv
343
344cdef api PetscPartitioner PyPetscPartitioner_Get(object arg) except ? NULL:
345    cdef PetscPartitioner retv = NULL
346    cdef Partitioner ob = <Partitioner?> arg
347    retv = ob.part
348    return retv
349
350# -- FE --
351
352cdef api object PyPetscFE_New(PetscFE arg):
353    cdef FE retv = FE()
354    setref(&retv.fe, arg)
355    return retv
356
357cdef api PetscFE PyPetscFE_Get(object arg) except ? NULL:
358    cdef PetscFE retv = NULL
359    cdef FE ob = <FE?> arg
360    retv = ob.fe
361    return retv
362
363# -- QUAD --
364
365cdef api object PyPetscQuad_New(PetscQuadrature arg):
366    cdef Quad retv = Quad()
367    setref(&retv.quad, arg)
368    return retv
369
370cdef api PetscQuadrature PyPetscQuad_Get(object arg) except ? NULL:
371    cdef PetscQuadrature retv = NULL
372    cdef Quad ob = <Quad?> arg
373    retv = ob.quad
374    return retv
375
376# -- DMLabel --
377
378cdef api object PyPetscDMLabel_New(PetscDMLabel arg):
379    cdef DMLabel retv = DMLabel()
380    setref(&retv.dmlabel, arg)
381    return retv
382
383cdef api PetscDMLabel PyPetscDMLabel_Get(object arg) except ? NULL:
384    cdef PetscDMLabel retv = NULL
385    cdef DMLabel ob = <DMLabel?> arg
386    retv = ob.dmlabel
387    return retv
388
389
390# -- SPACE --
391
392cdef api object PyPetscSpace_New(PetscSpace arg):
393    cdef Space retv = Space()
394    setref(&retv.space, arg)
395    return retv
396
397cdef api PetscSpace PyPetscSpace_Get(object arg) except ? NULL:
398    cdef PetscSpace retv = NULL
399    cdef Space ob = <Space?> arg
400    retv = ob.space
401    return retv
402
403# -- DUALSPACE --
404
405cdef api object PyPetscDualSpace_New(PetscDualSpace arg):
406    cdef DualSpace retv = DualSpace()
407    setref(&retv.dualspace, arg)
408    return retv
409
410cdef api PetscDualSpace PyPetscDualSpace_Get(object arg) except ? NULL:
411    cdef PetscDualSpace retv = NULL
412    cdef DualSpace ob = <DualSpace?> arg
413    retv = ob.dualspace
414    return retv
415
416# -- DMSwarmCellDM --
417
418cdef api object PyPetscDMSwarmCellDM_New(PetscDMSwarmCellDM arg):
419    cdef CellDM retv = CellDM()
420    setref(&retv.cdm, arg)
421    return retv
422
423cdef api PetscDMSwarmCellDM PyPetscDMSwarmCellDM_Get(object arg) except ? NULL:
424    cdef PetscDMSwarmCellDM retv = NULL
425    cdef CellDM ob = <CellDM?> arg
426    retv = ob.cdm
427    return retv
428
429# -- PetscRegressor --
430
431cdef api object PyPetscRegressor_New(PetscRegressor arg):
432    cdef Regressor retv = Regressor()
433    setref(&retv.regressor, arg)
434    return retv
435
436cdef api PetscRegressor PyPetscRegressor_Get(object arg) except ? NULL:
437    cdef PetscRegressor retv = NULL
438    cdef Regressor ob = <Regressor?> arg
439    retv = ob.regressor
440    return retv
441
442# ---------------------------------------------------------------------
443