Type hierarchy

The root of the type hierarchy tree in ReferenceFiniteElements is the following abstract type.

ReferenceFiniteElements.AbstractElementTypeType
abstract type AbstractElementType{D, V, E, F, I, P, Q}

Base type for the package that all element types are subtyped off of. The parameters have the following general meaning.

$D$ - Dimension

$V$ - Number of vertices

$E$ - Number of edges

$F$ - Number of faces

$I$ - Interpolation type

$P$ - Polynomial degree

$Q$ - quadrature degree

source

There are some useful methods associated with this abstract type such as

ReferenceFiniteElements.polynomial_degreeFunction
polynomial_degree(
    _::ReferenceFiniteElements.AbstractElementType{D, V, E, F, I, P, Q}
) -> Any

Returns the interpolation polynomial degree $P$.

source
polynomial_degree(
    _::Type{<:ReferenceFiniteElements.AbstractElementType{D, V, E, F, I, P, Q}}
) -> Any

Returns the interpolation polynomial degree $P$.

source

That can fetch the parameteric types.

Other useful methods associated with this abstract type are the following which can be used to query information about the element topology.

Element subtypes

Below are additional abstract types subtyped off of AbstractElementType for element topologies of different dimensions and further subtyped based on common element topologies.

0-Dimensional Element types

Different types of 0-D elements (e.g. vertices of various implementations) can be implemented by subtyping off of the abstract type

1-Dimensional Element types

Different types of 1-D elements (e.g. edges, sides, lines, etc. of various implementations) can be implemented by subtyping off of the abstract type

2-Dimensional Element types

Different types of 2-D elements (e.g. faces, triangles, quads, polygons, etc. of various implementations) can be implemented by subtyping off of the abstract type

There are also various subtypes of this type including

3-Dimensional Element types

Different types of 3-D elements (e.g. volumes, hexes, tets, etc. of various implementations) can be implemented by subtyping off of the abstract type

There are also various subtypes of this type including

Abstract Types for Storage Containers