PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
Quadrature_Gauss1D.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __Quadrature_Gauss1D_H
13#define __Quadrature_Gauss1D_H
14
15#include "QuadratureData.hpp"
16
17namespace Gedim
18{
19namespace Quadrature
20{
23{
24 public:
25 static QuadratureData FillPointsAndWeights(const unsigned int &order)
26 {
28 auto &points = quadrature_data.Points;
29 auto &weights = quadrature_data.Weights;
30
31 switch (order)
32 {
33 case 0:
34 case 1: {
35 points.setZero(3, 1);
36 points(0, 0) = 5.0000000000000000e-01;
37 weights.resize(1);
38 weights[0] = 1.0000000000000000e+00;
39 }
40 break;
41 case 2:
42 case 3: {
43 points.setZero(3, 2);
44 points(0, 0) = 2.1132486540518713e-01;
45 points(0, 1) = 7.8867513459481287e-01;
46 weights.resize(2);
47 weights[0] = 5.0000000000000000e-01;
48 weights[1] = 5.0000000000000000e-01;
49 }
50 break;
51 case 4:
52 case 5: {
53 points.setZero(3, 3);
54 points(0, 0) = 1.1270166537925830e-01;
55 points(0, 1) = 5.0000000000000000e-01;
56 points(0, 2) = 8.8729833462074170e-01;
57 weights.resize(3);
58 weights[0] = 2.7777777777777779e-01;
59 weights[1] = 4.4444444444444442e-01;
60 weights[2] = 2.7777777777777779e-01;
61 }
62 break;
63 case 6:
64 case 7: {
65 points.setZero(3, 4);
66 points(0, 0) = 6.9431844202973714e-02;
67 points(0, 1) = 3.3000947820757187e-01;
68 points(0, 2) = 6.6999052179242813e-01;
69 points(0, 3) = 9.3056815579702623e-01;
70 weights.resize(4);
71 weights[0] = 1.7392742256872692e-01;
72 weights[1] = 3.2607257743127305e-01;
73 weights[2] = 3.2607257743127305e-01;
74 weights[3] = 1.7392742256872692e-01;
75 }
76 break;
77 case 8:
78 case 9: {
79 points.setZero(3, 5);
80 points(0, 0) = 4.6910077030668018e-02;
81 points(0, 1) = 2.3076534494715845e-01;
82 points(0, 2) = 5.0000000000000000e-01;
83 points(0, 3) = 7.6923465505284150e-01;
84 points(0, 4) = 9.5308992296933193e-01;
85 weights.resize(5);
86 weights[0] = 1.1846344252809454e-01;
87 weights[1] = 2.3931433524968324e-01;
88 weights[2] = 2.8444444444444444e-01;
89 weights[3] = 2.3931433524968324e-01;
90 weights[4] = 1.1846344252809454e-01;
91 }
92 break;
93 case 10:
94 case 11: {
95 points.setZero(3, 6);
96 points(0, 0) = 3.3765242898423975e-02;
97 points(0, 1) = 1.6939530676686776e-01;
98 points(0, 2) = 3.8069040695840156e-01;
99 points(0, 3) = 6.1930959304159849e-01;
100 points(0, 4) = 8.3060469323313224e-01;
101 points(0, 5) = 9.6623475710157603e-01;
102 weights.resize(6);
103 weights[0] = 8.5662246189585178e-02;
104 weights[1] = 1.8038078652406930e-01;
105 weights[2] = 2.3395696728634552e-01;
106 weights[3] = 2.3395696728634552e-01;
107 weights[4] = 1.8038078652406930e-01;
108 weights[5] = 8.5662246189585178e-02;
109 }
110 break;
111 case 12:
112 case 13: {
113 points.setZero(3, 7);
114 points(0, 0) = 2.5446043828620757e-02;
115 points(0, 1) = 1.2923440720030277e-01;
116 points(0, 2) = 2.9707742431130141e-01;
117 points(0, 3) = 5.0000000000000000e-01;
118 points(0, 4) = 7.0292257568869854e-01;
119 points(0, 5) = 8.7076559279969723e-01;
120 points(0, 6) = 9.7455395617137919e-01;
121 weights.resize(7);
122 weights[0] = 6.4742483084434851e-02;
123 weights[1] = 1.3985269574463832e-01;
124 weights[2] = 1.9091502525255946e-01;
125 weights[3] = 2.0897959183673470e-01;
126 weights[4] = 1.9091502525255946e-01;
127 weights[5] = 1.3985269574463832e-01;
128 weights[6] = 6.4742483084434851e-02;
129 }
130 break;
131 case 14:
132 case 15: {
133 points.setZero(3, 8);
134 points(0, 0) = 1.9855071751231912e-02;
135 points(0, 1) = 1.0166676129318664e-01;
136 points(0, 2) = 2.3723379504183550e-01;
137 points(0, 3) = 4.0828267875217511e-01;
138 points(0, 4) = 5.9171732124782495e-01;
139 points(0, 5) = 7.6276620495816450e-01;
140 points(0, 6) = 8.9833323870681336e-01;
141 points(0, 7) = 9.8014492824876809e-01;
142 weights.resize(8);
143 weights[0] = 5.0614268145188129e-02;
144 weights[1] = 1.1119051722668724e-01;
145 weights[2] = 1.5685332293894363e-01;
146 weights[3] = 1.8134189168918100e-01;
147 weights[4] = 1.8134189168918100e-01;
148 weights[5] = 1.5685332293894363e-01;
149 weights[6] = 1.1119051722668724e-01;
150 weights[7] = 5.0614268145188129e-02;
151 }
152 break;
153 case 16:
154 case 17: {
155 points.setZero(3, 9);
156 points(0, 0) = 1.5919880246186957e-02;
157 points(0, 1) = 8.1984446336682115e-02;
158 points(0, 2) = 1.9331428364970482e-01;
159 points(0, 3) = 3.3787328829809554e-01;
160 points(0, 4) = 5.0000000000000000e-01;
161 points(0, 5) = 6.6212671170190451e-01;
162 points(0, 6) = 8.0668571635029518e-01;
163 points(0, 7) = 9.1801555366331788e-01;
164 points(0, 8) = 9.8408011975381304e-01;
165 weights.resize(9);
166 weights[0] = 4.0637194180787206e-02;
167 weights[1] = 9.0324080347428698e-02;
168 weights[2] = 1.3030534820146772e-01;
169 weights[3] = 1.5617353852000143e-01;
170 weights[4] = 1.6511967750062989e-01;
171 weights[5] = 1.5617353852000143e-01;
172 weights[6] = 1.3030534820146772e-01;
173 weights[7] = 9.0324080347428698e-02;
174 weights[8] = 4.0637194180787206e-02;
175 }
176 break;
177 case 18:
178 case 19: {
179 points.setZero(3, 10);
180 points(0, 0) = 1.3046735741414128e-02;
181 points(0, 1) = 6.7468316655507732e-02;
182 points(0, 2) = 1.6029521585048778e-01;
183 points(0, 3) = 2.8330230293537639e-01;
184 points(0, 4) = 4.2556283050918442e-01;
185 points(0, 5) = 5.7443716949081558e-01;
186 points(0, 6) = 7.1669769706462361e-01;
187 points(0, 7) = 8.3970478414951222e-01;
188 points(0, 8) = 9.3253168334449232e-01;
189 points(0, 9) = 9.8695326425858587e-01;
190 weights.resize(10);
191 weights[0] = 3.3335672154344069e-02;
192 weights[1] = 7.4725674575290293e-02;
193 weights[2] = 1.0954318125799102e-01;
194 weights[3] = 1.3463335965499817e-01;
195 weights[4] = 1.4776211235737644e-01;
196 weights[5] = 1.4776211235737644e-01;
197 weights[6] = 1.3463335965499817e-01;
198 weights[7] = 1.0954318125799102e-01;
199 weights[8] = 7.4725674575290293e-02;
200 weights[9] = 3.3335672154344069e-02;
201 }
202 break;
203 case 20:
204 case 21: {
205 points.setZero(3, 11);
206 points(0, 0) = 1.0885670926971514e-02;
207 points(0, 1) = 5.6468700115952342e-02;
208 points(0, 2) = 1.3492399721297532e-01;
209 points(0, 3) = 2.4045193539659410e-01;
210 points(0, 4) = 3.6522842202382755e-01;
211 points(0, 5) = 5.0000000000000000e-01;
212 points(0, 6) = 6.3477157797617245e-01;
213 points(0, 7) = 7.5954806460340585e-01;
214 points(0, 8) = 8.6507600278702468e-01;
215 points(0, 9) = 9.4353129988404771e-01;
216 points(0, 10) = 9.8911432907302843e-01;
217 weights.resize(11);
218 weights[0] = 2.7834283558086832e-02;
219 weights[1] = 6.2790184732452306e-02;
220 weights[2] = 9.3145105463867131e-02;
221 weights[3] = 1.1659688229599524e-01;
222 weights[4] = 1.3140227225512333e-01;
223 weights[5] = 1.3646254338895031e-01;
224 weights[6] = 1.3140227225512333e-01;
225 weights[7] = 1.1659688229599524e-01;
226 weights[8] = 9.3145105463867131e-02;
227 weights[9] = 6.2790184732452306e-02;
228 weights[10] = 2.7834283558086832e-02;
229 }
230 break;
231 case 22:
232 case 23: {
233 points.setZero(3, 12);
234 points(0, 0) = 9.2196828766403782e-03;
235 points(0, 1) = 4.7941371814762546e-02;
236 points(0, 2) = 1.1504866290284765e-01;
237 points(0, 3) = 2.0634102285669126e-01;
238 points(0, 4) = 3.1608425050090994e-01;
239 points(0, 5) = 4.3738329574426554e-01;
240 points(0, 6) = 5.6261670425573440e-01;
241 points(0, 7) = 6.8391574949909006e-01;
242 points(0, 8) = 7.9365897714330869e-01;
243 points(0, 9) = 8.8495133709715235e-01;
244 points(0, 10) = 9.5205862818523745e-01;
245 points(0, 11) = 9.9078031712335957e-01;
246 weights.resize(12);
247 weights[0] = 2.3587668193255914e-02;
248 weights[1] = 5.3469662997659213e-02;
249 weights[2] = 8.0039164271673111e-02;
250 weights[3] = 1.0158371336153296e-01;
251 weights[4] = 1.1674626826917740e-01;
252 weights[5] = 1.2457352290670139e-01;
253 weights[6] = 1.2457352290670139e-01;
254 weights[7] = 1.1674626826917740e-01;
255 weights[8] = 1.0158371336153296e-01;
256 weights[9] = 8.0039164271673111e-02;
257 weights[10] = 5.3469662997659213e-02;
258 weights[11] = 2.3587668193255914e-02;
259 }
260 break;
261 case 24:
262 case 25: {
263 points.setZero(3, 13);
264 points(0, 0) = 7.9084726407059325e-03;
265 points(0, 1) = 4.1200800388511039e-02;
266 points(0, 2) = 9.9210954633345061e-02;
267 points(0, 3) = 1.7882533027982989e-01;
268 points(0, 4) = 2.7575362448177654e-01;
269 points(0, 5) = 3.8477084202243261e-01;
270 points(0, 6) = 5.0000000000000000e-01;
271 points(0, 7) = 6.1522915797756739e-01;
272 points(0, 8) = 7.2424637551822346e-01;
273 points(0, 9) = 8.2117466972017006e-01;
274 points(0, 10) = 9.0078904536665494e-01;
275 points(0, 11) = 9.5879919961148896e-01;
276 points(0, 12) = 9.9209152735929407e-01;
277 weights.resize(13);
278 weights[0] = 2.0242002382657939e-02;
279 weights[1] = 4.6060749918864226e-02;
280 weights[2] = 6.9436755109893625e-02;
281 weights[3] = 8.9072990380972869e-02;
282 weights[4] = 1.0390802376844425e-01;
283 weights[5] = 1.1314159013144862e-01;
284 weights[6] = 1.1627577661543695e-01;
285 weights[7] = 1.1314159013144862e-01;
286 weights[8] = 1.0390802376844425e-01;
287 weights[9] = 8.9072990380972869e-02;
288 weights[10] = 6.9436755109893625e-02;
289 weights[11] = 4.6060749918864226e-02;
290 weights[12] = 2.0242002382657939e-02;
291 }
292 break;
293 case 26:
294 case 27: {
295 points.setZero(3, 14);
296 points(0, 0) = 6.8580956515938429e-03;
297 points(0, 1) = 3.5782558168213241e-02;
298 points(0, 2) = 8.6399342465117490e-02;
299 points(0, 3) = 1.5635354759415726e-01;
300 points(0, 4) = 2.4237568182092295e-01;
301 points(0, 5) = 3.4044381553605513e-01;
302 points(0, 6) = 4.4597252564632817e-01;
303 points(0, 7) = 5.5402747435367183e-01;
304 points(0, 8) = 6.5955618446394482e-01;
305 points(0, 9) = 7.5762431817907705e-01;
306 points(0, 10) = 8.4364645240584268e-01;
307 points(0, 11) = 9.1360065753488251e-01;
308 points(0, 12) = 9.6421744183178681e-01;
309 points(0, 13) = 9.9314190434840621e-01;
310 weights.resize(14);
311 weights[0] = 1.7559730165875930e-02;
312 weights[1] = 4.0079043579880104e-02;
313 weights[2] = 6.0759285343951593e-02;
314 weights[3] = 7.8601583579096773e-02;
315 weights[4] = 9.2769198738968911e-02;
316 weights[5] = 1.0259923186064780e-01;
317 weights[6] = 1.0763192673157890e-01;
318 weights[7] = 1.0763192673157890e-01;
319 weights[8] = 1.0259923186064780e-01;
320 weights[9] = 9.2769198738968911e-02;
321 weights[10] = 7.8601583579096773e-02;
322 weights[11] = 6.0759285343951593e-02;
323 weights[12] = 4.0079043579880104e-02;
324 weights[13] = 1.7559730165875930e-02;
325 }
326 break;
327 case 28:
328 case 29: {
329 points.setZero(3, 15);
330 points(0, 0) = 6.0037409897573113e-03;
331 points(0, 1) = 3.1363303799647024e-02;
332 points(0, 2) = 7.5896708294786397e-02;
333 points(0, 3) = 1.3779113431991497e-01;
334 points(0, 4) = 2.1451391369573058e-01;
335 points(0, 5) = 3.0292432646121831e-01;
336 points(0, 6) = 3.9940295300128276e-01;
337 points(0, 7) = 5.0000000000000000e-01;
338 points(0, 8) = 6.0059704699871730e-01;
339 points(0, 9) = 6.9707567353878175e-01;
340 points(0, 10) = 7.8548608630426942e-01;
341 points(0, 11) = 8.6220886568008503e-01;
342 points(0, 12) = 9.2410329170521366e-01;
343 points(0, 13) = 9.6863669620035298e-01;
344 points(0, 14) = 9.9399625901024269e-01;
345 weights.resize(15);
346 weights[0] = 1.5376620998058635e-02;
347 weights[1] = 3.5183023744054062e-02;
348 weights[2] = 5.3579610233585970e-02;
349 weights[3] = 6.9785338963077162e-02;
350 weights[4] = 8.3134602908496960e-02;
351 weights[5] = 9.3080500007781106e-02;
352 weights[6] = 9.9215742663555789e-02;
353 weights[7] = 1.0128912096278064e-01;
354 weights[8] = 9.9215742663555789e-02;
355 weights[9] = 9.3080500007781106e-02;
356 weights[10] = 8.3134602908496960e-02;
357 weights[11] = 6.9785338963077162e-02;
358 weights[12] = 5.3579610233585970e-02;
359 weights[13] = 3.5183023744054062e-02;
360 weights[14] = 1.5376620998058635e-02;
361 }
362 break;
363 case 30:
364 case 31: {
365 points.setZero(3, 16);
366 points(0, 0) = 5.2995325041750307e-03;
367 points(0, 1) = 2.7712488463383700e-02;
368 points(0, 2) = 6.7184398806084122e-02;
369 points(0, 3) = 1.2229779582249850e-01;
370 points(0, 4) = 1.9106187779867811e-01;
371 points(0, 5) = 2.7099161117138632e-01;
372 points(0, 6) = 3.5919822461037054e-01;
373 points(0, 7) = 4.5249374508118129e-01;
374 points(0, 8) = 5.4750625491881877e-01;
375 points(0, 9) = 6.4080177538962946e-01;
376 points(0, 10) = 7.2900838882861363e-01;
377 points(0, 11) = 8.0893812220132189e-01;
378 points(0, 12) = 8.7770220417750155e-01;
379 points(0, 13) = 9.3281560119391593e-01;
380 points(0, 14) = 9.7228751153661630e-01;
381 points(0, 15) = 9.9470046749582497e-01;
382 weights.resize(16);
383 weights[0] = 1.3576229705877048e-02;
384 weights[1] = 3.1126761969323947e-02;
385 weights[2] = 4.7579255841246393e-02;
386 weights[3] = 6.2314485627766938e-02;
387 weights[4] = 7.4797994408288368e-02;
388 weights[5] = 8.4578259697501268e-02;
389 weights[6] = 9.1301707522461792e-02;
390 weights[7] = 9.4725305227534251e-02;
391 weights[8] = 9.4725305227534251e-02;
392 weights[9] = 9.1301707522461792e-02;
393 weights[10] = 8.4578259697501268e-02;
394 weights[11] = 7.4797994408288368e-02;
395 weights[12] = 6.2314485627766938e-02;
396 weights[13] = 4.7579255841246393e-02;
397 weights[14] = 3.1126761969323947e-02;
398 weights[15] = 1.3576229705877048e-02;
399 }
400 break;
401 default:
402 throw std::runtime_error("Wrong initialization of 1D Gauss quadrature. Order not supported.");
403 }
404
405 return quadrature_data;
406 }
407};
408} // namespace Quadrature
409} // namespace Gedim
410
411#endif // __Quadrature_Gauss1D_H
Eigen column vector.
Definition Eigen_Array.hpp:23
Gauss quadrature rule for segments.
Definition Quadrature_Gauss1D.hpp:23
static QuadratureData FillPointsAndWeights(const unsigned int &order)
Definition Quadrature_Gauss1D.hpp:25
Definition Eigen_Array.cpp:22
Definition QuadratureData.hpp:22