*/
FE_Bernstein (const unsigned int p);
+ /**
+ * FE_Bernstein is not interpolatory in the element interior, which prevents
+ * this element from defining an interpolation matrix. An exception will be
+ * thrown.
+ *
+ * Overrides the implementation from FE_Q_Base.
+ */
+ virtual void
+ get_interpolation_matrix (const FiniteElement<dim,spacedim> &source,
+ FullMatrix<double> &matrix) const;
+
+ /**
+ * FE_Bernstein is not interpolatory in the element interior, which prevents
+ * this element from defining a restriction matrix. An exception will be
+ * thrown.
+ *
+ * Overrides the implementation from FE_Q_Base.
+ */
+ virtual const FullMatrix<double> &
+ get_restriction_matrix (const unsigned int child,
+ const RefinementCase<dim> &refinement_case=RefinementCase<dim>::isotropic_refinement) const;
+
+ /**
+ * FE_Bernstein is not interpolatory in the element interior, which prevents
+ * this element from defining a prolongation matrix. An exception will be
+ * thrown.
+ *
+ * Overrides the implementation from FE_Q_Base.
+ */
+ virtual const FullMatrix<double> &
+ get_prolongation_matrix (const unsigned int child,
+ const RefinementCase<dim> &refinement_case=RefinementCase<dim>::isotropic_refinement) const;
+
/**
* Return the matrix interpolating from a face of one element to the face of
* the neighboring element. The size of the matrix is then
{}
+
+template <int dim, int spacedim>
+void
+FE_Bernstein<dim,spacedim>::
+get_interpolation_matrix (const FiniteElement<dim,spacedim> &,
+ FullMatrix<double> &) const
+{
+ // no interpolation possible. throw exception, as documentation says
+ typedef FiniteElement<dim,spacedim> FEE;
+ AssertThrow (false,
+ typename FEE::ExcInterpolationNotImplemented());
+}
+
+
+
+template <int dim, int spacedim>
+const FullMatrix<double> &
+FE_Bernstein<dim,spacedim>::get_restriction_matrix (const unsigned int,
+ const RefinementCase<dim> &) const
+{
+ typedef FiniteElement<dim,spacedim> FEE;
+ AssertThrow (false,
+ typename FEE::ExcProjectionVoid());
+ // return dummy, nothing will happen because the base class FE_Q_Base
+ // implements lazy evaluation of those matrices
+ return this->restriction[0][0];
+}
+
+
+
+template <int dim, int spacedim>
+const FullMatrix<double> &
+FE_Bernstein<dim,spacedim>::get_prolongation_matrix (const unsigned int,
+ const RefinementCase<dim> &) const
+{
+ typedef FiniteElement<dim,spacedim> FEE;
+ AssertThrow (false,
+ typename FEE::ExcEmbeddingVoid());
+ // return dummy, nothing will happen because the base class FE_Q_Base
+ // implements lazy evaluation of those matrices
+ return this->prolongation[0][0];
+}
+
+
+
template <int dim, int spacedim>
void
FE_Bernstein<dim,spacedim>::