xref: /petsc/include/petscfetypes.h (revision 76be6f4ff3bd4e251c19fc00ebbebfd58b6e7589)
1 #if !defined(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   Notes: This is used only for automatic creation of reference cells. A PetscDualSpace can accept an arbitary DM for a reference cell.
28 
29   Level: beginner
30 
31 .seealso: `PetscSpace`
32 M*/
33 typedef enum { PETSCDUALSPACE_REFCELL_SIMPLEX, PETSCDUALSPACE_REFCELL_TENSOR } PetscDualSpaceReferenceCell;
34 PETSC_EXTERN const char * const PetscDualSpaceReferenceCells[];
35 
36 /*MC
37   PetscDualSpaceTransformType - The type of function transform
38 
39   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.
40 
41 $ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$
42 $ Contravariant Piola: $\sigma^*(F) = 1/|J| J F \circ \phi^{-1)$
43 
44   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
45 
46   Level: beginner
47 
48 .seealso: `PetscDualSpaceGetDeRahm()`
49 M*/
50 typedef enum {IDENTITY_TRANSFORM, COVARIANT_PIOLA_TRANSFORM, CONTRAVARIANT_PIOLA_TRANSFORM} PetscDualSpaceTransformType;
51 
52 /*S
53   PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element
54 
55   Level: beginner
56 
57 .seealso: `PetscFECreate()`, `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscFESetType()`, `PetscFEType`
58 S*/
59 typedef struct _p_PetscFE *PetscFE;
60 
61 /*MC
62   PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix
63 
64   Level: beginner
65 
66 .seealso: `PetscFEIntegrateJacobian()`
67 M*/
68 typedef enum { PETSCFE_JACOBIAN, PETSCFE_JACOBIAN_PRE, PETSCFE_JACOBIAN_DYN } PetscFEJacobianType;
69 
70 #endif
71