libMesh
quadrature_monomial.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 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_MONOMIAL_H
21 #define LIBMESH_QUADRATURE_MONOMIAL_H
22 
23 // Local includes
24 #include "libmesh/quadrature.h"
25 
26 namespace libMesh
27 {
28 
58 class QMonomial final : public QBase
59 {
60 public:
61 
65  QMonomial (unsigned int dim,
66  Order order=INVALID_ORDER) :
67  QBase(dim,order)
68  {}
69 
74  QMonomial (const QMonomial &) = default;
75  QMonomial (QMonomial &&) = default;
76  QMonomial & operator= (const QMonomial &) = default;
77  QMonomial & operator= (QMonomial &&) = default;
78  virtual ~QMonomial() = default;
79 
83  virtual QuadratureType type() const override;
84 
85  virtual std::unique_ptr<QBase> clone() const override;
86 
87 private:
88 
93  virtual void init_1D (const ElemType, unsigned int) override;
94  virtual void init_2D (const ElemType, unsigned int) override;
95  virtual void init_3D (const ElemType, unsigned int) override;
96 
109  void wissmann_rule(const Real rule_data[][3],
110  const unsigned int n_pts);
111 
132  void stroud_rule(const Real rule_data[][3],
133  const unsigned int * rule_symmetry,
134  const unsigned int n_pts);
135 
176  void kim_rule(const Real rule_data[][4],
177  const unsigned int * rule_id,
178  const unsigned int n_pts);
179 };
180 
181 } // namespace libMesh
182 
183 #endif // LIBMESH_QUADRATURE_MONOMIAL_H
virtual void init_3D(const ElemType, unsigned int) override
Initializes the 3D quadrature rule by filling the points and weights vectors with the appropriate val...
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
virtual std::unique_ptr< QBase > clone() const override
unsigned int dim
virtual ~QMonomial()=default
void wissmann_rule(const Real rule_data[][3], const unsigned int n_pts)
Wissmann published three interesting "partially symmetric" rules for integrating degree 4...
QuadratureType
Defines an enum for currently available quadrature rules.
The libMesh namespace provides an interface to certain functionality in the library.
This class defines alternate quadrature rules on "tensor-product" elements (quadrilaterals and hexahe...
virtual QuadratureType type() const override
void kim_rule(const Real rule_data[][4], const unsigned int *rule_id, const unsigned int n_pts)
Rules from Kim and Song, Comm.
QMonomial & operator=(const QMonomial &)=default
QMonomial(unsigned int dim, Order order=INVALID_ORDER)
Constructor.
void stroud_rule(const Real rule_data[][3], const unsigned int *rule_symmetry, const unsigned int n_pts)
Stroud&#39;s rules for quads and hexes can have one of several different types of symmetry.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void init_1D(const ElemType, unsigned int) override
Uses a Gauss rule in 1D.
The QBase class provides the basic functionality from which various quadrature rules can be derived...
Definition: quadrature.h:53
virtual void init_2D(const ElemType, unsigned int) override
Initializes the 2D quadrature rule by filling the points and weights vectors with the appropriate val...