15 #include "../config/config.hpp"
16 #include "../general/array.hpp"
39 MFEM_ASSERT(1 <= dim && dim <= 3,
"invalid dim: " << dim);
53 MFEM_ASSERT(1 <= dim && dim <= 3,
"invalid dim: " << dim);
65 void Set(
const double x1,
const double x2,
const double x3,
const double w)
70 void Set3(
const double x1,
const double x2,
const double x3)
71 {
x = x1;
y = x2;
z = x3; }
73 void Set3(
const double *
p) {
x = p[0];
y = p[1];
z = p[2]; }
75 void Set2w(
const double x1,
const double x2,
const double w)
80 void Set2(
const double x1,
const double x2) {
x = x1;
y = x2; }
82 void Set2(
const double *
p) {
x = p[0];
y = p[1]; }
84 void Set1w(
const double x1,
const double w) {
x = x1;
weight = w; }
100 void SetPointIndices();
103 void GrundmannMollerSimplexRule(
int s,
int n = 3);
105 void AddTriMidPoint(
const int off,
const double weight)
108 void AddTriPoints3(
const int off,
const double a,
const double b,
116 void AddTriPoints3(
const int off,
const double a,
const double weight)
117 { AddTriPoints3(off, a, 1. - 2.*a, weight); }
119 void AddTriPoints3b(
const int off,
const double b,
const double weight)
120 { AddTriPoints3(off, (1. - b)/2., b, weight); }
122 void AddTriPoints3R(
const int off,
const double a,
const double b,
123 const double c,
const double weight)
130 void AddTriPoints3R(
const int off,
const double a,
const double b,
132 { AddTriPoints3R(off, a, b, 1. - a - b, weight); }
134 void AddTriPoints6(
const int off,
const double a,
const double b,
135 const double c,
const double weight)
145 void AddTriPoints6(
const int off,
const double a,
const double b,
147 { AddTriPoints6(off, a, b, 1. - a - b, weight); }
150 void AddTetPoints3(
const int off,
const double a,
const double b,
159 void AddTetPoints6(
const int off,
const double a,
const double b,
160 const double c,
const double weight)
170 void AddTetMidPoint(
const int off,
const double weight)
174 void AddTetPoints4(
const int off,
const double a,
const double weight)
177 AddTetPoints3(off + 1, a, 1. - 3.*a, weight);
181 void AddTetPoints4b(
const int off,
const double b,
const double weight)
183 const double a = (1. -
b)/3.;
185 AddTetPoints3(off + 1, a, b, weight);
189 void AddTetPoints6(
const int off,
const double a,
const double weight)
191 const double b = 0.5 -
a;
192 AddTetPoints3(off, a, b, weight);
193 AddTetPoints3(off + 3, b, a, weight);
197 void AddTetPoints12(
const int off,
const double a,
const double bc,
200 const double cb = 1. - 2*a - bc;
201 AddTetPoints3(off, a, bc, weight);
202 AddTetPoints3(off + 3, a, cb, weight);
203 AddTetPoints6(off + 6, a, bc, cb, weight);
207 void AddTetPoints12bc(
const int off,
const double b,
const double c,
210 const double a = (1. - b - c)/2.;
211 AddTetPoints3(off, a, b, weight);
212 AddTetPoints3(off + 3, a, c, weight);
213 AddTetPoints6(off + 6, a, b, c, weight);
224 for (
int i = 0; i < this->
Size(); i++)
317 int own_rules, refined;
332 if (ir_array.
Size() <= Order)
334 ir_array.
SetSize(Order + 1, NULL);
339 return (ir_array.
Size() > Order && ir_array[Order] != NULL);
341 int GetSegmentRealOrder(
int Order)
const
int GetNPoints() const
Returns the number of the points in the integration rule.
void Set(const double *p, const int dim)
int Size() const
Return the logical size of the array.
void Get(double *p, const int dim) const
Class for an integration rule - an Array of IntegrationPoint.
const IntegrationRule & Get(int GeomType, int Order)
Returns an integration rule for given GeomType and Order.
void ClosedUniform(const int np, IntegrationRule *ir)
void Set1w(const double *p)
void GivePolyPoints(const int np, double *pts, const int type)
~IntegrationRules()
Destroys an IntegrationRules object.
Container class for integration rules.
void Set(const double x1, const double x2, const double x3, const double w)
const Array< double > & GetWeights() const
Return the quadrature weights in a contiguous array.
void OpenUniform(const int np, IntegrationRule *ir)
const IntegrationPoint & IntPoint(int i) const
Returns a const reference to the i-th integration point.
A class container for 1D quadrature type constants.
void GaussLobatto(const int np, IntegrationRule *ir)
void Set3(const double *p)
IntegrationPoint & IntPoint(int i)
Returns a reference to the i-th integration point.
~IntegrationRule()
Destroys an IntegrationRule object.
void Set3w(const double *p)
void Set2(const double x1, const double x2)
void Set3(const double x1, const double x2, const double x3)
void Set2w(const double *p)
double p(const Vector &x, double t)
static int CheckClosed(int type)
If the Quadrature1D type is not closed return Invalid; otherwise return type.
void OpenHalfUniform(const int np, IntegrationRule *ir)
void ClosedGL(const int np, IntegrationRule *ir)
int GetOrder() const
Returns the order of the integration rule.
void SetSize(int nsize)
Change the logical size of the array, keep existing entries.
static int CheckOpen(int type)
If the Quadrature1D type is not open return Invalid; otherwise return type.
void SetOrder(const int order)
Sets the order of the integration rule. This is only for keeping order information, it does not alter any data in the IntegrationRule.
IntegrationRules(int Ref=0, int type=Quadrature1D::GaussLegendre)
Class for integration point with weight.
aka "open half" Newton-Cotes
void Set2(const double *p)
IntegrationRules RefinedIntRules(1, Quadrature1D::GaussLegendre)
A global object with all refined integration rules.
void Set2w(const double x1, const double x2, const double w)
void pts(int iphi, int t, double x[])
IntegrationRule(int NP)
Construct an integration rule with given number of points.
void Set(int GeomType, int Order, IntegrationRule &IntRule)
IntegrationRules IntRules(0, Quadrature1D::GaussLegendre)
A global object with all integration rules (defined in intrules.cpp)
A Class that defines 1-D numerical quadrature rules on [0,1].
void Set1w(const double x1, const double w)
void GaussLegendre(const int np, IntegrationRule *ir)
aka closed Gauss Legendre