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