16 double x=0.0,y=0.0,z=0.0;
31 double a = (5.0+3.0*sqrt(5))/20.0;
32 double b = (5.0- sqrt(5))/20.0;
78 const double a[3] = {0.31088591926330060980,
79 0.092735250310891226402,
80 0.045503704125649649492};
84 const double wt[3] = {0.018781320953002641800,
85 0.012248840519393658257,
86 0.0070910034628469110730};
89 for (
unsigned int i=0; i<2; ++i)
92 const unsigned int offset=4*i;
95 const double b = 1. - 3.*a[i];
105 for (
unsigned int j=0; j<4; ++j)
112 const unsigned int offset = 8;
113 const double b = 0.5*(1. - 2.*a[2]);
125 for (
unsigned int j=0; j<6; ++j)
148 const std::vector<std::vector<double>> rule_data =
150 {0.356191386222544953e+00 , 0.214602871259151684e+00 , 0., 0.00665379170969464506e+00},
151 {0.877978124396165982e+00 , 0.0406739585346113397e+00, 0., 0.00167953517588677620e+00},
152 {0.0329863295731730594e+00, 0.322337890142275646e+00 , 0., 0.00922619692394239843e+00},
153 {0.0636610018750175299e+00, 0.269672331458315867e+00 , 0.603005664791649076e+00, 0.00803571428571428248e+00}
176 const unsigned int n_pts)
178 auto& _points = qpoints_;
179 auto& _weights = weights_;
192 unsigned int offset=0;
195 for (
unsigned int p=0; p<n_pts; ++p)
199 assert (rule_data[p][0] !=
static_cast<double>(0.0));
202 assert (rule_data[p][3] !=
static_cast<double>(0.0));
208 unsigned int pointtype=1;
210 if (rule_data[p][1] !=
static_cast<double>(0.0))
212 if (rule_data[p][2] !=
static_cast<double>(0.0))
220 if (rule_data[p][2] !=
static_cast<double>(0.0))
230 assert (offset + 0 < _points.size());
232 const double a = rule_data[p][0];
235 _points[offset + 0] = Point(a,a,a);
238 _weights[offset + 0] = rule_data[p][3];
247 assert (offset + 3 < _points.size());
249 const double a = rule_data[p][0];
250 const double b = rule_data[p][1];
251 const double wt = rule_data[p][3];
255 _points[offset + 0] = Point(a,b,b);
256 _points[offset + 1] = Point(b,a,b);
257 _points[offset + 2] = Point(b,b,a);
258 _points[offset + 3] = Point(b,b,b);
260 for (
unsigned int j=0; j<pointtype; ++j)
261 _weights[offset + j] = wt;
270 assert (offset + 5 < _points.size());
272 const double a = rule_data[p][0];
273 const double b = rule_data[p][2];
274 const double wt = rule_data[p][3];
277 _points[offset + 0] = Point(a,a,b);
278 _points[offset + 1] = Point(a,b,b);
279 _points[offset + 2] = Point(b,b,a);
280 _points[offset + 3] = Point(b,a,b);
281 _points[offset + 4] = Point(b,a,a);
282 _points[offset + 5] = Point(a,b,a);
284 for (
unsigned int j=0; j<pointtype; ++j)
285 _weights[offset + j] = wt;
295 assert(offset + 11 < _points.size());
297 const double a = rule_data[p][0];
298 const double b = rule_data[p][1];
299 const double c = rule_data[p][2];
300 const double wt = rule_data[p][3];
303 _points[offset + 0] = Point(a,a,b); _points[offset + 6] = Point(a,b,c);
304 _points[offset + 1] = Point(a,a,c); _points[offset + 7] = Point(a,c,b);
305 _points[offset + 2] = Point(b,a,a); _points[offset + 8] = Point(b,a,c);
306 _points[offset + 3] = Point(c,a,a); _points[offset + 9] = Point(b,c,a);
307 _points[offset + 4] = Point(a,b,a); _points[offset + 10] = Point(c,a,b);
308 _points[offset + 5] = Point(a,c,a); _points[offset + 11] = Point(c,b,a);
310 for (
unsigned int j=0; j<pointtype; ++j)
311 _weights[offset + j] = wt;
318 throw std::invalid_argument(std::string(__FUNCTION__) +
319 ": Don't know what to do with this many permutation points!");
void Initialize_Conical_Product_Tet()
std::vector< chi_math::QuadraturePointXYZ > qpoints_
std::vector< double > weights_
QuadratureTetrahedron(QuadratureOrder order)
void KeastRule(const std::vector< std::vector< double > > &rule_data, const unsigned int n_pts)