|
| FiniteElement (element::family family, cell::type cell_type, int degree, const std::vector< std::size_t > &value_shape, const xt::xtensor< double, 3 > &coeffs, const std::vector< xt::xtensor< double, 2 >> &entity_transformations, const std::array< std::vector< xt::xtensor< double, 2 >>, 4 > &x, const std::array< std::vector< xt::xtensor< double, 3 >>, 4 > &M, maps::type map_type=maps::type::identity) |
|
| 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.
|
|
xt::xtensor< double, 4 > | tabulate (int nd, const xt::xarray< double > &x) const |
|
void | tabulate (int nd, const xt::xarray< double > &x, double *basis_data) const |
|
cell::type | cell_type () const |
|
int | degree () const |
|
int | value_size () const |
|
const std::vector< int > & | value_shape () const |
|
int | dim () const |
|
element::family | family () const |
|
maps::type | mapping_type () const |
|
bool | dof_transformations_are_permutations () const |
|
bool | dof_transformations_are_identity () const |
|
xt::xtensor< double, 3 > | map_push_forward (const xt::xtensor< double, 3 > &U, const xt::xtensor< double, 3 > &J, const tcb::span< const double > &detJ, const xt::xtensor< double, 3 > &K) const |
|
template<typename T , typename E > |
void | map_push_forward_m (const xt::xtensor< T, 3 > &U, const xt::xtensor< double, 3 > &J, const tcb::span< const double > &detJ, const xt::xtensor< double, 3 > &K, E &&u) const |
|
xt::xtensor< double, 3 > | map_pull_back (const xt::xtensor< double, 3 > &u, const xt::xtensor< double, 3 > &J, const tcb::span< const double > &detJ, const xt::xtensor< double, 3 > &K) const |
|
template<typename T , typename E > |
void | map_pull_back_m (const xt::xtensor< T, 3 > &u, const xt::xtensor< double, 3 > &J, const tcb::span< const double > &detJ, const xt::xtensor< double, 3 > &K, E &&U) const |
|
const std::vector< std::vector< int > > & | entity_dofs () const |
|
xt::xtensor< double, 3 > | base_transformations () const |
|
void | permute_dofs (tcb::span< std::int32_t > &dofs, std::uint32_t cell_info) const |
|
void | unpermute_dofs (tcb::span< std::int32_t > &dofs, std::uint32_t cell_info) const |
|
const xt::xtensor< double, 2 > & | points () const |
|
int | num_points () const |
| Return the number of interpolation points.
|
|
const xt::xtensor< double, 2 > & | 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.
xt::xtensor< double, 3 > FiniteElement::base_transformations |
( |
| ) |
const |
Get the base transformations The base transformations 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, ...
Example: Order 3 Lagrange on a triangle
This space has 10 dofs arranged like:
2
|\
6 4
| \
5 9 3
| \
0-7-8-1
For this element, the base transformations 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.
Example: Order 1 Raviart-Thomas on a triangle
This space has 3 dofs arranged like:
|\
| \
| \
<-1 0
| / \
| L ^ \
| | \
---2---
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 transformation matrices are:
0: [[-1, 0, 0],
[ 0, 1, 0],
[ 0, 0, 1]]
1: [[1, 0, 0],
[0, -1, 0],
[0, 0, 1]]
2: [[1, 0, 0],
[0, 1, 0],
[0, 0, -1]]
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).
Example: DOFs on the face of Order 2 Nedelec first kind on a tetrahedron
On a face of this tetrahedron, this space has two face tangent DOFs:
|\ |\
| \ | \
| \ | ^\
| \ | | \
| 0->\ | 1 \
| \ | \
------ ------
For these DOFs, the subblocks of the base transformation matrices are:
rotation: [[-1, 1],
[ 1, 0]]
reflection: [[0, 1],
[1, 0]]
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,
- Returns
- List of entity dof counts on each dimension. The shape is (tdim + 1, num_entities).