xref: /petsc/src/binding/petsc4py/src/petsc4py/PETSc/petscdef.pxi (revision 51b144c619aff302b570817d6f78637b8418d403)
1cdef extern from * nogil:
2
3    enum: PETSC_DECIDE
4    enum: PETSC_DEFAULT
5    enum: PETSC_DETERMINE
6    enum: PETSC_CURRENT
7    enum: PETSC_UNLIMITED
8
9    PetscReal PETSC_INFINITY
10    PetscReal PETSC_NINFINITY
11
12    ctypedef enum PetscInsertMode "InsertMode":
13        PETSC_NOT_SET_VALUES    "NOT_SET_VALUES"
14        PETSC_INSERT_VALUES     "INSERT_VALUES"
15        PETSC_ADD_VALUES        "ADD_VALUES"
16        PETSC_MAX_VALUES        "MAX_VALUES"
17        PETSC_INSERT_ALL_VALUES "INSERT_ALL_VALUES"
18        PETSC_ADD_ALL_VALUES    "ADD_ALL_VALUES"
19        PETSC_INSERT_BC_VALUES  "INSERT_BC_VALUES"
20        PETSC_ADD_BC_VALUES     "ADD_BC_VALUES"
21
22    ctypedef enum PetscScatterMode "ScatterMode":
23        PETSC_SCATTER_FORWARD       "SCATTER_FORWARD"
24        PETSC_SCATTER_REVERSE       "SCATTER_REVERSE"
25        PETSC_SCATTER_FORWARD_LOCAL "SCATTER_FORWARD_LOCAL"
26        PETSC_SCATTER_REVERSE_LOCAL "SCATTER_REVERSE_LOCAL"
27
28    ctypedef enum  PetscNormType "NormType":
29        PETSC_NORM_1          "NORM_1"
30        PETSC_NORM_2          "NORM_2"
31        PETSC_NORM_1_AND_2    "NORM_1_AND_2"
32        PETSC_NORM_FROBENIUS  "NORM_FROBENIUS"
33        PETSC_NORM_INFINITY   "NORM_INFINITY"
34        PETSC_NORM_MAX        "NORM_MAX"
35
36    ctypedef enum PetscCopyMode:
37        PETSC_COPY_VALUES
38        PETSC_OWN_POINTER
39        PETSC_USE_POINTER
40
41cdef inline PetscInsertMode insertmode(object mode) \
42    except <PetscInsertMode>(-1):
43    if   mode is None:  return PETSC_INSERT_VALUES
44    elif mode is True:  return PETSC_ADD_VALUES
45    elif mode is False: return PETSC_INSERT_VALUES
46    else:               return mode
47
48cdef inline PetscScatterMode scattermode(object mode) \
49    except <PetscScatterMode>(-1):
50    if mode is None:  return PETSC_SCATTER_FORWARD
51    if mode is False: return PETSC_SCATTER_FORWARD
52    if mode is True:  return PETSC_SCATTER_REVERSE
53    if isinstance(mode, str):
54        if mode == 'forward': return PETSC_SCATTER_FORWARD
55        if mode == 'reverse': return PETSC_SCATTER_REVERSE
56        else: raise ValueError("unknown scatter mode: %s" % mode)
57    return mode
58