rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
triaquadrature.m
1 function res = triaquadrature(poldeg,func,varargin)
2 %function res = triaquadrature(poldeg,func,varargin)
3 %
4 % integration of function func over reference triangle.
5 % by Gaussian quadrature exactly integrating polynoms of poldeg.
6 % func is a function getting a local coordinate vector and varargin
7 % and giving a (vectorial or scalar) result
8 % formulae from:
9 % G.R. Cowper "Gaussian Quadrature Formulas for Triangles"
10 % and dune-quadratures quadratures.cc
11 % degrees 1-11 are copied, see the quadratures.cc included below
12 % for more quadraturerules.
13 
14 % Bernard Haasdonk 28.1.2009
15 
16 switch poldeg
17  case 0
18  %npoints = 1;
19  points = 1/3 * ones(1,2);
20  weights = 0.5;
21  case {1,2}
22  %npoints = 3;
23  points = [2/3, 1/6;
24  1/6, 2/3;
25  1/6, 1/6];
26  weights = 1/6 * ones(1,3);
27  case {3,4}
28  %npoints = 6;
29  points = [ ...
30  0.81684757298045851308085707319560, 0.091576213509770743459571463402202;
31  0.091576213509770743459571463402202, 0.81684757298045851308085707319560;
32  0.091576213509770743459571463402202, 0.091576213509770743459571463402202;
33  0.10810301816807022736334149223390, 0.44594849091596488631832925388305;
34  0.44594849091596488631832925388305, 0.10810301816807022736334149223390;
35  0.44594849091596488631832925388305, 0.44594849091596488631832925388305;
36  ];
37  weights = [ 0.5 * 0.10995174365532186763832632490021 * ones(3,1);...
38  0.5 * 0.22338158967801146569500700843312 * ones(3,1)];
39 
40 % points = [0.816847572980459, 0.091576213509771, 0.091576213509771; ...
41 % 0.091576213509771, 0.816847572980459, 0.091576213509771; ...
42 % 0.091576213509771, 0.091576213509771, 0.816847572980459; ...
43 % 0.108103018168070, 0.445948490915965, 0.445948490915965; ...
44 % 0.445948490915965, 0.108103018168070, 0.445948490915965; ...
45 % 0.445948490915965, 0.445948490915965, 0.108103018168070]';
46 % weights = 0.5 * [0.109951743655322, 0.109951743655322, 0.109951743655322, ...
47 % 0.223381589678011, 0.223381589678011, ...
48 % 0.223381589678011];
49  case {5,6,7}
50 % npoints = 13;
51 % points = [1/3, 1/3, 1/3;...
52 % 0.479308067841923, 0.260345966079038, 0.260345966079038; ...
53 % 0.260345966079038, 0.479308067841923, 0.260345966079038; ...
54 % 0.260345966079038, 0.260345966079038, 0.479308067841923; ...
55 % 0.869739794195568, 0.065130102902216, 0.065130102902216; ...
56 % 0.065130102902216, 0.869739794195568, 0.065130102902216; ...
57 % 0.065130102902216, 0.065130102902216, 0.869739794195568; ...
58 % 0.638444188569809, 0.312865496004875, 0.048690315425316;...
59 % 0.638444188569809, 0.048690315425316, 0.312865496004875;...
60 % 0.048690315425316, 0.638444188569809, 0.312865496004875;...
61 % 0.048690315425316, 0.312865496004875, 0.638444188569809;...
62 % 0.312865496004875, 0.048690315425316, 0.638444188569809;...
63 % 0.312865496004875, 0.638444188569809, 0.048690315425316 ...
64 % ]';
65 % weights = 0.5 * [-0.149570044467670, ...
66 % 0.175615257433204, 0.175615257433204, 0.175615257433204, ...
67 % 0.053347235608839, 0.053347235608839, 0.053347235608839, ...
68 % 0.077113760890257, 0.077113760890257, 0.077113760890257, ...
69 % 0.077113760890257, 0.077113760890257, 0.077113760890257 ...
70 % ];
71  %npoints = 12;
72  points = [...
73  0.0623822650944021181736830009963499, 0.0675178670739160854425571310508685;
74  0.0675178670739160854425571310508685, 0.870099867831681796383759867952782;
75  0.870099867831681796383759867952782, 0.0623822650944021181736830009963499;
76  0.0552254566569266117374791902756449, 0.321502493851981822666307849199202;
77  0.321502493851981822666307849199202, 0.623272049491091565596212960525153;
78  0.623272049491091565596212960525153, 0.0552254566569266117374791902756449;
79  0.0343243029450971464696306424839376,0.660949196186735657611980310197799;
80  0.660949196186735657611980310197799, 0.304726500868167195918389047318263;
81  0.304726500868167195918389047318263, 0.0343243029450971464696306424839376;
82  0.515842334353591779257463386826430, 0.277716166976391782569581871393723;
83  0.277716166976391782569581871393723, 0.20644149867001643817295474177985;
84  0.20644149867001643817295474177985, 0.515842334353591779257463386826430];
85 
86  weights = 0.5 * [
87  0.053034056314872502857508360921478;
88  0.053034056314872502857508360921478;
89  0.053034056314872502857508360921478;
90  0.087762817428892110073539806278575;
91  0.087762817428892110073539806278575;
92  0.087762817428892110073539806278575;
93  0.057550085569963171476890993800437;
94  0.057550085569963171476890993800437;
95  0.057550085569963171476890993800437;
96  0.13498637401960554892539417233284;
97  0.13498637401960554892539417233284;
98  0.13498637401960554892539417233284];
99  case {8,9,10,11}
100  %npoints = 28;
101  points = [
102  0.858870281282636704039173938058347, 0.141129718717363295960826061941652;
103  0.858870281282636704039173938058347, 0.0;
104  0.141129718717363295960826061941652, 0.858870281282636704039173938058347;
105  0.141129718717363295960826061941652, 0.0;
106  0.0, 0.858870281282636704039173938058347;
107  0.0, 0.141129718717363295960826061941652;
108  0.333333333333333333333333333333333, 0.333333333333333333333333333333333;
109  0.025989140928287395260032485498841, 0.025989140928287395260032485498841;
110  0.025989140928287395260032485498841, 0.94802171814342520947993502900232;
111  0.94802171814342520947993502900232, 0.025989140928287395260032485498841;
112  0.094287502647922495630569776275405, 0.094287502647922495630569776275405;
113  0.094287502647922495630569776275405, 0.81142499470415500873886044744919;
114  0.81142499470415500873886044744919, 0.094287502647922495630569776275405;
115  0.49463677501721381374163260230644, 0.49463677501721381374163260230644;
116  0.49463677501721381374163260230644, 0.01072644996557237251673479538713;
117  0.01072644996557237251673479538713, 0.49463677501721381374163260230644;
118  0.20734338261451133345293402411297, 0.20734338261451133345293402411297;
119  0.20734338261451133345293402411297, 0.58531323477097733309413195177407;
120  0.58531323477097733309413195177407, 0.20734338261451133345293402411297;
121  0.43890780570049209506106538163613, 0.43890780570049209506106538163613;
122  0.43890780570049209506106538163613, 0.12218438859901580987786923672775;
123  0.12218438859901580987786923672775, 0.43890780570049209506106538163613;
124  0.67793765488259040154212614118875, 0.044841677589130443309052391468801;
125  0.67793765488259040154212614118875, 0.27722066752827915514882146734245;
126  0.044841677589130443309052391468801, 0.67793765488259040154212614118875;
127  0.044841677589130443309052391468801, 0.27722066752827915514882146734245;
128  0.27722066752827915514882146734245, 0.67793765488259040154212614118875;
129  0.27722066752827915514882146734245, 0.044841677589130443309052391468801];
130 
131  weights = 0.5 * [...
132  0.0073623837833005542642588950473806;
133  0.0073623837833005542642588950473806;
134  0.0073623837833005542642588950473806;
135  0.0073623837833005542642588950473806;
136  0.0073623837833005542642588950473806;
137  0.0073623837833005542642588950473806;
138  0.087977301162232238798093169321456;
139  0.0087443115537360230495164287998252;
140  0.0087443115537360230495164287998252;
141  0.0087443115537360230495164287998252;
142  0.038081571993934937515024339435614;
143  0.038081571993934937515024339435614;
144  0.038081571993934937515024339435614;
145  0.018855448056131292058476782591115;
146  0.018855448056131292058476782591115;
147  0.018855448056131292058476782591115;
148  0.072159697544739526124029988586463;
149  0.072159697544739526124029988586463;
150  0.072159697544739526124029988586463;
151  0.069329138705535899841765650903814;
152  0.069329138705535899841765650903814;
153  0.069329138705535899841765650903814;
154  0.041056315429288566641652314907294;
155  0.041056315429288566641652314907294;
156  0.041056315429288566641652314907294;
157  0.041056315429288566641652314907294;
158  0.041056315429288566641652314907294;
159  0.041056315429288566641652314907294];
160  otherwise
161  error('quadrature of desired degree not available')
162 end;
163 
164 res = quadrature(weights,points,func,varargin{:});
165 
166 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
167 % quadraturerules.cc from dune:
168 % $$$
169 % $$$ #include "config.h"
170 % $$$ #include "../quadraturerules.hh"
171 % $$$
172 % $$$ namespace Dune {
173 % $$$
174 % $$$
175 % $$$ template<int dim>
176 % $$$ class SimplexQuadraturePoints;
177 % $$$
178 % $$$
179 % $$$ template<int dim>
180 % $$$ struct SimplexQuadraturePointsSingleton {
181 % $$$ static SimplexQuadraturePoints<dim> sqp;
182 % $$$ };
183 % $$$
184 % $$$ template<>
185 % $$$ struct SimplexQuadraturePointsSingleton<2> {
186 % $$$ static SimplexQuadraturePoints<2> sqp;
187 % $$$ };
188 % $$$
189 % $$$ template<>
190 % $$$ struct SimplexQuadraturePointsSingleton<3> {
191 % $$$ static SimplexQuadraturePoints<3> sqp;
192 % $$$ };
193 % $$$
194 % $$$ template<>
195 % $$$ class SimplexQuadraturePoints<2>
196 % $$$ {
197 % $$$ public:
198 % $$$ enum { MAXP=33};
199 % $$$ enum { highest_order=12 };
200 % $$$
201 % $$$
202 % $$$ SimplexQuadraturePoints ()
203 % $$$ {
204 % $$$ int m = 0;
205 % $$$ O[m] = 0;
206 % $$$
207 % $$$ // polynom degree 1
208 % $$$ m = 1;
209 % $$$ G[m][0][0] = 0.333333333333333333333333333333333;
210 % $$$ G[m][0][1] = 0.333333333333333333333333333333333;
211 % $$$ W[m][0] = 0.5;
212 % $$$ O[m] = 1;
213 % $$$
214 % $$$ // polynom degree 2
215 % $$$ // symmetric
216 % $$$ m = 3;
217 % $$$ G[m][0][0] = 4.0/6.0;
218 % $$$ G[m][0][1] = 1.0/6.0;
219 % $$$ G[m][1][0] = 1.0/6.0;
220 % $$$ G[m][1][1] = 4.0/6.0;
221 % $$$ G[m][2][0] = 1.0/6.0;
222 % $$$ G[m][2][1] = 1.0/6.0;
223 % $$$ W[m][0] = 0.5/3.0;
224 % $$$ W[m][1] = 0.5/3.0;
225 % $$$ W[m][2] = 0.5/3.0;
226 % $$$ O[m] = 2;
227 % $$$
228 % $$$ // polynom degree 3
229 % $$$ // symmetric
230 % $$$ m = 4;
231 % $$$ G[m][0][0] = 10.0/30.0;
232 % $$$ G[m][0][1] = 10.0/30.0;
233 % $$$ G[m][1][0] = 18.0/30.0;
234 % $$$ G[m][1][1] = 6.0/30.0;
235 % $$$ G[m][2][0] = 6.0/30.0;
236 % $$$ G[m][2][1] = 18.0/30.0;
237 % $$$ G[m][3][0] = 6.0/30.0;
238 % $$$ G[m][3][1] = 6.0/30.0;
239 % $$$
240 % $$$ W[m][0] = 0.5 * -27.0/48.0;
241 % $$$ W[m][1] = 0.5 * 25.0/48.0;
242 % $$$ W[m][2] = 0.5 * 25.0/48.0;
243 % $$$ W[m][3] = 0.5 * 25.0/48.0;
244 % $$$ O[m] = 3;
245 % $$$
246 % $$$ // polynomial degree 4
247 % $$$ // symmetric points
248 % $$$ m = 6;
249 % $$$ G[m][0][0] = 0.81684757298045851308085707319560;
250 % $$$ G[m][0][1] = 0.091576213509770743459571463402202;
251 % $$$ G[m][1][0] = 0.091576213509770743459571463402202;
252 % $$$ G[m][1][1] = 0.81684757298045851308085707319560;
253 % $$$ G[m][2][0] = 0.091576213509770743459571463402202;
254 % $$$ G[m][2][1] = 0.091576213509770743459571463402202;
255 % $$$ G[m][3][0] = 0.10810301816807022736334149223390;
256 % $$$ G[m][3][1] = 0.44594849091596488631832925388305;
257 % $$$ G[m][4][0] = 0.44594849091596488631832925388305;
258 % $$$ G[m][4][1] = 0.10810301816807022736334149223390;
259 % $$$ G[m][5][0] = 0.44594849091596488631832925388305;
260 % $$$ G[m][5][1] = 0.44594849091596488631832925388305;
261 % $$$
262 % $$$ W[m][0] = 0.5 * 0.10995174365532186763832632490021;
263 % $$$ W[m][1] = 0.5 * 0.10995174365532186763832632490021;
264 % $$$ W[m][2] = 0.5 * 0.10995174365532186763832632490021;
265 % $$$ W[m][3] = 0.5 * 0.22338158967801146569500700843312;
266 % $$$ W[m][4] = 0.5 * 0.22338158967801146569500700843312;
267 % $$$ W[m][5] = 0.5 * 0.22338158967801146569500700843312;
268 % $$$ O[m] = 4;
269 % $$$
270 % $$$ // polynomial degree 5
271 % $$$ // symmetric points
272 % $$$
273 % $$$ m = 7;
274 % $$$ G[m][0][0] = 0.333333333333333333333333333333333;
275 % $$$ G[m][0][1] = 0.333333333333333333333333333333333;
276 % $$$ G[m][1][0] = 0.79742698535308732239802527616975;
277 % $$$ G[m][1][1] = 0.1012865073234563388009873619151;
278 % $$$ G[m][2][0] = 0.10128650732345633880098736191512;
279 % $$$ G[m][2][1] = 0.79742698535308732239802527616975;
280 % $$$ G[m][3][0] = 0.10128650732345633880098736191512;
281 % $$$ G[m][3][1] = 0.10128650732345633880098736191512;
282 % $$$ G[m][4][0] = 0.05971587178976982045911758097311;
283 % $$$ G[m][4][1] = 0.47014206410511508977044120951345;
284 % $$$ G[m][5][0] = 0.47014206410511508977044120951345;
285 % $$$ G[m][5][1] = 0.05971587178976982045911758097311;
286 % $$$ G[m][6][0] = 0.47014206410511508977044120951345;
287 % $$$ G[m][6][1] = 0.47014206410511508977044120951345;
288 % $$$
289 % $$$ W[m][0] = 0.5 * 0.225;
290 % $$$ W[m][1] = 0.5 * 0.12593918054482715259568394550018;
291 % $$$ W[m][2] = 0.5 * 0.12593918054482715259568394550018;
292 % $$$ W[m][3] = 0.5 * 0.12593918054482715259568394550018;
293 % $$$ W[m][4] = 0.5 * 0.13239415278850618073764938783315;
294 % $$$ W[m][5] = 0.5 * 0.13239415278850618073764938783315;
295 % $$$ W[m][6] = 0.5 * 0.13239415278850618073764938783315;
296 % $$$ O[m] = 5;
297 % $$$
298 % $$$ // polynomial degree 6
299 % $$$ /* 12 inner Gauss points, positive weights */
300 % $$$ m=12;
301 % $$$ G[m][0][0] = 0.063089014491502228340331602870819;
302 % $$$ G[m][0][1] = 0.063089014491502228340331602870819;
303 % $$$ G[m][1][0] = 0.063089014491502228340331602870819;
304 % $$$ G[m][1][1] = 0.87382197101699554331933679425836;
305 % $$$ G[m][2][0] = 0.87382197101699554331933679425836;
306 % $$$ G[m][2][1] = 0.063089014491502228340331602870819;
307 % $$$ G[m][3][0] = 0.24928674517091042129163855310702;
308 % $$$ G[m][3][1] = 0.24928674517091042129163855310702;
309 % $$$ G[m][4][0] = 0.24928674517091042129163855310702;
310 % $$$ G[m][4][1] = 0.50142650965817915741672289378596;
311 % $$$ G[m][5][0] = 0.50142650965817915741672289378596;
312 % $$$ G[m][5][1] = 0.24928674517091042129163855310702;
313 % $$$ G[m][6][0] = 0.053145049844816947353249671631398;
314 % $$$ G[m][6][1] = 0.31035245103378440541660773395655;
315 % $$$ G[m][7][0] = 0.053145049844816947353249671631398;
316 % $$$ G[m][7][1] = 0.63650249912139864723014259441205;
317 % $$$ G[m][8][0] = 0.31035245103378440541660773395655;
318 % $$$ G[m][8][1] = 0.053145049844816947353249671631398;
319 % $$$ G[m][9][0] = 0.31035245103378440541660773395655;
320 % $$$ G[m][9][1] = 0.63650249912139864723014259441205;
321 % $$$ G[m][10][0] = 0.63650249912139864723014259441205;
322 % $$$ G[m][10][1] = 0.053145049844816947353249671631398;
323 % $$$ G[m][11][0] = 0.63650249912139864723014259441205;
324 % $$$ G[m][11][1] = 0.31035245103378440541660773395655;
325 % $$$
326 % $$$ W[m][0] = 0.5 * 0.050844906370206816920936809106869;
327 % $$$ W[m][1] = 0.5 * 0.050844906370206816920936809106869;
328 % $$$ W[m][2] = 0.5 * 0.050844906370206816920936809106869;
329 % $$$ W[m][3] = 0.5 * 0.11678627572637936602528961138558;
330 % $$$ W[m][4] = 0.5 * 0.11678627572637936602528961138558;
331 % $$$ W[m][5] = 0.5 * 0.11678627572637936602528961138558;
332 % $$$ W[m][6] = 0.5 * 0.082851075618373575193553456420442;
333 % $$$ W[m][7] = 0.5 * 0.082851075618373575193553456420442;
334 % $$$ W[m][8] = 0.5 * 0.082851075618373575193553456420442;
335 % $$$ W[m][9] = 0.5 * 0.082851075618373575193553456420442;
336 % $$$ W[m][10] = 0.5 * 0.082851075618373575193553456420442;
337 % $$$ W[m][11] = 0.5 * 0.082851075618373575193553456420442;
338 % $$$ O[m] = 6;
339 % $$$
340 % $$$ // polynomial degree 7
341 % $$$ /* 12 inner Gauss points, positive weights */
342 % $$$ m=12;
343 % $$$ G[m][0][0] = 0.0623822650944021181736830009963499;
344 % $$$ G[m][0][1] = 0.0675178670739160854425571310508685;
345 % $$$ G[m][1][0] = 0.0675178670739160854425571310508685;
346 % $$$ G[m][1][1] = 0.870099867831681796383759867952782;
347 % $$$ G[m][2][0] = 0.870099867831681796383759867952782;
348 % $$$ G[m][2][1] = 0.0623822650944021181736830009963499;
349 % $$$ G[m][3][0] = 0.0552254566569266117374791902756449;
350 % $$$ G[m][3][1] = 0.321502493851981822666307849199202;
351 % $$$ G[m][4][0] = 0.321502493851981822666307849199202;
352 % $$$ G[m][4][1] = 0.623272049491091565596212960525153;
353 % $$$ G[m][5][0] = 0.623272049491091565596212960525153;
354 % $$$ G[m][5][1] = 0.0552254566569266117374791902756449;
355 % $$$ G[m][6][0] = 0.0343243029450971464696306424839376;
356 % $$$ G[m][6][1] = 0.660949196186735657611980310197799;
357 % $$$ G[m][7][0] = 0.660949196186735657611980310197799;
358 % $$$ G[m][7][1] = 0.304726500868167195918389047318263;
359 % $$$ G[m][8][0] = 0.304726500868167195918389047318263;
360 % $$$ G[m][8][1] = 0.0343243029450971464696306424839376;
361 % $$$ G[m][9][0] = 0.515842334353591779257463386826430;
362 % $$$ G[m][9][1] = 0.277716166976391782569581871393723;
363 % $$$ G[m][10][0] = 0.277716166976391782569581871393723;
364 % $$$ G[m][10][1] = 0.20644149867001643817295474177985;
365 % $$$ G[m][11][0] = 0.20644149867001643817295474177985;
366 % $$$ G[m][11][1] = 0.515842334353591779257463386826430;
367 % $$$
368 % $$$ W[m][0] = 0.5 * 0.053034056314872502857508360921478;
369 % $$$ W[m][1] = 0.5 * 0.053034056314872502857508360921478;
370 % $$$ W[m][2] = 0.5 * 0.053034056314872502857508360921478;
371 % $$$ W[m][3] = 0.5 * 0.087762817428892110073539806278575;
372 % $$$ W[m][4] = 0.5 * 0.087762817428892110073539806278575;
373 % $$$ W[m][5] = 0.5 * 0.087762817428892110073539806278575;
374 % $$$ W[m][6] = 0.5 * 0.057550085569963171476890993800437;
375 % $$$ W[m][7] = 0.5 * 0.057550085569963171476890993800437;
376 % $$$ W[m][8] = 0.5 * 0.057550085569963171476890993800437;
377 % $$$ W[m][9] = 0.5 * 0.13498637401960554892539417233284;
378 % $$$ W[m][10] = 0.5 * 0.13498637401960554892539417233284;
379 % $$$ W[m][11] = 0.5 * 0.13498637401960554892539417233284;
380 % $$$ O[m] = 7;
381 % $$$
382 % $$$ // polynomial degree 8
383 % $$$ /* 16 inner Gauss points, positive weights */
384 % $$$
385 % $$$ m=16;
386 % $$$ G[m][0][0] = 0.33333333333333333333333333333333;
387 % $$$ G[m][0][1] = 0.33333333333333333333333333333333;
388 % $$$ G[m][1][0] = 0.17056930775176020662229350149146;
389 % $$$ G[m][1][1] = 0.17056930775176020662229350149146;
390 % $$$ G[m][2][0] = 0.17056930775176020662229350149146;
391 % $$$ G[m][2][1] = 0.65886138449647958675541299701707;
392 % $$$ G[m][3][0] = 0.65886138449647958675541299701707;
393 % $$$ G[m][3][1] = 0.17056930775176020662229350149146;
394 % $$$ G[m][4][0] = 0.050547228317030975458423550596599;
395 % $$$ G[m][4][1] = 0.050547228317030975458423550596599;
396 % $$$ G[m][5][0] = 0.050547228317030975458423550596599;
397 % $$$ G[m][5][1] = 0.89890554336593804908315289880680;
398 % $$$ G[m][6][0] = 0.89890554336593804908315289880680;
399 % $$$ G[m][6][1] = 0.050547228317030975458423550596599;
400 % $$$ G[m][7][0] = 0.45929258829272315602881551449417;
401 % $$$ G[m][7][1] = 0.45929258829272315602881551449417;
402 % $$$ G[m][8][0] = 0.45929258829272315602881551449417;
403 % $$$ G[m][8][1] = 0.08141482341455368794236897101166;
404 % $$$ G[m][9][0] = 0.08141482341455368794236897101166;
405 % $$$ G[m][9][1] = 0.45929258829272315602881551449417;
406 % $$$ G[m][10][0] = 0.72849239295540428124100037917606;
407 % $$$ G[m][10][1] = 0.26311282963463811342178578628464;
408 % $$$ G[m][11][0] = 0.72849239295540428124100037917606;
409 % $$$ G[m][11][1] = 0.00839477740995760533721383453930;
410 % $$$ G[m][12][0] = 0.26311282963463811342178578628464;
411 % $$$ G[m][12][1] = 0.72849239295540428124100037917606;
412 % $$$ G[m][13][0] = 0.26311282963463811342178578628464;
413 % $$$ G[m][13][1] = 0.00839477740995760533721383453930;
414 % $$$ G[m][14][0] = 0.00839477740995760533721383453930;
415 % $$$ G[m][14][1] = 0.72849239295540428124100037917606;
416 % $$$ G[m][15][0] = 0.00839477740995760533721383453930;
417 % $$$ G[m][15][1] = 0.26311282963463811342178578628464;
418 % $$$
419 % $$$ W[m][0] = 0.5 * 0.14431560767778716825109111048906;
420 % $$$ W[m][1] = 0.5 * 0.10321737053471825028179155029213;
421 % $$$ W[m][2] = 0.5 * 0.10321737053471825028179155029213;
422 % $$$ W[m][3] = 0.5 * 0.10321737053471825028179155029213;
423 % $$$ W[m][4] = 0.5 * 0.032458497623198080310925928341780;
424 % $$$ W[m][5] = 0.5 * 0.032458497623198080310925928341780;
425 % $$$ W[m][6] = 0.5 * 0.032458497623198080310925928341780;
426 % $$$ W[m][7] = 0.5 * 0.095091634267284624793896104388584;
427 % $$$ W[m][8] = 0.5 * 0.095091634267284624793896104388584;
428 % $$$ W[m][9] = 0.5 * 0.095091634267284624793896104388584;
429 % $$$ W[m][10] = 0.5 * 0.027230314174434994264844690073909;
430 % $$$ W[m][11] = 0.5 * 0.027230314174434994264844690073909;
431 % $$$ W[m][12] = 0.5 * 0.027230314174434994264844690073909;
432 % $$$ W[m][13] = 0.5 * 0.027230314174434994264844690073909;
433 % $$$ W[m][14] = 0.5 * 0.027230314174434994264844690073909;
434 % $$$ W[m][15] = 0.5 * 0.027230314174434994264844690073909;
435 % $$$ O[m] = 8;
436 % $$$
437 % $$$ // polynomial degree 9
438 % $$$ /* 19 inner Gauss points, positive weights */
439 % $$$
440 % $$$ m=19;
441 % $$$ G[m][0][0] = 0.333333333333333333333333333333333;
442 % $$$ G[m][0][1] = 0.333333333333333333333333333333333;
443 % $$$ G[m][1][0] = 0.48968251919873762778370692483619;
444 % $$$ G[m][1][1] = 0.48968251919873762778370692483619;
445 % $$$ G[m][2][0] = 0.48968251919873762778370692483619;
446 % $$$ G[m][2][1] = 0.02063496160252474443258615032762;
447 % $$$ G[m][3][0] = 0.02063496160252474443258615032762;
448 % $$$ G[m][3][1] = 0.48968251919873762778370692483619;
449 % $$$ G[m][4][0] = 0.43708959149293663726993036443535;
450 % $$$ G[m][4][1] = 0.43708959149293663726993036443535;
451 % $$$ G[m][5][0] = 0.43708959149293663726993036443535;
452 % $$$ G[m][5][1] = 0.12582081701412672546013927112929;
453 % $$$ G[m][6][0] = 0.12582081701412672546013927112929;
454 % $$$ G[m][6][1] = 0.43708959149293663726993036443535;
455 % $$$ G[m][7][0] = 0.18820353561903273024096128046733;
456 % $$$ G[m][7][1] = 0.18820353561903273024096128046733;
457 % $$$ G[m][8][0] = 0.18820353561903273024096128046733;
458 % $$$ G[m][8][1] = 0.62359292876193453951807743906533;
459 % $$$ G[m][9][0] = 0.62359292876193453951807743906533;
460 % $$$ G[m][9][1] = 0.18820353561903273024096128046733;
461 % $$$ G[m][10][0] = 0.044729513394452709865106589966276;
462 % $$$ G[m][10][1] = 0.044729513394452709865106589966276;
463 % $$$ G[m][11][0] = 0.044729513394452709865106589966276;
464 % $$$ G[m][11][1] = 0.91054097321109458026978682006745;
465 % $$$ G[m][12][0] = 0.91054097321109458026978682006745;
466 % $$$ G[m][12][1] = 0.044729513394452709865106589966276;
467 % $$$ G[m][13][0] = 0.74119859878449802069007987352342;
468 % $$$ G[m][13][1] = 0.036838412054736283634817598783385;
469 % $$$ G[m][14][0] = 0.74119859878449802069007987352342;
470 % $$$ G[m][14][1] = 0.22196298916076569567510252769319;
471 % $$$ G[m][15][0] = 0.036838412054736283634817598783385;
472 % $$$ G[m][15][1] = 0.74119859878449802069007987352342;
473 % $$$ G[m][16][0] = 0.036838412054736283634817598783385;
474 % $$$ G[m][16][1] = 0.22196298916076569567510252769319;
475 % $$$ G[m][17][0] = 0.22196298916076569567510252769319;
476 % $$$ G[m][17][1] = 0.74119859878449802069007987352342;
477 % $$$ G[m][18][0] = 0.22196298916076569567510252769319;
478 % $$$ G[m][18][1] = 0.036838412054736283634817598783385;
479 % $$$
480 % $$$ W[m][0] = 0.5 * 0.097135796282798833819241982507289;
481 % $$$ W[m][1] = 0.5 * 0.031334700227139070536854831287209;
482 % $$$ W[m][2] = 0.5 * 0.031334700227139070536854831287209;
483 % $$$ W[m][3] = 0.5 * 0.031334700227139070536854831287209;
484 % $$$ W[m][4] = 0.5 * 0.077827541004774279316739356299404;
485 % $$$ W[m][5] = 0.5 * 0.077827541004774279316739356299404;
486 % $$$ W[m][6] = 0.5 * 0.077827541004774279316739356299404;
487 % $$$ W[m][7] = 0.5 * 0.079647738927210253032891774264045;
488 % $$$ W[m][8] = 0.5 * 0.079647738927210253032891774264045;
489 % $$$ W[m][9] = 0.5 * 0.079647738927210253032891774264045;
490 % $$$ W[m][10] = 0.5 * 0.025577675658698031261678798559000;
491 % $$$ W[m][11] = 0.5 * 0.025577675658698031261678798559000;
492 % $$$ W[m][12] = 0.5 * 0.025577675658698031261678798559000;
493 % $$$ W[m][13] = 0.5 * 0.043283539377289377289377289377289;
494 % $$$ W[m][14] = 0.5 * 0.043283539377289377289377289377289;
495 % $$$ W[m][15] = 0.5 * 0.043283539377289377289377289377289;
496 % $$$ W[m][16] = 0.5 * 0.043283539377289377289377289377289;
497 % $$$ W[m][17] = 0.5 * 0.043283539377289377289377289377289;
498 % $$$ W[m][18] = 0.5 * 0.043283539377289377289377289377289;
499 % $$$ O[m] = 9;
500 % $$$
501 % $$$ // polynomial degree 10
502 % $$$ /* 25 inner Gauss points, positive weights */
503 % $$$ m= 25;
504 % $$$ G[m][0][0] = 0.333333333333333333333333333333333;
505 % $$$ G[m][0][1] = 0.333333333333333333333333333333333;
506 % $$$ G[m][1][0] = 0.42508621060209057296952951163804;
507 % $$$ G[m][1][1] = 0.42508621060209057296952951163804;
508 % $$$ G[m][2][0] = 0.42508621060209057296952951163804;
509 % $$$ G[m][2][1] = 0.14982757879581885406094097672391;
510 % $$$ G[m][3][0] = 0.14982757879581885406094097672391;
511 % $$$ G[m][3][1] = 0.42508621060209057296952951163804;
512 % $$$ G[m][4][0] = 0.023308867510000190714466386895980;
513 % $$$ G[m][4][1] = 0.023308867510000190714466386895980;
514 % $$$ G[m][5][0] = 0.023308867510000190714466386895980;
515 % $$$ G[m][5][1] = 0.95338226497999961857106722620804;
516 % $$$ G[m][6][0] = 0.95338226497999961857106722620804;
517 % $$$ G[m][6][1] = 0.023308867510000190714466386895980;
518 % $$$ G[m][7][0] = 0.62830740021349255642083766607883;
519 % $$$ G[m][7][1] = 0.22376697357697300622568649026820;
520 % $$$ G[m][8][0] = 0.62830740021349255642083766607883;
521 % $$$ G[m][8][1] = 0.14792562620953443735347584365296;
522 % $$$ G[m][9][0] = 0.22376697357697300622568649026820;
523 % $$$ G[m][9][1] = 0.62830740021349255642083766607883;
524 % $$$ G[m][10][0] = 0.22376697357697300622568649026820;
525 % $$$ G[m][10][1] = 0.14792562620953443735347584365296;
526 % $$$ G[m][11][0] = 0.14792562620953443735347584365296;
527 % $$$ G[m][11][1] = 0.62830740021349255642083766607883;
528 % $$$ G[m][12][0] = 0.14792562620953443735347584365296;
529 % $$$ G[m][12][1] = 0.22376697357697300622568649026820;
530 % $$$ G[m][13][0] = 0.61131382618139764891875500225390;
531 % $$$ G[m][13][1] = 0.35874014186443146457815530072385;
532 % $$$ G[m][14][0] = 0.61131382618139764891875500225390;
533 % $$$ G[m][14][1] = 0.02994603195417088650308969702225;
534 % $$$ G[m][15][0] = 0.35874014186443146457815530072385;
535 % $$$ G[m][15][1] = 0.61131382618139764891875500225390;
536 % $$$ G[m][16][0] = 0.35874014186443146457815530072385;
537 % $$$ G[m][16][1] = 0.02994603195417088650308969702225;
538 % $$$ G[m][17][0] = 0.02994603195417088650308969702225;
539 % $$$ G[m][17][1] = 0.61131382618139764891875500225390;
540 % $$$ G[m][18][0] = 0.02994603195417088650308969702225;
541 % $$$ G[m][18][1] = 0.35874014186443146457815530072385;
542 % $$$ G[m][19][0] = 0.82107206998562937337354441347218;
543 % $$$ G[m][19][1] = 0.14329537042686714530585663061732;
544 % $$$ G[m][20][0] = 0.82107206998562937337354441347218;
545 % $$$ G[m][20][1] = 0.03563255958750348132059895591050;
546 % $$$ G[m][21][0] = 0.14329537042686714530585663061732;
547 % $$$ G[m][21][1] = 0.82107206998562937337354441347218;
548 % $$$ G[m][22][0] = 0.14329537042686714530585663061732;
549 % $$$ G[m][22][1] = 0.03563255958750348132059895591050;
550 % $$$ G[m][23][0] = 0.03563255958750348132059895591050;
551 % $$$ G[m][23][1] = 0.82107206998562937337354441347218;
552 % $$$ G[m][24][0] = 0.03563255958750348132059895591050;
553 % $$$ G[m][24][1] = 0.14329537042686714530585663061732;
554 % $$$
555 % $$$ W[m][0] = 0.5 * 0.079894504741239707831247045213386;
556 % $$$ W[m][1] = 0.5 * 0.071123802232377334639291287398658;
557 % $$$ W[m][2] = 0.5 * 0.071123802232377334639291287398658;
558 % $$$ W[m][3] = 0.5 * 0.071123802232377334639291287398658;
559 % $$$ W[m][4] = 0.5 * 0.0082238186904641955186466203624719;
560 % $$$ W[m][5] = 0.5 * 0.0082238186904641955186466203624719;
561 % $$$ W[m][6] = 0.5 * 0.0082238186904641955186466203624719;
562 % $$$ W[m][7] = 0.5 * 0.045430592296170018007073629243933;
563 % $$$ W[m][8] = 0.5 * 0.045430592296170018007073629243933;
564 % $$$ W[m][9] = 0.5 * 0.045430592296170018007073629243933;
565 % $$$ W[m][10] = 0.5 * 0.045430592296170018007073629243933;
566 % $$$ W[m][11] = 0.5 * 0.045430592296170018007073629243933;
567 % $$$ W[m][12] = 0.5 * 0.045430592296170018007073629243933;
568 % $$$ W[m][13] = 0.5 * 0.037359856234305276826236499001975;
569 % $$$ W[m][14] = 0.5 * 0.037359856234305276826236499001975;
570 % $$$ W[m][15] = 0.5 * 0.037359856234305276826236499001975;
571 % $$$ W[m][16] = 0.5 * 0.037359856234305276826236499001975;
572 % $$$ W[m][17] = 0.5 * 0.037359856234305276826236499001975;
573 % $$$ W[m][18] = 0.5 * 0.037359856234305276826236499001975;
574 % $$$ W[m][19] = 0.5 * 0.030886656884563988782513077004629;
575 % $$$ W[m][20] = 0.5 * 0.030886656884563988782513077004629;
576 % $$$ W[m][21] = 0.5 * 0.030886656884563988782513077004629;
577 % $$$ W[m][22] = 0.5 * 0.030886656884563988782513077004629;
578 % $$$ W[m][23] = 0.5 * 0.030886656884563988782513077004629;
579 % $$$ W[m][24] = 0.5 * 0.030886656884563988782513077004629;
580 % $$$ O[m] = 10;
581 % $$$
582 % $$$ // polynomial degree 11
583 % $$$ /* 28 inner Gauss points, positive weights */
584 % $$$
585 % $$$ m=28;
586 % $$$ G[m][0][0] = 0.858870281282636704039173938058347;
587 % $$$ G[m][0][1] = 0.141129718717363295960826061941652;
588 % $$$ G[m][1][0] = 0.858870281282636704039173938058347;
589 % $$$ G[m][1][1] = 0.0;
590 % $$$ G[m][2][0] = 0.141129718717363295960826061941652;
591 % $$$ G[m][2][1] = 0.858870281282636704039173938058347;
592 % $$$ G[m][3][0] = 0.141129718717363295960826061941652;
593 % $$$ G[m][3][1] = 0.0;
594 % $$$ G[m][4][0] = 0.0;
595 % $$$ G[m][4][1] = 0.858870281282636704039173938058347;
596 % $$$ G[m][5][0] = 0.0;
597 % $$$ G[m][5][1] = 0.141129718717363295960826061941652;
598 % $$$ G[m][6][0] = 0.333333333333333333333333333333333;
599 % $$$ G[m][6][1] = 0.333333333333333333333333333333333;
600 % $$$ G[m][7][0] = 0.025989140928287395260032485498841;
601 % $$$ G[m][7][1] = 0.025989140928287395260032485498841;
602 % $$$ G[m][8][0] = 0.025989140928287395260032485498841;
603 % $$$ G[m][8][1] = 0.94802171814342520947993502900232;
604 % $$$ G[m][9][0] = 0.94802171814342520947993502900232;
605 % $$$ G[m][9][1] = 0.025989140928287395260032485498841;
606 % $$$ G[m][10][0] = 0.094287502647922495630569776275405;
607 % $$$ G[m][10][1] = 0.094287502647922495630569776275405;
608 % $$$ G[m][11][0] = 0.094287502647922495630569776275405;
609 % $$$ G[m][11][1] = 0.81142499470415500873886044744919;
610 % $$$ G[m][12][0] = 0.81142499470415500873886044744919;
611 % $$$ G[m][12][1] = 0.094287502647922495630569776275405;
612 % $$$ G[m][13][0] = 0.49463677501721381374163260230644;
613 % $$$ G[m][13][1] = 0.49463677501721381374163260230644;
614 % $$$ G[m][14][0] = 0.49463677501721381374163260230644;
615 % $$$ G[m][14][1] = 0.01072644996557237251673479538713;
616 % $$$ G[m][15][0] = 0.01072644996557237251673479538713;
617 % $$$ G[m][15][1] = 0.49463677501721381374163260230644;
618 % $$$ G[m][16][0] = 0.20734338261451133345293402411297;
619 % $$$ G[m][16][1] = 0.20734338261451133345293402411297;
620 % $$$ G[m][17][0] = 0.20734338261451133345293402411297;
621 % $$$ G[m][17][1] = 0.58531323477097733309413195177407;
622 % $$$ G[m][18][0] = 0.58531323477097733309413195177407;
623 % $$$ G[m][18][1] = 0.20734338261451133345293402411297;
624 % $$$ G[m][19][0] = 0.43890780570049209506106538163613;
625 % $$$ G[m][19][1] = 0.43890780570049209506106538163613;
626 % $$$ G[m][20][0] = 0.43890780570049209506106538163613;
627 % $$$ G[m][20][1] = 0.12218438859901580987786923672775;
628 % $$$ G[m][21][0] = 0.12218438859901580987786923672775;
629 % $$$ G[m][21][1] = 0.43890780570049209506106538163613;
630 % $$$ G[m][22][0] = 0.67793765488259040154212614118875;
631 % $$$ G[m][22][1] = 0.044841677589130443309052391468801;
632 % $$$ G[m][23][0] = 0.67793765488259040154212614118875;
633 % $$$ G[m][23][1] = 0.27722066752827915514882146734245;
634 % $$$ G[m][24][0] = 0.044841677589130443309052391468801;
635 % $$$ G[m][24][1] = 0.67793765488259040154212614118875;
636 % $$$ G[m][25][0] = 0.044841677589130443309052391468801;
637 % $$$ G[m][25][1] = 0.27722066752827915514882146734245;
638 % $$$ G[m][26][0] = 0.27722066752827915514882146734245;
639 % $$$ G[m][26][1] = 0.67793765488259040154212614118875;
640 % $$$ G[m][27][0] = 0.27722066752827915514882146734245;
641 % $$$ G[m][27][1] = 0.044841677589130443309052391468801;
642 % $$$
643 % $$$ W[m][0] = 0.5 * 0.0073623837833005542642588950473806;
644 % $$$ W[m][1] = 0.5 * 0.0073623837833005542642588950473806;
645 % $$$ W[m][2] = 0.5 * 0.0073623837833005542642588950473806;
646 % $$$
647 % $$$ W[m][3] = 0.5 * 0.0073623837833005542642588950473806;
648 % $$$ W[m][4] = 0.5 * 0.0073623837833005542642588950473806;
649 % $$$ W[m][5] = 0.5 * 0.0073623837833005542642588950473806;
650 % $$$
651 % $$$ W[m][6] = 0.5 * 0.087977301162232238798093169321456;
652 % $$$ W[m][7] = 0.5 * 0.0087443115537360230495164287998252;
653 % $$$ W[m][8] = 0.5 * 0.0087443115537360230495164287998252;
654 % $$$ W[m][9] = 0.5 * 0.0087443115537360230495164287998252;
655 % $$$
656 % $$$ W[m][10] = 0.5 * 0.038081571993934937515024339435614;
657 % $$$ W[m][11] = 0.5 * 0.038081571993934937515024339435614;
658 % $$$ W[m][12] = 0.5 * 0.038081571993934937515024339435614;
659 % $$$
660 % $$$ W[m][13] = 0.5 * 0.018855448056131292058476782591115;
661 % $$$ W[m][14] = 0.5 * 0.018855448056131292058476782591115;
662 % $$$ W[m][15] = 0.5 * 0.018855448056131292058476782591115;
663 % $$$
664 % $$$ W[m][16] = 0.5 * 0.072159697544739526124029988586463;
665 % $$$ W[m][17] = 0.5 * 0.072159697544739526124029988586463;
666 % $$$ W[m][18] = 0.5 * 0.072159697544739526124029988586463;
667 % $$$
668 % $$$ W[m][19] = 0.5 * 0.069329138705535899841765650903814;
669 % $$$ W[m][20] = 0.5 * 0.069329138705535899841765650903814;
670 % $$$ W[m][21] = 0.5 * 0.069329138705535899841765650903814;
671 % $$$
672 % $$$ W[m][22] = 0.5 * 0.041056315429288566641652314907294;
673 % $$$ W[m][23] = 0.5 * 0.041056315429288566641652314907294;
674 % $$$ W[m][24] = 0.5 * 0.041056315429288566641652314907294;
675 % $$$
676 % $$$ W[m][25] = 0.5 * 0.041056315429288566641652314907294;
677 % $$$ W[m][26] = 0.5 * 0.041056315429288566641652314907294;
678 % $$$ W[m][27] = 0.5 * 0.041056315429288566641652314907294;
679 % $$$ O[m] = 11;
680 % $$$
681 % $$$ // polynomial degree 12
682 % $$$ /* 33 inner Gauss points, positive weights */
683 % $$$ m=33;
684 % $$$ G[m][0][0] = 0.02356522045239;
685 % $$$ G[m][0][1] = 0.488217389773805;
686 % $$$ G[m][1][0] = 0.488217389773805;
687 % $$$ G[m][1][1] = 0.02356522045239;
688 % $$$ G[m][2][0] = 0.488217389773805;
689 % $$$ G[m][2][1] = 0.488217389773805;
690 % $$$ G[m][3][0] = 0.43972439229446;
691 % $$$ G[m][3][1] = 0.43972439229446;
692 % $$$ G[m][4][0] = 0.43972439229446;
693 % $$$ G[m][4][1] = 0.120551215411079;
694 % $$$ G[m][5][0] = 0.120551215411079;
695 % $$$ G[m][5][1] = 0.43972439229446;
696 % $$$ G[m][6][0] = 0.271210385012116;
697 % $$$ G[m][6][1] = 0.271210385012116;
698 % $$$ G[m][7][0] = 0.271210385012116;
699 % $$$ G[m][7][1] = 0.457579229975768;
700 % $$$ G[m][8][0] = 0.457579229975768;
701 % $$$ G[m][8][1] = 0.271210385012116;
702 % $$$ G[m][9][0] = 0.127576145541586;
703 % $$$ G[m][9][1] = 0.127576145541586;
704 % $$$ G[m][10][0] = 0.127576145541586;
705 % $$$ G[m][10][1] = 0.7448477089168279;
706 % $$$ G[m][11][0] = 0.7448477089168279;
707 % $$$ G[m][11][1] = 0.127576145541586;
708 % $$$ G[m][12][0] = 0.02131735045321;
709 % $$$ G[m][12][1] = 0.02131735045321;
710 % $$$ G[m][13][0] = 0.02131735045321;
711 % $$$ G[m][13][1] = 0.9573652990935799;
712 % $$$ G[m][14][0] = 0.9573652990935799;
713 % $$$ G[m][14][1] = 0.02131735045321;
714 % $$$ G[m][15][0] = 0.115343494534698;
715 % $$$ G[m][15][1] = 0.275713269685514;
716 % $$$ G[m][16][0] = 0.115343494534698;
717 % $$$ G[m][16][1] = 0.6089432357797879;
718 % $$$ G[m][17][0] = 0.275713269685514;
719 % $$$ G[m][17][1] = 0.115343494534698;
720 % $$$ G[m][18][0] = 0.275713269685514;
721 % $$$ G[m][18][1] = 0.6089432357797879;
722 % $$$ G[m][19][0] = 0.6089432357797879;
723 % $$$ G[m][19][1] = 0.115343494534698;
724 % $$$ G[m][20][0] = 0.6089432357797879;
725 % $$$ G[m][20][1] = 0.275713269685514;
726 % $$$ G[m][21][0] = 0.022838332222257;
727 % $$$ G[m][21][1] = 0.28132558098994;
728 % $$$ G[m][22][0] = 0.022838332222257;
729 % $$$ G[m][22][1] = 0.6958360867878031;
730 % $$$ G[m][23][0] = 0.28132558098994;
731 % $$$ G[m][23][1] = 0.022838332222257;
732 % $$$ G[m][24][0] = 0.28132558098994;
733 % $$$ G[m][24][1] = 0.6958360867878031;
734 % $$$ G[m][25][0] = 0.6958360867878031;
735 % $$$ G[m][25][1] = 0.022838332222257;
736 % $$$ G[m][26][0] = 0.6958360867878031;
737 % $$$ G[m][26][1] = 0.28132558098994;
738 % $$$ G[m][27][0] = 0.02573405054833;
739 % $$$ G[m][27][1] = 0.116251915907597;
740 % $$$ G[m][28][0] = 0.02573405054833;
741 % $$$ G[m][28][1] = 0.858014033544073;
742 % $$$ G[m][29][0] = 0.116251915907597;
743 % $$$ G[m][29][1] = 0.02573405054833;
744 % $$$ G[m][30][0] = 0.116251915907597;
745 % $$$ G[m][30][1] = 0.858014033544073;
746 % $$$ G[m][31][0]= 0.858014033544073;
747 % $$$ G[m][31][1] =0.02573405054833;
748 % $$$ G[m][32][0] =0.858014033544073;
749 % $$$ G[m][32][1]= 0.116251915907597;
750 % $$$
751 % $$$ W[m][0] = 0.5 * 0.025731066440455;
752 % $$$ W[m][1] = 0.5 * 0.025731066440455;
753 % $$$ W[m][2] = 0.5 * 0.025731066440455;
754 % $$$ W[m][3] = 0.5 * 0.043692544538038;
755 % $$$ W[m][4] = 0.5 * 0.043692544538038;
756 % $$$ W[m][5] = 0.5 * 0.043692544538038;
757 % $$$ W[m][6] = 0.5 * 0.062858224217885;
758 % $$$ W[m][7] = 0.5 * 0.062858224217885;
759 % $$$ W[m][8] = 0.5 * 0.062858224217885;
760 % $$$ W[m][9] = 0.5 * 0.034796112930709;
761 % $$$ W[m][10] = 0.5 * 0.034796112930709;
762 % $$$ W[m][11] = 0.5 * 0.034796112930709;
763 % $$$ W[m][12] = 0.5 * 0.006166261051559;
764 % $$$ W[m][13] = 0.5 * 0.006166261051559;
765 % $$$ W[m][14] = 0.5 * 0.006166261051559;
766 % $$$ W[m][15] = 0.5 * 0.040371557766381;
767 % $$$ W[m][16] = 0.5 * 0.040371557766381;
768 % $$$ W[m][17] = 0.5 * 0.040371557766381;
769 % $$$ W[m][18] = 0.5 * 0.040371557766381;
770 % $$$ W[m][19] = 0.5 * 0.040371557766381;
771 % $$$ W[m][20] = 0.5 * 0.040371557766381;
772 % $$$ W[m][21] = 0.5 * 0.022356773202303;
773 % $$$ W[m][22] = 0.5 * 0.022356773202303;
774 % $$$ W[m][23] = 0.5 * 0.022356773202303;
775 % $$$ W[m][24] = 0.5 * 0.022356773202303;
776 % $$$ W[m][25] = 0.5 * 0.022356773202303;
777 % $$$ W[m][26] = 0.5 * 0.022356773202303;
778 % $$$ W[m][27] = 0.5 * 0.017316231108659;
779 % $$$ W[m][28] = 0.5 * 0.017316231108659;
780 % $$$ W[m][29] = 0.5 * 0.017316231108659;
781 % $$$ W[m][30] = 0.5 * 0.017316231108659;
782 % $$$ W[m][31] = 0.5 * 0.017316231108659;
783 % $$$ W[m][32] = 0.5 * 0.017316231108659;
784 % $$$ O[m] = 12;
785 % $$$ }
786 % $$$
787 % $$$ FieldVector<double, 2> point(int m, int i)
788 % $$$ {
789 % $$$ return G[m][i];
790 % $$$ }
791 % $$$
792 % $$$ double weight (int m, int i)
793 % $$$ {
794 % $$$ return W[m][i];
795 % $$$ }
796 % $$$
797 % $$$ int order (int m)
798 % $$$ {
799 % $$$ return O[m];
800 % $$$ }
801 % $$$
802 % $$$ private:
803 % $$$ FieldVector<double, 2> G[MAXP+1][MAXP];
804 % $$$
805 % $$$ double W[MAXP+1][MAXP]; // weights associated with points
806 % $$$ int O[MAXP+1]; // order of the rule
807 % $$$ };
808 % $$$
809 % $$$ template<typename ct>
810 % $$$ SimplexQuadratureRule<ct,2>.SimplexQuadratureRule(int p) : QuadratureRule<ct,2>(GeometryType(GeometryType.simplex, 2))
811 % $$$ {
812 % $$$ int m;
813 % $$$ if (p>highest_order)
814 % $$$ DUNE_THROW(QuadratureOrderOutOfRange,
815 % $$$ "QuadratureRule for order " << p << " and GeometryType "
816 % $$$ << this->type() << " not available");
817 % $$$
818 % $$$ if (p>SimplexQuadraturePoints<2>.highest_order)
819 % $$$ {
820 % $$$ // Define the quadrature rules...
821 % $$$ QuadratureRule<ct,1> gauss1D =
822 % $$$ QuadratureRules<ct,1>.rule(GeometryType.cube, p, QuadratureType.Gauss);
823 % $$$ QuadratureRule<ct,1> jac1D =
824 % $$$ QuadratureRules<ct,1>.rule(GeometryType.cube, p, QuadratureType.Jacobian_1_0);
825 % $$$
826 % $$$ // Compute the conical product
827 % $$$ for (typename QuadratureRule<ct,1>.const_iterator
828 % $$$ gp=gauss1D.begin(); gp!=gauss1D.end(); ++gp)
829 % $$$ {
830 % $$$ for (typename QuadratureRule<ct,1>.const_iterator
831 % $$$ jp=jac1D.begin(); jp!=jac1D.end(); ++jp)
832 % $$$ {
833 % $$$ // compute coordinates and weight
834 % $$$ double weight = 1.0;
835 % $$$ FieldVector<ct,2> local(0.0);
836 % $$$ local[0] = jp->position()[0];
837 % $$$ local[1] = gp->position()[0] * (1. - jp->position()[0]);
838 % $$$ weight = gp->weight() * jp->weight() * (1. - jp->position()[0]);
839 % $$$ // put in container
840 % $$$ push_back(QuadraturePoint<ct,d>(local,weight));
841 % $$$ }
842 % $$$ }
843 % $$$ this->delivered_order = std.min(gauss1D.order(), jac1D.order());
844 % $$$ return;
845 % $$$ }
846 % $$$
847 % $$$ switch(p)
848 % $$$ {
849 % $$$ case 0: // to be verified
850 % $$$ m=1; // to be verified
851 % $$$ break;
852 % $$$ case 1:
853 % $$$ m=1;
854 % $$$ break;
855 % $$$ case 2:
856 % $$$ m=3;
857 % $$$ break;
858 % $$$ case 3:
859 % $$$ m=4;
860 % $$$ break;
861 % $$$ case 4:
862 % $$$ m=6;
863 % $$$ break;
864 % $$$ case 5:
865 % $$$ m=7;
866 % $$$ break;
867 % $$$ case 6:
868 % $$$ m=12;
869 % $$$ break;
870 % $$$ case 7:
871 % $$$ m=12;
872 % $$$ break;
873 % $$$ case 8:
874 % $$$ m=16;
875 % $$$ break;
876 % $$$ case 9:
877 % $$$ m=19;
878 % $$$ break;
879 % $$$ case 10:
880 % $$$ m=25;
881 % $$$ break;
882 % $$$ case 11:
883 % $$$ m=28;
884 % $$$ break;
885 % $$$ case 12:
886 % $$$ m=33;
887 % $$$ break;
888 % $$$ default: m=33;
889 % $$$ }
890 % $$$ this->delivered_order = SimplexQuadraturePointsSingleton<2>.sqp.order(m);
891 % $$$ FieldVector<ct, d> local;
892 % $$$ double weight;
893 % $$$ for(int i=0;i<m;++i)
894 % $$$ {
895 % $$$ for(int k=0;k<d;++k)
896 % $$$ local[k]=SimplexQuadraturePointsSingleton<2>.sqp.point(m,i)[k];
897 % $$$ weight=SimplexQuadraturePointsSingleton<2>.sqp.weight(m,i);
898 % $$$ // put in container
899 % $$$ push_back(QuadraturePoint<ct,d>(local,weight));
900 % $$$ }
901 % $$$ }
902 % $$$
903 % $$$
904 % $$$ template<>
905 % $$$ class SimplexQuadraturePoints<3>
906 % $$$ {
907 % $$$ public:
908 % $$$ enum { MAXP=15};
909 % $$$ enum { highest_order=5 };
910 % $$$
911 % $$$
912 % $$$ SimplexQuadraturePoints()
913 % $$$ {
914 % $$$ int m = 0;
915 % $$$ O[m] = 0;
916 % $$$
917 % $$$ // polynom degree 1
918 % $$$ m = 1;
919 % $$$ G[m][0][0] = 0.25;
920 % $$$ G[m][0][1] = 0.25;
921 % $$$ G[m][0][2] = 0.25;
922 % $$$
923 % $$$ W[m][0] = 1.0/6.0;
924 % $$$ O[m] = 1;
925 % $$$
926 % $$$ // polynom degree 2
927 % $$$ // symmetric
928 % $$$ m = 4;
929 % $$$ static const double m_4_a = 0.585410196624968500;
930 % $$$ static const double m_4_b = 0.138196601125010500;
931 % $$$ G[m][0] = m_4_b;
932 % $$$ G[m][1] = m_4_b;
933 % $$$ G[m][2] = m_4_b;
934 % $$$ G[m][3] = m_4_b;
935 % $$$ G[m][0][0] = m_4_a;
936 % $$$ G[m][1][1] = m_4_a;
937 % $$$ G[m][2][2] = m_4_a;
938 % $$$
939 % $$$ W[m][0] = 1.0/4.0/6.0;
940 % $$$ W[m][1] = 1.0/4.0/6.0;
941 % $$$ W[m][2] = 1.0/4.0/6.0;
942 % $$$ W[m][3] = 1.0/4.0/6.0;
943 % $$$ O[m] = 2;
944 % $$$
945 % $$$ // polynom degree 3
946 % $$$ // symmetric
947 % $$$ m = 8;
948 % $$$ G[m][0][0] = 0.0;
949 % $$$ G[m][0][1] = 0.0;
950 % $$$ G[m][0][2] = 0.0;
951 % $$$ G[m][1][0] = 1.0;
952 % $$$ G[m][1][1] = 0.0;
953 % $$$ G[m][1][2] = 0.0;
954 % $$$ G[m][2][0] = 0.0;
955 % $$$ G[m][2][1] = 1.0;
956 % $$$ G[m][2][2] = 0.0;
957 % $$$ G[m][3][0] = 0.0;
958 % $$$ G[m][3][1] = 0.0;
959 % $$$ G[m][3][2] = 1.0;
960 % $$$ G[m][4][0] = 1.0/3.0;
961 % $$$ G[m][4][1] = 1.0/3.0;
962 % $$$ G[m][4][2] = 0.0;
963 % $$$ G[m][5][0] = 1.0/3.0;
964 % $$$ G[m][5][1] = 0.0;
965 % $$$ G[m][5][2] = 1.0/3.0;
966 % $$$ G[m][6][0] = 0.0;
967 % $$$ G[m][6][1] = 1.0/3.0;
968 % $$$ G[m][6][2] = 1.0/3.0;
969 % $$$ G[m][7][0] = 1.0/3.0;
970 % $$$ G[m][7][1] = 1.0/3.0;
971 % $$$ G[m][7][2] = 1.0/3.0;
972 % $$$ W[m][0] = 0.025/6.0;
973 % $$$ W[m][1] = 0.025/6.0;
974 % $$$ W[m][2] = 0.025/6.0;
975 % $$$ W[m][3] = 0.025/6.0;
976 % $$$ W[m][4] = 0.225/6.0;
977 % $$$ W[m][5] = 0.225/6.0;
978 % $$$ W[m][6] = 0.225/6.0;
979 % $$$ W[m][7] = 0.225/6.0;
980 % $$$ O[m] = 3;
981 % $$$
982 % $$$
983 % $$$ // polynomial degree 5
984 % $$$ // symmetric points
985 % $$$ static const double s_1=0.09197107805272303279; /* (7 - sqrt(15) ) / 34 */
986 % $$$ static const double s_2=0.31979362782962990839; /* (7 + sqrt(15) ) / 34 */
987 % $$$ static const double t_1=0.72408676584183090164; /* (13 + 3*sqrt(15) ) / 34 */
988 % $$$ static const double t_2=0.04061911651111027484; /* (13 - 3*sqrt(15) ) / 34 */
989 % $$$ static const double u =0.05635083268962915574; /* (10 - 2*sqrt(15) ) / 40 */
990 % $$$ static const double v =0.44364916731037084426; /* (10 + 2*sqrt(15) ) / 40 */
991 % $$$ static const double A =0.019753086419753086420; /* 16 / 135 / vol */
992 % $$$ static const double B_1=0.011989513963169770001; /* (2665 + 14*sqrt(15) ) / 37800 / vol */
993 % $$$ static const double B_2=0.011511367871045397547; /* (2665 - 14*sqrt(15) ) / 37800 / vol */
994 % $$$ static const double C =0.0088183421516754850088; /* 20 / 378 / vol */
995 % $$$
996 % $$$ m=15;
997 % $$$ G[m][0][0] = 0.25;
998 % $$$ G[m][0][1] = 0.25;
999 % $$$ G[m][0][2] = 0.25;
1000 % $$$ G[m][1][0] = s_1;
1001 % $$$ G[m][1][1] = s_1;
1002 % $$$ G[m][1][2] = s_1;
1003 % $$$ G[m][2][0] = t_1;
1004 % $$$ G[m][2][1] = s_1;
1005 % $$$ G[m][2][2] = s_1;
1006 % $$$ G[m][3][0] = s_1;
1007 % $$$ G[m][3][1] = t_1;
1008 % $$$ G[m][3][2] = s_1;
1009 % $$$ G[m][4][0] = s_1;
1010 % $$$ G[m][4][1] = s_1;
1011 % $$$ G[m][4][2] = t_1;
1012 % $$$ G[m][5][0] = s_2;
1013 % $$$ G[m][5][1] = s_2;
1014 % $$$ G[m][5][2] = s_2;
1015 % $$$ G[m][6][0] = t_2;
1016 % $$$ G[m][6][1] = s_2;
1017 % $$$ G[m][6][2] = s_2;
1018 % $$$ G[m][7][0] = s_2;
1019 % $$$ G[m][7][1] = t_2;
1020 % $$$ G[m][7][2] = s_2;
1021 % $$$ G[m][8][0] = s_2;
1022 % $$$ G[m][8][1] = s_2;
1023 % $$$ G[m][8][2] = t_2;
1024 % $$$ G[m][9][0] = v;
1025 % $$$ G[m][9][1] = u;
1026 % $$$ G[m][9][2] = u;
1027 % $$$ G[m][10][0] = u;
1028 % $$$ G[m][10][1] = v;
1029 % $$$ G[m][10][2] = u;
1030 % $$$ G[m][11][0] = u;
1031 % $$$ G[m][11][1] = u;
1032 % $$$ G[m][11][2] = v;
1033 % $$$ G[m][12][0] = v;
1034 % $$$ G[m][12][1] = v;
1035 % $$$ G[m][12][2] = u;
1036 % $$$ G[m][13][0] = v;
1037 % $$$ G[m][13][1] = u;
1038 % $$$ G[m][13][2] = v;
1039 % $$$ G[m][14][0] = u;
1040 % $$$ G[m][14][1] = v;
1041 % $$$ G[m][14][2] = v;
1042 % $$$
1043 % $$$ W[m][0] = A;
1044 % $$$ W[m][1] = B_1;
1045 % $$$ W[m][2] = B_1;
1046 % $$$ W[m][3] = B_1;
1047 % $$$ W[m][4] = B_1;
1048 % $$$ W[m][5] = B_2;
1049 % $$$ W[m][6] = B_2;
1050 % $$$ W[m][7] = B_2;
1051 % $$$ W[m][8] = B_2;
1052 % $$$ W[m][9] = C;
1053 % $$$ W[m][10] = C;
1054 % $$$ W[m][11] = C;
1055 % $$$ W[m][12] = C;
1056 % $$$ W[m][13] = C;
1057 % $$$ W[m][14] = C;
1058 % $$$ O[m] = 5;
1059 % $$$
1060 % $$$ }
1061 % $$$
1062 % $$$ FieldVector<double, 3> point(int m, int i)
1063 % $$$ {
1064 % $$$ return G[m][i];
1065 % $$$ }
1066 % $$$
1067 % $$$ double weight (int m, int i)
1068 % $$$ {
1069 % $$$ return W[m][i];
1070 % $$$ }
1071 % $$$
1072 % $$$ int order (int m)
1073 % $$$ {
1074 % $$$ return O[m];
1075 % $$$ }
1076 % $$$
1077 % $$$ private:
1078 % $$$ FieldVector<double, 3> G[MAXP+1][MAXP];
1079 % $$$ double W[MAXP+1][MAXP]; // weights associated with points
1080 % $$$ int O[MAXP+1]; // order of the rule
1081 % $$$ };
1082 % $$$
1083 % $$$ template<typename ct>
1084 % $$$ SimplexQuadratureRule<ct,3>.SimplexQuadratureRule(int p) : QuadratureRule<ct,3>(GeometryType(GeometryType.simplex, 3))
1085 % $$$ {
1086 % $$$ int m;
1087 % $$$ if (p>highest_order)
1088 % $$$ DUNE_THROW(QuadratureOrderOutOfRange,
1089 % $$$ "QuadratureRule for order " << p << " and GeometryType "
1090 % $$$ << this->type() << " not available");
1091 % $$$
1092 % $$$ // quadrature rules >= 3 are known to work.
1093 % $$$ if (p>SimplexQuadraturePoints<3>.highest_order)
1094 % $$$ {
1095 % $$$ // Define the quadrature rules...
1096 % $$$ QuadratureRule<ct,1> gauss1D =
1097 % $$$ QuadratureRules<ct,1>.rule(GeometryType.cube, p, QuadratureType.Gauss);
1098 % $$$ QuadratureRule<ct,1> jacA1D =
1099 % $$$ QuadratureRules<ct,1>.rule(GeometryType.cube, p, QuadratureType.Jacobian_1_0);
1100 % $$$ QuadratureRule<ct,1> jacB1D =
1101 % $$$ QuadratureRules<ct,1>.rule(GeometryType.cube, p, QuadratureType.Jacobian_2_0);
1102 % $$$
1103 % $$$ // Compute the tensor product
1104 % $$$
1105 % $$$ // All rules should be of the same order
1106 % $$$ assert(gauss1D.size() == jacA1D.size());
1107 % $$$ assert(gauss1D.size() == jacB1D.size());
1108 % $$$
1109 % $$$ // Compute the conical product
1110 % $$$ for (typename QuadratureRule<ct,1>.const_iterator
1111 % $$$ gp=gauss1D.begin(); gp!=gauss1D.end(); ++gp)
1112 % $$$ {
1113 % $$$ for (typename QuadratureRule<ct,1>.const_iterator
1114 % $$$ j1p=jacA1D.begin(); j1p!=jacA1D.end(); ++j1p)
1115 % $$$ {
1116 % $$$ for (typename QuadratureRule<ct,1>.const_iterator
1117 % $$$ j2p=jacB1D.begin(); j2p!=jacB1D.end(); ++j2p)
1118 % $$$ {
1119 % $$$ // compute coordinates and weight
1120 % $$$ double weight = 1.0;
1121 % $$$ FieldVector<ct, d> local;
1122 % $$$ local[0] = j2p->position()[0];
1123 % $$$ local[1] = j1p->position()[0] * (1.0-j2p->position()[0]);
1124 % $$$ local[2] = gp->position()[0] * (1.-j1p->position()[0]) * (1.0-j2p->position()[0]);
1125 % $$$ weight = (1.0-j2p->position()[0]) * (1.-j1p->position()[0]) * (1.0-j2p->position()[0])
1126 % $$$ * gp->weight() * j1p->weight() * j2p->weight();
1127 % $$$ // put in container
1128 % $$$ push_back(QuadraturePoint<ct,d>(local,weight));
1129 % $$$ }
1130 % $$$ }
1131 % $$$ }
1132 % $$$ this->delivered_order = std.min(gauss1D.order(), std.min(jacA1D.order(), jacB1D.order()));
1133 % $$$ return;
1134 % $$$ }
1135 % $$$
1136 % $$$ switch(p)
1137 % $$$ {
1138 % $$$ case 0: // to be verified
1139 % $$$ m=1; // to be verified
1140 % $$$ break;
1141 % $$$ case 1:
1142 % $$$ m=1;
1143 % $$$ break;
1144 % $$$ case 2:
1145 % $$$ m=4;
1146 % $$$ break;
1147 % $$$ case 3:
1148 % $$$ m=8;
1149 % $$$ break;
1150 % $$$ case 4:
1151 % $$$ case 5:
1152 % $$$ m=15;
1153 % $$$ break;
1154 % $$$ default: m=15;
1155 % $$$ }
1156 % $$$ this->delivered_order = SimplexQuadraturePointsSingleton<3>.sqp.order(m);
1157 % $$$ FieldVector<ct, d> local;
1158 % $$$ double weight;
1159 % $$$ for(int i=0;i<m;++i)
1160 % $$$ {
1161 % $$$ for(int k=0;k<d;++k)
1162 % $$$ local[k]=SimplexQuadraturePointsSingleton<3>.sqp.point(m,i)[k];
1163 % $$$ weight=SimplexQuadraturePointsSingleton<3>.sqp.weight(m,i);
1164 % $$$ // put in container
1165 % $$$ push_back(QuadraturePoint<ct,d>(local,weight));
1166 % $$$
1167 % $$$ }
1168 % $$$
1169 % $$$ }
1170 % $$$
1171 % $$$
1172 % $$$ SimplexQuadraturePoints<2> SimplexQuadraturePointsSingleton<2>.sqp;
1173 % $$$
1174 % $$$
1175 % $$$ SimplexQuadraturePoints<3> SimplexQuadraturePointsSingleton<3>.sqp;
1176 % $$$
1177 % $$$
1178 % $$$ PrismQuadraturePoints<3> PrismQuadraturePointsSingleton<3>.prqp;
1179 % $$$
1180 % $$$
1181 % $$$ PyramidQuadraturePoints PyramidQuadraturePointsSingleton<3>.pyqp;
1182 % $$$
1183 % $$$ template SimplexQuadratureRule<float, 2>.SimplexQuadratureRule(int);
1184 % $$$ template SimplexQuadratureRule<double, 2>.SimplexQuadratureRule(int);
1185 % $$$ template SimplexQuadratureRule<float, 3>.SimplexQuadratureRule(int);
1186 % $$$ template SimplexQuadratureRule<double, 3>.SimplexQuadratureRule(int);
1187 % $$$
1188 % $$$ } // namespace
1189 %| \docupdate