Line data Source code
1 : // The libMesh Finite Element Library.
2 : // Copyright (C) 2002-2025 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 : // Local includes
21 : #include "libmesh/quadrature_monomial.h"
22 : #include "libmesh/quadrature_gauss.h"
23 :
24 : namespace libMesh
25 : {
26 :
27 :
28 2414 : void QMonomial::init_2D()
29 : {
30 :
31 2414 : switch (_type)
32 : {
33 : //---------------------------------------------
34 : // Quadrilateral quadrature rules
35 1207 : case QUAD4:
36 : case QUADSHELL4:
37 : case QUAD8:
38 : case QUADSHELL8:
39 : case QUAD9:
40 : case QUADSHELL9:
41 : {
42 68 : switch(get_order())
43 : {
44 71 : case SECOND:
45 : {
46 : // A degree=2 rule for the QUAD with 3 points.
47 : // A tensor product degree-2 Gauss would have 4 points.
48 : // This rule (or a variation on it) is probably available in
49 : //
50 : // A.H. Stroud, Approximate calculation of multiple integrals,
51 : // Prentice-Hall, Englewood Cliffs, N.J., 1971.
52 : //
53 : // though I have never actually seen a reference for it.
54 : // Luckily it's fairly easy to derive, which is what I've done
55 : // here [JWP].
56 : const Real
57 2 : s=std::sqrt(Real(1)/3), // ~0.57735026919
58 2 : t=std::sqrt(Real(2)/3); // ~0.81649658092
59 :
60 71 : const Real data[2][3] =
61 : {
62 : {0.0, s, 2.0},
63 : { t, -s, 1.0}
64 : };
65 :
66 71 : _points.resize(3);
67 71 : _weights.resize(3);
68 :
69 71 : wissmann_rule(data, 2);
70 :
71 2 : return;
72 : } // end case SECOND
73 :
74 :
75 :
76 : // For third-order, fall through to default case, use 2x2 Gauss product rule.
77 : // case THIRD:
78 : // {
79 : // } // end case THIRD
80 :
81 : // Tabulated-in-double-precision rules aren't accurate enough for
82 : // higher precision, so fall back on Gauss
83 : #if !defined(LIBMESH_DEFAULT_TRIPLE_PRECISION) && !defined(LIBMESH_DEFAULT_QUADRUPLE_PRECISION)
84 71 : case FOURTH:
85 : {
86 : // A pair of degree=4 rules for the QUAD "C2" due to
87 : // Wissmann and Becker. These rules both have six points.
88 : // A tensor product degree-4 Gauss would have 9 points.
89 : //
90 : // J. W. Wissmann and T. Becker, Partially symmetric cubature
91 : // formulas for even degrees of exactness, SIAM J. Numer. Anal. 23
92 : // (1986), 676--685.
93 71 : const Real data[4][3] =
94 : {
95 : // First of 2 degree-4 rules given by Wissmann
96 : {Real(0.0000000000000000e+00), Real(0.0000000000000000e+00), Real(1.1428571428571428e+00)},
97 : {Real(0.0000000000000000e+00), Real(9.6609178307929590e-01), Real(4.3956043956043956e-01)},
98 : {Real(8.5191465330460049e-01), Real(4.5560372783619284e-01), Real(5.6607220700753210e-01)},
99 : {Real(6.3091278897675402e-01), Real(-7.3162995157313452e-01), Real(6.4271900178367668e-01)}
100 : //
101 : // Second of 2 degree-4 rules given by Wissmann. These both
102 : // yield 4th-order accurate rules, I just chose the one that
103 : // happened to contain the origin.
104 : // {0.000000000000000, -0.356822089773090, 1.286412084888852},
105 : // {0.000000000000000, 0.934172358962716, 0.491365692888926},
106 : // {0.774596669241483, 0.390885162530071, 0.761883709085613},
107 : // {0.774596669241483, -0.852765377881771, 0.349227402025498}
108 : };
109 :
110 71 : _points.resize(6);
111 71 : _weights.resize(6);
112 :
113 71 : wissmann_rule(data, 4);
114 :
115 2 : return;
116 : } // end case FOURTH
117 : #endif
118 :
119 :
120 :
121 :
122 71 : case FIFTH:
123 : {
124 : // A degree 5, 7-point rule due to Stroud.
125 : //
126 : // A.H. Stroud, Approximate calculation of multiple integrals,
127 : // Prentice-Hall, Englewood Cliffs, N.J., 1971.
128 : //
129 : // This rule is provably minimal in the number of points.
130 : // A tensor-product rule accurate for "bi-quintic" polynomials would have 9 points.
131 : // 0, 0, ~1.14285714286
132 : // 0, ~0.96609178307, ~0.31746031746
133 : // ~0.77459666924, ~0.57735026919, ~0.55555555555
134 71 : const Real data[3][3] =
135 : {
136 : { 0, 0, Real(8)/7 }, // 1
137 : { 0, std::sqrt(Real(14)/15), Real(20)/63}, // 2
138 : {std::sqrt(Real(3)/5), std::sqrt(Real(1)/3), Real(20)/36} // 4
139 : };
140 :
141 71 : const unsigned int symmetry[3] = {
142 : 0, // Origin
143 : 7, // Central Symmetry
144 : 6 // Rectangular
145 : };
146 :
147 71 : _points.resize (7);
148 71 : _weights.resize(7);
149 :
150 71 : stroud_rule(data, symmetry, 3);
151 :
152 2 : return;
153 : } // end case FIFTH
154 :
155 :
156 :
157 :
158 : // Tabulated-in-double-precision rules aren't accurate enough for
159 : // higher precision, so fall back on Gauss
160 : #if !defined(LIBMESH_DEFAULT_TRIPLE_PRECISION) && !defined(LIBMESH_DEFAULT_QUADRUPLE_PRECISION)
161 71 : case SIXTH:
162 : {
163 : // A pair of degree=6 rules for the QUAD "C2" due to
164 : // Wissmann and Becker. These rules both have 10 points.
165 : // A tensor product degree-6 Gauss would have 16 points.
166 : //
167 : // J. W. Wissmann and T. Becker, Partially symmetric cubature
168 : // formulas for even degrees of exactness, SIAM J. Numer. Anal. 23
169 : // (1986), 676--685.
170 71 : const Real data[6][3] =
171 : {
172 : // First of 2 degree-6, 10 point rules given by Wissmann
173 : // {0.000000000000000, 0.836405633697626, 0.455343245714174},
174 : // {0.000000000000000, -0.357460165391307, 0.827395973202966},
175 : // {0.888764014654765, 0.872101531193131, 0.144000884599645},
176 : // {0.604857639464685, 0.305985162155427, 0.668259104262665},
177 : // {0.955447506641064, -0.410270899466658, 0.225474004890679},
178 : // {0.565459993438754, -0.872869311156879, 0.320896396788441}
179 : //
180 : // Second of 2 degree-6, 10 point rules given by Wissmann.
181 : // Either of these will work, I just chose the one with points
182 : // slightly further into the element interior.
183 : {Real(0.0000000000000000e+00), Real(8.6983337525005900e-01), Real(3.9275059096434794e-01)},
184 : {Real(0.0000000000000000e+00), Real(-4.7940635161211124e-01), Real(7.5476288124261053e-01)},
185 : {Real(8.6374282634615388e-01), Real(8.0283751620765670e-01), Real(2.0616605058827902e-01)},
186 : {Real(5.1869052139258234e-01), Real(2.6214366550805818e-01), Real(6.8999213848986375e-01)},
187 : {Real(9.3397254497284950e-01), Real(-3.6309658314806653e-01), Real(2.6051748873231697e-01)},
188 : {Real(6.0897753601635630e-01), Real(-8.9660863276245265e-01), Real(2.6956758608606100e-01)}
189 : };
190 :
191 71 : _points.resize(10);
192 71 : _weights.resize(10);
193 :
194 71 : wissmann_rule(data, 6);
195 :
196 2 : return;
197 : } // end case SIXTH
198 : #endif
199 :
200 :
201 :
202 :
203 71 : case SEVENTH:
204 : {
205 : // A degree 7, 12-point rule due to Tyler, can be found in Stroud's book
206 : //
207 : // A.H. Stroud, Approximate calculation of multiple integrals,
208 : // Prentice-Hall, Englewood Cliffs, N.J., 1971.
209 : //
210 : // This rule is fully-symmetric and provably minimal in the number of points.
211 : // A tensor-product rule accurate for "bi-septic" polynomials would have 16 points.
212 : const Real
213 2 : r = std::sqrt(Real(6)/7), // ~0.92582009977
214 2 : s = std::sqrt( (Real(114) - 3*std::sqrt(Real(583))) / 287 ), // ~0.38055443320
215 2 : t = std::sqrt( (Real(114) + 3*std::sqrt(Real(583))) / 287 ), // ~0.80597978291
216 2 : B1 = Real(196)/810, // ~0.24197530864
217 2 : B2 = 4 * (178981 + 2769*std::sqrt(Real(583))) / 1888920, // ~0.52059291666
218 2 : B3 = 4 * (178981 - 2769*std::sqrt(Real(583))) / 1888920; // ~0.23743177469
219 :
220 71 : const Real data[3][3] =
221 : {
222 : {r, 0.0, B1}, // 4
223 : {s, 0.0, B2}, // 4
224 : {t, 0.0, B3} // 4
225 : };
226 :
227 71 : const unsigned int symmetry[3] = {
228 : 3, // Full Symmetry, (x,0)
229 : 2, // Full Symmetry, (x,x)
230 : 2 // Full Symmetry, (x,x)
231 : };
232 :
233 71 : _points.resize (12);
234 71 : _weights.resize(12);
235 :
236 71 : stroud_rule(data, symmetry, 3);
237 :
238 2 : return;
239 : } // end case SEVENTH
240 :
241 :
242 :
243 :
244 : // Tabulated-in-double-precision rules aren't accurate enough for
245 : // higher precision, so fall back on Gauss
246 : #if !defined(LIBMESH_DEFAULT_TRIPLE_PRECISION) && !defined(LIBMESH_DEFAULT_QUADRUPLE_PRECISION)
247 71 : case EIGHTH:
248 : {
249 : // A pair of degree=8 rules for the QUAD "C2" due to
250 : // Wissmann and Becker. These rules both have 16 points.
251 : // A tensor product degree-6 Gauss would have 25 points.
252 : //
253 : // J. W. Wissmann and T. Becker, Partially symmetric cubature
254 : // formulas for even degrees of exactness, SIAM J. Numer. Anal. 23
255 : // (1986), 676--685.
256 71 : const Real data[10][3] =
257 : {
258 : // First of 2 degree-8, 16 point rules given by Wissmann
259 : // {0.000000000000000, 0.000000000000000, 0.055364705621440},
260 : // {0.000000000000000, 0.757629177660505, 0.404389368726076},
261 : // {0.000000000000000, -0.236871842255702, 0.533546604952635},
262 : // {0.000000000000000, -0.989717929044527, 0.117054188786739},
263 : // {0.639091304900370, 0.950520955645667, 0.125614417613747},
264 : // {0.937069076924990, 0.663882736885633, 0.136544584733588},
265 : // {0.537083530541494, 0.304210681724104, 0.483408479211257},
266 : // {0.887188506449625, -0.236496718536120, 0.252528506429544},
267 : // {0.494698820670197, -0.698953476086564, 0.361262323882172},
268 : // {0.897495818279768, -0.900390774211580, 0.085464254086247}
269 : //
270 : // Second of 2 degree-8, 16 point rules given by Wissmann.
271 : // Either of these will work, I just chose the one with points
272 : // further into the element interior.
273 : {Real(0.0000000000000000e+00), Real(6.5956013196034176e-01), Real(4.5027677630559029e-01)},
274 : {Real(0.0000000000000000e+00), Real(-9.4914292304312538e-01), Real(1.6657042677781274e-01)},
275 : {Real(9.5250946607156228e-01), Real(7.6505181955768362e-01), Real(9.8869459933431422e-02)},
276 : {Real(5.3232745407420624e-01), Real(9.3697598108841598e-01), Real(1.5369674714081197e-01)},
277 : {Real(6.8473629795173504e-01), Real(3.3365671773574759e-01), Real(3.9668697607290278e-01)},
278 : {Real(2.3314324080140552e-01), Real(-7.9583272377396852e-02), Real(3.5201436794569501e-01)},
279 : {Real(9.2768331930611748e-01), Real(-2.7224008061253425e-01), Real(1.8958905457779799e-01)},
280 : {Real(4.5312068740374942e-01), Real(-6.1373535339802760e-01), Real(3.7510100114758727e-01)},
281 : {Real(8.3750364042281223e-01), Real(-8.8847765053597136e-01), Real(1.2561879164007201e-01)}
282 : };
283 :
284 71 : _points.resize(16);
285 71 : _weights.resize(16);
286 :
287 71 : wissmann_rule(data, /*10*/ 9);
288 :
289 2 : return;
290 : } // end case EIGHTH
291 :
292 :
293 :
294 :
295 71 : case NINTH:
296 : {
297 : // A degree 9, 17-point rule due to Moller.
298 : //
299 : // H.M. Moller, Kubaturformeln mit minimaler Knotenzahl,
300 : // Numer. Math. 25 (1976), 185--200.
301 : //
302 : // This rule is provably minimal in the number of points.
303 : // A tensor-product rule accurate for "bi-ninth" degree polynomials would have 25 points.
304 71 : const Real data[5][3] =
305 : {
306 : {Real(0.0000000000000000e+00), Real(0.0000000000000000e+00), Real(5.2674897119341563e-01)}, // 1
307 : {Real(6.3068011973166885e-01), Real(9.6884996636197772e-01), Real(8.8879378170198706e-02)}, // 4
308 : {Real(9.2796164595956966e-01), Real(7.5027709997890053e-01), Real(1.1209960212959648e-01)}, // 4
309 : {Real(4.5333982113564719e-01), Real(5.2373582021442933e-01), Real(3.9828243926207009e-01)}, // 4
310 : {Real(8.5261572933366230e-01), Real(7.6208328192617173e-02), Real(2.6905133763978080e-01)} // 4
311 : };
312 :
313 71 : const unsigned int symmetry[5] = {
314 : 0, // Single point
315 : 4, // Rotational Invariant
316 : 4, // Rotational Invariant
317 : 4, // Rotational Invariant
318 : 4 // Rotational Invariant
319 : };
320 :
321 71 : _points.resize (17);
322 71 : _weights.resize(17);
323 :
324 71 : stroud_rule(data, symmetry, 5);
325 :
326 2 : return;
327 : } // end case NINTH
328 :
329 :
330 :
331 :
332 142 : case TENTH:
333 : case ELEVENTH:
334 : {
335 : // A degree 11, 24-point rule due to Cools and Haegemans.
336 : //
337 : // R. Cools and A. Haegemans, Another step forward in searching for
338 : // cubature formulae with a minimal number of knots for the square,
339 : // Computing 40 (1988), 139--146.
340 : //
341 : // P. Verlinden and R. Cools, The algebraic construction of a minimal
342 : // cubature formula of degree 11 for the square, Cubature Formulas
343 : // and their Applications (Russian) (Krasnoyarsk) (M.V. Noskov, ed.),
344 : // 1994, pp. 13--23.
345 : //
346 : // This rule is provably minimal in the number of points.
347 : // A tensor-product rule accurate for "bi-tenth" or "bi-eleventh" degree polynomials would have 36 points.
348 142 : const Real data[6][3] =
349 : {
350 : {Real(6.9807610454956756e-01), Real(9.8263922354085547e-01), Real(4.8020763350723814e-02)}, // 4
351 : {Real(9.3948638281673690e-01), Real(8.2577583590296393e-01), Real(6.6071329164550595e-02)}, // 4
352 : {Real(9.5353952820153201e-01), Real(1.8858613871864195e-01), Real(9.7386777358668164e-02)}, // 4
353 : {Real(3.1562343291525419e-01), Real(8.1252054830481310e-01), Real(2.1173634999894860e-01)}, // 4
354 : {Real(7.1200191307533630e-01), Real(5.2532025036454776e-01), Real(2.2562606172886338e-01)}, // 4
355 : {Real(4.2484724884866925e-01), Real(4.1658071912022368e-02), Real(3.5115871839824543e-01)} // 4
356 : };
357 :
358 142 : const unsigned int symmetry[6] = {
359 : 4, // Rotational Invariant
360 : 4, // Rotational Invariant
361 : 4, // Rotational Invariant
362 : 4, // Rotational Invariant
363 : 4, // Rotational Invariant
364 : 4 // Rotational Invariant
365 : };
366 :
367 142 : _points.resize (24);
368 142 : _weights.resize(24);
369 :
370 142 : stroud_rule(data, symmetry, 6);
371 :
372 4 : return;
373 : } // end case TENTH,ELEVENTH
374 :
375 :
376 :
377 :
378 142 : case TWELFTH:
379 : case THIRTEENTH:
380 : {
381 : // A degree 13, 33-point rule due to Cools and Haegemans.
382 : //
383 : // R. Cools and A. Haegemans, Another step forward in searching for
384 : // cubature formulae with a minimal number of knots for the square,
385 : // Computing 40 (1988), 139--146.
386 : //
387 : // A tensor-product rule accurate for "bi-12" or "bi-13" degree polynomials would have 49 points.
388 142 : const Real data[9][3] =
389 : {
390 : {Real(0.0000000000000000e+00), Real(0.0000000000000000e+00), Real(3.0038211543122536e-01)}, // 1
391 : {Real(9.8348668243987226e-01), Real(7.7880971155441942e-01), Real(2.9991838864499131e-02)}, // 4
392 : {Real(8.5955600564163892e-01), Real(9.5729769978630736e-01), Real(3.8174421317083669e-02)}, // 4
393 : {Real(9.5892517028753485e-01), Real(1.3818345986246535e-01), Real(6.0424923817749980e-02)}, // 4
394 : {Real(3.9073621612946100e-01), Real(9.4132722587292523e-01), Real(7.7492738533105339e-02)}, // 4
395 : {Real(8.5007667369974857e-01), Real(4.7580862521827590e-01), Real(1.1884466730059560e-01)}, // 4
396 : {Real(6.4782163718701073e-01), Real(7.5580535657208143e-01), Real(1.2976355037000271e-01)}, // 4
397 : {Real(7.0741508996444936e-02), Real(6.9625007849174941e-01), Real(2.1334158145718938e-01)}, // 4
398 : {Real(4.0930456169403884e-01), Real(3.4271655604040678e-01), Real(2.5687074948196783e-01)} // 4
399 : };
400 :
401 142 : const unsigned int symmetry[9] = {
402 : 0, // Single point
403 : 4, // Rotational Invariant
404 : 4, // Rotational Invariant
405 : 4, // Rotational Invariant
406 : 4, // Rotational Invariant
407 : 4, // Rotational Invariant
408 : 4, // Rotational Invariant
409 : 4, // Rotational Invariant
410 : 4 // Rotational Invariant
411 : };
412 :
413 142 : _points.resize (33);
414 142 : _weights.resize(33);
415 :
416 142 : stroud_rule(data, symmetry, 9);
417 :
418 4 : return;
419 : } // end case TWELFTH,THIRTEENTH
420 :
421 :
422 :
423 :
424 142 : case FOURTEENTH:
425 : case FIFTEENTH:
426 : {
427 : // A degree-15, 48 point rule originally due to Rabinowitz and Richter,
428 : // can be found in Cools' 1971 book.
429 : //
430 : // A.H. Stroud, Approximate calculation of multiple integrals,
431 : // Prentice-Hall, Englewood Cliffs, N.J., 1971.
432 : //
433 : // The product Gauss rule for this order has 8^2=64 points.
434 142 : const Real data[9][3] =
435 : {
436 : {9.915377816777667e-01_R, 0.0000000000000000e+00 , 3.01245207981210e-02_R}, // 4
437 : {8.020163879230440e-01_R, 0.0000000000000000e+00 , 8.71146840209092e-02_R}, // 4
438 : {5.648674875232742e-01_R, 0.0000000000000000e+00 , 1.250080294351494e-01_R}, // 4
439 : {9.354392392539896e-01_R, 0.0000000000000000e+00 , 2.67651407861666e-02_R}, // 4
440 : {7.624563338825799e-01_R, 0.0000000000000000e+00 , 9.59651863624437e-02_R}, // 4
441 : {2.156164241427213e-01_R, 0.0000000000000000e+00 , 1.750832998343375e-01_R}, // 4
442 : {9.769662659711761e-01_R, 6.684480048977932e-01_R, 2.83136372033274e-02_R}, // 4
443 : {8.937128379503403e-01_R, 3.735205277617582e-01_R, 8.66414716025093e-02_R}, // 4
444 : {6.122485619312083e-01_R, 4.078983303613935e-01_R, 1.150144605755996e-01_R} // 4
445 : };
446 :
447 142 : const unsigned int symmetry[9] = {
448 : 3, // Full Symmetry, (x,0)
449 : 3, // Full Symmetry, (x,0)
450 : 3, // Full Symmetry, (x,0)
451 : 2, // Full Symmetry, (x,x)
452 : 2, // Full Symmetry, (x,x)
453 : 2, // Full Symmetry, (x,x)
454 : 1, // Full Symmetry, (x,y)
455 : 1, // Full Symmetry, (x,y)
456 : 1, // Full Symmetry, (x,y)
457 : };
458 :
459 142 : _points.resize (48);
460 142 : _weights.resize(48);
461 :
462 142 : stroud_rule(data, symmetry, 9);
463 :
464 4 : return;
465 : } // case FOURTEENTH, FIFTEENTH:
466 :
467 :
468 :
469 :
470 71 : case SIXTEENTH:
471 : case SEVENTEENTH:
472 : {
473 : // A degree 17, 60-point rule due to Cools and Haegemans.
474 : //
475 : // R. Cools and A. Haegemans, Another step forward in searching for
476 : // cubature formulae with a minimal number of knots for the square,
477 : // Computing 40 (1988), 139--146.
478 : //
479 : // A tensor-product rule accurate for "bi-14" or "bi-15" degree polynomials would have 64 points.
480 : // A tensor-product rule accurate for "bi-16" or "bi-17" degree polynomials would have 81 points.
481 71 : const Real data[10][3] =
482 : {
483 : {Real(9.8935307451260049e-01), Real(0.0000000000000000e+00), Real(2.0614915919990959e-02)}, // 4
484 : {Real(3.7628520715797329e-01), Real(0.0000000000000000e+00), Real(1.2802571617990983e-01)}, // 4
485 : {Real(9.7884827926223311e-01), Real(0.0000000000000000e+00), Real(5.5117395340318905e-03)}, // 4
486 : {Real(8.8579472916411612e-01), Real(0.0000000000000000e+00), Real(3.9207712457141880e-02)}, // 4
487 : {Real(1.7175612383834817e-01), Real(0.0000000000000000e+00), Real(7.6396945079863302e-02)}, // 4
488 : {Real(5.9049927380600241e-01), Real(3.1950503663457394e-01), Real(1.4151372994997245e-01)}, // 8
489 : {Real(7.9907913191686325e-01), Real(5.9797245192945738e-01), Real(8.3903279363797602e-02)}, // 8
490 : {Real(8.0374396295874471e-01), Real(5.8344481776550529e-02), Real(6.0394163649684546e-02)}, // 8
491 : {Real(9.3650627612749478e-01), Real(3.4738631616620267e-01), Real(5.7387752969212695e-02)}, // 8
492 : {Real(9.8132117980545229e-01), Real(7.0600028779864611e-01), Real(2.1922559481863763e-02)}, // 8
493 : };
494 :
495 71 : const unsigned int symmetry[10] = {
496 : 3, // Fully symmetric (x,0)
497 : 3, // Fully symmetric (x,0)
498 : 2, // Fully symmetric (x,x)
499 : 2, // Fully symmetric (x,x)
500 : 2, // Fully symmetric (x,x)
501 : 1, // Fully symmetric (x,y)
502 : 1, // Fully symmetric (x,y)
503 : 1, // Fully symmetric (x,y)
504 : 1, // Fully symmetric (x,y)
505 : 1 // Fully symmetric (x,y)
506 : };
507 :
508 71 : _points.resize (60);
509 71 : _weights.resize(60);
510 :
511 71 : stroud_rule(data, symmetry, 10);
512 :
513 2 : return;
514 : } // end case FOURTEENTH through SEVENTEENTH
515 : #endif
516 :
517 :
518 :
519 : // By default: construct and use a Gauss quadrature rule
520 6 : default:
521 : {
522 : // Break out and fall down into the default: case for the
523 : // outer switch statement.
524 6 : break;
525 : }
526 :
527 80 : } // end switch(_order + 2*p)
528 : } // end case QUAD4/8/9
529 :
530 : libmesh_fallthrough();
531 :
532 : // By default: construct and use a Gauss quadrature rule
533 : default:
534 : {
535 1460 : QGauss gauss_rule(2, _order);
536 1420 : gauss_rule.init(*this);
537 :
538 : // Swap points and weights with the about-to-be destroyed rule.
539 40 : _points.swap (gauss_rule.get_points() );
540 40 : _weights.swap(gauss_rule.get_weights());
541 :
542 40 : return;
543 : }
544 : } // end switch (_type)
545 : }
546 :
547 : } // namespace libMesh
|