1660d4ad9SBarry Smith /* 2660d4ad9SBarry Smith Objects which encapsulate finite element spaces 3660d4ad9SBarry Smith */ 4660d4ad9SBarry Smith #ifndef PETSCSPACE_H 5660d4ad9SBarry Smith #define PETSCSPACE_H 6660d4ad9SBarry Smith #include <petscdm.h> 7660d4ad9SBarry Smith #include <petscdt.h> 8660d4ad9SBarry Smith 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); 21*4bf303faSJacob 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 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 } 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 *); 100660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceCreateSum(PetscInt numSubspaces, const PetscSpace subspaces[], PetscBool concatenate, PetscSpace *sumSpace); 101660d4ad9SBarry Smith 102660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointGetPoints(PetscSpace, PetscQuadrature *); 103660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointSetPoints(PetscSpace, PetscQuadrature); 104660d4ad9SBarry Smith 105660d4ad9SBarry Smith #endif 106