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: beginner 8 9 .seealso: PetscSpaceCreate(), PetscDualSpaceCreate(), PetscSpaceSetType(), PetscSpaceType 10 S*/ 11 typedef struct _p_PetscSpace *PetscSpace; 12 13 /*MC 14 PetscSpacePolynomialType - The type of polynomial space 15 16 Notes: 17 $ PETSCSPACE_POLYNOMIALTYPE_P - This is the normal polynomial space of degree q, P_q or Q_q. 18 $ 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: 19 $ P^-_q = P_{q-1} + P_{(q-1)} x 20 $ where P_{(q-1)} is the space of homogeneous polynomials of degree q-1. 21 $ 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: 22 $ P^-_q = P_{q-1} + P_{(q-1)} rot x 23 $ 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. 24 25 Level: beginner 26 27 .seealso: PetscSpace 28 M*/ 29 typedef enum { PETSCSPACE_POLYNOMIALTYPE_P, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HDIV, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HCURL } PetscSpacePolynomialType; 30 PETSC_EXTERN const char * const PetscSpacePolynomialTypes[]; 31 32 /*S 33 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 34 35 Level: beginner 36 37 .seealso: PetscDualSpaceCreate(), PetscSpaceCreate(), PetscDualSpaceSetType(), PetscDualSpaceType 38 S*/ 39 typedef struct _p_PetscDualSpace *PetscDualSpace; 40 41 /*MC 42 PetscDualSpaceReferenceCell - The type of reference cell 43 44 Notes: This is used only for automatic creation of reference cells. A PetscDualSpace can accept an arbitary DM for a reference cell. 45 46 Level: beginner 47 48 .seealso: PetscSpace 49 M*/ 50 typedef enum { PETSCDUALSPACE_REFCELL_SIMPLEX, PETSCDUALSPACE_REFCELL_TENSOR } PetscDualSpaceReferenceCell; 51 PETSC_EXTERN const char * const PetscDualSpaceReferenceCells[]; 52 53 /*MC 54 PetscDualSpaceTransformType - The type of function transform 55 56 Notes: These transforms, and their inverses, are used to move functions and functionals between the reference element and real space. Suppose that we have a mapping $\phi$ which maps the reference cell to real space, and its Jacobian $J$. If we want to transform function $F$ on the reference element, so that it acts on real space, we use the pushforward transform $\sigma^*$. The pullback $\sigma_*$ is the inverse transform. 57 58 $ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$ 59 $ Contravariant Piola: $\sigma^*(F) = 1/|J| J F \circ \phi^{-1)$ 60 61 Note: For details, please see Rognes, Kirby, and Logg, Efficient Assembly of Hdiv and Hrot Conforming Finite Elements, SISC, 31(6), 4130-4151, arXiv 1205.3085, 2010 62 63 Level: beginner 64 65 .seealso: PetscDualSpaceGetDeRahm() 66 M*/ 67 typedef enum {IDENTITY_TRANSFORM, COVARIANT_PIOLA_TRANSFORM, CONTRAVARIANT_PIOLA_TRANSFORM} PetscDualSpaceTransformType; 68 69 /*S 70 PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element 71 72 Level: beginner 73 74 .seealso: PetscFECreate(), PetscSpaceCreate(), PetscDualSpaceCreate(), PetscFESetType(), PetscFEType 75 S*/ 76 typedef struct _p_PetscFE *PetscFE; 77 78 /*MC 79 PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix 80 81 Level: beginner 82 83 .seealso: PetscFEIntegrateJacobian() 84 M*/ 85 typedef enum { PETSCFE_JACOBIAN, PETSCFE_JACOBIAN_PRE, PETSCFE_JACOBIAN_DYN } PetscFEJacobianType; 86 87 #endif 88