Tabulation Project basix
|
#include <finite-element.h>
Public Member Functions | |
FiniteElement (std::string family_name, cell::type cell_type, int degree, const std::vector< int > &value_shape, const Eigen::ArrayXXd &coeffs, const std::vector< std::vector< int >> &entity_dofs, const std::vector< Eigen::MatrixXd > &base_permutations, const Eigen::ArrayXXd &points, const Eigen::MatrixXd interpolation_matrix={}, const std::string mapping_name="affine") | |
A finite element. | |
FiniteElement (const FiniteElement &element)=default | |
Copy constructor. | |
FiniteElement (FiniteElement &&element)=default | |
Move constructor. | |
~FiniteElement ()=default | |
Destructor. | |
FiniteElement & | operator= (const FiniteElement &element)=default |
Assignment operator. | |
FiniteElement & | operator= (FiniteElement &&element)=default |
Move assignment operator. | |
std::vector< Eigen::ArrayXXd > | tabulate (int nd, const Eigen::ArrayXXd &x) const |
cell::type | cell_type () const |
int | degree () const |
int | value_size () const |
const std::vector< int > & | value_shape () const |
int | dim () const |
const std::string & | family_name () const |
const std::string & | mapping_name () const |
const std::vector< std::vector< int > > & | entity_dofs () const |
std::vector< Eigen::MatrixXd > | base_permutations () const |
const Eigen::ArrayXXd & | points () const |
const Eigen::MatrixXd & | interpolation_matrix () const |
Finite Element The basis is stored as a set of coefficients, which are applied to the underlying expansion set for that cell type, when tabulating.
std::vector< Eigen::MatrixXd > FiniteElement::base_permutations | ( | ) | const |
Get the base permutations The base permutations represent the effect of rotating or reflecting a subentity of the cell on the numbering and orientation of the DOFs. This returns a list of matrices with one matrix for each subentity permutation in the following order: Reversing edge 0, reversing edge 1, ... Rotate face 0, reflect face 0, rotate face 1, reflect face 1, ...
This space has 10 dofs arranged like:
For this element, the base permutations are: [Matrix swapping 3 and 4, Matrix swapping 5 and 6, Matrix swapping 7 and 8] The first row shows the effect of reversing the diagonal edge. The second row shows the effect of reversing the vertical edge. The third row shows the effect of reversing the horizontal edge.
This space has 3 dofs arranged like:
These DOFs are integrals of normal components over the edges: DOFs 0 and 2 are oriented inward, DOF 1 is oriented outwards. For this element, the base permutation matrices are:
The first matrix reverses DOF 0 (as this is on the first edge). The second matrix reverses DOF 1 (as this is on the second edge). The third matrix reverses DOF 2 (as this is on the third edge).
On a face of this tetrahedron, this space has two face tangent DOFs:
For these DOFs, the subblocks of the base permutation matrices are:
cell::type FiniteElement::cell_type | ( | ) | const |
Get the element cell type
int FiniteElement::degree | ( | ) | const |
Get the element polynomial degree
int FiniteElement::dim | ( | ) | const |
Dimension of the finite element space (number of degrees of freedom for the element)
const std::vector< std::vector< int > > & FiniteElement::entity_dofs | ( | ) | const |
Get the number of dofs on each topological entity: (vertices, edges, faces, cell) in that order. For example, Lagrange degree 2 on a triangle has vertices: [1, 1, 1], edges: [1, 1, 1], cell: [0] The sum of the entity dofs must match the total number of dofs reported by FiniteElement::dim,
const std::string & FiniteElement::family_name | ( | ) | const |
Get the name of the finite element family
const Eigen::MatrixXd & FiniteElement::interpolation_matrix | ( | ) | const |
Return a matrix of weights interpolation To interpolate a function in this finite element, the functions should be evaluated at each point given by FiniteElement::points(). These function values should then be multiplied by the weight matrix to give the coefficients of the interpolated function.
const std::string & FiniteElement::mapping_name | ( | ) | const |
Get the mapping used for this element
const Eigen::ArrayXXd & FiniteElement::points | ( | ) | const |
Return a set of evaluation points Currently for backward compatibility with DOLFINx function interpolation Experimental, may go away.
std::vector< Eigen::ArrayXXd > FiniteElement::tabulate | ( | int | nd, |
const Eigen::ArrayXXd & | x | ||
) | const |
Compute basis values and derivatives at set of points.
[in] | nd | The order of derivatives, up to and including, to compute. Use 0 for the basis functions only. |
[in] | x | The points at which to compute the basis functions. The shape of x is (number of points, geometric dimension). |
const std::vector< int > & FiniteElement::value_shape | ( | ) | const |
Get the element value tensor shape, e.g. returning [1] for scalars.
int FiniteElement::value_size | ( | ) | const |
Get the element value size This is just a convenience function returning product(value_shape)