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