Interfaces for creating finite elements. More...
Typedefs | |
template<typename T , std::size_t d> | |
using | mdspan_t = impl::mdspan_t< T, d > |
Typedef for mdspan. | |
Enumerations | |
enum class | lagrange_variant { unset = -1 , equispaced = 0 , gll_warped = 1 , gll_isaac = 2 , gll_centroid = 3 , chebyshev_warped = 4 , chebyshev_isaac = 5 , chebyshev_centroid = 6 , gl_warped = 7 , gl_isaac = 8 , gl_centroid = 9 , legendre = 10 , bernstein = 11 , vtk = 20 } |
Variants of a Lagrange space that can be created. | |
enum class | dpc_variant { unset = -1 , simplex_equispaced = 0 , simplex_gll = 1 , horizontal_equispaced = 2 , horizontal_gll = 3 , diagonal_equispaced = 4 , diagonal_gll = 5 , legendre = 6 } |
enum class | family { custom = 0 , P = 1 , RT = 2 , N1E = 3 , BDM = 4 , N2E = 5 , CR = 6 , Regge = 7 , DPC = 8 , bubble = 9 , serendipity = 10 , HHJ = 11 , Hermite = 12 , iso = 13 } |
Available element families. | |
Functions | |
template<std::floating_point T> | |
FiniteElement< T > | create_bdm (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_bubble (cell::type celltype, int degree, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_cr (cell::type celltype, int degree, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_hermite (cell::type celltype, int degree, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_hhj (cell::type celltype, int degree, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_lagrange (cell::type celltype, int degree, lagrange_variant variant, bool discontinuous, std::vector< int > dof_ordering={}) |
Create a Lagrange(-like) element on cell with given degree. More... | |
template<std::floating_point T> | |
FiniteElement< T > | create_iso (cell::type celltype, int degree, lagrange_variant variant, bool discontinuous) |
Create an iso macro element on cell with given degree. More... | |
template<std::floating_point T> | |
FiniteElement< T > | create_rtc (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_nce (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_nedelec (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_nedelec2 (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_rt (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_regge (cell::type celltype, int degree, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_serendipity (cell::type celltype, int degree, element::lagrange_variant lvariant, element::dpc_variant dvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_dpc (cell::type celltype, int degree, element::dpc_variant variant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_serendipity_div (cell::type celltype, int degree, element::lagrange_variant lvariant, element::dpc_variant dvariant, bool discontinuous) |
template<std::floating_point T> | |
FiniteElement< T > | create_serendipity_curl (cell::type celltype, int degree, element::lagrange_variant lvariant, element::dpc_variant dvariant, bool discontinuous) |
template<std::floating_point T> | |
std::tuple< std::array< std::vector< std::vector< T > >, 4 >, std::array< std::vector< std::array< std::size_t, 2 > >, 4 >, std::array< std::vector< std::vector< T > >, 4 >, std::array< std::vector< std::array< std::size_t, 4 > >, 4 > > | make_discontinuous (const std::array< std::vector< mdspan_t< const T, 2 >>, 4 > &x, const std::array< std::vector< mdspan_t< const T, 4 >>, 4 > &M, std::size_t tdim, std::size_t value_size) |
Interfaces for creating finite elements.
|
strong |
Variants of a DPC (discontinuous polynomial cubical) space that can be created. DPC spaces span the same set of polynomials as Lagrange spaces on simplices but are defined on tensor product cells.
template FiniteElement< double > basix::element::create_bdm | ( | cell::type | celltype, |
int | degree, | ||
lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create BDM element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_bubble | ( | cell::type | celltype, |
int | degree, | ||
bool | discontinuous | ||
) |
Create a bubble element on cell with given degree
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_cr | ( | cell::type | celltype, |
int | degree, | ||
bool | discontinuous | ||
) |
Crouzeix-Raviart element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_dpc | ( | cell::type | celltype, |
int | degree, | ||
element::dpc_variant | variant, | ||
bool | discontinuous | ||
) |
Create a DPC (discontinuous polynomial cubical) element on cell with given degree.
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | variant | The variant of the element to be created |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_hermite | ( | cell::type | celltype, |
int | degree, | ||
bool | discontinuous | ||
) |
Create a Hermite element on cell with given degree
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_hhj | ( | cell::type | celltype, |
int | degree, | ||
bool | discontinuous | ||
) |
Create Hellan-Herrmann-Johnson element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_iso | ( | cell::type | celltype, |
int | degree, | ||
lagrange_variant | variant, | ||
bool | discontinuous | ||
) |
Create an iso macro element on cell with given degree.
[in] | celltype | The element cell type |
[in] | degree | The degree of the element |
[in] | variant | The variant of the element to be created |
[in] | discontinuous | True if the is discontinuous |
template FiniteElement< double > basix::element::create_lagrange | ( | cell::type | celltype, |
int | degree, | ||
lagrange_variant | variant, | ||
bool | discontinuous, | ||
std::vector< int > | dof_ordering = {} |
||
) |
Create a Lagrange(-like) element on cell with given degree.
[in] | celltype | The element cell type |
[in] | degree | The degree of the element |
[in] | variant | The variant of the element to be created |
[in] | discontinuous | True if the is discontinuous |
[in] | dof_ordering | DOF reordering |
template FiniteElement< double > basix::element::create_nce | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create NC H(curl) element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_nedelec | ( | cell::type | celltype, |
int | degree, | ||
lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create Nedelec element (first kind)
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_nedelec2 | ( | cell::type | celltype, |
int | degree, | ||
lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create Nedelec element (second kind)
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_regge | ( | cell::type | celltype, |
int | degree, | ||
bool | discontinuous | ||
) |
Create Regge element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_rt | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create Raviart-Thomas element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_rtc | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
bool | discontinuous | ||
) |
Create RTC H(div) element
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The Lagrange variant to use when defining the element to take integral moments against |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_serendipity | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
element::dpc_variant | dvariant, | ||
bool | discontinuous | ||
) |
Create a serendipity element on cell with given degree
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The variant of the Lagrange element to be used for integral moments on the edges of the cell |
[in] | dvariant | The variant of the DPC element to be used for integral moments on the interior of the cell (for quads and hexes). For elements on an interval element::dpc_variant::unset can be passed in |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_serendipity_curl | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
element::dpc_variant | dvariant, | ||
bool | discontinuous | ||
) |
Create a serendipity H(curl) element on cell with given degree
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The variant of the Lagrange element to be used for integral moments |
[in] | dvariant | The variant of the DPC element to be used for integral moments |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
template FiniteElement< double > basix::element::create_serendipity_div | ( | cell::type | celltype, |
int | degree, | ||
element::lagrange_variant | lvariant, | ||
element::dpc_variant | dvariant, | ||
bool | discontinuous | ||
) |
Create a serendipity H(div) element on cell with given degree
[in] | celltype | The cell type |
[in] | degree | The degree of the element |
[in] | lvariant | The variant of the Lagrange element to be used for integral moments |
[in] | dvariant | The variant of the DPC element to be used for integral moments |
[in] | discontinuous | Controls whether the element is continuous or discontinuous |
std::tuple< std::array< std::vector< std::vector< T > >, 4 >, std::array< std::vector< std::array< std::size_t, 2 > >, 4 >, std::array< std::vector< std::vector< T > >, 4 >, std::array< std::vector< std::array< std::size_t, 4 > >, 4 > > basix::element::make_discontinuous | ( | const std::array< std::vector< mdspan_t< const T, 2 >>, 4 > & | x, |
const std::array< std::vector< mdspan_t< const T, 4 >>, 4 > & | M, | ||
std::size_t | tdim, | ||
std::size_t | value_size | ||
) |
Create a version of the interpolation points, interpolation matrices and entity transformation that represent a discontinuous version of the element. This discontinuous version will have the same DOFs but they will all be associated with the interior of the reference cell.
[in] | x | Interpolation points. Indices are (tdim, entity index, point index, dim) |
[in] | M | The interpolation matrices. Indices are (tdim, entity index, dof, vs, point_index, derivative) |
[in] | tdim | The topological dimension of the cell the element is defined on |
[in] | value_size | The value size of the element |