Actual source code: petscfetypes.h

petsc-master 2019-12-16
Report Typos and Errors
  1: #if !defined(PETSCFETYPES_H)
2: #define PETSCFETYPES_H

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

7:   Level: beginner

9: .seealso: PetscSpaceCreate(), PetscDualSpaceCreate(), PetscSpaceSetType(), PetscSpaceType
10: S*/
11: typedef struct _p_PetscSpace *PetscSpace;

13: /*MC
14:   PetscSpacePolynomialType - The type of polynomial space

16:   Notes:
17: $PETSCSPACE_POLYNOMIALTYPE_P - This is the normal polynomial space of degree q, P_q or Q_q. 18:$ PETSCSPACE_POLYNOMIALTYPE_PMINUS_HDIV - This is the smallest polynomial space contained in P_q/Q_q such that the divergence is in P_{q-1}/Q_{q-1}. Making this space is straightforward:
19: $P^-_q = P_{q-1} + P_{(q-1)} x 20:$ where P_{(q-1)} is the space of homogeneous polynomials of degree q-1.
21: $PETSCSPACE_POLYNOMIALTYPE_PMINUS_HCURL - This is the smallest polynomial space contained in P_q/Q_q such that the curl is in P_{q-1}/Q_{q-1}. Making this space is straightforward: 22:$   P^-_q = P_{q-1} + P_{(q-1)} rot x
23: $where P_{(q-1)} is the space of homogeneous polynomials of degree q-1, and rot x is (-y, x) in 2D, and (z - y, x - z, y - x) in 3D, being the generators of the rotation algebra. 25: Level: beginner 27: .seealso: PetscSpace 28: M*/ 29: typedef enum { PETSCSPACE_POLYNOMIALTYPE_P, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HDIV, PETSCSPACE_POLYNOMIALTYPE_PMINUS_HCURL } PetscSpacePolynomialType; 30: PETSC_EXTERN const char * const PetscSpacePolynomialTypes[]; 32: /*S 33: 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 35: Level: beginner 37: .seealso: PetscDualSpaceCreate(), PetscSpaceCreate(), PetscDualSpaceSetType(), PetscDualSpaceType 38: S*/ 39: typedef struct _p_PetscDualSpace *PetscDualSpace; 41: /*MC 42: PetscDualSpaceReferenceCell - The type of reference cell 44: Notes: This is used only for automatic creation of reference cells. A PetscDualSpace can accept an arbitary DM for a reference cell. 46: Level: beginner 48: .seealso: PetscSpace 49: M*/ 50: typedef enum { PETSCDUALSPACE_REFCELL_SIMPLEX, PETSCDUALSPACE_REFCELL_TENSOR } PetscDualSpaceReferenceCell; 51: PETSC_EXTERN const char * const PetscDualSpaceReferenceCells[]; 53: /*MC 54: PetscDualSpaceTransformType - The type of function transform 56: 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. 58:$ Covariant Piola: $\sigma^*(F) = J^{-T} F \circ \phi^{-1)$
59: $Contravariant Piola:$\sigma^*(F) = 1/|J| J F \circ \phi^{-1)\$

61:   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

63:   Level: beginner

65: .seealso: PetscDualSpaceGetDeRahm()
66: M*/
67: typedef enum {IDENTITY_TRANSFORM, COVARIANT_PIOLA_TRANSFORM, CONTRAVARIANT_PIOLA_TRANSFORM} PetscDualSpaceTransformType;

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

72:   Level: beginner

74: .seealso: PetscFECreate(), PetscSpaceCreate(), PetscDualSpaceCreate(), PetscFESetType(), PetscFEType
75: S*/
76: typedef struct _p_PetscFE *PetscFE;

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

81:   Level: beginner

83: .seealso: PetscFEIntegrateJacobian()
84: M*/
85: typedef enum { PETSCFE_JACOBIAN, PETSCFE_JACOBIAN_PRE, PETSCFE_JACOBIAN_DYN } PetscFEJacobianType;

87: #endif