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