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_TRAP_H 21 : #define LIBMESH_QUADRATURE_TRAP_H 22 : 23 : // Local includes 24 : #include "libmesh/quadrature.h" 25 : 26 : namespace libMesh 27 : { 28 : 29 : /** 30 : * This class implements trapezoidal quadrature. Sometimes also known 31 : * as Newton-Cotes quadrature with two points. These rules sample at 32 : * the corners and will integrate linears exactly. 33 : * 34 : * \author Benjamin Kirk 35 : * \date 2003 36 : * \brief Implements trapezoidal rule, i.e. nodal quadrature for linear elements. 37 : */ 38 : class QTrap : 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 5539 : QTrap (unsigned int dim, 53 12427 : Order order=FIRST) : 54 12427 : QBase(dim,order) 55 : { 56 5539 : if (dim == 1) 57 4379 : init(EDGE2); 58 5539 : } 59 : 60 : /** 61 : * Copy/move ctor, copy/move assignment operator, and destructor are 62 : * all explicitly defaulted for this simple class. 63 : */ 64 0 : QTrap (const QTrap &) = default; 65 : QTrap (QTrap &&) = default; 66 : QTrap & operator= (const QTrap &) = default; 67 : QTrap & operator= (QTrap &&) = default; 68 11253 : virtual ~QTrap() = default; 69 : 70 : /** 71 : * \returns \p QTRAP. 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_TRAP_H