xref: /petsc/include/petscfetypes.h (revision 524fe776c8aa733ff2ef43b738fa4e354b69f6ec)
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