xref: /petsc/include/petscfetypes.h (revision db7814771ca77b190574494e87b584e981451db0)
126bd1501SBarry Smith #if !defined(PETSCFETYPES_H)
226bd1501SBarry Smith #define PETSCFETYPES_H
3dbe77d9eSMatthew G. Knepley 
4dbe77d9eSMatthew G. Knepley /*S
5dbe77d9eSMatthew G. Knepley   PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree
6dbe77d9eSMatthew G. Knepley 
729b5c115SMatthew G. Knepley   Level: beginner
8dbe77d9eSMatthew G. Knepley 
9*db781477SPatrick Sanan .seealso: `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`
10dbe77d9eSMatthew G. Knepley S*/
11dbe77d9eSMatthew G. Knepley typedef struct _p_PetscSpace *PetscSpace;
12dbe77d9eSMatthew G. Knepley 
13dbe77d9eSMatthew G. Knepley /*S
14dbe77d9eSMatthew 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
15dbe77d9eSMatthew G. Knepley 
16a4ce7ad1SMatthew G. Knepley   Level: beginner
17dbe77d9eSMatthew G. Knepley 
18*db781477SPatrick Sanan .seealso: `PetscDualSpaceCreate()`, `PetscSpaceCreate()`, `PetscDualSpaceSetType()`, `PetscDualSpaceType`
19dbe77d9eSMatthew G. Knepley S*/
20dbe77d9eSMatthew G. Knepley typedef struct _p_PetscDualSpace *PetscDualSpace;
21dbe77d9eSMatthew G. Knepley 
2255cc6565SMatthew G. Knepley /*MC
2355cc6565SMatthew G. Knepley   PetscDualSpaceReferenceCell - The type of reference cell
2455cc6565SMatthew G. Knepley 
2555cc6565SMatthew G. Knepley   Notes: This is used only for automatic creation of reference cells. A PetscDualSpace can accept an arbitary DM for a reference cell.
2655cc6565SMatthew G. Knepley 
27a4ce7ad1SMatthew G. Knepley   Level: beginner
2855cc6565SMatthew G. Knepley 
29*db781477SPatrick Sanan .seealso: `PetscSpace`
3055cc6565SMatthew G. Knepley M*/
3155cc6565SMatthew G. Knepley typedef enum { PETSCDUALSPACE_REFCELL_SIMPLEX, PETSCDUALSPACE_REFCELL_TENSOR } PetscDualSpaceReferenceCell;
3255cc6565SMatthew G. Knepley PETSC_EXTERN const char * const PetscDualSpaceReferenceCells[];
3355cc6565SMatthew G. Knepley 
344bee2e38SMatthew G. Knepley /*MC
354bee2e38SMatthew G. Knepley   PetscDualSpaceTransformType - The type of function transform
364bee2e38SMatthew G. Knepley 
374bee2e38SMatthew G. Knepley   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.
384bee2e38SMatthew G. Knepley 
394bee2e38SMatthew G. Knepley $ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$
404bee2e38SMatthew G. Knepley $ Contravariant Piola: $\sigma^*(F) = 1/|J| J F \circ \phi^{-1)$
414bee2e38SMatthew G. Knepley 
424bee2e38SMatthew G. Knepley   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
434bee2e38SMatthew G. Knepley 
44a4ce7ad1SMatthew G. Knepley   Level: beginner
454bee2e38SMatthew G. Knepley 
46*db781477SPatrick Sanan .seealso: `PetscDualSpaceGetDeRahm()`
474bee2e38SMatthew G. Knepley M*/
484bee2e38SMatthew G. Knepley typedef enum {IDENTITY_TRANSFORM, COVARIANT_PIOLA_TRANSFORM, CONTRAVARIANT_PIOLA_TRANSFORM} PetscDualSpaceTransformType;
494bee2e38SMatthew G. Knepley 
50dbe77d9eSMatthew G. Knepley /*S
51dbe77d9eSMatthew G. Knepley   PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element
52dbe77d9eSMatthew G. Knepley 
53a4ce7ad1SMatthew G. Knepley   Level: beginner
54dbe77d9eSMatthew G. Knepley 
55*db781477SPatrick Sanan .seealso: `PetscFECreate()`, `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscFESetType()`, `PetscFEType`
56dbe77d9eSMatthew G. Knepley S*/
57dbe77d9eSMatthew G. Knepley typedef struct _p_PetscFE *PetscFE;
58dbe77d9eSMatthew G. Knepley 
59b7e05686SMatthew G. Knepley /*MC
609c3cf19fSMatthew G. Knepley   PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix
61b7e05686SMatthew G. Knepley 
62a4ce7ad1SMatthew G. Knepley   Level: beginner
63b7e05686SMatthew G. Knepley 
64*db781477SPatrick Sanan .seealso: `PetscFEIntegrateJacobian()`
65b7e05686SMatthew G. Knepley M*/
66b7e05686SMatthew G. Knepley typedef enum { PETSCFE_JACOBIAN, PETSCFE_JACOBIAN_PRE, PETSCFE_JACOBIAN_DYN } PetscFEJacobianType;
67b7e05686SMatthew G. Knepley 
68dbe77d9eSMatthew G. Knepley #endif
69