*/
/**
- * Tensor product of given polynomials and bubble functions of form
- * $(2*x_j-1)^{degree-1}\prod_{i=0}^{dim-1}(x_i(1-x_i))$. This class inherits
+ * A class that represents a space of tensor product polynomials, augmented
+ * by $dim$ (non-normalized) bubble functions of form
+ * $\varphi_j(\mathbf x)
+ * = 2^{\text{degree}-1}\left(x_j-frac 12\right)^{\text{degree}-1}
+ * \left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$
+ * for $j=0,\ldots,dim-1$. If `degree` is one, then the first factor
+ * disappears and one receives the usual bubble function centered
+ * at the mid-point of the cell.
+ *
+ * This class inherits
* most of its functionality from TensorProductPolynomials. The bubble
- * enrichments are added for the last indices. index.
+ * enrichments are added for the last index.
*/
template <int dim>
class TensorProductPolynomialsBubbles : public ScalarPolynomialsBase<dim>
/*@{*/
/**
- * Implementation of a scalar Lagrange finite element @p Q_p^+ that yields the
+ * Implementation of a scalar Lagrange finite element $Q_p^+$ that yields the
* finite element space of continuous, piecewise polynomials of degree @p p in
- * each coordinate direction plus some bubble enrichment space spanned by
- * $(2x_j-1)^{p-1}\prod_{i=0}^{dim-1}(x_i(1-x_i))$. Therefore the highest
- * polynomial degree is $p+1$. This class is realized using tensor product
- * polynomials based on equidistant or given support points.
+ * each coordinate direction plus some (non-normalized) bubble enrichment space
+ * spanned by the additional shape function
+ * $\varphi_j(\mathbf x)
+ * = 2^{p-1}\left(x_j-frac 12\right)^{p-1}
+ * \left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$.
+ * for $j=0,\ldots,dim-1$. If $p$ is one, then the first factor
+ * disappears and one receives the usual bubble function centered
+ * at the mid-point of the cell.
+ * Because these last shape functions have polynomial degree is $p+1$, the
+ * overall polynomial degree of the shape functions in the space described
+ * by this class is $p+1$.
*
- * The standard constructor of this class takes the degree @p p of this finite
- * element. Alternatively, it can take a quadrature formula @p points defining
- * the support points of the Lagrange interpolation in one coordinate
- * direction.
+ * This class is realized using tensor product
+ * polynomials based on equidistant or given support points, in the same way as
+ * one can provide support points to the FE_Q class's constructors.
*
* For more information about the <tt>spacedim</tt> template parameter check
- * the documentation of FiniteElement or the one of Triangulation.
+ * the documentation of the FiniteElement class, or the one of Triangulation.
*
* Due to the fact that the enrichments are small almost everywhere for large
- * p, the condition number for the mass and stiffness matrix fastly
- * increaseses with increasing p. Below you see a comparison with
+ * $p$, the condition number for the mass and stiffness matrix quickly
+ * increaseses with increasing $p$. Below you see a comparison with
* FE_Q(QGaussLobatto(p+1)) for dim=1.
*
* <p ALIGN="center">
*
* Therefore, this element should be used with care for $p>3$.
*
+ *
* <h3>Implementation</h3>
*
* The constructor creates a TensorProductPolynomials object that includes the
* Furthermore the constructor fills the @p interface_constrains, the @p
* prolongation (embedding) and the @p restriction matrices.
*
+ *
* <h3>Numbering of the degrees of freedom (DoFs)</h3>
*
* The original ordering of the shape functions represented by the
FE_Q_Bubbles(const unsigned int p);
/**
- * Constructor for tensor product polynomials with support points @p points
- * plus bubble enrichments based on a one-dimensional quadrature formula.
- * The degree of the finite element is <tt>points.size()</tt>. Note that the
- * first point has to be 0 and the last one 1.
+ * Constructor for tensor product polynomials with support points
+ * @p points plus bubble enrichments based on a one-dimensional
+ * quadrature formula. The degree of the finite element is then
+ * <tt>points.size()</tt>, the plus one compared to the
+ * corresponding case for the FE_Q class coming from the additional
+ * bubble function. See the documentation of the FE_Q constructors
+ * for more information.
+ *
+ * Note that the first point has to be 0
+ * and the last one 1.
*/
FE_Q_Bubbles(const Quadrature<1> &points);