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