/**
- * Tensor product elements based on equidistant support points.
-//TODO:[RH,GK] Document node numbering etc. copy from old documentation
+ * Implementation of Lagrange finite elements @p{Qp} that yield the
+ * finite element space of continuous, piecewise polynomials of degree
+ * @p{p}. This class is realized using tensor product polynomials
+ * based on equidistant support points.
+ *
+ * The constructor of this class takes the degree @p{p} of this finite
+ * element.
+ *
+ * @sect3{Implementation}
+ *
+ * The constructor creates a @ref{TensorProductPolynomials} object
+ * that includes the tensor product of @p{LagrangeEquidistant}
+ * polynomials of degree @p{p}. This @p{TensorProductPolynomials}
+ * object provides all values and derivatives of the shape functions.
+ *
+ * Furthermore the constructor filles the @p{interface_constraints},
+ * the @p{prolongation} (embedding) and the @p{restriction}
+ * matrices. These are implemented only up to a certain degree, that
+ * is listed in the following:
+ *
+ * @begin{itemize}
+ * @item @p{dim==1}
+ * @begin{itemize}
+ * @item the @p{interface_constraints} are not needed
+ * @item the @p{prolongation} matrices up to degree 4, and
+ * @item the @p{restriction} matrices up to degree 4.
+ * @end{itemize}
+ * @item @p{dim==2}
+ * @begin{itemize}
+ * @item the @p{interface_constraints} up to degree 4,
+ * @item the @p{prolongation} matrices up to degree 3, and
+ * @item the @p{restriction} matrices up to degree 4.
+ * @end{itemize}
+ * @item @p{dim==3}
+ * @begin{itemize}
+ * @item the @p{interface_constraints} up to degree 2,
+ * @item the @p{prolongation} matrices up to degree 2, and
+ * @item the @p{restriction} matrices up to degree 4.
+ * @end{itemize}
+ * @end{itemize}
+ *
+ * @sect3{Numbering of the degrees of freedom (DoFs)}
+ *
+ * The original ordering of the shape functions represented by the
+ * @ref{TensorProductPolynomials} is a tensor product
+ * numbering. However, the shape functions on a cell are renumbered
+ * beginning with the shape functions whose support points are at the
+ * vertices, then on the line, on the quads, and finally (for 3d) on
+ * the hexes. To be explicite, these numberings are listed in the
+ * following:
+ *
+ * @sect4{Q1 elements}
+ * @begin{itemize}
+ * @item 1D case:
+ * @begin{verbatim}
+ * 0-------1
+ * @end{verbatim}
+ *
+ * @item 2D case:
+ * @begin{verbatim}
+ * 3-------2
+ * | |
+ * | |
+ * | |
+ * 0-------1
+ * @end{verbatim}
+ *
+ * @item 3D case:
+ * @begin{verbatim}
+ * 7-------6 7-------6
+ * /| | / /|
+ * / | | / / |
+ * / | | / / |
+ * 3 | | 3-------2 |
+ * | 4-------5 | | 5
+ * | / / | | /
+ * | / / | | /
+ * |/ / | |/
+ * 0-------1 0-------1
+ *
+ * The respective coordinate values of the support points of the degrees
+ * of freedom are as follows:
+ * @begin{itemize}
+ * @item Index 0: @p{[0, 0, 0]};
+ * @item Index 1: @p{[1, 0, 0]};
+ * @item Index 2: @p{[1, 0, 1]};
+ * @item Index 3: @p{[0, 0, 1]};
+ * @item Index 4: @p{[0, 1, 0]};
+ * @item Index 5: @p{[1, 1, 0]};
+ * @item Index 6: @p{[1, 1, 1]};
+ * @item Index 7: @p{[0, 1, 1]};
+ * @end{itemize}
+ * @end{itemize}
+ * @sect4{Q2 elements}
+ * @begin{itemize}
+ * @item 1D case:
+ * @begin{verbatim}
+ * 0---2---1
+ * @end{verbatim}
+ *
+ * @item 2D case:
+ * @begin{verbatim}
+ * 3---6---2
+ * | |
+ * 7 8 5
+ * | |
+ * 0---4---1
+ * @end{verbatim}
+ *
+ * @item 3D case:
+ * @begin{verbatim}
+ * 7--14---6 7--14---6
+ * /| | / /|
+ * 19 | 13 19 1813
+ * / 15 | / / |
+ * 3 | | 3---10--2 |
+ * | 4--12---5 | | 5
+ * | / / | 9 /
+ * 11 16 17 11 | 17
+ * |/ / | |/
+ * 0---8---1 0---8---1
+ *
+ * *-------* *-------*
+ * /| | / /|
+ * / | 21 | / 24 / |
+ * / | | / / |
+ * * | | *-------* |
+ * |25 *-------* | |23 *
+ * | / / | 20 | /
+ * | / 22 / | | /
+ * |/ / | |/
+ * *-------* *-------*
+ * @end{verbatim}
+ * The center vertex has number 26.
+ *
+ * The respective coordinate values of the support points of the degrees
+ * of freedom are as follows:
+ * @begin{itemize}
+ * @item Index 0: @p{[0, 0, 0]};
+ * @item Index 1: @p{[1, 0, 0]};
+ * @item Index 2: @p{[1, 0, 1]};
+ * @item Index 3: @p{[0, 0, 1]};
+ * @item Index 4: @p{[0, 1, 0]};
+ * @item Index 5: @p{[1, 1, 0]};
+ * @item Index 6: @p{[1, 1, 1]};
+ * @item Index 7: @p{[0, 1, 1]};
+ * @item Index 8: @p{[1/2, 0, 0]};
+ * @item Index 9: @p{[1, 0, 1/2]};
+ * @item Index 10: @p{[1/2, 0, 1]};
+ * @item Index 11: @p{[0, 0, 1/2]};
+ * @item Index 12: @p{[1/2, 1, 0]};
+ * @item Index 13: @p{[1, 1, 1/2]};
+ * @item Index 14: @p{[1/2, 1, 1]};
+ * @item Index 15: @p{[0, 1, 1/2]};
+ * @item Index 16: @p{[0, 1/2, 0]};
+ * @item Index 17: @p{[1, 1/2, 0]};
+ * @item Index 18: @p{[1, 1/2, 1]};
+ * @item Index 19: @p{[0, 1/2, 1]};
+ * @item Index 20: @p{[1/2, 0, 1/2]};
+ * @item Index 21: @p{[1/2, 1, 1/2]};
+ * @item Index 22: @p{[1/2, 1/2, 0]};
+ * @item Index 23: @p{[1, 1/2, 1/2]};
+ * @item Index 24: @p{[1/2, 1/2, 1]};
+ * @item Index 25: @p{[0, 1/2, 1/2]};
+ * @item Index 26: @p{[1/2, 1/2, 1/2]};
+ * @end{itemize}
+ * @end{itemize}
+ * @sect4{Q3 elements}
+ * @begin{itemize}
+ * @item 1D case:
+ * @begin{verbatim}
+ * 0--2--3--1
+ * @end{verbatim}
+ *
+ * @item 2D case:
+ * @begin{verbatim}
+ * 3--8--9--2
+ * | |
+ * 11 14 15 7
+ * | |
+ * 10 12 13 6
+ * | |
+ * 0--4--5--1
+ * @end{verbatim}
+ * Note the reverse ordering of degrees of freedom on the left and
+ * upper line.
+ * @end{itemize}
+ * @sect4{Q4 elements}
+ * @begin{itemize}
+ * @item 1D case:
+ * @begin{verbatim}
+ * 0--2--3--4--1
+ * @end{verbatim}
+ *
+ * @item 2D case:
+ * @begin{verbatim}
+ * 3--10-11-12-2
+ * | |
+ * 15 22 23 24 9
+ * | |
+ * 14 19 20 21 8
+ * | |
+ * 13 16 17 18 7
+ * | |
+ * 0--4--5--6--1
+ * @end{verbatim}
+ * @end{itemize}
+ * Note the reverse ordering of degrees of freedom on the left and upper
+ * line.
+ *
+ * @author Wolfgang Bangerth, 1998, Ralf Hartmann, Guido Kanschat, 2001
*/
template <int dim>
class FE_Q : public FiniteElement<dim>
public:
/**
* Constructor for tensor product
- * polynomials of degree @p{k}.
+ * polynomials of degree @p{p}.
*/
- FE_Q (const unsigned int k);
+ FE_Q (const unsigned int p);
/**
* Destructor.