xref: /petsc/include/petscspace.h (revision 6d8694c4fbab79f9439f1ad13c0386ba7ee1ca4b)
1660d4ad9SBarry Smith /*
2660d4ad9SBarry Smith       Objects which encapsulate finite element spaces
3660d4ad9SBarry Smith */
4a4963045SJacob Faibussowitsch #pragma once
5660d4ad9SBarry Smith #include <petscdm.h>
6660d4ad9SBarry Smith #include <petscdt.h>
7660d4ad9SBarry Smith 
8*ce78bad3SBarry Smith /* MANSEC = DM */
9660d4ad9SBarry Smith /* SUBMANSEC = SPACE */
10660d4ad9SBarry Smith 
11660d4ad9SBarry Smith /*S
12660d4ad9SBarry Smith   PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree
13660d4ad9SBarry Smith 
14660d4ad9SBarry Smith   Level: beginner
15660d4ad9SBarry Smith 
16b24fb147SBarry Smith .seealso: `PetscSpaceCreate()`, `PetscDualSpace`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`, PetscFE`
17660d4ad9SBarry Smith S*/
18660d4ad9SBarry Smith typedef struct _p_PetscSpace *PetscSpace;
19660d4ad9SBarry Smith 
20660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscFEInitializePackage(void);
214bf303faSJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscFEFinalizePackage(void);
22660d4ad9SBarry Smith 
23660d4ad9SBarry Smith PETSC_EXTERN PetscClassId PETSCSPACE_CLASSID;
24660d4ad9SBarry Smith 
25660d4ad9SBarry Smith /*J
26660d4ad9SBarry Smith   PetscSpaceType - String with the name of a PETSc linear space
27660d4ad9SBarry Smith 
28b24fb147SBarry Smith   Values:
29b24fb147SBarry Smith +  `PETSCSPACEPOLYNOMIAL` - a polynomial space, e.g. P1 is the space of linear polynomials
30b24fb147SBarry Smith .  `PETSCSPACEPTRIMMED`   - a trimmed polynomial space
31b24fb147SBarry Smith .  `PETSCSPACETENSOR`     - a space consisting of the tensor product of two or more spaces
32b24fb147SBarry Smith .  `PETSCSPACESUM`        - a direct or a concatenation sum
33b24fb147SBarry Smith .  `PETSCSPACEPOINT`      - functions defined by values on a set of quadrature points
34b24fb147SBarry Smith .  `PETSCSPACESUBSPACE`   - some kind of subspace, no idea what
35b24fb147SBarry Smith -  `PETSCSPACEWXY`        - space that encapsulates the Wheeler-Xu-Yotov enrichments
36b24fb147SBarry Smith 
37660d4ad9SBarry Smith   Level: beginner
38660d4ad9SBarry Smith 
39b24fb147SBarry Smith .seealso: `PetscSpaceSetType()`, `PetscSpace`, `PetscSpaceType`
40660d4ad9SBarry Smith J*/
41660d4ad9SBarry Smith typedef const char *PetscSpaceType;
42660d4ad9SBarry Smith #define PETSCSPACEPOLYNOMIAL "poly"
43660d4ad9SBarry Smith #define PETSCSPACEPTRIMMED   "ptrimmed"
44660d4ad9SBarry Smith #define PETSCSPACETENSOR     "tensor"
45660d4ad9SBarry Smith #define PETSCSPACESUM        "sum"
46660d4ad9SBarry Smith #define PETSCSPACEPOINT      "point"
47660d4ad9SBarry Smith #define PETSCSPACESUBSPACE   "subspace"
48660d4ad9SBarry Smith #define PETSCSPACEWXY        "wxy"
49660d4ad9SBarry Smith 
50660d4ad9SBarry Smith PETSC_EXTERN PetscFunctionList PetscSpaceList;
51660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceCreate(MPI_Comm, PetscSpace *);
52660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceDestroy(PetscSpace *);
53660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceSetType(PetscSpace, PetscSpaceType);
54660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceGetType(PetscSpace, PetscSpaceType *);
55660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceSetUp(PetscSpace);
56660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceSetFromOptions(PetscSpace);
57660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode    PetscSpaceViewFromOptions(PetscSpace, PetscObject, const char[]);
58660d4ad9SBarry Smith 
59660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceView(PetscSpace, PetscViewer);
60660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceRegister(const char[], PetscErrorCode (*)(PetscSpace));
61660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceRegisterDestroy(void);
62660d4ad9SBarry Smith 
63660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetDimension(PetscSpace, PetscInt *);
64660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetNumComponents(PetscSpace, PetscInt);
65660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetNumComponents(PetscSpace, PetscInt *);
66660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetNumVariables(PetscSpace, PetscInt);
67660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetNumVariables(PetscSpace, PetscInt *);
68660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetDegree(PetscSpace, PetscInt, PetscInt);
69660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetDegree(PetscSpace, PetscInt *, PetscInt *);
70660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceEvaluate(PetscSpace, PetscInt, const PetscReal[], PetscReal[], PetscReal[], PetscReal[]);
71660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetHeightSubspace(PetscSpace, PetscInt, PetscSpace *);
72660d4ad9SBarry Smith 
PetscSpacePolynomialSetSymmetric(PetscSpace sp,PetscBool s)73edd03b47SJacob Faibussowitsch static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialSetSymmetric(PetscSpace sp, PetscBool s)
74660d4ad9SBarry Smith {
75660d4ad9SBarry Smith   PetscCheck(!s, PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "PETSCSPACEPOLYNOMIAL does not support symmetric polynomials");
76660d4ad9SBarry Smith   return PETSC_SUCCESS;
77660d4ad9SBarry Smith }
PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp,PetscBool * s)78edd03b47SJacob Faibussowitsch static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp, PetscBool *s)
79660d4ad9SBarry Smith {
80660d4ad9SBarry Smith   *s = PETSC_FALSE;
81660d4ad9SBarry Smith   return PETSC_SUCCESS;
82660d4ad9SBarry Smith }
83660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePolynomialSetTensor(PetscSpace, PetscBool);
84660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePolynomialGetTensor(PetscSpace, PetscBool *);
85660d4ad9SBarry Smith 
86660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedSetFormDegree(PetscSpace, PetscInt);
87660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedGetFormDegree(PetscSpace, PetscInt *);
88660d4ad9SBarry Smith 
89660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetNumSubspaces(PetscSpace, PetscInt);
90660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetNumSubspaces(PetscSpace, PetscInt *);
91660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetSubspace(PetscSpace, PetscInt, PetscSpace);
92660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetSubspace(PetscSpace, PetscInt, PetscSpace *);
93660d4ad9SBarry Smith 
94660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetNumSubspaces(PetscSpace, PetscInt);
95660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetNumSubspaces(PetscSpace, PetscInt *);
96660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetSubspace(PetscSpace, PetscInt, PetscSpace);
97660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetSubspace(PetscSpace, PetscInt, PetscSpace *);
98660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetConcatenate(PetscSpace, PetscBool);
99660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetConcatenate(PetscSpace, PetscBool *);
1002dce792eSToby Isaac PETSC_EXTERN PetscErrorCode PetscSpaceSumSetInterleave(PetscSpace, PetscBool, PetscBool);
1012dce792eSToby Isaac PETSC_EXTERN PetscErrorCode PetscSpaceSumGetInterleave(PetscSpace, PetscBool *, PetscBool *);
1022dce792eSToby Isaac PETSC_EXTERN PetscErrorCode PetscSpaceCreateSum(PetscInt, const PetscSpace[], PetscBool, PetscSpace *);
103660d4ad9SBarry Smith 
104660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointGetPoints(PetscSpace, PetscQuadrature *);
105660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointSetPoints(PetscSpace, PetscQuadrature);
106