|
| FE_BDM (const unsigned int p) |
|
virtual std::string | get_name () const |
|
virtual FiniteElement< dim > * | clone () const |
|
virtual void | convert_generalized_support_point_values_to_nodal_values (const std::vector< Vector< double > > &support_point_values, std::vector< double > &nodal_values) const |
|
virtual void | interpolate (std::vector< double > &local_dofs, const std::vector< double > &values) const 1 |
|
virtual void | interpolate (std::vector< double > &local_dofs, const std::vector< Vector< double > > &values, const unsigned int offset=0) const 1 |
|
virtual void | interpolate (std::vector< double > &local_dofs, const VectorSlice< const std::vector< std::vector< double > > > &values) const 1 |
|
| FE_PolyTensor (const unsigned int degree, const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< ComponentMask > &nonzero_components) |
|
virtual double | shape_value (const unsigned int i, const Point< dim > &p) const |
|
virtual Tensor< 1, dim > | shape_grad (const unsigned int i, const Point< dim > &p) const |
|
virtual Tensor< 2, dim > | shape_grad_grad (const unsigned int i, const Point< dim > &p) const |
|
| FiniteElement (const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< ComponentMask > &nonzero_components) |
|
virtual | ~FiniteElement () |
|
const FiniteElement< dim, spacedim > & | operator[] (const unsigned int fe_index) const |
|
bool | operator== (const FiniteElement< dim, spacedim > &) const |
|
virtual std::size_t | memory_consumption () const |
|
virtual Tensor< 3, dim > | shape_3rd_derivative (const unsigned int i, const Point< dim > &p) const |
|
virtual Tensor< 3, dim > | shape_3rd_derivative_component (const unsigned int i, const Point< dim > &p, const unsigned int component) const |
|
virtual Tensor< 4, dim > | shape_4th_derivative (const unsigned int i, const Point< dim > &p) const |
|
virtual Tensor< 4, dim > | shape_4th_derivative_component (const unsigned int i, const Point< dim > &p, const unsigned int component) const |
|
virtual bool | has_support_on_face (const unsigned int shape_index, const unsigned int face_index) const |
|
virtual const FullMatrix< double > & | get_restriction_matrix (const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const |
|
virtual const FullMatrix< double > & | get_prolongation_matrix (const unsigned int child, const RefinementCase< dim > &refinement_case=RefinementCase< dim >::isotropic_refinement) const |
|
bool | prolongation_is_implemented () const |
|
bool | isotropic_prolongation_is_implemented () const |
|
bool | restriction_is_implemented () const |
|
bool | isotropic_restriction_is_implemented () const |
|
bool | restriction_is_additive (const unsigned int index) const |
|
const FullMatrix< double > & | constraints (const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const |
|
bool | constraints_are_implemented (const ::internal::SubfaceCase< dim > &subface_case=::internal::SubfaceCase< dim >::case_isotropic) const |
|
virtual bool | hp_constraints_are_implemented () const |
|
virtual void | get_interpolation_matrix (const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const |
|
virtual void | get_face_interpolation_matrix (const FiniteElement< dim, spacedim > &source, FullMatrix< double > &matrix) const |
|
virtual void | get_subface_interpolation_matrix (const FiniteElement< dim, spacedim > &source, const unsigned int subface, FullMatrix< double > &matrix) const |
|
virtual std::vector< std::pair< unsigned int, unsigned int > > | hp_vertex_dof_identities (const FiniteElement< dim, spacedim > &fe_other) const |
|
virtual std::vector< std::pair< unsigned int, unsigned int > > | hp_line_dof_identities (const FiniteElement< dim, spacedim > &fe_other) const |
|
virtual std::vector< std::pair< unsigned int, unsigned int > > | hp_quad_dof_identities (const FiniteElement< dim, spacedim > &fe_other) const |
|
virtual FiniteElementDomination::Domination | compare_for_face_domination (const FiniteElement< dim, spacedim > &fe_other) const |
|
std::pair< unsigned int, unsigned int > | system_to_component_index (const unsigned int index) const |
|
unsigned int | component_to_system_index (const unsigned int component, const unsigned int index) const |
|
std::pair< unsigned int, unsigned int > | face_system_to_component_index (const unsigned int index) const |
|
unsigned int | adjust_quad_dof_index_for_face_orientation (const unsigned int index, const bool face_orientation, const bool face_flip, const bool face_rotation) const |
|
virtual unsigned int | face_to_cell_index (const unsigned int face_dof_index, const unsigned int face, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false) const |
|
unsigned int | adjust_line_dof_index_for_line_orientation (const unsigned int index, const bool line_orientation) const |
|
const ComponentMask & | get_nonzero_components (const unsigned int i) const |
|
unsigned int | n_nonzero_components (const unsigned int i) const |
|
bool | is_primitive () const |
|
bool | is_primitive (const unsigned int i) const |
|
unsigned int | n_base_elements () const |
|
virtual const FiniteElement< dim, spacedim > & | base_element (const unsigned int index) const |
|
unsigned int | element_multiplicity (const unsigned int index) const |
|
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > | system_to_base_index (const unsigned int index) const |
|
std::pair< std::pair< unsigned int, unsigned int >, unsigned int > | face_system_to_base_index (const unsigned int index) const |
|
types::global_dof_index | first_block_of_base (const unsigned int b) const |
|
std::pair< unsigned int, unsigned int > | component_to_base_index (const unsigned int component) const |
|
std::pair< unsigned int, unsigned int > | block_to_base_index (const unsigned int block) const |
|
std::pair< unsigned int, types::global_dof_index > | system_to_block_index (const unsigned int component) const |
|
unsigned int | component_to_block_index (const unsigned int component) const |
|
ComponentMask | component_mask (const FEValuesExtractors::Scalar &scalar) const |
|
ComponentMask | component_mask (const FEValuesExtractors::Vector &vector) const |
|
ComponentMask | component_mask (const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const |
|
ComponentMask | component_mask (const BlockMask &block_mask) const |
|
BlockMask | block_mask (const FEValuesExtractors::Scalar &scalar) const |
|
BlockMask | block_mask (const FEValuesExtractors::Vector &vector) const |
|
BlockMask | block_mask (const FEValuesExtractors::SymmetricTensor< 2 > &sym_tensor) const |
|
BlockMask | block_mask (const ComponentMask &component_mask) const |
|
virtual std::pair< Table< 2, bool >, std::vector< unsigned int > > | get_constant_modes () const |
|
const std::vector< Point< dim > > & | get_unit_support_points () const |
|
bool | has_support_points () const |
|
virtual Point< dim > | unit_support_point (const unsigned int index) const |
|
const std::vector< Point< dim-1 > > & | get_unit_face_support_points () const |
|
bool | has_face_support_points () const |
|
virtual Point< dim-1 > | unit_face_support_point (const unsigned int index) const |
|
const std::vector< Point< dim > > & | get_generalized_support_points () const |
|
bool | has_generalized_support_points () const |
|
const std::vector< Point< dim-1 > > & | get_generalized_face_support_points () const |
|
bool | has_generalized_face_support_points () const |
|
GeometryPrimitive | get_associated_geometry_primitive (const unsigned int cell_dof_index) const |
|
| Subscriptor () |
|
| Subscriptor (const Subscriptor &) |
|
| Subscriptor (Subscriptor &&) |
|
virtual | ~Subscriptor () |
|
Subscriptor & | operator= (const Subscriptor &) |
|
Subscriptor & | operator= (Subscriptor &&) |
|
void | subscribe (const char *identifier=0) const |
|
void | unsubscribe (const char *identifier=0) const |
|
unsigned int | n_subscriptions () const |
|
void | list_subscribers () const |
|
template<class Archive > |
void | serialize (Archive &ar, const unsigned int version) |
|
| FiniteElementData (const std::vector< unsigned int > &dofs_per_object, const unsigned int n_components, const unsigned int degree, const Conformity conformity=unknown, const BlockIndices &block_indices=BlockIndices()) |
|
unsigned int | n_dofs_per_vertex () const |
|
unsigned int | n_dofs_per_line () const |
|
unsigned int | n_dofs_per_quad () const |
|
unsigned int | n_dofs_per_hex () const |
|
unsigned int | n_dofs_per_face () const |
|
unsigned int | n_dofs_per_cell () const |
|
template<int structdim> |
unsigned int | n_dofs_per_object () const |
|
unsigned int | n_components () const |
|
unsigned int | n_blocks () const |
|
const BlockIndices & | block_indices () const |
|
unsigned int | tensor_degree () const |
|
bool | conforms (const Conformity) const |
|
bool | operator== (const FiniteElementData &) const |
|
|
enum | Conformity {
unknown = 0x00,
L2 = 0x01,
Hcurl = 0x02,
Hdiv = 0x04,
H1 = Hcurl | Hdiv,
H2 = 0x0e
} |
|
static ::ExceptionBase & | ExcShapeFunctionNotPrimitive (int arg1) |
|
static ::ExceptionBase & | ExcFENotPrimitive () |
|
static ::ExceptionBase & | ExcUnitShapeValuesDoNotExist () |
|
static ::ExceptionBase & | ExcFEHasNoSupportPoints () |
|
static ::ExceptionBase & | ExcEmbeddingVoid () |
|
static ::ExceptionBase & | ExcProjectionVoid () |
|
static ::ExceptionBase & | ExcWrongInterfaceMatrixSize (int arg1, int arg2) |
|
static ::ExceptionBase & | ExcInterpolationNotImplemented () |
|
static ::ExceptionBase & | ExcInUse (int arg1, char *arg2, std::string &arg3) |
|
static ::ExceptionBase & | ExcNoSubscriber (char *arg1, char *arg2) |
|
const unsigned int | dofs_per_vertex |
|
const unsigned int | dofs_per_line |
|
const unsigned int | dofs_per_quad |
|
const unsigned int | dofs_per_hex |
|
const unsigned int | first_line_index |
|
const unsigned int | first_quad_index |
|
const unsigned int | first_hex_index |
|
const unsigned int | first_face_line_index |
|
const unsigned int | first_face_quad_index |
|
const unsigned int | dofs_per_face |
|
const unsigned int | dofs_per_cell |
|
const unsigned int | components |
|
const unsigned int | degree |
|
const Conformity | conforming_space |
|
const BlockIndices | block_indices_data |
|
static const unsigned int | space_dimension |
|
static const unsigned int | dimension = dim |
|
void | reinit_restriction_and_prolongation_matrices (const bool isotropic_restriction_only=false, const bool isotropic_prolongation_only=false) |
|
TableIndices< 2 > | interface_constraints_size () const |
|
virtual InternalDataBase * | get_data (const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const=0 |
|
virtual InternalDataBase * | get_face_data (const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const |
|
virtual InternalDataBase * | get_subface_data (const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim-1 > &quadrature, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const |
|
virtual void | fill_fe_values (const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValues::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const=0 |
|
virtual void | fill_fe_face_values (const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const Quadrature< dim-1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValues::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const=0 |
|
virtual void | fill_fe_subface_values (const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim-1 > &quadrature, const Mapping< dim, spacedim > &mapping, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, const ::internal::FEValues::MappingRelatedData< dim, spacedim > &mapping_data, const InternalDataBase &fe_internal, ::internal::FEValues::FiniteElementRelatedData< dim, spacedim > &output_data) const=0 |
|
static std::vector< unsigned int > | compute_n_nonzero_components (const std::vector< ComponentMask > &nonzero_components) |
|
MappingType | mapping_type |
|
PolynomialsBDM< dim > | poly_space |
|
FullMatrix< double > | inverse_node_matrix |
|
Threads::Mutex | cache_mutex |
|
Point< dim > | cached_point |
|
std::vector< Tensor< 1, dim > > | cached_values |
|
std::vector< Tensor< 2, dim > > | cached_grads |
|
std::vector< Tensor< 3, dim > > | cached_grad_grads |
|
std::vector< std::vector< FullMatrix< double > > > | restriction |
|
std::vector< std::vector< FullMatrix< double > > > | prolongation |
|
FullMatrix< double > | interface_constraints |
|
std::vector< Point< dim > > | unit_support_points |
|
std::vector< Point< dim-1 > > | unit_face_support_points |
|
std::vector< Point< dim > > | generalized_support_points |
|
std::vector< Point< dim-1 > > | generalized_face_support_points |
|
Table< 2, int > | adjust_quad_dof_index_for_face_orientation_table |
|
std::vector< int > | adjust_line_dof_index_for_line_orientation_table |
|
std::vector< std::pair< unsigned int, unsigned int > > | system_to_component_table |
|
std::vector< std::pair< unsigned int, unsigned int > > | face_system_to_component_table |
|
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > | system_to_base_table |
|
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > | face_system_to_base_table |
|
BlockIndices | base_to_block_indices |
|
std::vector< std::pair< std::pair< unsigned int, unsigned int >, unsigned int > > | component_to_base_table |
|
const std::vector< bool > | restriction_is_additive_flags |
|
const std::vector< ComponentMask > | nonzero_components |
|
const std::vector< unsigned int > | n_nonzero_components_table |
|
const bool | cached_primitivity |
|
template<int dim>
class FE_BDM< dim >
The Brezzi-Douglas-Marini element.
Degrees of freedom
- Todo:
- The 3D version exhibits some numerical instabilities, in particular for higher order
- Todo:
- Restriction matrices are missing.
The matching pressure space for FE_BDM of order k is the element FE_DGP of order k-1.
The BDM element of order p
has p+1 degrees of freedom on each face. These are implemented as the function values in the p+1 Gauss points on each face.
Additionally, for order greater or equal 2, we have additional p(p-1), the number of vector valued polynomials in Pp, interior degrees of freedom. These are the vector function values in the first p(p-1)/2 of the p2 Gauss points in the cell.
Definition at line 56 of file fe_bdm.h.
template<int dim>
void FE_BDM< dim >::convert_generalized_support_point_values_to_nodal_values |
( |
const std::vector< Vector< double > > & |
support_point_values, |
|
|
std::vector< double > & |
nodal_values |
|
) |
| const |
|
virtual |
Given the values of a function \(f(\mathbf x)\) at the (generalized) support points, this function then computes what the nodal values of the element are, i.e., \(\Psi_i[f]\), where \(\Psi_i\) are the node functionals of the element. The values \(\Psi_i[f]\) are then the expansion coefficients for the shape functions of the finite element function that interpolates the given function \(f(x)\), i.e., \( f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x) \) is the finite element interpolant of \(f\) with the current element. The operation described here is used, for example, in the FETools::compute_node_matrix() function.
In more detail, let us assume that the generalized support points (see this glossary entry ) of the current element are \(\hat{\mathbf x}_i\) and that the node functionals associated with the current element are \(\Psi_i[\cdot]\). Then, the fact that the element is based on generalized support points, implies that if we apply \(\Psi_i\) to a (possibly vector-valued) finite element function \(\varphi\), the result must have the form \(\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))\) – in other words, the value of the node functional \(\Psi_i\) applied to \(\varphi\) only depends on the values of \(\varphi\) at \(\hat{\mathbf x}_i\) and not on values anywhere else, or integrals of \(\varphi\), or any other kind of information.
The exact form of \(f_i\) depends on the element. For example, for scalar Lagrange elements, we have that in fact \(\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)\). If you combine multiple scalar Lagrange elements via an FESystem object, then \(\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}\) where \(c(i)\) is the result of the FiniteElement::system_to_component_index() function's return value's first component. In these two cases, \(f_i\) is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that \(f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i\) where \(\mathbf n_i\) is the normal vector of the face at which the shape function is defined.
Given all of this, what this function does is the following: If you input a list of values of a function \(\varphi\) at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in \(\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}\) then you will get out a vector \(\{\Psi[\varphi]\}_{i=0}^{N-1}\) where \(N\) equals dofs_per_cell
.
- Parameters
-
[in] | support_point_values | An array of size dofs_per_cell (which equals the number of points the get_generalized_support_points() function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. |
[out] | nodal_values | An array of size dofs_per_cell that contains the node functionals of the element applied to the given function. |
- Note
- Given what the function is supposed to do, the function clearly can only work for elements that actually implement (generalized) support points. Elements that do not have generalized support points – e.g., elements whose nodal functionals evaluate integrals or moments of functions (such as FE_Q_Hierarchical) – can in general not make sense of the operation that is required for this function. They consequently may not implement it.
Reimplemented from FiniteElement< dim, dim >.
Definition at line 128 of file fe_bdm.cc.