Actual source code: petscfetypes.h

  1: #ifndef PETSCFETYPES_H
  2: #define PETSCFETYPES_H

  4: /* SUBMANSEC = FE */

  6: /*S
  7:   PetscSpace - PETSc object that manages a linear space, e.g. the space of d-dimensional polynomials of given degree

  9:   Level: beginner

 11: .seealso: `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscSpaceSetType()`, `PetscSpaceType`
 12: S*/
 13: typedef struct _p_PetscSpace *PetscSpace;

 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

 18:   Level: beginner

 20: .seealso: `PetscDualSpaceCreate()`, `PetscSpaceCreate()`, `PetscDualSpaceSetType()`, `PetscDualSpaceType`
 21: S*/
 22: typedef struct _p_PetscDualSpace *PetscDualSpace;

 24: /*MC
 25:   PetscDualSpaceReferenceCell - The type of reference cell

 27:   Notes: This is used only for automatic creation of reference cells. A `PetscDualSpace` can accept an arbitrary `DM` for a reference cell.

 29:   Level: beginner

 31: .seealso: `PetscSpace`
 32: M*/
 33: typedef enum {
 34:   PETSCDUALSPACE_REFCELL_SIMPLEX,
 35:   PETSCDUALSPACE_REFCELL_TENSOR
 36: } PetscDualSpaceReferenceCell;
 37: PETSC_EXTERN const char *const PetscDualSpaceReferenceCells[];

 39: /*MC
 40:   PetscDualSpaceTransformType - The type of function transform

 42:   Notes:
 43:   These transforms, and their inverses, are used to move functions and functionals between the reference element and real space.
 44:   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,
 45:   so that it acts on real space, we use the pushforward transform $\sigma^*$. The pullback $\sigma_*$ is the inverse transform.

 47: $ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$
 48: $ Contravariant Piola: $\sigma^*(F) = 1/|J| J F \circ \phi^{-1)$

 50:   References:
 51: .    Rognes, Kirby, and Logg, Efficient Assembly of Hdiv and Hrot Conforming Finite Elements, SISC, 31(6), 4130-4151, arXiv 1205.3085, 2010

 53:   Level: beginner

 55: .seealso: `PetscDualSpaceGetDeRahm()`
 56: M*/
 57: typedef enum {
 58:   IDENTITY_TRANSFORM,
 59:   COVARIANT_PIOLA_TRANSFORM,
 60:   CONTRAVARIANT_PIOLA_TRANSFORM
 61: } PetscDualSpaceTransformType;

 63: /*S
 64:   PetscFE - PETSc object that manages a finite element space, e.g. the P_1 Lagrange element

 66:   Level: beginner

 68: .seealso: `PetscFECreate()`, `PetscSpaceCreate()`, `PetscDualSpaceCreate()`, `PetscFESetType()`, `PetscFEType`
 69: S*/
 70: typedef struct _p_PetscFE *PetscFE;

 72: /*MC
 73:   PetscFEJacobianType - indicates which pointwise functions should be used to fill the Jacobian matrix

 75:   Level: beginner

 77: .seealso: `PetscFEIntegrateJacobian()`
 78: M*/
 79: typedef enum {
 80:   PETSCFE_JACOBIAN,
 81:   PETSCFE_JACOBIAN_PRE,
 82:   PETSCFE_JACOBIAN_DYN
 83: } PetscFEJacobianType;

 85: #endif