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); 21660d4ad9SBarry Smith 22660d4ad9SBarry Smith PETSC_EXTERN PetscClassId PETSCSPACE_CLASSID; 23660d4ad9SBarry Smith 24660d4ad9SBarry Smith /*J 25660d4ad9SBarry Smith PetscSpaceType - String with the name of a PETSc linear space 26660d4ad9SBarry Smith 27b24fb147SBarry Smith Values: 28b24fb147SBarry Smith + `PETSCSPACEPOLYNOMIAL` - a polynomial space, e.g. P1 is the space of linear polynomials 29b24fb147SBarry Smith . `PETSCSPACEPTRIMMED` - a trimmed polynomial space 30b24fb147SBarry Smith . `PETSCSPACETENSOR` - a space consisting of the tensor product of two or more spaces 31b24fb147SBarry Smith . `PETSCSPACESUM` - a direct or a concatenation sum 32b24fb147SBarry Smith . `PETSCSPACEPOINT` - functions defined by values on a set of quadrature points 33b24fb147SBarry Smith . `PETSCSPACESUBSPACE` - some kind of subspace, no idea what 34b24fb147SBarry Smith - `PETSCSPACEWXY` - space that encapsulates the Wheeler-Xu-Yotov enrichments 35b24fb147SBarry Smith 36660d4ad9SBarry Smith Level: beginner 37660d4ad9SBarry Smith 38b24fb147SBarry Smith .seealso: `PetscSpaceSetType()`, `PetscSpace`, `PetscSpaceType` 39660d4ad9SBarry Smith J*/ 40660d4ad9SBarry Smith typedef const char *PetscSpaceType; 41660d4ad9SBarry Smith #define PETSCSPACEPOLYNOMIAL "poly" 42660d4ad9SBarry Smith #define PETSCSPACEPTRIMMED "ptrimmed" 43660d4ad9SBarry Smith #define PETSCSPACETENSOR "tensor" 44660d4ad9SBarry Smith #define PETSCSPACESUM "sum" 45660d4ad9SBarry Smith #define PETSCSPACEPOINT "point" 46660d4ad9SBarry Smith #define PETSCSPACESUBSPACE "subspace" 47660d4ad9SBarry Smith #define PETSCSPACEWXY "wxy" 48660d4ad9SBarry Smith 49660d4ad9SBarry Smith PETSC_EXTERN PetscFunctionList PetscSpaceList; 50660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceCreate(MPI_Comm, PetscSpace *); 51660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceDestroy(PetscSpace *); 52660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetType(PetscSpace, PetscSpaceType); 53660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetType(PetscSpace, PetscSpaceType *); 54660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetUp(PetscSpace); 55660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetFromOptions(PetscSpace); 56660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceViewFromOptions(PetscSpace, PetscObject, const char[]); 57660d4ad9SBarry Smith 58660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceView(PetscSpace, PetscViewer); 59660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceRegister(const char[], PetscErrorCode (*)(PetscSpace)); 60660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceRegisterDestroy(void); 61660d4ad9SBarry Smith 62660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetDimension(PetscSpace, PetscInt *); 63660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetNumComponents(PetscSpace, PetscInt); 64660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetNumComponents(PetscSpace, PetscInt *); 65660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetNumVariables(PetscSpace, PetscInt); 66660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetNumVariables(PetscSpace, PetscInt *); 67660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSetDegree(PetscSpace, PetscInt, PetscInt); 68660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetDegree(PetscSpace, PetscInt *, PetscInt *); 69660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceEvaluate(PetscSpace, PetscInt, const PetscReal[], PetscReal[], PetscReal[], PetscReal[]); 70660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceGetHeightSubspace(PetscSpace, PetscInt, PetscSpace *); 71660d4ad9SBarry Smith 72*edd03b47SJacob Faibussowitsch static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialSetSymmetric(PetscSpace sp, PetscBool s) 73660d4ad9SBarry Smith { 74660d4ad9SBarry Smith PetscCheck(!s, PetscObjectComm((PetscObject)sp), PETSC_ERR_SUP, "PETSCSPACEPOLYNOMIAL does not support symmetric polynomials"); 75660d4ad9SBarry Smith return PETSC_SUCCESS; 76660d4ad9SBarry Smith } 77*edd03b47SJacob Faibussowitsch static inline PETSC_DEPRECATED_FUNCTION(3, 17, 0, "<property not used>", ) PetscErrorCode PetscSpacePolynomialGetSymmetric(PETSC_UNUSED PetscSpace sp, PetscBool *s) 78660d4ad9SBarry Smith { 79660d4ad9SBarry Smith *s = PETSC_FALSE; 80660d4ad9SBarry Smith return PETSC_SUCCESS; 81660d4ad9SBarry Smith } 82660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePolynomialSetTensor(PetscSpace, PetscBool); 83660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePolynomialGetTensor(PetscSpace, PetscBool *); 84660d4ad9SBarry Smith 85660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedSetFormDegree(PetscSpace, PetscInt); 86660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePTrimmedGetFormDegree(PetscSpace, PetscInt *); 87660d4ad9SBarry Smith 88660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetNumSubspaces(PetscSpace, PetscInt); 89660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetNumSubspaces(PetscSpace, PetscInt *); 90660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorSetSubspace(PetscSpace, PetscInt, PetscSpace); 91660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceTensorGetSubspace(PetscSpace, PetscInt, PetscSpace *); 92660d4ad9SBarry Smith 93660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetNumSubspaces(PetscSpace, PetscInt); 94660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetNumSubspaces(PetscSpace, PetscInt *); 95660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetSubspace(PetscSpace, PetscInt, PetscSpace); 96660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetSubspace(PetscSpace, PetscInt, PetscSpace *); 97660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumSetConcatenate(PetscSpace, PetscBool); 98660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceSumGetConcatenate(PetscSpace, PetscBool *); 99660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpaceCreateSum(PetscInt numSubspaces, const PetscSpace subspaces[], PetscBool concatenate, PetscSpace *sumSpace); 100660d4ad9SBarry Smith 101660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointGetPoints(PetscSpace, PetscQuadrature *); 102660d4ad9SBarry Smith PETSC_EXTERN PetscErrorCode PetscSpacePointSetPoints(PetscSpace, PetscQuadrature); 103660d4ad9SBarry Smith 104660d4ad9SBarry Smith #endif 105