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