DOLFIN-X
DOLFIN-X C++ interface
|
9 #include <dolfinx/common/types.h>
10 #include <dolfinx/mesh/cell_types.h>
13 #include <unsupported/Eigen/CXX11/Tensor>
16 struct ufc_coordinate_mapping;
17 struct ufc_finite_element;
29 explicit FiniteElement(
const ufc_finite_element& ufc_element);
82 std::string
family()
const;
87 Eigen::Tensor<double, 3, Eigen::RowMajor>& reference_values,
88 const Eigen::Ref<
const Eigen::Array<
89 double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>& X)
const;
95 Eigen::Tensor<double, 4, Eigen::RowMajor>& reference_values,
int order,
96 const Eigen::Ref<
const Eigen::Array<
97 double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>& X)
const;
101 Eigen::Tensor<double, 3, Eigen::RowMajor>& values,
102 const Eigen::Tensor<double, 3, Eigen::RowMajor>& reference_values,
103 const Eigen::Ref<
const Eigen::Array<
double, Eigen::Dynamic,
104 Eigen::Dynamic, Eigen::RowMajor>>& X,
105 const Eigen::Tensor<double, 3, Eigen::RowMajor>& J,
106 const Eigen::Ref<
const Eigen::Array<double, Eigen::Dynamic, 1>>& detJ,
107 const Eigen::Tensor<double, 3, Eigen::RowMajor>& K,
108 const std::uint32_t permutation_info)
const;
112 Eigen::Tensor<double, 4, Eigen::RowMajor>& values, std::size_t order,
113 const Eigen::Tensor<double, 4, Eigen::RowMajor>& reference_values,
114 const Eigen::Ref<
const Eigen::Array<
double, Eigen::Dynamic,
115 Eigen::Dynamic, Eigen::RowMajor>>& X,
116 const Eigen::Tensor<double, 3, Eigen::RowMajor>& J,
117 const Eigen::Ref<
const Eigen::Array<double, Eigen::Dynamic, 1>>& detJ,
118 const Eigen::Tensor<double, 3, Eigen::RowMajor>& K,
119 const std::uint32_t permutation_info)
const;
125 const Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>&
131 ufc_scalar_t* reference_values,
132 const Eigen::Ref<
const Eigen::Array<ufc_scalar_t, Eigen::Dynamic,
133 Eigen::Dynamic, Eigen::RowMajor>>&
135 const Eigen::Ref<
const Eigen::Array<
double, Eigen::Dynamic,
136 Eigen::Dynamic, Eigen::RowMajor>>&
137 coordinate_dofs)
const;
143 std::size_t
hash()
const;
146 std::shared_ptr<const FiniteElement>
150 std::string _signature, _family;
154 int _tdim, _space_dim, _value_size, _reference_value_size;
157 Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> _refX;
160 std::vector<std::shared_ptr<const FiniteElement>> _sub_elements;
163 static std::shared_ptr<const FiniteElement>
165 const std::vector<int>& component);
171 std::vector<int> _value_dimension;
174 std::function<int(
double*,
int,
const double*)> _evaluate_reference_basis;
176 std::function<int(
double*,
int,
int,
const double*)>
177 _evaluate_reference_basis_derivatives;
179 std::function<int(
double*,
int,
int,
const double*,
const double*,
180 const double*,
const double*,
const double*,
181 const std::uint32_t)>
182 _transform_reference_basis_derivatives;
184 std::function<int(ufc_scalar_t*,
const ufc_scalar_t*,
const double*,
185 const ufc_coordinate_mapping*)>
FiniteElement(const ufc_finite_element &ufc_element)
Create finite element from UFC finite element.
Definition: FiniteElement.cpp:19
std::shared_ptr< const FiniteElement > extract_sub_element(const std::vector< int > &component) const
Extract sub finite element for component.
Definition: FiniteElement.cpp:216
int value_dimension(int i) const
Return the dimension of the value space for axis i.
Definition: FiniteElement.cpp:99
void evaluate_reference_basis(Eigen::Tensor< double, 3, Eigen::RowMajor > &reference_values, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &X) const
Evaluate all basis functions at given points in reference cell.
Definition: FiniteElement.cpp:108
int num_sub_elements() const
Return the number of sub elements (for a mixed element)
Definition: FiniteElement.cpp:211
void evaluate_reference_basis_derivatives(Eigen::Tensor< double, 4, Eigen::RowMajor > &reference_values, int order, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &X) const
Evaluate all basis function derivatives of given order at given points in reference cell.
Definition: FiniteElement.cpp:124
FiniteElement(FiniteElement &&element)=default
Move constructor.
const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > & dof_reference_coordinates() const
Tabulate the reference coordinates of all dofs on an element.
Definition: FiniteElement.cpp:185
CellType
Cell type identifier.
Definition: cell_types.h:21
mesh::CellType cell_shape() const
Cell shape.
Definition: FiniteElement.cpp:84
FiniteElement & operator=(FiniteElement &&element)=default
Move assignment.
Finite Element, containing the dof layout on a reference element, and various methods for evaluating ...
Definition: FiniteElement.h:25
void transform_reference_basis(Eigen::Tensor< double, 3, Eigen::RowMajor > &values, const Eigen::Tensor< double, 3, Eigen::RowMajor > &reference_values, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &X, const Eigen::Tensor< double, 3, Eigen::RowMajor > &J, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, 1 >> &detJ, const Eigen::Tensor< double, 3, Eigen::RowMajor > &K, const std::uint32_t permutation_info) const
Push basis functions forward to physical element.
Definition: FiniteElement.cpp:140
int value_rank() const
Rank of the value space.
Definition: FiniteElement.cpp:95
std::size_t hash() const
Return simple hash of the signature string.
Definition: FiniteElement.cpp:213
virtual ~FiniteElement()=default
Destructor.
void transform_reference_basis_derivatives(Eigen::Tensor< double, 4, Eigen::RowMajor > &values, std::size_t order, const Eigen::Tensor< double, 4, Eigen::RowMajor > &reference_values, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &X, const Eigen::Tensor< double, 3, Eigen::RowMajor > &J, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, 1 >> &detJ, const Eigen::Tensor< double, 3, Eigen::RowMajor > &K, const std::uint32_t permutation_info) const
Push basis function (derivatives) forward to physical element.
Definition: FiniteElement.cpp:162
int space_dimension() const
Dimension of the finite element function space.
Definition: FiniteElement.cpp:86
FiniteElement & operator=(const FiniteElement &element)=default
Copy assignment.
void transform_values(ufc_scalar_t *reference_values, const Eigen::Ref< const Eigen::Array< ufc_scalar_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &physical_values, const Eigen::Ref< const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >> &coordinate_dofs) const
Map values of field from physical to reference space which has been evaluated at points given by dof_...
Definition: FiniteElement.cpp:196
std::string signature() const
String identifying the finite element.
Definition: FiniteElement.cpp:82
std::string family() const
The finite element family.
Definition: FiniteElement.cpp:106
int block_size() const
Block size of the finite element function space. For VectorElements and TensorElements,...
Definition: FiniteElement.cpp:97
Finite element method functionality.
Definition: assemble_matrix_impl.h:23
int value_size() const
The value size, e.g. 1 for a scalar function, 2 for a 2D vector.
Definition: FiniteElement.cpp:88
int reference_value_size() const
The value size, e.g. 1 for a scalar function, 2 for a 2D vector for the reference element.
Definition: FiniteElement.cpp:90
FiniteElement(const FiniteElement &element)=default
Copy constructor.