1 #if !defined(_PETSCFETYPES_H) 2 #define _PETSCFETYPES_H 3 4 /*S 5 PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree 6 7 Level: intermediate 8 9 Concepts: finite element 10 11 .seealso: PetscSpaceCreate(), PetscDualSpaceCreate(), PetscSpaceSetType(), PetscSpaceType 12 S*/ 13 typedef struct _p_PetscSpace *PetscSpace; 14 15 /*MC 16 PetscSpacePolynomialType - The type of polynomial space 17 18 Notes: 19 $ PETSCSPACE_POLYNOMIALTYPE_P - This is the normal polynomial space of degree q, P_q or Q_q. 20 $ PETSCSPACE_POLYNOMIALTYPE_PMINUS_HDIV - This is the smallest polynomial space contained in P_q/Q_q such that the divergence is in P_{q-1}/Q_{q-1}. Making this space is straightforward: 21 $ P^-_q = P_{q-1} + P_{(q-1)} x 22 $ where P_{(q-1)} is the space of homogeneous polynomials of degree q-1. 23 $ PETSCSPACE_POLYNOMIALTYPE_PMINUS_HCURL - This is the smallest polynomial space contained in P_q/Q_q such that the curl is in P_{q-1}/Q_{q-1}. Making this space is straightforward: 24 $ P^-_q = P_{q-1} + P_{(q-1)} rot x 25 $ where P_{(q-1)} is the space of homogeneous polynomials of degree q-1, and rot x is (-y, x) in 2D, and (z - y, x - z, y - x) in 3D, being the generators of the rotation algebra. 26 27 Level: intermediate 28 29 .seealso: PetscSpace 30 M*/ 31 typedef enum { PETSCSPACE_POLYNOMIALTYPE_P, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HDIV, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HCURL } PetscSpacePolynomialType; 32 PETSC_EXTERN const char * const PetscSpacePolynomialTypes[]; 33 34 /*S 35 PetscDualSpace - PETSc object that manages the dual space to a linear space, e.g. the space of evaluation functionals at the vertices of a triangle 36 37 Level: intermediate 38 39 Concepts: finite element 40 41 .seealso: PetscDualSpaceCreate(), PetscSpaceCreate(), PetscDualSpaceSetType(), PetscDualSpaceType 42 S*/ 43 typedef struct _p_PetscDualSpace *PetscDualSpace; 44 45 /*MC 46 PetscDualSpaceReferenceCell - The type of reference cell 47 48 Notes: This is used only for automatic creation of reference cells. A PetscDualSpace can accept an arbitary DM for a reference cell. 49 50 Level: intermediate 51 52 .seealso: PetscSpace 53 M*/ 54 typedef enum { PETSCDUALSPACE_REFCELL_SIMPLEX, PETSCDUALSPACE_REFCELL_TENSOR } PetscDualSpaceReferenceCell; 55 PETSC_EXTERN const char * const PetscDualSpaceReferenceCells[]; 56 57 /*S 58 PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element 59 60 Level: intermediate 61 62 Concepts: finite element 63 64 .seealso: PetscFECreate(), PetscSpaceCreate(), PetscDualSpaceCreate(), PetscFESetType(), PetscFEType 65 S*/ 66 typedef struct _p_PetscFE *PetscFE; 67 68 /*MC 69 PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix 70 71 Level: intermediate 72 73 .seealso: PetscFEIntegrateJacobian() 74 M*/ 75 typedef enum { PETSCFE_JACOBIAN, PETSCFE_JACOBIAN_PRE, PETSCFE_JACOBIAN_DYN } PetscFEJacobianType; 76 77 #endif 78