16 #include <deal.II/base/quadrature_lib.h> 17 #include <deal.II/base/geometry_info.h> 18 #include <deal.II/base/polynomial.h> 26 DEAL_II_NAMESPACE_OPEN
71 std::vector<long double> points
72 = Polynomials::jacobi_polynomial_roots<long double>(n, 0, 0);
74 for (
unsigned int i=0; i<(points.size()+1)/2; ++i)
80 const long double pp = 0.5*(n + 1)*Polynomials::jacobi_polynomial_value(n-1, 1, 1, points[i]);
81 const long double x = -1. + 2.*points[i];
82 const double w = 1./((1.-x*x)*pp*pp);
96 long double gamma(
const unsigned int n)
98 long double result = n - 1;
99 for (
int i=n-2; i>1; --i)
113 std::vector<long double>
114 compute_quadrature_weights(
const std::vector<long double> &x,
118 const unsigned int q = x.size();
119 std::vector<long double>
w(q);
121 const long double factor = std::pow(2., alpha+beta+1) *
124 ((q-1)*gamma(q)*gamma(alpha+beta+q+1));
125 for (
unsigned int i=0; i<q; ++i)
127 const long double s = Polynomials::jacobi_polynomial_value(q-1, alpha, beta, x[i]);
131 w[q-1] *= (alpha + 1);
147 std::vector<long double> points
148 = Polynomials::jacobi_polynomial_roots<long double>(n-2, 1, 1);
149 points.insert(points.begin(), 0);
150 points.push_back(1.);
151 std::vector<long double>
w 152 = internal::QGaussLobatto::compute_quadrature_weights(points, 0, 0);
155 for (
unsigned int i=0; i<points.size(); ++i)
180 static const double xpts[] = { 0.0, 1.0 };
181 static const double wts[] = { 0.5, 0.5 };
183 for (
unsigned int i=0; i<this->
size(); ++i)
197 static const double xpts[] = { 0.0, 0.5, 1.0 };
198 static const double wts[] = { 1./6., 2./3., 1./6. };
200 for (
unsigned int i=0; i<this->
size(); ++i)
214 static const double xpts[] = { 0.0, .25, .5, .75, 1.0 };
215 static const double wts[] = { 7./90., 32./90., 12./90., 32./90., 7./90. };
217 for (
unsigned int i=0; i<this->
size(); ++i)
231 static const double xpts[] = { 0.0, 1./6., 1./3., .5, 2./3., 5./6., 1.0 };
232 static const double wts[] = { 41./840., 216./840., 27./840., 272./840.,
233 27./840., 216./840., 41./840.
236 for (
unsigned int i=0; i<this->
size(); ++i)
250 std::vector<double> p = get_quadrature_points(n);
251 std::vector<double>
w = get_quadrature_weights(n);
253 for (
unsigned int i=0; i<this->
size(); ++i)
259 this->
weights[i] = revert ?
w[n-1-i] :
w[i];
267 std::vector<double> q_points(n);
272 q_points[0] = 0.3333333333333333;
276 q_points[0] = 0.1120088061669761;
277 q_points[1] = 0.6022769081187381;
281 q_points[0] = 0.06389079308732544;
282 q_points[1] = 0.3689970637156184;
283 q_points[2] = 0.766880303938942;
287 q_points[0] = 0.04144848019938324;
288 q_points[1] = 0.2452749143206022;
289 q_points[2] = 0.5561654535602751;
290 q_points[3] = 0.848982394532986;
294 q_points[0] = 0.02913447215197205;
295 q_points[1] = 0.1739772133208974;
296 q_points[2] = 0.4117025202849029;
297 q_points[3] = 0.6773141745828183;
298 q_points[4] = 0.89477136103101;
302 q_points[0] = 0.02163400584411693;
303 q_points[1] = 0.1295833911549506;
304 q_points[2] = 0.3140204499147661;
305 q_points[3] = 0.5386572173517997;
306 q_points[4] = 0.7569153373774084;
307 q_points[5] = 0.922668851372116;
312 q_points[0] = 0.0167193554082585;
313 q_points[1] = 0.100185677915675;
314 q_points[2] = 0.2462942462079286;
315 q_points[3] = 0.4334634932570557;
316 q_points[4] = 0.6323509880476823;
317 q_points[5] = 0.81111862674023;
318 q_points[6] = 0.940848166743287;
322 q_points[0] = 0.01332024416089244;
323 q_points[1] = 0.07975042901389491;
324 q_points[2] = 0.1978710293261864;
325 q_points[3] = 0.354153994351925;
326 q_points[4] = 0.5294585752348643;
327 q_points[5] = 0.7018145299391673;
328 q_points[6] = 0.849379320441094;
329 q_points[7] = 0.953326450056343;
333 q_points[0] = 0.01086933608417545;
334 q_points[1] = 0.06498366633800794;
335 q_points[2] = 0.1622293980238825;
336 q_points[3] = 0.2937499039716641;
337 q_points[4] = 0.4466318819056009;
338 q_points[5] = 0.6054816627755208;
339 q_points[6] = 0.7541101371585467;
340 q_points[7] = 0.877265828834263;
341 q_points[8] = 0.96225055941096;
345 q_points[0] = 0.00904263096219963;
346 q_points[1] = 0.05397126622250072;
347 q_points[2] = 0.1353118246392511;
348 q_points[3] = 0.2470524162871565;
349 q_points[4] = 0.3802125396092744;
350 q_points[5] = 0.5237923179723384;
351 q_points[6] = 0.6657752055148032;
352 q_points[7] = 0.7941904160147613;
353 q_points[8] = 0.898161091216429;
354 q_points[9] = 0.9688479887196;
359 q_points[0] = 0.007643941174637681;
360 q_points[1] = 0.04554182825657903;
361 q_points[2] = 0.1145222974551244;
362 q_points[3] = 0.2103785812270227;
363 q_points[4] = 0.3266955532217897;
364 q_points[5] = 0.4554532469286375;
365 q_points[6] = 0.5876483563573721;
366 q_points[7] = 0.7139638500230458;
367 q_points[8] = 0.825453217777127;
368 q_points[9] = 0.914193921640008;
369 q_points[10] = 0.973860256264123;
373 q_points[0] = 0.006548722279080035;
374 q_points[1] = 0.03894680956045022;
375 q_points[2] = 0.0981502631060046;
376 q_points[3] = 0.1811385815906331;
377 q_points[4] = 0.2832200676673157;
378 q_points[5] = 0.398434435164983;
379 q_points[6] = 0.5199526267791299;
380 q_points[7] = 0.6405109167754819;
381 q_points[8] = 0.7528650118926111;
382 q_points[9] = 0.850240024421055;
383 q_points[10] = 0.926749682988251;
384 q_points[11] = 0.977756129778486;
400 std::vector<double> quadrature_weights(n);
405 quadrature_weights[0] = -1.0;
408 quadrature_weights[0] = -0.7185393190303845;
409 quadrature_weights[1] = -0.2814606809696154;
413 quadrature_weights[0] = -0.5134045522323634;
414 quadrature_weights[1] = -0.3919800412014877;
415 quadrature_weights[2] = -0.0946154065661483;
419 quadrature_weights[0] =-0.3834640681451353;
420 quadrature_weights[1] =-0.3868753177747627;
421 quadrature_weights[2] =-0.1904351269501432;
422 quadrature_weights[3] =-0.03922548712995894;
426 quadrature_weights[0] =-0.2978934717828955;
427 quadrature_weights[1] =-0.3497762265132236;
428 quadrature_weights[2] =-0.234488290044052;
429 quadrature_weights[3] =-0.0989304595166356;
430 quadrature_weights[4] =-0.01891155214319462;
434 quadrature_weights[0] = -0.2387636625785478;
435 quadrature_weights[1] = -0.3082865732739458;
436 quadrature_weights[2] = -0.2453174265632108;
437 quadrature_weights[3] = -0.1420087565664786;
438 quadrature_weights[4] = -0.05545462232488041;
439 quadrature_weights[5] = -0.01016895869293513;
444 quadrature_weights[0] = -0.1961693894252476;
445 quadrature_weights[1] = -0.2703026442472726;
446 quadrature_weights[2] = -0.239681873007687;
447 quadrature_weights[3] = -0.1657757748104267;
448 quadrature_weights[4] = -0.0889432271377365;
449 quadrature_weights[5] = -0.03319430435645653;
450 quadrature_weights[6] = -0.005932787015162054;
454 quadrature_weights[0] = -0.164416604728002;
455 quadrature_weights[1] = -0.2375256100233057;
456 quadrature_weights[2] = -0.2268419844319134;
457 quadrature_weights[3] = -0.1757540790060772;
458 quadrature_weights[4] = -0.1129240302467932;
459 quadrature_weights[5] = -0.05787221071771947;
460 quadrature_weights[6] = -0.02097907374214317;
461 quadrature_weights[7] = -0.003686407104036044;
465 quadrature_weights[0] = -0.1400684387481339;
466 quadrature_weights[1] = -0.2097722052010308;
467 quadrature_weights[2] = -0.211427149896601;
468 quadrature_weights[3] = -0.1771562339380667;
469 quadrature_weights[4] = -0.1277992280331758;
470 quadrature_weights[5] = -0.07847890261203835;
471 quadrature_weights[6] = -0.0390225049841783;
472 quadrature_weights[7] = -0.01386729555074604;
473 quadrature_weights[8] = -0.002408041036090773;
477 quadrature_weights[0] = -0.12095513195457;
478 quadrature_weights[1] = -0.1863635425640733;
479 quadrature_weights[2] = -0.1956608732777627;
480 quadrature_weights[3] = -0.1735771421828997;
481 quadrature_weights[4] = -0.135695672995467;
482 quadrature_weights[5] = -0.0936467585378491;
483 quadrature_weights[6] = -0.05578772735275126;
484 quadrature_weights[7] = -0.02715981089692378;
485 quadrature_weights[8] = -0.00951518260454442;
486 quadrature_weights[9] = -0.001638157633217673;
491 quadrature_weights[0] = -0.1056522560990997;
492 quadrature_weights[1] = -0.1665716806006314;
493 quadrature_weights[2] = -0.1805632182877528;
494 quadrature_weights[3] = -0.1672787367737502;
495 quadrature_weights[4] = -0.1386970574017174;
496 quadrature_weights[5] = -0.1038334333650771;
497 quadrature_weights[6] = -0.06953669788988512;
498 quadrature_weights[7] = -0.04054160079499477;
499 quadrature_weights[8] = -0.01943540249522013;
500 quadrature_weights[9] = -0.006737429326043388;
501 quadrature_weights[10] = -0.001152486965101561;
505 quadrature_weights[0] = -0.09319269144393;
506 quadrature_weights[1] = -0.1497518275763289;
507 quadrature_weights[2] = -0.166557454364573;
508 quadrature_weights[3] = -0.1596335594369941;
509 quadrature_weights[4] = -0.1384248318647479;
510 quadrature_weights[5] = -0.1100165706360573;
511 quadrature_weights[6] = -0.07996182177673273;
512 quadrature_weights[7] = -0.0524069547809709;
513 quadrature_weights[8] = -0.03007108900074863;
514 quadrature_weights[9] = -0.01424924540252916;
515 quadrature_weights[10] = -0.004899924710875609;
516 quadrature_weights[11] = -0.000834029009809656;
524 return quadrature_weights;
532 const bool factor_out_singularity) :
533 Quadrature<1>( ( (origin[0] == 0) || (origin[0] == 1) ) ?
534 (alpha == 1 ? n : 2*n ) : 4*n ),
535 fraction( ( (origin[0] == 0) || (origin[0] == 1.) ) ? 1. : origin[0] )
555 Assert( (fraction >= 0) && (fraction <= 1),
560 unsigned int ns_offset = (fraction == 1) ? n : 2*n;
562 for (
unsigned int i=0, j=ns_offset; i<n; ++i, ++j)
567 this->
weights[i] = quad1.weight(i)*fraction;
570 if ( (alpha != 1) || (fraction != 1) )
573 this->
weights[j] = -std::log(alpha/fraction)*quad.weight(i)*fraction;
579 this->
weights[i+n] = quad2.weight(i)*(1-fraction);
583 this->
weights[j+n] = -std::log(alpha/(1-fraction))*quad.weight(i)*(1-fraction);
586 if (factor_out_singularity ==
true)
587 for (
unsigned int i=0; i<
size(); ++i)
590 ExcMessage(
"The singularity cannot be on a Gauss point of the same order!") );
591 double denominator = std::log(std::abs( (this->
quadrature_points[i]-origin)[0] )/alpha);
592 Assert( denominator != 0.0,
593 ExcMessage(
"The quadrature formula you are using does not allow to " 594 "factor out the singularity, which is zero at one point."));
595 this->
weights[i] /= denominator;
602 const unsigned int n)
606 bool on_vertex=
false;
607 for (
unsigned int i=0; i<2; ++i)
608 if ( ( std::abs(singularity[i] ) < eps ) ||
609 ( std::abs(singularity[i]-1) < eps ) )
611 if (on_edge && (std::abs( (singularity-
Point<2>(.5, .5)).norm_square()-.5)
614 if (on_vertex)
return (2*n*n);
615 if (on_edge)
return (4*n*n);
622 const bool factor_out_singularity) :
631 std::vector<QGaussOneOverR<2> > quads;
632 std::vector<Point<2> > origins;
635 quads.emplace_back(n, 3, factor_out_singularity);
636 quads.emplace_back(n, 2, factor_out_singularity);
637 quads.emplace_back(n, 1, factor_out_singularity);
638 quads.emplace_back(n, 0, factor_out_singularity);
640 origins.emplace_back(0., 0.);
641 origins.emplace_back(singularity[0], 0.);
642 origins.emplace_back(0., singularity[1]);
643 origins.push_back(singularity);
648 unsigned int q_id = 0;
651 for (
unsigned int box=0; box<4; ++box)
654 dist =
Point<2>(std::abs(dist[0]), std::abs(dist[1]));
655 double area = dist[0]*dist[1];
657 for (
unsigned int q=0; q<quads[box].size(); ++q, ++q_id)
659 const Point<2> &qp = quads[box].point(q);
662 Point<2>(dist[0]*qp[0], dist[1]*qp[1]);
663 this->
weights[q_id] = quads[box].weight(q)*area;
671 const unsigned int vertex_index,
672 const bool factor_out_singularity) :
708 std::vector<double> &ws = this->
weights;
711 for (
unsigned int q=0; q<gauss.size(); ++q)
713 const Point<2> &gp = gauss.point(q);
715 ps[q][1] = gp[0] * std::tan(pi4*gp[1]);
716 ws[q] = gauss.weight(q)*pi4/std::cos(pi4 *gp[1]);
717 if (factor_out_singularity)
721 ws[gauss.size()+q] = ws[q];
722 ps[gauss.size()+q][0] = ps[q][1];
723 ps[gauss.size()+q][1] = ps[q][0];
728 switch (vertex_index)
745 double R00 = std::cos(theta), R01 = -std::sin(theta);
746 double R10 = std::sin(theta), R11 = std::cos(theta);
748 if (vertex_index != 0)
749 for (
unsigned int q=0; q<
size(); ++q)
751 double x = ps[q][0]-.5, y = ps[q][1]-.5;
753 ps[q][0] = R00*x + R01*y + .5;
754 ps[q][1] = R10*x + R11*y + .5;
763 std::vector<unsigned int> permutation(quad.
size());
764 for (
unsigned int i=0; i<quad.
size(); ++i)
767 std::sort(permutation.begin(),
771 std::placeholders::_1,
772 std::placeholders::_2));
781 for (
unsigned int i=0; i<quad.
size(); ++i)
785 if (permutation[i] != i)
793 const unsigned int b)
const 795 return (this->weights[a] < this->weights[b]);
876 const unsigned int n,
const Point<dim> &singularity)
894 const double eta_bar = singularity[0] * 2. - 1.;
895 const double eta_star = eta_bar * eta_bar - 1.;
899 std::vector<double> weights_dummy(
weights.size());
900 unsigned int cont = 0;
901 const double tol = 1e-10;
907 weights_dummy[d-cont] =
weights[d];
920 weights.resize(weights_dummy.size()-1);
928 if (std::abs(eta_star) <= tol)
930 gamma_bar = std::pow((eta_bar * eta_star + std::abs(eta_star)),1.0 / 3.0)
931 + std::pow((eta_bar * eta_star - std::abs(eta_star)), 1.0 / 3.0)
936 gamma_bar = (eta_bar * eta_star + std::abs(eta_star))/std::abs(eta_bar * eta_star + std::abs(eta_star))*
937 std::pow(std::abs(eta_bar * eta_star + std::abs(eta_star)),1.0 / 3.0)
938 + (eta_bar * eta_star - std::abs(eta_star))/std::abs(eta_bar * eta_star - std::abs(eta_star))*
939 std::pow(std::abs(eta_bar * eta_star - std::abs(eta_star)), 1.0 / 3.0)
945 double eta = (std::pow(gamma - gamma_bar, 3.0)
946 + gamma_bar * (gamma_bar * gamma_bar + 3))
947 / (1 + 3 * gamma_bar * gamma_bar);
949 double J = 3 * ((gamma - gamma_bar) *(gamma - gamma_bar))
950 / (1 + 3 * gamma_bar * gamma_bar);
966 get_quadrature_points(
const unsigned int n)
969 std::vector<double> points(n);
971 for (
unsigned short i=0; i<n; ++i)
975 points[i] = 1./2.*(1.+std::cos(
numbers::PI*(1.+
double(2*i+1)/
double(2*(n-1)+2))));
986 get_quadrature_weights(
const unsigned int n)
989 std::vector<double> weights(n);
991 for (
unsigned short i=0; i<n; ++i)
1011 std::vector<double> p=internal::QGaussChebyshev::get_quadrature_points(n);
1012 std::vector<double>
w=internal::QGaussChebyshev::get_quadrature_weights(n);
1014 for (
unsigned int i=0; i<this->
size(); ++i)
1035 get_quadrature_points(
const unsigned int n,
1039 std::vector<double> points(n);
1041 for (
unsigned short i=0; i<n; ++i)
1047 case ::QGaussRadauChebyshev<1>::left:
1049 points[i] = 1./2.*(1.-std::cos(
numbers::PI*(1+2*
double(i)/(2*
double(n-1)+1.))));
1053 case ::QGaussRadauChebyshev<1>::right:
1055 points[i] = 1./2.*(1.-std::cos(
numbers::PI*(2*
double(n-1-i)/(2*
double(n-1)+1.))));
1060 Assert (
false,
ExcMessage (
"This constructor can only be called with either " 1061 "QGaussRadauChebyshev::left or QGaussRadauChebyshev::right as " 1062 "second argument."));
1072 get_quadrature_weights(
const unsigned int n,
1076 std::vector<double> weights(n);
1078 for (
unsigned short i=0; i<n; ++i)
1103 std::vector<double> p=internal::QGaussRadauChebyshev::get_quadrature_points(n,ep);
1104 std::vector<double>
w=internal::QGaussRadauChebyshev::get_quadrature_weights(n,ep);
1106 for (
unsigned int i=0; i<this->
size(); ++i)
1130 get_quadrature_points(
const unsigned int n)
1133 std::vector<double> points(n);
1135 for (
unsigned short i=0; i<n; ++i)
1139 points[i] = 1./2.*(1.+std::cos(
numbers::PI*(1+
double(i)/
double(n-1))));
1146 get_quadrature_weights(
const unsigned int n)
1149 std::vector<double> weights(n);
1151 for (
unsigned short i=0; i<n; ++i)
1155 if (i==0 || i==(n-1))
1172 Assert(n>1,
ExcMessage(
"Need at least two points for Gauss-Lobatto quadrature rule"));
1173 std::vector<double> p=internal::QGaussLobattoChebyshev::get_quadrature_points(n);
1174 std::vector<double>
w=internal::QGaussLobattoChebyshev::get_quadrature_weights(n);
1176 for (
unsigned int i=0; i<this->
size(); ++i)
1195 std::vector<Point<dim> > qpoints;
1196 std::vector<double > weights;
1198 for (
unsigned int i=0; i<quad.
size(); ++i)
1201 for (
unsigned int d=0; d<dim; ++d)
1202 r += quad.
point(i)[d];
1205 this->quadrature_points.push_back(quad.
point(i));
1206 this->weights.push_back(quad.
weight(i));
1218 for (
unsigned int d=0; d<dim; ++d)
1219 B[d] = vertices[d+1]-vertices[0];
1228 std::vector<Point<dim> > qp(this->size());
1229 std::vector<double> w(this->size());
1231 for (
unsigned int i=0; i<this->size(); ++i)
1233 qp[i] =
Point<dim>(vertices[0]+B*this->point(i));
1234 w[i] = J*this->weight(i);
1249 for (
unsigned int i=0; i<base.
size(); ++i)
1251 const auto q = base.
point(i);
1252 const auto w = base.
weight(i);
1254 const auto xhat = q[0];
1255 const auto yhat = q[1];
1259 const double st = std::sin(t);
1260 const double ct = std::cos(t);
1261 const double r = xhat/(st+ct);
1263 const double J = pi*xhat/(2*(std::sin(pi*yhat) + 1));
1280 const double beta) :
1286 for (
unsigned int i=0; i<base.
size(); ++i)
1288 const auto q = base.
point(i);
1289 const auto w = base.
weight(i);
1291 const auto xhat = q[0];
1292 const auto yhat = q[1];
1294 const double x = std::pow(xhat, beta)*(1-yhat);
1295 const double y = std::pow(xhat, beta)*yhat;
1297 const double J = beta * std::pow(xhat, 2.*beta-1.);
1317 ExcMessage(
"The split point should be inside the unit reference cell."));
1319 std::array<Point<dim>, dim+1> vertices;
1320 vertices[0] = split_point;
1326 for (
unsigned int f=0; f< GeometryInfo<dim>::faces_per_cell; ++f)
1327 for (
unsigned int start=0; start < (dim >2 ? 2 : 1); ++start)
1329 for (
unsigned int i=0; i<dim; ++i)
1337 this->quadrature_points.insert(
1338 this->quadrature_points.end(),
1339 quad.get_points().begin(),
1340 quad.get_points().end());
1341 this->weights.insert(
1342 this->weights.end(),
1343 quad.get_weights().begin(),
1344 quad.get_weights().end());
1397 DEAL_II_NAMESPACE_CLOSE
QGaussLog(const unsigned int n, const bool revert=false)
std::vector< double > weights
QGaussOneOverR(const unsigned int n, const Point< dim > singularity, const bool factor_out_singular_weight=false)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
QGaussChebyshev(const unsigned int n)
Generate a formula with n quadrature points.
const Point< dim > & point(const unsigned int i) const
static std::vector< double > get_quadrature_points(const unsigned int n)
QSimplex(const Quadrature< dim > &quad)
static Point< dim > unit_cell_vertex(const unsigned int vertex)
#define AssertThrow(cond, exc)
QGauss(const unsigned int n)
static ::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define Assert(cond, exc)
static std::vector< double > get_quadrature_weights(const unsigned int n)
QGaussRadauChebyshev(const unsigned int n, EndPoint ep=QGaussRadauChebyshev::left)
Generate a formula with n quadrature points.
QDuffy(const Quadrature< 1 > &radial_quadrature, const Quadrature< 1 > &angular_quadrature, const double beta=1.0)
bool compare_weights(const unsigned int a, const unsigned int b) const
QGaussLobatto(const unsigned int n)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
bool is_tensor_product_flag
std::vector< Point< dim > > quadrature_points
unsigned int size() const
QTelles(const Quadrature< 1 > &base_quad, const Point< dim > &singularity)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
double norm(const FEValuesBase< dim > &fe, const VectorSlice< const std::vector< std::vector< Tensor< 1, dim > > > > &Du)
Number determinant(const SymmetricTensor< 2, dim, Number > &t)
QGaussLobattoChebyshev(const unsigned int n)
Generate a formula with n quadrature points.
static ::ExceptionBase & ExcNotImplemented()
QSorted(const Quadrature< dim > &quad)
QGaussLogR(const unsigned int n, const Point< dim > x0=Point< dim >(), const double alpha=1, const bool factor_out_singular_weight=false)
QSplit(const QSimplex< dim > &base, const Point< dim > &split_point)
Quadrature< dim > compute_affine_transformation(const std::array< Point< dim >, dim+1 > &vertices) const
double weight(const unsigned int i) const
static unsigned int quad_size(const Point< dim > singularity, const unsigned int n)
static ::ExceptionBase & ExcInternalError()
QTrianglePolar(const Quadrature< 1 > &radial_quadrature, const Quadrature< 1 > &angular_quadrature)