xref: /petsc/include/petscspace.h (revision 660d4ad98843aee752412e60a1f499b4a58904d9)
1 /*
2       Objects which encapsulate finite element spaces
3 */
4 #ifndef PETSCSPACE_H
5 #define PETSCSPACE_H
6 #include <petscdm.h>
7 #include <petscdt.h>
8 
9 /* SUBMANSEC = SPACE */
10 
11 /*S
12   PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree
13 
14   Level: beginner
15 
16 .seealso: `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`
17 S*/
18 typedef struct _p_PetscSpace *PetscSpace;
19 
20 PETSC_EXTERN PetscErrorCode PetscFEInitializePackage(void);
21 
22 PETSC_EXTERN PetscClassId PETSCSPACE_CLASSID;
23 
24 /*J
25   PetscSpaceType - String with the name of a PETSc linear space
26 
27   Level: beginner
28 
29 .seealso: `PetscSpaceSetType()`, `PetscSpace`
30 J*/
31 typedef const char *PetscSpaceType;
32 #define PETSCSPACEPOLYNOMIAL "poly"
33 #define PETSCSPACEPTRIMMED   "ptrimmed"
34 #define PETSCSPACETENSOR     "tensor"
35 #define PETSCSPACESUM        "sum"
36 #define PETSCSPACEPOINT      "point"
37 #define PETSCSPACESUBSPACE   "subspace"
38 #define PETSCSPACEWXY        "wxy"
39 
40 PETSC_EXTERN PetscFunctionList PetscSpaceList;
41 PETSC_EXTERN PetscErrorCode    PetscSpaceCreate(MPI_Comm, PetscSpace *);
42 PETSC_EXTERN PetscErrorCode    PetscSpaceDestroy(PetscSpace *);
43 PETSC_EXTERN PetscErrorCode    PetscSpaceSetType(PetscSpace, PetscSpaceType);
44 PETSC_EXTERN PetscErrorCode    PetscSpaceGetType(PetscSpace, PetscSpaceType *);
45 PETSC_EXTERN PetscErrorCode    PetscSpaceSetUp(PetscSpace);
46 PETSC_EXTERN PetscErrorCode    PetscSpaceSetFromOptions(PetscSpace);
47 PETSC_EXTERN PetscErrorCode    PetscSpaceViewFromOptions(PetscSpace, PetscObject, const char[]);
48 
49 PETSC_EXTERN PetscErrorCode PetscSpaceView(PetscSpace, PetscViewer);
50 PETSC_EXTERN PetscErrorCode PetscSpaceRegister(const char[], PetscErrorCode (*)(PetscSpace));
51 PETSC_EXTERN PetscErrorCode PetscSpaceRegisterDestroy(void);
52 
53 PETSC_EXTERN PetscErrorCode PetscSpaceGetDimension(PetscSpace, PetscInt *);
54 PETSC_EXTERN PetscErrorCode PetscSpaceSetNumComponents(PetscSpace, PetscInt);
55 PETSC_EXTERN PetscErrorCode PetscSpaceGetNumComponents(PetscSpace, PetscInt *);
56 PETSC_EXTERN PetscErrorCode PetscSpaceSetNumVariables(PetscSpace, PetscInt);
57 PETSC_EXTERN PetscErrorCode PetscSpaceGetNumVariables(PetscSpace, PetscInt *);
58 PETSC_EXTERN PetscErrorCode PetscSpaceSetDegree(PetscSpace, PetscInt, PetscInt);
59 PETSC_EXTERN PetscErrorCode PetscSpaceGetDegree(PetscSpace, PetscInt *, PetscInt *);
60 PETSC_EXTERN PetscErrorCode PetscSpaceEvaluate(PetscSpace, PetscInt, const PetscReal[], PetscReal[], PetscReal[], PetscReal[]);
61 PETSC_EXTERN PetscErrorCode PetscSpaceGetHeightSubspace(PetscSpace, PetscInt, PetscSpace *);
62 
63 static inline PETSC_DEPRECATED_FUNCTION("Property not used (since v3.17)") PetscErrorCode PetscSpacePolynomialSetSymmetric(PetscSpace sp, PetscBool s)
64 {
65   PetscCheck(!s, PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "PETSCSPACEPOLYNOMIAL does not support symmetric polynomials");
66   return PETSC_SUCCESS;
67 }
68 static inline PETSC_DEPRECATED_FUNCTION("Property not used (since v3.17)") PetscErrorCode PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp, PetscBool *s)
69 {
70   *s = PETSC_FALSE;
71   return PETSC_SUCCESS;
72 }
73 PETSC_EXTERN PetscErrorCode PetscSpacePolynomialSetTensor(PetscSpace, PetscBool);
74 PETSC_EXTERN PetscErrorCode PetscSpacePolynomialGetTensor(PetscSpace, PetscBool *);
75 
76 PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedSetFormDegree(PetscSpace, PetscInt);
77 PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedGetFormDegree(PetscSpace, PetscInt *);
78 
79 PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetNumSubspaces(PetscSpace, PetscInt);
80 PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetNumSubspaces(PetscSpace, PetscInt *);
81 PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetSubspace(PetscSpace, PetscInt, PetscSpace);
82 PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetSubspace(PetscSpace, PetscInt, PetscSpace *);
83 
84 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetNumSubspaces(PetscSpace, PetscInt);
85 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetNumSubspaces(PetscSpace, PetscInt *);
86 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetSubspace(PetscSpace, PetscInt, PetscSpace);
87 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetSubspace(PetscSpace, PetscInt, PetscSpace *);
88 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetConcatenate(PetscSpace, PetscBool);
89 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetConcatenate(PetscSpace, PetscBool *);
90 PETSC_EXTERN PetscErrorCode PetscSpaceCreateSum(PetscInt numSubspaces, const PetscSpace subspaces[], PetscBool concatenate, PetscSpace *sumSpace);
91 
92 PETSC_EXTERN PetscErrorCode PetscSpacePointGetPoints(PetscSpace, PetscQuadrature *);
93 PETSC_EXTERN PetscErrorCode PetscSpacePointSetPoints(PetscSpace, PetscQuadrature);
94 
95 #endif
96