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