Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 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_SIMPSON_H 21 : #define LIBMESH_QUADRATURE_SIMPSON_H 22 : 23 : // Local includes 24 : #include "libmesh/quadrature.h" 25 : 26 : namespace libMesh 27 : { 28 : 29 : /** 30 : * This class implements Simpson quadrature. 31 : * This is the same thing as Newton-Cotes quadrature with three points. 32 : * Simpson's rule can integrate polynomials of degree three exactly. 33 : * 34 : * \author John W. Peterson 35 : * \date 2003 36 : * \brief Implements Simpson's rule, i.e. nodal quadrature for quadratic elements. 37 : */ 38 : class QSimpson : public QBase 39 : { 40 : public: 41 : 42 : /** 43 : * Constructor. Declares the order of the quadrature rule. We 44 : * explicitly call the \p init function in 1D since the other 45 : * tensor-product rules require this one. 46 : * 47 : * \note The element type, EDGE2, will not be used internally, 48 : * however if we called the function with INVALID_ELEM it would try 49 : * to be smart and return, thinking it had already done the work. 50 : */ 51 : explicit 52 10969 : QSimpson (unsigned int dim, 53 46343 : Order order=THIRD) : 54 46343 : QBase(dim, order) 55 : { 56 10969 : if (dim == 1) 57 5683 : init(EDGE2); 58 10969 : } 59 : 60 : /** 61 : * Copy/move ctor, copy/move assignment operator, and destructor are 62 : * all explicitly defaulted for this simple class. 63 : */ 64 0 : QSimpson (const QSimpson &) = default; 65 : QSimpson (QSimpson &&) = default; 66 : QSimpson & operator= (const QSimpson &) = default; 67 : QSimpson & operator= (QSimpson &&) = default; 68 45089 : virtual ~QSimpson() = default; 69 : 70 : /** 71 : * \returns \p QSIMPSON. 72 : */ 73 : virtual QuadratureType type() const override; 74 : 75 : virtual std::unique_ptr<QBase> clone() const override; 76 : 77 : private: 78 : 79 : virtual void init_1D () override; 80 : virtual void init_2D () override; 81 : virtual void init_3D () override; 82 : }; 83 : 84 : } // namespace libMesh 85 : 86 : #endif // LIBMESH_QUADRATURE_SIMPSON_H