1 // The libMesh Finite Element Library. 2 // Copyright (C) 2002-2020 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 4 // This library is free software; you can redistribute it and/or 5 // modify it under the terms of the GNU Lesser General Public 6 // License as published by the Free Software Foundation; either 7 // version 2.1 of the License, or (at your option) any later version. 8 9 // This library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 // Lesser General Public License for more details. 13 14 // You should have received a copy of the GNU Lesser General Public 15 // License along with this library; if not, write to the Free Software 16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 18 19 20 #ifndef LIBMESH_QUADRATURE_GAUSS_LOBATTO_H 21 #define LIBMESH_QUADRATURE_GAUSS_LOBATTO_H 22 23 // Local includes 24 #include "libmesh/quadrature.h" 25 26 namespace libMesh 27 { 28 29 /** 30 * This class implements Gauss-Lobatto quadrature for 1D elements and 2D/3D 31 * tensor product elements. Properties of Gauss-Lobatto quadrature rules: 32 * .) Include the "end-points" of the domain (have points on edges/faces in 2D/3D). 33 * .) Rules with n points can exactly integrate polynomials of degree 2n-3. 34 * 35 * http://en.wikipedia.org/wiki/Gaussian_quadrature#Gauss.E2.80.93Lobatto_rules 36 * 37 * \author John W. Peterson 38 * \date 2014 39 * \brief Implements 1D and 2/3D tensor product Gauss-Lobatto quadrature rules. 40 */ 41 class QGaussLobatto final : public QBase 42 { 43 public: 44 45 /** 46 * Constructor. Declares the order of the quadrature rule. 47 */ 48 QGaussLobatto (unsigned int dim, 49 Order order=INVALID_ORDER); 50 51 /** 52 * Copy/move ctor, copy/move assignment operator, and destructor are 53 * all explicitly defaulted for this simple class. 54 */ 55 QGaussLobatto (const QGaussLobatto &) = default; 56 QGaussLobatto (QGaussLobatto &&) = default; 57 QGaussLobatto & operator= (const QGaussLobatto &) = default; 58 QGaussLobatto & operator= (QGaussLobatto &&) = default; 59 virtual ~QGaussLobatto() = default; 60 61 /** 62 * \returns \p QGAUSS_LOBATTO. 63 */ 64 virtual QuadratureType type() const override; 65 66 private: 67 68 virtual void init_1D (const ElemType, unsigned int) override; 69 virtual void init_2D (const ElemType, unsigned int) override; 70 virtual void init_3D (const ElemType, unsigned int) override; 71 }; 72 73 } // namespace libMesh 74 75 #endif // LIBMESH_QUADRATURE_GAUSS_LOBATTO_H 76