From: Wolfgang Bangerth Date: Tue, 31 Aug 2021 01:13:35 +0000 (-0600) Subject: Improve documentation of PolynomialsRaviartThomas a bit. X-Git-Tag: v9.4.0-rc1~1016^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F12726%2Fhead;p=dealii.git Improve documentation of PolynomialsRaviartThomas a bit. --- diff --git a/source/base/polynomials_raviart_thomas.cc b/source/base/polynomials_raviart_thomas.cc index a728e7378a..ddf589a918 100644 --- a/source/base/polynomials_raviart_thomas.cc +++ b/source/base/polynomials_raviart_thomas.cc @@ -46,14 +46,35 @@ template std::vector>> PolynomialsRaviartThomas::create_polynomials(const unsigned int k) { + // Create a vector of polynomial spaces where the first element + // has degree k+1 and the rest has degree k. This corresponds to + // the space of single-variable polynomials from which we will create the + // space for the first component of the RT element by way of tensor + // product. + // + // The other components of the RT space can be created by rotating + // this vector of single-variable polynomials. + // std::vector>> pols(dim); - pols[0] = Polynomials::LagrangeEquidistant::generate_complete_basis(k + 1); if (k == 0) - for (unsigned int d = 1; d < dim; ++d) - pols[d] = Polynomials::Legendre::generate_complete_basis(0); + { + // We need to treat the case k=0 differently because there, + // the polynomial in x has degree 1 and so has node points + // equal to the end points of the interval [0,1] (i.e., it + // is a "Lagrange" polynomial), whereas the y- and z-polynomials + // only have the interval midpoint as a node (i.e., they are + // a "Legendre" polynomial). + pols[0] = Polynomials::LagrangeEquidistant::generate_complete_basis(1); + for (unsigned int d = 1; d < dim; ++d) + pols[d] = Polynomials::Legendre::generate_complete_basis(0); + } else - for (unsigned int d = 1; d < dim; ++d) - pols[d] = Polynomials::LagrangeEquidistant::generate_complete_basis(k); + { + pols[0] = + Polynomials::LagrangeEquidistant::generate_complete_basis(k + 1); + for (unsigned int d = 1; d < dim; ++d) + pols[d] = Polynomials::LagrangeEquidistant::generate_complete_basis(k); + } return pols; }