[&](const auto d) {
return fe.adjust_quad_dof_index_for_face_orientation(
d,
+ quad,
accessor.face_orientation(quad),
accessor.face_flip(quad),
accessor.face_rotation(quad));
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const;
/**
virtual void
get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
const unsigned int subface,
- FullMatrix<double> &matrix) const;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const;
//@}
* of freedom on quads.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other) const;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const;
/**
* Return whether this element dominates another one given as argument
* indices. The function is mainly there for use inside the library.
*/
std::pair<unsigned int, unsigned int>
- face_system_to_component_index(const unsigned int index) const;
+ face_system_to_component_index(const unsigned int index,
+ const unsigned int face_no = 0) const;
/**
* For faces with non-standard face_orientation in 3D, the dofs on faces
*/
unsigned int
adjust_quad_dof_index_for_face_orientation(const unsigned int index,
+ const unsigned int face_no,
const bool face_orientation,
const bool face_flip,
const bool face_rotation) const;
* indices. The function is mainly there for use inside the library.
*/
std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
- face_system_to_base_index(const unsigned int index) const;
+ face_system_to_base_index(const unsigned int index,
+ const unsigned int face_no = 0) const;
/**
* Given a base element number, return the first block of a BlockVector it
* See the class documentation for details on support points.
*/
const std::vector<Point<dim - 1>> &
- get_unit_face_support_points() const;
+ get_unit_face_support_points(const unsigned int face_no = 0) const;
/**
* Return whether a finite element has defined support points on faces. If
* function.
*/
bool
- has_face_support_points() const;
+ has_face_support_points(const unsigned int face_no = 0) const;
/**
* The function corresponding to the unit_support_point() function, but for
* faces. See there for more information.
*/
virtual Point<dim - 1>
- unit_face_support_point(const unsigned int index) const;
+ unit_face_support_point(const unsigned int index,
+ const unsigned int face_no = 0) const;
/**
* Return a vector of generalized support points.
template <int dim, int spacedim>
inline std::pair<unsigned int, unsigned int>
FiniteElement<dim, spacedim>::face_system_to_component_index(
- const unsigned int index) const
+ const unsigned int index,
+ const unsigned int) const
{
AssertIndexRange(index, face_system_to_component_table.size());
template <int dim, int spacedim>
inline std::pair<std::pair<unsigned int, unsigned int>, unsigned int>
FiniteElement<dim, spacedim>::face_system_to_base_index(
- const unsigned int index) const
+ const unsigned int index,
+ const unsigned int) const
{
AssertIndexRange(index, face_system_to_base_table.size());
return face_system_to_base_table[index];
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face of
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented is thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
* of freedom on quads.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
* course empty.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
* course empty.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(const FiniteElement<dim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim>::ExcInterpolationNotImplemented.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* @name Functions to support hp
* course empty.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim>::ExcInterpolationNotImplemented.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Projection from a fine grid space onto a coarse grid space. Overrides the
* course empty.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the
* will get propagated out from this element.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* If, on a vertex, several finite elements are active, the hp code first
* of freedom on quads.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented is thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
* The set of such constraints is non-empty only for dim==3.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return whether this element implements its hanging node constraints in
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<1, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented is thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<1, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<1, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
* The set of such constraints is non-empty only for dim==3.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<1, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<1, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return a list of constant modes of the element. For this element, it
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented is thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
* of freedom on lines.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(const FiniteElement<dim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face of
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the subface
* <tt>ExcInterpolationNotImplemented</tt>.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Projection from a fine grid space onto a coarse grid space. If this
const FiniteElement<dim, spacedim> &fe_other) const override;
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
virtual bool
hp_constraints_are_implemented() const override;
*/
virtual void
- get_face_interpolation_matrix(
- const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const override;
+ get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source_fe,
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int face_no = 0) const override;
/**
get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
const unsigned int index,
- FullMatrix<double> & interpolation_matrix) const override;
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no = 0) const override;
/**
* @return true if the FE dominates any other.
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* This function returns @p true, if the shape function @p shape_index has
* of freedom on quads.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no = 0) const override;
//@}
* Same as above but for faces.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(const FiniteElement<dim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the subface
* <tt>ExcInterpolationNotImplemented</tt>.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Determine an estimate for the memory consumption (in bytes) of this
virtual void
get_face_interpolation_matrix(const FiniteElement<dim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
virtual bool
hp_constraints_are_implemented() const override;
hp_line_dof_identities(const FiniteElement<dim> &fe_other) const override;
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(const FiniteElement<dim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int face_no = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
* Implementation of the respective function in the base class.
*/
virtual Point<dim - 1>
- unit_face_support_point(const unsigned int index) const override;
+ unit_face_support_point(const unsigned int index,
+ const unsigned int face_no = 0) const override;
/**
* Return a list of constant modes of the element. The returns table has as
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* will get propagated out from this element.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* If, on a vertex, several finite elements are active, the hp code first
* of freedom on quads.
*/
virtual std::vector<std::pair<unsigned int, unsigned int>>
- hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const override;
+ hp_quad_dof_identities(const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
*/
virtual void
get_face_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> &matrix) const override;
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* Return the matrix interpolating from a face of one element to the face
* FiniteElement<dim,spacedim>::ExcInterpolationNotImplemented is thrown.
*/
virtual void
- get_subface_interpolation_matrix(const FiniteElement<dim, spacedim> &source,
- const unsigned int subface,
- FullMatrix<double> &matrix) const override;
+ get_subface_interpolation_matrix(
+ const FiniteElement<dim, spacedim> &source,
+ const unsigned int subface,
+ FullMatrix<double> & matrix,
+ const unsigned int face_no = 0) const override;
/**
* @copydoc FiniteElement::compare_for_domination()
unsigned int
FiniteElement<dim, spacedim>::adjust_quad_dof_index_for_face_orientation(
const unsigned int index,
+ const unsigned int face_no,
const bool face_orientation,
const bool face_flip,
const bool face_rotation) const
{
+ (void)face_no;
+
// general template for 1D and 2D: not
// implemented. in fact, the function
// shouldn't even be called unless we are
void
FiniteElement<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &,
- FullMatrix<double> &) const
+ FullMatrix<double> &,
+ const unsigned int) const
{
// by default, no interpolation
// implemented. so throw exception,
FiniteElement<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &,
const unsigned int,
- FullMatrix<double> &) const
+ FullMatrix<double> &,
+ const unsigned int) const
{
// by default, no interpolation
// implemented. so throw exception,
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FiniteElement<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &) const
+ const FiniteElement<dim, spacedim> &,
+ const unsigned int) const
{
Assert(false, ExcNotImplemented());
return std::vector<std::pair<unsigned int, unsigned int>>();
template <int dim, int spacedim>
const std::vector<Point<dim - 1>> &
-FiniteElement<dim, spacedim>::get_unit_face_support_points() const
+FiniteElement<dim, spacedim>::get_unit_face_support_points(
+ const unsigned int) const
{
// a finite element may define
// support points, but only if
template <int dim, int spacedim>
bool
-FiniteElement<dim, spacedim>::has_face_support_points() const
+FiniteElement<dim, spacedim>::has_face_support_points(const unsigned int) const
{
return (unit_face_support_points.size() != 0);
}
template <int dim, int spacedim>
Point<dim - 1>
-FiniteElement<dim, spacedim>::unit_face_support_point(
- const unsigned int index) const
+FiniteElement<dim, spacedim>::unit_face_support_point(const unsigned int index,
+ const unsigned int) const
{
AssertIndexRange(index, this->n_dofs_per_face());
Assert(unit_face_support_points.size() == this->n_dofs_per_face(),
void
FE_Bernstein<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
Assert(dim > 1, ExcImpossibleInDim(1));
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_Bernstein<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
Assert(interpolation_matrix.m() == x_source_fe.n_dofs_per_face(),
ExcDimensionMismatch(interpolation_matrix.m(),
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_Bernstein<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &) const
+ const FiniteElement<dim, spacedim> &,
+ const unsigned int) const
{
// Since this fe is not interpolatory but on the vertices, we can
// not identify dofs on lines and on quads even if there are dofs
void
FE_DGP<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source FE is also a DGP element. in that
// case, both elements have no dofs on their faces and the face
FE_DGP<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source FE is also a DGP element. in that
// case, both elements have no dofs on their faces and the face
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_DGP<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int) const
{
// there are no such constraints for DGP elements at all
if (dynamic_cast<const FE_DGP<dim, spacedim> *>(&fe_other) != nullptr)
void
FE_DGPMonomial<dim>::get_face_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGPMonomial element. in that case,
FE_DGPMonomial<dim>::get_subface_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
const unsigned int,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGPMonomial element. in that case,
template <int dim>
std::vector<std::pair<unsigned int, unsigned int>>
-FE_DGPMonomial<dim>::hp_quad_dof_identities(
- const FiniteElement<dim> &fe_other) const
+FE_DGPMonomial<dim>::hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int) const
{
// there are no such constraints for DGPMonomial
// elements at all
void
FE_DGPNonparametric<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGPNonparametric element. in that case,
FE_DGPNonparametric<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGPNonparametric element. in that case,
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_DGPNonparametric<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int) const
{
// there are no such constraints for DGPNonparametric
// elements at all
void
FE_DGQ<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGQ element. in that case,
FE_DGQ<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the source
// FE is also a DGQ element. in that case,
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_DGQ<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> & /*fe_other*/) const
+ const FiniteElement<dim, spacedim> & /*fe_other*/,
+ const unsigned int) const
{
// this element is discontinuous, so by definition there can
// be no identities between its dofs and those of any neighbor
void
FE_Enriched<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source,
- FullMatrix<double> & matrix) const
+ FullMatrix<double> & matrix,
+ const unsigned int face_no) const
{
if (const FE_Enriched<dim, spacedim> *fe_enr_other =
dynamic_cast<const FE_Enriched<dim, spacedim> *>(&source))
{
fe_system->get_face_interpolation_matrix(fe_enr_other->get_fe_system(),
- matrix);
+ matrix,
+ face_no);
}
else
{
FE_Enriched<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &source,
const unsigned int subface,
- FullMatrix<double> & matrix) const
+ FullMatrix<double> & matrix,
+ const unsigned int face_no) const
{
if (const FE_Enriched<dim, spacedim> *fe_enr_other =
dynamic_cast<const FE_Enriched<dim, spacedim> *>(&source))
{
fe_system->get_subface_interpolation_matrix(fe_enr_other->get_fe_system(),
subface,
- matrix);
+ matrix,
+ face_no);
}
else
{
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_Enriched<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int face_no) const
{
if (const FE_Enriched<dim, spacedim> *fe_enr_other =
dynamic_cast<const FE_Enriched<dim, spacedim> *>(&fe_other))
{
- return fe_system->hp_quad_dof_identities(fe_enr_other->get_fe_system());
+ return fe_system->hp_quad_dof_identities(fe_enr_other->get_fe_system(),
+ face_no);
}
else
{
void
FE_FaceQ<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_FaceQ<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this function is similar to the respective method in FE_Q
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_FaceQ<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int) const
{
Assert(dim >= 3, ExcInternalError());
void
FE_FaceQ<1, spacedim>::get_face_interpolation_matrix(
const FiniteElement<1, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_FaceQ<1, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<1, spacedim> &x_source_fe,
const unsigned int /*subface*/,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
(void)x_source_fe;
Assert(interpolation_matrix.n() == this->n_dofs_per_face(),
template <int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_FaceQ<1, spacedim>::hp_quad_dof_identities(
- const FiniteElement<1, spacedim> &) const
+ const FiniteElement<1, spacedim> &,
+ const unsigned int) const
{
// this element is continuous only for the highest dimensional bounding object
return std::vector<std::pair<unsigned int, unsigned int>>();
void
FE_FaceP<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_FaceP<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this function is similar to the respective method in FE_Q
template <int dim>
std::vector<std::pair<unsigned int, unsigned int>>
-FE_Nedelec<dim>::hp_quad_dof_identities(
- const FiniteElement<dim> &fe_other) const
+FE_Nedelec<dim>::hp_quad_dof_identities(const FiniteElement<dim> &fe_other,
+ const unsigned int) const
{
// we can presently only compute
// these identities if both FEs are
void
FE_Nedelec<dim>::get_face_interpolation_matrix(
const FiniteElement<dim> &source,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
void
FE_Nedelec<1>::get_subface_interpolation_matrix(const FiniteElement<1, 1> &,
const unsigned int,
- FullMatrix<double> &) const
+ FullMatrix<double> &,
+ const unsigned int) const
{
Assert(false, ExcNotImplemented());
}
FE_Nedelec<dim>::get_subface_interpolation_matrix(
const FiniteElement<dim> &source,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_Nothing<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> & /*fe_other*/) const
+ const FiniteElement<dim, spacedim> & /*fe_other*/,
+ const unsigned int) const
{
// the FE_Nothing has no
// degrees of freedom, so there
void
FE_Nothing<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> & /*source_fe*/,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// since this element has no face dofs, the
// interpolation matrix is necessarily empty
FE_Nothing<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> & /*source_fe*/,
const unsigned int /*index*/,
- FullMatrix<double> &interpolation_matrix) const
+ FullMatrix<double> &interpolation_matrix,
+ const unsigned int) const
{
// since this element has no face dofs, the
// interpolation matrix is necessarily empty
void
FE_Q_Base<PolynomialType, dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
Assert(dim > 1, ExcImpossibleInDim(1));
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_Q_Base<PolynomialType, dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
Assert(interpolation_matrix.m() == x_source_fe.n_dofs_per_face(),
ExcDimensionMismatch(interpolation_matrix.m(),
template <class PolynomialType, int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_Q_Base<PolynomialType, dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int) const
{
// we can presently only compute these identities if both FEs are FE_Qs or
// if the other one is an FE_Nothing
template <int dim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_Q_Hierarchical<dim>::hp_quad_dof_identities(
- const FiniteElement<dim> &fe_other) const
+ const FiniteElement<dim> &fe_other,
+ const unsigned int) const
{
// we can presently only compute
// these identities if both FEs are
void
FE_Q_Hierarchical<1>::get_face_interpolation_matrix(
const FiniteElement<1, 1> & /*x_source_fe*/,
- FullMatrix<double> & /*interpolation_matrix*/) const
+ FullMatrix<double> & /*interpolation_matrix*/,
+ const unsigned int) const
{
Assert(false, ExcImpossibleInDim(1));
}
FE_Q_Hierarchical<1>::get_subface_interpolation_matrix(
const FiniteElement<1, 1> & /*x_source_fe*/,
const unsigned int /*subface*/,
- FullMatrix<double> & /*interpolation_matrix*/) const
+ FullMatrix<double> & /*interpolation_matrix*/,
+ const unsigned int) const
{
Assert(false, ExcImpossibleInDim(1));
}
void
FE_Q_Hierarchical<dim>::get_face_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
FE_Q_Hierarchical<dim>::get_subface_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
template <int dim>
std::vector<std::pair<unsigned int, unsigned int>>
FE_RaviartThomasNodal<dim>::hp_quad_dof_identities(
- const FiniteElement<dim> &fe_other) const
+ const FiniteElement<dim> &fe_other,
+ const unsigned int) const
{
// we can presently only compute
// these identities if both FEs are
void
FE_RaviartThomasNodal<1>::get_face_interpolation_matrix(
const FiniteElement<1, 1> & /*x_source_fe*/,
- FullMatrix<double> & /*interpolation_matrix*/) const
+ FullMatrix<double> & /*interpolation_matrix*/,
+ const unsigned int) const
{
Assert(false, ExcImpossibleInDim(1));
}
FE_RaviartThomasNodal<1>::get_subface_interpolation_matrix(
const FiniteElement<1, 1> & /*x_source_fe*/,
const unsigned int /*subface*/,
- FullMatrix<double> & /*interpolation_matrix*/) const
+ FullMatrix<double> & /*interpolation_matrix*/,
+ const unsigned int) const
{
Assert(false, ExcImpossibleInDim(1));
}
void
FE_RaviartThomasNodal<dim>::get_face_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
FE_RaviartThomasNodal<dim>::get_subface_interpolation_matrix(
const FiniteElement<dim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is only implemented, if the
// source FE is also a
void
FESystem<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
Assert(interpolation_matrix.n() == this->n_dofs_per_face(),
ExcDimensionMismatch(interpolation_matrix.n(),
base_to_base_interpolation.reinit(base_other.n_dofs_per_face(),
base.n_dofs_per_face());
base.get_face_interpolation_matrix(base_other,
- base_to_base_interpolation);
+ base_to_base_interpolation,
+ face_no);
// now translate entries. we'd like to have something like
// face_base_to_system_index, but that doesn't exist. rather, all we
FESystem<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
AssertThrow(
(x_source_fe.get_name().find("FESystem<") == 0) ||
base.n_dofs_per_face());
base.get_subface_interpolation_matrix(base_other,
subface,
- base_to_base_interpolation);
+ base_to_base_interpolation,
+ face_no);
// now translate entries. we'd like to have something like
// face_base_to_system_index, but that doesn't exist. rather, all we
template <int dim, int spacedim>
std::vector<std::pair<unsigned int, unsigned int>>
FESystem<dim, spacedim>::hp_quad_dof_identities(
- const FiniteElement<dim, spacedim> &fe_other) const
+ const FiniteElement<dim, spacedim> &fe_other,
+ const unsigned int) const
{
return hp_object_dof_identities<2>(fe_other);
}
template <int dim, int spacedim>
Point<dim - 1>
-FESystem<dim, spacedim>::unit_face_support_point(const unsigned int index) const
+FESystem<dim, spacedim>::unit_face_support_point(
+ const unsigned int index,
+ const unsigned int face_no) const
{
AssertIndexRange(index, this->n_dofs_per_face());
Assert((this->unit_face_support_points.size() == this->n_dofs_per_face()) ||
else
// no. ask the base element whether it would like to provide this
// information
- return (base_element(this->face_system_to_base_index(index).first.first)
- .unit_face_support_point(
- this->face_system_to_base_index(index).second));
+ return (
+ base_element(this->face_system_to_base_index(index).first.first)
+ .unit_face_support_point(this->face_system_to_base_index(index).second,
+ face_no));
}
void
FE_TraceQ<dim, spacedim>::get_face_interpolation_matrix(
const FiniteElement<dim, spacedim> &source_fe,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int face_no) const
{
get_subface_interpolation_matrix(source_fe,
numbers::invalid_unsigned_int,
- interpolation_matrix);
+ interpolation_matrix,
+ face_no);
}
FE_TraceQ<dim, spacedim>::get_subface_interpolation_matrix(
const FiniteElement<dim, spacedim> &x_source_fe,
const unsigned int subface,
- FullMatrix<double> & interpolation_matrix) const
+ FullMatrix<double> & interpolation_matrix,
+ const unsigned int) const
{
// this is the code from FE_FaceQ
Assert(interpolation_matrix.n() == this->n_dofs_per_face(),