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