Basix 0.12.0.dev0
Loading...
Searching...
No Matches
Typedefs | Enumerations | Functions
basix::element Namespace Reference

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 = 0 , equispaced = 1 , gll_warped = 2 , gll_isaac = 3 ,
  gll_centroid = 4 , chebyshev_warped = 5 , chebyshev_isaac = 6 , chebyshev_centroid = 7 ,
  gl_warped = 8 , gl_isaac = 9 , gl_centroid = 10 , legendre = 11 ,
  bernstein = 12
}
 Variants of a Lagrange space that can be created.
 
enum class  dpc_variant {
  unset = 0 , simplex_equispaced = 1 , simplex_gll = 2 , horizontal_equispaced = 3 ,
  horizontal_gll = 4 , diagonal_equispaced = 5 , diagonal_gll = 6 , legendre = 7
}
 
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. More...
 

Functions

template<std::floating_point T>
FiniteElement< Tcreate_bdm (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_bubble (cell::type celltype, int degree, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_cr (cell::type celltype, int degree, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_hermite (cell::type celltype, int degree, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_hhj (cell::type celltype, int degree, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_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.
 
template<std::floating_point T>
FiniteElement< Tcreate_iso (cell::type celltype, int degree, lagrange_variant variant, bool discontinuous)
 Create an iso macro element on cell with given degree.
 
template<std::floating_point T>
FiniteElement< Tcreate_rtc (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_nce (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_nedelec (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_nedelec2 (cell::type celltype, int degree, lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_rt (cell::type celltype, int degree, element::lagrange_variant lvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_regge (cell::type celltype, int degree, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_serendipity (cell::type celltype, int degree, element::lagrange_variant lvariant, element::dpc_variant dvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_dpc (cell::type celltype, int degree, element::dpc_variant variant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_serendipity_div (cell::type celltype, int degree, element::lagrange_variant lvariant, element::dpc_variant dvariant, bool discontinuous)
 
template<std::floating_point T>
FiniteElement< Tcreate_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)
 

Detailed Description

Interfaces for creating finite elements.

Enumeration Type Documentation

◆ dpc_variant

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.

◆ family

Available element families.

Enumerator
custom 

Custom element, defined directly by its coefficients, interpolation points/matrices, etc.

Lagrange

RT 

Raviart-Thomas

N1E 

Nedelec first kind

BDM 

Brezzi-Douglas-Marini

N2E 

Nedelec second kind

CR 

Crouzeix-Raviart

Regge 

Regge

DPC 

Discontinuous polynomial cubical

bubble 

Bubble

serendipity 

Serendipity

HHJ 

Hellan-Herrmann-Johnson

Hermite 

Hermite

iso 

Iso (macro) element

Function Documentation

◆ create_bdm()

template<std::floating_point T>
FiniteElement< T > basix::element::create_bdm ( cell::type  celltype,
int  degree,
lagrange_variant  lvariant,
bool  discontinuous 
)

Create BDM element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_bubble()

template<std::floating_point T>
FiniteElement< T > basix::element::create_bubble ( cell::type  celltype,
int  degree,
bool  discontinuous 
)

Create a bubble element on cell with given degree

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_cr()

template<std::floating_point T>
FiniteElement< T > basix::element::create_cr ( cell::type  celltype,
int  degree,
bool  discontinuous 
)

Crouzeix-Raviart element

Note
degree must be 1 for Crouzeix-Raviart
on quadrilateral and hexahedral cells, this element is more commonly called the Rannacher-Turek element
Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_hermite()

template<std::floating_point T>
FiniteElement< T > basix::element::create_hermite ( cell::type  celltype,
int  degree,
bool  discontinuous 
)

Create a Hermite element on cell with given degree

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_hhj()

template<std::floating_point T>
FiniteElement< T > basix::element::create_hhj ( cell::type  celltype,
int  degree,
bool  discontinuous 
)

Create Hellan-Herrmann-Johnson element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_lagrange()

template<std::floating_point T>
FiniteElement< T > 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.

Parameters
[in]celltypeThe element cell type
[in]degreeThe degree of the element
[in]variantThe variant of the element to be created
[in]discontinuousControls whether the element is continuous or discontinuous
[in]dof_orderingA mapping from the reference DOF order to a new permuted order (empty for the default ordering)
Returns
A finite element

◆ create_iso()

template<std::floating_point T>
FiniteElement< T > basix::element::create_iso ( cell::type  celltype,
int  degree,
lagrange_variant  variant,
bool  discontinuous 
)

Create an iso macro element on cell with given degree.

Parameters
[in]celltypeThe element cell type
[in]degreeThe degree of the element
[in]variantThe variant of the element to be created
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_rtc()

template<std::floating_point T>
FiniteElement< T > basix::element::create_rtc ( cell::type  celltype,
int  degree,
element::lagrange_variant  lvariant,
bool  discontinuous 
)

Create RTC H(div) element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_nce()

template<std::floating_point T>
FiniteElement< T > basix::element::create_nce ( cell::type  celltype,
int  degree,
element::lagrange_variant  lvariant,
bool  discontinuous 
)

Create NC H(curl) element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_nedelec()

template<std::floating_point T>
FiniteElement< T > basix::element::create_nedelec ( cell::type  celltype,
int  degree,
lagrange_variant  lvariant,
bool  discontinuous 
)

Create Nedelec element (first kind)

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_nedelec2()

template<std::floating_point T>
FiniteElement< T > basix::element::create_nedelec2 ( cell::type  celltype,
int  degree,
lagrange_variant  lvariant,
bool  discontinuous 
)

Create Nedelec element (second kind)

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_rt()

template<std::floating_point T>
FiniteElement< T > basix::element::create_rt ( cell::type  celltype,
int  degree,
element::lagrange_variant  lvariant,
bool  discontinuous 
)

Create Raviart-Thomas element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe Lagrange variant to use when defining the element to take integral moments against
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_regge()

template<std::floating_point T>
FiniteElement< T > basix::element::create_regge ( cell::type  celltype,
int  degree,
bool  discontinuous 
)

Create Regge element

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_serendipity()

template<std::floating_point T>
FiniteElement< T > 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

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe variant of the Lagrange element to be used for integral moments on the edges of the cell
[in]dvariantThe 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]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_dpc()

template<std::floating_point T>
FiniteElement< T > 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.

Note
DPC elements must be discontinuous
Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]variantThe variant of the element to be created
[in]discontinuousMust be true; DPC elements are discontinuous only, and false causes a runtime error.
Returns
A finite element

◆ create_serendipity_div()

template<std::floating_point T>
FiniteElement< T > 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

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe variant of the Lagrange element to be used for integral moments
[in]dvariantThe variant of the DPC element to be used for integral moments
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ create_serendipity_curl()

template<std::floating_point T>
FiniteElement< T > 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

Parameters
[in]celltypeThe cell type
[in]degreeThe degree of the element
[in]lvariantThe variant of the Lagrange element to be used for integral moments
[in]dvariantThe variant of the DPC element to be used for integral moments
[in]discontinuousControls whether the element is continuous or discontinuous
Returns
A finite element

◆ make_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 > > 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.

Parameters
[in]xInterpolation points. Indices are (tdim, entity index, point index, dim)
[in]MThe interpolation matrices. Indices are (tdim, entity index, dof, vs, point_index, derivative)
[in]tdimThe topological dimension of the cell the element is defined on
[in]value_sizeThe value size of the element
Returns
(xdata, xshape, Mdata, Mshape), where the x and M data are for a discontinuous version of the element (with the same shapes as x and M)