$$ \gdef\pd#1#2{\frac{\partial #1}{\partial #2}} \gdef\d#1{\, \mathrm{d}#1} \gdef\dx{\d{x}} \gdef\tr#1{\operatorname{tr} (#1)} $$ $$ \gdef\norm#1{\left \lVert #1 \right\rVert} \gdef\seminorm#1{| #1 |} $$ $$ \gdef\vec#1{\mathbf{\boldsymbol{#1}}} \gdef\dvec#1{\bar{\vec #1}} $$
pub trait ReferenceFiniteElement<T>where
    T: Scalar,
    DefaultAllocator: DimAllocator<T, Self::ReferenceDim>,{
    type ReferenceDim: SmallDim;

    // Required methods
    fn num_nodes(&self) -> usize;
    fn populate_basis(
        &self,
        basis_values: &mut [T],
        reference_coords: &OPoint<T, Self::ReferenceDim>
    );
    fn populate_basis_gradients(
        &self,
        basis_gradients: MatrixViewMut<'_, T, Self::ReferenceDim, Dyn>,
        reference_coords: &OPoint<T, Self::ReferenceDim>
    );
}

Required Associated Types§

Required Methods§

source

fn num_nodes(&self) -> usize

Returns the number of nodes in the element.

source

fn populate_basis( &self, basis_values: &mut [T], reference_coords: &OPoint<T, Self::ReferenceDim> )

Evaluates each basis function at the given reference coordinates. The result is given in a row vector where each entry is the value of the corresponding basis function.

TODO: Document that it should panic if the result does not have exactly the correct number of columns (==nodes)

source

fn populate_basis_gradients( &self, basis_gradients: MatrixViewMut<'_, T, Self::ReferenceDim, Dyn>, reference_coords: &OPoint<T, Self::ReferenceDim> )

Given nodal weights, construct a matrix whose columns are the gradients of each shape function in the element.

Implementors§

source§

impl<'a, T, Space> ReferenceFiniteElement<T> for ElementInSpace<'a, Space>where T: Scalar, Space: FiniteElementSpace<T>, DefaultAllocator: BiDimAllocator<T, Space::GeometryDim, Space::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Hex8Element<T>where T: Scalar, Hex8Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Hex8Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Hex8Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Hex20Element<T>where T: Scalar, Hex20Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Hex20Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Hex20Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Hex27Element<T>where T: Scalar, Hex27Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Hex27Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Hex27Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Quad4d2Element<T>where T: Scalar, Quad4d2Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Quad4d2Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Quad4d2Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Quad9d2Element<T>where T: Scalar, Quad9d2Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Quad9d2Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Quad9d2Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Segment2d1Element<T>where T: Scalar, Segment2d1Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Segment2d1Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Segment2d1Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Segment2d2Element<T>where T: Scalar, Segment2d2Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Segment2d2Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Segment2d2Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tet4Element<T>where T: Scalar, Tet4Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tet4Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tet4Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tet10Element<T>where T: Scalar, Tet10Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tet10Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tet10Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tet20Element<T>where T: Scalar, Tet20Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tet20Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tet20Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tri3d2Element<T>where T: Scalar, Tri3d2Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tri3d2Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tri3d2Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tri3d3Element<T>where T: Scalar, Tri3d3Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tri3d3Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tri3d3Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,

source§

impl<T> ReferenceFiniteElement<T> for Tri6d2Element<T>where T: Scalar, Tri6d2Element<T>: FixedNodesReferenceFiniteElement<T>, DefaultAllocator: BiDimAllocator<T, <Tri6d2Element<T> as FixedNodesReferenceFiniteElement<T>>::NodalDim, <Tri6d2Element<T> as FixedNodesReferenceFiniteElement<T>>::ReferenceDim>,