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