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