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