1 /*
2 Objects which encapsulate finite element spaces
3 */
4 #pragma once
5 #include <petscdm.h>
6 #include <petscdt.h>
7
8 /* MANSEC = DM */
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()`, `PetscDualSpace`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`, PetscFE`
17 S*/
18 typedef struct _p_PetscSpace *PetscSpace;
19
20 PETSC_EXTERN PetscErrorCode PetscFEInitializePackage(void);
21 PETSC_EXTERN PetscErrorCode PetscFEFinalizePackage(void);
22
23 PETSC_EXTERN PetscClassId PETSCSPACE_CLASSID;
24
25 /*J
26 PetscSpaceType - String with the name of a PETSc linear space
27
28 Values:
29 + `PETSCSPACEPOLYNOMIAL` - a polynomial space, e.g. P1 is the space of linear polynomials
30 . `PETSCSPACEPTRIMMED` - a trimmed polynomial space
31 . `PETSCSPACETENSOR` - a space consisting of the tensor product of two or more spaces
32 . `PETSCSPACESUM` - a direct or a concatenation sum
33 . `PETSCSPACEPOINT` - functions defined by values on a set of quadrature points
34 . `PETSCSPACESUBSPACE` - some kind of subspace, no idea what
35 - `PETSCSPACEWXY` - space that encapsulates the Wheeler-Xu-Yotov enrichments
36
37 Level: beginner
38
39 .seealso: `PetscSpaceSetType()`, `PetscSpace`, `PetscSpaceType`
40 J*/
41 typedef const char *PetscSpaceType;
42 #define PETSCSPACEPOLYNOMIAL "poly"
43 #define PETSCSPACEPTRIMMED "ptrimmed"
44 #define PETSCSPACETENSOR "tensor"
45 #define PETSCSPACESUM "sum"
46 #define PETSCSPACEPOINT "point"
47 #define PETSCSPACESUBSPACE "subspace"
48 #define PETSCSPACEWXY "wxy"
49
50 PETSC_EXTERN PetscFunctionList PetscSpaceList;
51 PETSC_EXTERN PetscErrorCode PetscSpaceCreate(MPI_Comm, PetscSpace *);
52 PETSC_EXTERN PetscErrorCode PetscSpaceDestroy(PetscSpace *);
53 PETSC_EXTERN PetscErrorCode PetscSpaceSetType(PetscSpace, PetscSpaceType);
54 PETSC_EXTERN PetscErrorCode PetscSpaceGetType(PetscSpace, PetscSpaceType *);
55 PETSC_EXTERN PetscErrorCode PetscSpaceSetUp(PetscSpace);
56 PETSC_EXTERN PetscErrorCode PetscSpaceSetFromOptions(PetscSpace);
57 PETSC_EXTERN PetscErrorCode PetscSpaceViewFromOptions(PetscSpace, PetscObject, const char[]);
58
59 PETSC_EXTERN PetscErrorCode PetscSpaceView(PetscSpace, PetscViewer);
60 PETSC_EXTERN PetscErrorCode PetscSpaceRegister(const char[], PetscErrorCode (*)(PetscSpace));
61 PETSC_EXTERN PetscErrorCode PetscSpaceRegisterDestroy(void);
62
63 PETSC_EXTERN PetscErrorCode PetscSpaceGetDimension(PetscSpace, PetscInt *);
64 PETSC_EXTERN PetscErrorCode PetscSpaceSetNumComponents(PetscSpace, PetscInt);
65 PETSC_EXTERN PetscErrorCode PetscSpaceGetNumComponents(PetscSpace, PetscInt *);
66 PETSC_EXTERN PetscErrorCode PetscSpaceSetNumVariables(PetscSpace, PetscInt);
67 PETSC_EXTERN PetscErrorCode PetscSpaceGetNumVariables(PetscSpace, PetscInt *);
68 PETSC_EXTERN PetscErrorCode PetscSpaceSetDegree(PetscSpace, PetscInt, PetscInt);
69 PETSC_EXTERN PetscErrorCode PetscSpaceGetDegree(PetscSpace, PetscInt *, PetscInt *);
70 PETSC_EXTERN PetscErrorCode PetscSpaceEvaluate(PetscSpace, PetscInt, const PetscReal[], PetscReal[], PetscReal[], PetscReal[]);
71 PETSC_EXTERN PetscErrorCode PetscSpaceGetHeightSubspace(PetscSpace, PetscInt, PetscSpace *);
72
PetscSpacePolynomialSetSymmetric(PetscSpace sp,PetscBool s)73 static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialSetSymmetric(PetscSpace sp, PetscBool s)
74 {
75 PetscCheck(!s, PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "PETSCSPACEPOLYNOMIAL does not support symmetric polynomials");
76 return PETSC_SUCCESS;
77 }
PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp,PetscBool * s)78 static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp, PetscBool *s)
79 {
80 *s = PETSC_FALSE;
81 return PETSC_SUCCESS;
82 }
83 PETSC_EXTERN PetscErrorCode PetscSpacePolynomialSetTensor(PetscSpace, PetscBool);
84 PETSC_EXTERN PetscErrorCode PetscSpacePolynomialGetTensor(PetscSpace, PetscBool *);
85
86 PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedSetFormDegree(PetscSpace, PetscInt);
87 PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedGetFormDegree(PetscSpace, PetscInt *);
88
89 PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetNumSubspaces(PetscSpace, PetscInt);
90 PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetNumSubspaces(PetscSpace, PetscInt *);
91 PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetSubspace(PetscSpace, PetscInt, PetscSpace);
92 PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetSubspace(PetscSpace, PetscInt, PetscSpace *);
93
94 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetNumSubspaces(PetscSpace, PetscInt);
95 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetNumSubspaces(PetscSpace, PetscInt *);
96 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetSubspace(PetscSpace, PetscInt, PetscSpace);
97 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetSubspace(PetscSpace, PetscInt, PetscSpace *);
98 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetConcatenate(PetscSpace, PetscBool);
99 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetConcatenate(PetscSpace, PetscBool *);
100 PETSC_EXTERN PetscErrorCode PetscSpaceSumSetInterleave(PetscSpace, PetscBool, PetscBool);
101 PETSC_EXTERN PetscErrorCode PetscSpaceSumGetInterleave(PetscSpace, PetscBool *, PetscBool *);
102 PETSC_EXTERN PetscErrorCode PetscSpaceCreateSum(PetscInt, const PetscSpace[], PetscBool, PetscSpace *);
103
104 PETSC_EXTERN PetscErrorCode PetscSpacePointGetPoints(PetscSpace, PetscQuadrature *);
105 PETSC_EXTERN PetscErrorCode PetscSpacePointSetPoints(PetscSpace, PetscQuadrature);
106