xref: /petsc/include/petscfetypes.h (revision 6524c165f7ddaf30fd7457737f668f984c8ababf)
1*6524c165SJacob Faibussowitsch #ifndef PETSCFETYPES_H
226bd1501SBarry Smith #define PETSCFETYPES_H
3dbe77d9eSMatthew G. Knepley 
4ac09b921SBarry Smith /* SUBMANSEC = FE */
5ac09b921SBarry Smith 
6dbe77d9eSMatthew G. Knepley /*S
7dbe77d9eSMatthew G. Knepley   PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree
8dbe77d9eSMatthew G. Knepley 
929b5c115SMatthew G. Knepley   Level: beginner
10dbe77d9eSMatthew G. Knepley 
11db781477SPatrick Sanan .seealso: `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`
12dbe77d9eSMatthew G. Knepley S*/
13dbe77d9eSMatthew G. Knepley typedef struct _p_PetscSpace *PetscSpace;
14dbe77d9eSMatthew G. Knepley 
15dbe77d9eSMatthew G. Knepley /*S
16dbe77d9eSMatthew G. Knepley   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
17dbe77d9eSMatthew G. Knepley 
18a4ce7ad1SMatthew G. Knepley   Level: beginner
19dbe77d9eSMatthew G. Knepley 
20db781477SPatrick Sanan .seealso: `PetscDualSpaceCreate()`, `PetscSpaceCreate()`, `PetscDualSpaceSetType()`, `PetscDualSpaceType`
21dbe77d9eSMatthew G. Knepley S*/
22dbe77d9eSMatthew G. Knepley typedef struct _p_PetscDualSpace *PetscDualSpace;
23dbe77d9eSMatthew G. Knepley 
2455cc6565SMatthew G. Knepley /*MC
2555cc6565SMatthew G. Knepley   PetscDualSpaceReferenceCell - The type of reference cell
2655cc6565SMatthew G. Knepley 
2787497f52SBarry Smith   Notes: This is used only for automatic creation of reference cells. A `PetscDualSpace` can accept an arbitary `DM` for a reference cell.
2855cc6565SMatthew G. Knepley 
29a4ce7ad1SMatthew G. Knepley   Level: beginner
3055cc6565SMatthew G. Knepley 
31db781477SPatrick Sanan .seealso: `PetscSpace`
3255cc6565SMatthew G. Knepley M*/
339371c9d4SSatish Balay typedef enum {
349371c9d4SSatish Balay   PETSCDUALSPACE_REFCELL_SIMPLEX,
359371c9d4SSatish Balay   PETSCDUALSPACE_REFCELL_TENSOR
369371c9d4SSatish Balay } PetscDualSpaceReferenceCell;
3755cc6565SMatthew G. Knepley PETSC_EXTERN const char *const PetscDualSpaceReferenceCells[];
3855cc6565SMatthew G. Knepley 
394bee2e38SMatthew G. Knepley /*MC
404bee2e38SMatthew G. Knepley   PetscDualSpaceTransformType - The type of function transform
414bee2e38SMatthew G. Knepley 
4287497f52SBarry Smith   Notes:
4387497f52SBarry Smith   These transforms, and their inverses, are used to move functions and functionals between the reference element and real space.
4487497f52SBarry Smith   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,
4587497f52SBarry Smith   so that it acts on real space, we use the pushforward transform $\sigma^*$. The pullback $\sigma_*$ is the inverse transform.
464bee2e38SMatthew G. Knepley 
474bee2e38SMatthew G. Knepley $ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$
484bee2e38SMatthew G. Knepley $ Contravariant Piola: $\sigma^*(F) = 1/|J| J F \circ \phi^{-1)$
494bee2e38SMatthew G. Knepley 
5087497f52SBarry Smith   References:
5187497f52SBarry Smith .    Rognes, Kirby, and Logg, Efficient Assembly of Hdiv and Hrot Conforming Finite Elements, SISC, 31(6), 4130-4151, arXiv 1205.3085, 2010
524bee2e38SMatthew G. Knepley 
53a4ce7ad1SMatthew G. Knepley   Level: beginner
544bee2e38SMatthew G. Knepley 
55db781477SPatrick Sanan .seealso: `PetscDualSpaceGetDeRahm()`
564bee2e38SMatthew G. Knepley M*/
579371c9d4SSatish Balay typedef enum {
589371c9d4SSatish Balay   IDENTITY_TRANSFORM,
599371c9d4SSatish Balay   COVARIANT_PIOLA_TRANSFORM,
609371c9d4SSatish Balay   CONTRAVARIANT_PIOLA_TRANSFORM
619371c9d4SSatish Balay } PetscDualSpaceTransformType;
624bee2e38SMatthew G. Knepley 
63dbe77d9eSMatthew G. Knepley /*S
64dbe77d9eSMatthew G. Knepley   PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element
65dbe77d9eSMatthew G. Knepley 
66a4ce7ad1SMatthew G. Knepley   Level: beginner
67dbe77d9eSMatthew G. Knepley 
68db781477SPatrick Sanan .seealso: `PetscFECreate()`, `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscFESetType()`, `PetscFEType`
69dbe77d9eSMatthew G. Knepley S*/
70dbe77d9eSMatthew G. Knepley typedef struct _p_PetscFE *PetscFE;
71dbe77d9eSMatthew G. Knepley 
72b7e05686SMatthew G. Knepley /*MC
739c3cf19fSMatthew G. Knepley   PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix
74b7e05686SMatthew G. Knepley 
75a4ce7ad1SMatthew G. Knepley   Level: beginner
76b7e05686SMatthew G. Knepley 
77db781477SPatrick Sanan .seealso: `PetscFEIntegrateJacobian()`
78b7e05686SMatthew G. Knepley M*/
799371c9d4SSatish Balay typedef enum {
809371c9d4SSatish Balay   PETSCFE_JACOBIAN,
819371c9d4SSatish Balay   PETSCFE_JACOBIAN_PRE,
829371c9d4SSatish Balay   PETSCFE_JACOBIAN_DYN
839371c9d4SSatish Balay } PetscFEJacobianType;
84b7e05686SMatthew G. Knepley 
85dbe77d9eSMatthew G. Knepley #endif
86