21 #include "libmesh/quadrature_gauss.h" 22 #include "libmesh/quadrature_conical.h" 23 #include "libmesh/quadrature_gm.h" 24 #include "libmesh/enum_to_string.h" 25 #include "libmesh/cell_c0polyhedron.h" 88 const Real b = 0.25*(1-std::sqrt(
Real(5))/5);
173 conical_rule.
init(*
this);
206 const Real rule_data[3][4] = {
207 {0.250000000000000000e+00_R, 0._R, 0._R, -0.131555555555555556e-01_R},
208 {0.785714285714285714e+00_R, 0.714285714285714285e-01_R, 0._R, 0.762222222222222222e-02_R},
209 {0.399403576166799219e+00_R, 0._R, 0.100596423833200785e+00_R, 0.248888888888888889e-01_R}
221 libmesh_fallthrough();
238 const Real a[3] = {0.31088591926330060980_R,
239 0.092735250310891226402_R,
240 0.045503704125649649492_R};
244 const Real wt[3] = {0.018781320953002641800_R,
245 0.012248840519393658257_R,
246 0.0070910034628469110730_R};
249 for (
unsigned int i=0; i<2; ++i)
252 const unsigned int offset=4*i;
255 const Real b = 1. - 3.*a[i];
265 for (
unsigned int j=0; j<4; ++j)
272 const unsigned int offset = 8;
273 const Real b = 0.5*(1. - 2.*a[2]);
285 for (
unsigned int j=0; j<6; ++j)
407 const Real rule_data[4][4] = {
408 {0.356191386222544953e+00_R , 0.214602871259151684e+00_R , 0._R, 0.00665379170969464506e+00_R},
409 {0.877978124396165982e+00_R , 0.0406739585346113397e+00_R, 0._R, 0.00167953517588677620e+00_R},
410 {0.0329863295731730594e+00_R, 0.322337890142275646e+00_R , 0._R, 0.00922619692394239843e+00_R},
411 {0.0636610018750175299e+00_R, 0.269672331458315867e+00_R , 0.603005664791649076e+00_R, 0.00803571428571428248e+00_R}
438 const Real rule_data[7][4] = {
439 {0.250000000000000000e+00_R, 0._R, 0._R, -0.393270066412926145e-01_R},
440 {0.617587190300082967e+00_R, 0.127470936566639015e+00_R, 0._R, 0.408131605934270525e-02_R},
441 {0.903763508822103123e+00_R, 0.320788303926322960e-01_R, 0._R, 0.658086773304341943e-03_R},
442 {0.497770956432810185e-01_R, 0._R, 0.450222904356718978e+00_R, 0.438425882512284693e-02_R},
443 {0.183730447398549945e+00_R, 0._R, 0.316269552601450060e+00_R, 0.138300638425098166e-01_R},
444 {0.231901089397150906e+00_R, 0.229177878448171174e-01_R, 0.513280033360881072e+00_R, 0.424043742468372453e-02_R},
445 {0.379700484718286102e-01_R, 0.730313427807538396e+00_R, 0.193746475248804382e+00_R, 0.223873973961420164e-02_R}
457 libmesh_fallthrough();
491 conical_rule.
init(*
this);
543 conical_rule.
init(*
this);
561 std::vector<Point> & tetpoints = tet_rule.
get_points();
562 std::vector<Real> & tetweights = tet_rule.
get_weights();
564 std::size_t numtetpts = tetpoints.size();
575 _points.resize(numtetpts*numtets);
578 for (std::size_t t = 0; t != numtets; ++t)
580 auto master_points = poly.master_subelement(t);
582 const Point v01 = master_points[1] - master_points[0];
583 const Point v02 = master_points[2] - master_points[0];
584 const Point v03 = master_points[3] - master_points[0];
589 const Real six_master_tet_vol =
592 for (std::size_t i = 0; i != numtetpts; ++i)
596 v01 * tetpoints[i](0) +
597 v02 * tetpoints[i](1) +
598 v03 * tetpoints[i](2);
599 _weights[numtetpts*t+i] = tetweights[i] *
bool allow_rules_with_negative_weights
Flag (default true) controlling the use of quadrature rules with negative weights.
ElemType _type
The type of element for which the current values have been computed.
const std::vector< Real > & get_weights() const
const Elem * _elem
The element for which the current values were computed, or nullptr if values were computed without a ...
The libMesh namespace provides an interface to certain functionality in the library.
std::vector< Point > _points
The locations of the quadrature points in reference element space.
std::vector< Real > _weights
The quadrature weights.
void tensor_product_prism(const QBase &q1D, const QBase &q2D)
Computes the tensor product of a 1D quadrature rule and a 2D quadrature rule.
unsigned int _p_level
The p-level of the element for which the current values have been computed.
T triple_product(const TypeVector< T > &a, const TypeVector< T > &b, const TypeVector< T > &c)
void tensor_product_hex(const QBase &q1D)
Computes the tensor product quadrature rule [q1D x q1D x q1D] from the 1D rule q1D.
unsigned int n_subelements() const
This class implements the so-called conical product quadrature rules for Tri and Tet elements...
This class implements the Grundmann-Moller quadrature rules for tetrahedra.
std::string enum_to_string(const T e)
Order _order
The polynomial order which the quadrature rule is capable of integrating exactly. ...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void keast_rule(const Real rule_data[][4], const unsigned int n_pts)
The Keast rules are for tets.
const std::vector< Point > & get_points() const
This class implements specific orders of Gauss quadrature.
virtual void init(const Elem &e, unsigned int p_level=invalid_uint)
Initializes the data structures for a quadrature rule for the element e.
virtual void init_3D() override
Initializes the 3D quadrature rule by filling the points and weights vectors with the appropriate val...
The C0Polyhedron is an element in 3D with an arbitrary (but fixed) number of polygonal first-order (C...
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space.