Line | Branch | Exec | Source |
---|---|---|---|
1 | // This file is part of Bembel, the higher order C++ boundary element library. | ||
2 | // | ||
3 | // Copyright (C) 2022 see <http://www.bembel.eu> | ||
4 | // | ||
5 | // It was written as part of a cooperation of J. Doelz, H. Harbrecht, S. Kurz, | ||
6 | // M. Multerer, S. Schoeps, and F. Wolf at Technische Universitaet Darmstadt, | ||
7 | // Universitaet Basel, and Universita della Svizzera italiana, Lugano. This | ||
8 | // source code is subject to the GNU General Public License version 3 and | ||
9 | // provided WITHOUT ANY WARRANTY, see <http://www.bembel.eu> for further | ||
10 | // information. | ||
11 | |||
12 | #ifndef BEMBEL_SRC_QUADRATURE_GAUSSLEGENDRERULE_HPP_ | ||
13 | #define BEMBEL_SRC_QUADRATURE_GAUSSLEGENDRERULE_HPP_ | ||
14 | |||
15 | namespace Bembel { | ||
16 | /** | ||
17 | * \ingroup Quadrature | ||
18 | * \brief Gauss Legendre quadrature rules. The first 20 are hard coded. | ||
19 | * Afterwards, the programmer in charge lost his interest and | ||
20 | * provided a method to compute arbitrary order Legendre rules | ||
21 | * by solving the corresponding eigenvalue problem. | ||
22 | * | ||
23 | * In addition, to make use of the bracket initializer, std::vector | ||
24 | * had to be used in the template specializations. However, this | ||
25 | * is taken care of by the quadrature struct. | ||
26 | **/ | ||
27 | template <unsigned int Order> | ||
28 | struct GaussLegendreRule { | ||
29 | 3800 | GaussLegendreRule() { | |
30 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | Eigen::MatrixXd A(Order, Order); |
31 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | A.setZero(); |
32 |
3/4✓ Branch 1 taken 66385 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 66385 times.
✓ Branch 4 taken 1901 times.
|
136530 | for (auto i = 1; i < Order; ++i) A(i, i - 1) = i / (sqrt(4. * i * i - 1)); |
33 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> es; |
34 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | es.compute(A); |
35 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | xi_.resize(Order); |
36 |
1/2✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
|
3800 | w_.resize(Order); |
37 |
2/2✓ Branch 0 taken 68286 times.
✓ Branch 1 taken 1901 times.
|
140330 | for (auto i = 0; i < Order; ++i) { |
38 |
1/2✓ Branch 2 taken 68286 times.
✗ Branch 3 not taken.
|
136530 | xi_[i] = 0.5 * (es.eigenvalues()(i) + 1); |
39 |
2/4✓ Branch 2 taken 68286 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 68286 times.
✗ Branch 7 not taken.
|
136530 | w_[i] = es.eigenvectors()(0, i) * es.eigenvectors()(0, i); |
40 | } | ||
41 | 3800 | } | |
42 | std::vector<double> xi_; | ||
43 | std::vector<double> w_; | ||
44 | }; | ||
45 | /** | ||
46 | * \brief Gauss Legendre Rule - Unused base case | ||
47 | */ | ||
48 | template <> | ||
49 | struct GaussLegendreRule<0> { | ||
50 | GaussLegendreRule() { | ||
51 | assert(false && "Order of GaussLegendre Quadrature has to be at least 1"); | ||
52 | } | ||
53 | }; | ||
54 | /** | ||
55 | * \brief Gauss Legendre Rule using 1 point. | ||
56 | */ | ||
57 | template <> | ||
58 | struct GaussLegendreRule<1> { | ||
59 | 76 | GaussLegendreRule() { | |
60 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | xi_ = {0.5}; |
61 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | w_ = {1.0}; |
62 | 76 | } | |
63 | std::vector<double> xi_; | ||
64 | std::vector<double> w_; | ||
65 | }; | ||
66 | /** | ||
67 | * \brief Gauss Legendre Rule using 2 point. | ||
68 | */ | ||
69 | template <> | ||
70 | struct GaussLegendreRule<2> { | ||
71 | 76 | GaussLegendreRule() { | |
72 | ✗ | xi_ = {0.2113248654051871177454256097490212721762, | |
73 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.7886751345948128822545743902509787278238}; |
74 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | w_ = {0.5, 0.5}; |
75 | 76 | } | |
76 | std::vector<double> xi_; | ||
77 | std::vector<double> w_; | ||
78 | }; | ||
79 | /** | ||
80 | * \brief Gauss Legendre Rule using 3 point. | ||
81 | */ | ||
82 | template <> | ||
83 | struct GaussLegendreRule<3> { | ||
84 | 76 | GaussLegendreRule() { | |
85 | ✗ | xi_ = {0.1127016653792583114820734600217600389167, 0.5, | |
86 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.8872983346207416885179265399782399610833}; |
87 | |||
88 | ✗ | w_ = {.2777777777777777777777777777777777777778, | |
89 | .4444444444444444444444444444444444444444, | ||
90 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | .2777777777777777777777777777777777777778}; |
91 | 76 | } | |
92 | std::vector<double> xi_; | ||
93 | std::vector<double> w_; | ||
94 | }; | ||
95 | /** | ||
96 | * \brief Gauss Legendre Rule using 4 point. | ||
97 | */ | ||
98 | template <> | ||
99 | struct GaussLegendreRule<4> { | ||
100 | 76 | GaussLegendreRule() { | |
101 | ✗ | xi_ = {0.06943184420297371238802675555359524745214, | |
102 | 0.3300094782075718675986671204483776563997, | ||
103 | 0.6699905217924281324013328795516223436003, | ||
104 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9305681557970262876119732444464047525479}; |
105 | |||
106 | ✗ | w_ = {.1739274225687269286865319746109997036177, | |
107 | .3260725774312730713134680253890002963823, | ||
108 | .3260725774312730713134680253890002963823, | ||
109 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | .1739274225687269286865319746109997036177}; |
110 | 76 | } | |
111 | std::vector<double> xi_; | ||
112 | std::vector<double> w_; | ||
113 | }; | ||
114 | /** | ||
115 | * \brief Gauss Legendre Rule using 5 point. | ||
116 | */ | ||
117 | template <> | ||
118 | struct GaussLegendreRule<5> { | ||
119 | 76 | GaussLegendreRule() { | |
120 | ✗ | xi_ = {0.04691007703066800360118656085030351743717, | |
121 | 0.2307653449471584544818427896498955975164, 0.5, | ||
122 | 0.7692346550528415455181572103501044024836, | ||
123 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9530899229693319963988134391496964825628}; |
124 | |||
125 | ✗ | w_ = {.1184634425280945437571320203599586813216, | |
126 | .2393143352496832340206457574178190964561, | ||
127 | .2844444444444444444444444444444444444444, | ||
128 | .2393143352496832340206457574178190964561, | ||
129 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | .1184634425280945437571320203599586813216}; |
130 | 76 | } | |
131 | std::vector<double> xi_; | ||
132 | std::vector<double> w_; | ||
133 | }; | ||
134 | /** | ||
135 | * \brief Gauss Legendre Rule using 6 point. | ||
136 | */ | ||
137 | template <> | ||
138 | struct GaussLegendreRule<6> { | ||
139 | 76 | GaussLegendreRule() { | |
140 | ✗ | xi_ = {0.03376524289842398609384922275300269543262, | |
141 | 0.1693953067668677431693002024900473264968, | ||
142 | 0.3806904069584015456847491391596440322907, | ||
143 | 0.6193095930415984543152508608403559677093, | ||
144 | 0.8306046932331322568306997975099526735032, | ||
145 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9662347571015760139061507772469973045674}; |
146 | |||
147 | ✗ | w_ = {.08566224618958517252014807108636644676341, | |
148 | .1803807865240693037849167569188580558308, | ||
149 | .2339569672863455236949351719947754974058, | ||
150 | .2339569672863455236949351719947754974058, | ||
151 | .1803807865240693037849167569188580558308, | ||
152 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | .08566224618958517252014807108636644676341}; |
153 | 76 | } | |
154 | std::vector<double> xi_; | ||
155 | std::vector<double> w_; | ||
156 | }; | ||
157 | /** | ||
158 | * \brief Gauss Legendre Rule using 7 point. | ||
159 | */ | ||
160 | template <> | ||
161 | struct GaussLegendreRule<7> { | ||
162 | 76 | GaussLegendreRule() { | |
163 | ✗ | xi_ = {0.02544604382862073773690515797607436879961, | |
164 | 0.1292344072003027800680676133596057964629, | ||
165 | 0.2970774243113014165466967939615192683263, | ||
166 | 0.5, | ||
167 | 0.7029225756886985834533032060384807316737, | ||
168 | 0.8707655927996972199319323866403942035371, | ||
169 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9745539561713792622630948420239256312004}; |
170 | |||
171 | ✗ | w_ = {0.06474248308443484663530571633954100916429, | |
172 | 0.1398526957446383339507338857118897912435, | ||
173 | 0.1909150252525594724751848877444875669392, | ||
174 | 0.2089795918367346938775510204081632653061, | ||
175 | 0.1909150252525594724751848877444875669392, | ||
176 | 0.1398526957446383339507338857118897912435, | ||
177 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.06474248308443484663530571633954100916429}; |
178 | 76 | } | |
179 | std::vector<double> xi_; | ||
180 | std::vector<double> w_; | ||
181 | }; | ||
182 | /** | ||
183 | * \brief Gauss Legendre Rule using 8 point. | ||
184 | */ | ||
185 | template <> | ||
186 | struct GaussLegendreRule<8> { | ||
187 | 76 | GaussLegendreRule() { | |
188 | ✗ | xi_ = {0.01985507175123188415821956571526350478588, | |
189 | 0.1016667612931866302042230317620847815814, | ||
190 | 0.237233795041835507091130475405376825479, | ||
191 | 0.4082826787521750975302619288199080096666, | ||
192 | 0.5917173212478249024697380711800919903334, | ||
193 | 0.762766204958164492908869524594623174521, | ||
194 | 0.8983332387068133697957769682379152184186, | ||
195 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9801449282487681158417804342847364952141}; |
196 | |||
197 | ✗ | w_ = {0.0506142681451881295762656771549810950577, | |
198 | 0.1111905172266872352721779972131204422151, | ||
199 | 0.1568533229389436436689811009933006566302, | ||
200 | 0.1813418916891809914825752246385978060971, | ||
201 | 0.1813418916891809914825752246385978060971, | ||
202 | 0.1568533229389436436689811009933006566302, | ||
203 | 0.1111905172266872352721779972131204422151, | ||
204 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.0506142681451881295762656771549810950577}; |
205 | 76 | } | |
206 | std::vector<double> xi_; | ||
207 | std::vector<double> w_; | ||
208 | }; | ||
209 | /** | ||
210 | * \brief Gauss Legendre Rule using 9 point. | ||
211 | */ | ||
212 | template <> | ||
213 | struct GaussLegendreRule<9> { | ||
214 | 76 | GaussLegendreRule() { | |
215 | ✗ | xi_ = {0.0159198802461869550822118985481635649753, | |
216 | 0.08198444633668210285028510596513256172795, | ||
217 | 0.1933142836497048013456489803292629076071, | ||
218 | 0.337873288298095535480730992678331695714, | ||
219 | 0.5, | ||
220 | 0.662126711701904464519269007321668304286, | ||
221 | 0.8066857163502951986543510196707370923929, | ||
222 | 0.9180155536633178971497148940348674382721, | ||
223 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9840801197538130449177881014518364350247}; |
224 | |||
225 | ✗ | w_ = {.04063719418078720598594607905526182533783, | |
226 | .09032408034742870202923601562145640475717, | ||
227 | .1303053482014677311593714347093164248859, | ||
228 | .1561735385200014200343152032922218327994, | ||
229 | .1651196775006298815822625346434870244394, | ||
230 | .1561735385200014200343152032922218327994, | ||
231 | .1303053482014677311593714347093164248859, | ||
232 | .09032408034742870202923601562145640475717, | ||
233 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | .04063719418078720598594607905526182533783}; |
234 | 76 | } | |
235 | std::vector<double> xi_; | ||
236 | std::vector<double> w_; | ||
237 | }; | ||
238 | /** | ||
239 | * \brief Gauss Legendre Rule using 10 point. | ||
240 | */ | ||
241 | template <> | ||
242 | struct GaussLegendreRule<10> { | ||
243 | 76 | GaussLegendreRule() { | |
244 | ✗ | xi_ = {0.01304673574141413996101799395777397328587, | |
245 | 0.06746831665550774463395165578825347573623, | ||
246 | 0.1602952158504877968828363174425632121154, | ||
247 | 0.2833023029353764046003670284171079189, | ||
248 | 0.4255628305091843945575869994351400076912, | ||
249 | 0.5744371694908156054424130005648599923088, | ||
250 | 0.7166976970646235953996329715828920811, | ||
251 | 0.8397047841495122031171636825574367878846, | ||
252 | 0.9325316833444922553660483442117465242638, | ||
253 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9869532642585858600389820060422260267141}; |
254 | |||
255 | ✗ | w_ = {0.03333567215434406879678440494666589642893, | |
256 | 0.07472567457529029657288816982884866620128, | ||
257 | 0.1095431812579910219977674671140815962294, | ||
258 | 0.1346333596549981775456134607847346764299, | ||
259 | 0.1477621123573764350869464973256691647105, | ||
260 | 0.1477621123573764350869464973256691647105, | ||
261 | 0.1346333596549981775456134607847346764299, | ||
262 | 0.1095431812579910219977674671140815962294, | ||
263 | 0.07472567457529029657288816982884866620128, | ||
264 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.03333567215434406879678440494666589642893}; |
265 | 76 | } | |
266 | std::vector<double> xi_; | ||
267 | std::vector<double> w_; | ||
268 | }; | ||
269 | /** | ||
270 | * \brief Gauss Legendre Rule using 11 point. | ||
271 | */ | ||
272 | template <> | ||
273 | struct GaussLegendreRule<11> { | ||
274 | 76 | GaussLegendreRule() { | |
275 | ✗ | xi_ = {0.01088567092697150359803099943857130461429, | |
276 | 0.05646870011595235046242111534803636668416, | ||
277 | 0.1349239972129753379532918739844232709752, | ||
278 | 0.2404519353965940920371371652706952227599, | ||
279 | 0.3652284220238275138342340072995692376602, | ||
280 | 0.5, | ||
281 | 0.6347715779761724861657659927004307623398, | ||
282 | 0.7595480646034059079628628347293047772401, | ||
283 | 0.8650760027870246620467081260155767290248, | ||
284 | 0.9435312998840476495375788846519636333158, | ||
285 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9891143290730284964019690005614286953857}; |
286 | |||
287 | ✗ | w_ = {0.02783428355808683324137686022127428936426, | |
288 | 0.06279018473245231231734714961197005009881, | ||
289 | 0.09314510546386712571304882071582794584564, | ||
290 | 0.1165968822959952399592618524215875697159, | ||
291 | 0.1314022722551233310903444349452545976864, | ||
292 | 0.136462543388950315357241764168171094578, | ||
293 | 0.1314022722551233310903444349452545976864, | ||
294 | 0.1165968822959952399592618524215875697159, | ||
295 | 0.09314510546386712571304882071582794584564, | ||
296 | 0.06279018473245231231734714961197005009881, | ||
297 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.02783428355808683324137686022127428936426}; |
298 | 76 | } | |
299 | std::vector<double> xi_; | ||
300 | std::vector<double> w_; | ||
301 | }; | ||
302 | /** | ||
303 | * \brief Gauss Legendre Rule using 12 point. | ||
304 | */ | ||
305 | template <> | ||
306 | struct GaussLegendreRule<12> { | ||
307 | 76 | GaussLegendreRule() { | |
308 | ✗ | xi_ = {0.009219682876640374654725454925359588519922, | |
309 | 0.0479413718147625716607670669404519037312, | ||
310 | 0.1150486629028476564815530833935909620075, | ||
311 | 0.2063410228566912763516487905297328598155, | ||
312 | 0.3160842505009099031236542316781412193718, | ||
313 | 0.4373832957442655422637793152680734350083, | ||
314 | 0.5626167042557344577362206847319265649917, | ||
315 | 0.6839157494990900968763457683218587806282, | ||
316 | 0.7936589771433087236483512094702671401845, | ||
317 | 0.8849513370971523435184469166064090379925, | ||
318 | 0.9520586281852374283392329330595480962688, | ||
319 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9907803171233596253452745450746404114801}; |
320 | |||
321 | ✗ | w_ = {0.02358766819325591359730798074250853015851, | |
322 | 0.05346966299765921548012735909699811210729, | ||
323 | 0.08003916427167311316732626477167953593601, | ||
324 | 0.1015837133615329608745322279048991882533, | ||
325 | 0.1167462682691774043804249494624390281297, | ||
326 | 0.1245735229067013925002812180214756054152, | ||
327 | 0.1245735229067013925002812180214756054152, | ||
328 | 0.1167462682691774043804249494624390281297, | ||
329 | 0.1015837133615329608745322279048991882533, | ||
330 | 0.08003916427167311316732626477167953593601, | ||
331 | 0.05346966299765921548012735909699811210729, | ||
332 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.02358766819325591359730798074250853015851}; |
333 | 76 | } | |
334 | std::vector<double> xi_; | ||
335 | std::vector<double> w_; | ||
336 | }; | ||
337 | /** | ||
338 | * \brief Gauss Legendre Rule using 13 point. | ||
339 | */ | ||
340 | template <> | ||
341 | struct GaussLegendreRule<13> { | ||
342 | 76 | GaussLegendreRule() { | |
343 | ✗ | xi_ = {0.007908472640705925263585275596445194467505, | |
344 | 0.04120080038851101739672608174964024380476, | ||
345 | 0.09921095463334504360289675520857005484719, | ||
346 | 0.1788253302798298896780076965022421749642, | ||
347 | 0.275753624481776573561043573936180066099, | ||
348 | 0.3847708420224326029672359394510055823942, | ||
349 | 0.5, | ||
350 | 0.6152291579775673970327640605489944176058, | ||
351 | 0.724246375518223426438956426063819933901, | ||
352 | 0.8211746697201701103219923034977578250358, | ||
353 | 0.9007890453666549563971032447914299451528, | ||
354 | 0.9587991996114889826032739182503597561952, | ||
355 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9920915273592940747364147244035548055325}; |
356 | |||
357 | ✗ | w_ = {0.02024200238265793976001079610049303002099, | |
358 | 0.04606074991886422395721088797689856046184, | ||
359 | 0.06943675510989361923180088843443573381093, | ||
360 | 0.08907299038097286914002334599804899775641, | ||
361 | 0.1039080237684442511562616096530263816933, | ||
362 | 0.1131415901314486192060450930198883092174, | ||
363 | 0.1162757766154369550972947576344179740783, | ||
364 | 0.1131415901314486192060450930198883092174, | ||
365 | 0.1039080237684442511562616096530263816933, | ||
366 | 0.08907299038097286914002334599804899775641, | ||
367 | 0.06943675510989361923180088843443573381093, | ||
368 | 0.04606074991886422395721088797689856046184, | ||
369 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.02024200238265793976001079610049303002099}; |
370 | 76 | } | |
371 | std::vector<double> xi_; | ||
372 | std::vector<double> w_; | ||
373 | }; | ||
374 | /** | ||
375 | * \brief Gauss Legendre Rule using 14 point. | ||
376 | */ | ||
377 | template <> | ||
378 | struct GaussLegendreRule<14> { | ||
379 | 76 | GaussLegendreRule() { | |
380 | ✗ | xi_ = {0.006858095651593830579201366647973599161954, | |
381 | 0.03578255816821324133180443031106286776148, | ||
382 | 0.08639934246511750340510262867480251948015, | ||
383 | 0.1563535475941572649259900984903329312308, | ||
384 | 0.2423756818209229540173546407244056688456, | ||
385 | 0.3404438155360551197821640879157622665829, | ||
386 | 0.445972525646328168966877674890082626194, | ||
387 | 0.554027474353671831033122325109917373806, | ||
388 | 0.6595561844639448802178359120842377334171, | ||
389 | 0.7576243181790770459826453592755943311544, | ||
390 | 0.8436464524058427350740099015096670687692, | ||
391 | 0.9136006575348824965948973713251974805199, | ||
392 | 0.9642174418317867586681955696889371322385, | ||
393 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.993141904348406169420798633352026400838}; |
394 | |||
395 | ✗ | w_ = {0.01755973016587593151591643806909589030985, | |
396 | 0.04007904357988010490281663853142715479185, | ||
397 | 0.06075928534395159234470740453623831297833, | ||
398 | 0.07860158357909676728480096931192107830283, | ||
399 | 0.09276919873896890687085829506257851812446, | ||
400 | 0.1025992318606478019829620328306090278552, | ||
401 | 0.1076319267315788950979382216581300176375, | ||
402 | 0.1076319267315788950979382216581300176375, | ||
403 | 0.1025992318606478019829620328306090278552, | ||
404 | 0.09276919873896890687085829506257851812446, | ||
405 | 0.07860158357909676728480096931192107830283, | ||
406 | 0.06075928534395159234470740453623831297833, | ||
407 | 0.04007904357988010490281663853142715479185, | ||
408 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.01755973016587593151591643806909589030985}; |
409 | 76 | } | |
410 | std::vector<double> xi_; | ||
411 | std::vector<double> w_; | ||
412 | }; | ||
413 | /** | ||
414 | * \brief Gauss Legendre Rule using 15 point. | ||
415 | */ | ||
416 | template <> | ||
417 | struct GaussLegendreRule<15> { | ||
418 | 76 | GaussLegendreRule() { | |
419 | ✗ | xi_ = {0.006003740989757285755217140706693709426514, | |
420 | 0.031363303799647047846120526144895264378, | ||
421 | 0.07589670829478639189967583961289157431687, | ||
422 | 0.1377911343199149762919069726930309951846, | ||
423 | 0.2145139136957305762313866313730446793808, | ||
424 | 0.3029243264612183150513963145094772658186, | ||
425 | 0.3994029530012827388496858483027018960936, | ||
426 | 0.5, | ||
427 | 0.6005970469987172611503141516972981039064, | ||
428 | 0.6970756735387816849486036854905227341814, | ||
429 | 0.7854860863042694237686133686269553206192, | ||
430 | 0.8622088656800850237080930273069690048154, | ||
431 | 0.9241032917052136081003241603871084256831, | ||
432 | 0.968636696200352952153879473855104735622, | ||
433 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9939962590102427142447828592933062905735}; |
434 | |||
435 | ✗ | w_ = {0.01537662099805863417731419678860220886087, | |
436 | 0.03518302374405406235463370822533366923335, | ||
437 | 0.05357961023358596750593477334293465170777, | ||
438 | 0.06978533896307715722390239725551416126043, | ||
439 | 0.08313460290849696677660043024060440556545, | ||
440 | 0.09308050000778110551340028093321141225311, | ||
441 | 0.09921574266355578822805916322191966240935, | ||
442 | 0.1012891209627806364403100999837596574193, | ||
443 | 0.09921574266355578822805916322191966240935, | ||
444 | 0.09308050000778110551340028093321141225311, | ||
445 | 0.08313460290849696677660043024060440556545, | ||
446 | 0.06978533896307715722390239725551416126043, | ||
447 | 0.05357961023358596750593477334293465170777, | ||
448 | 0.03518302374405406235463370822533366923335, | ||
449 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.01537662099805863417731419678860220886087}; |
450 | 76 | } | |
451 | std::vector<double> xi_; | ||
452 | std::vector<double> w_; | ||
453 | }; | ||
454 | /** | ||
455 | * \brief Gauss Legendre Rule using 16 point. | ||
456 | */ | ||
457 | template <> | ||
458 | struct GaussLegendreRule<16> { | ||
459 | 76 | GaussLegendreRule() { | |
460 | ✗ | xi_ = {0.005299532504175033701922913274833686286863, | |
461 | 0.02771248846338371196100579223269582745443, | ||
462 | 0.06718439880608412805976605114380343380633, | ||
463 | 0.1222977958224984830524494025762788658231, | ||
464 | 0.1910618777986781257766641179756044905041, | ||
465 | 0.27099161117138630682879027850821121323, | ||
466 | 0.359198224610370543384769749269751946757, | ||
467 | 0.4524937450811812799073403322875209684348, | ||
468 | 0.5475062549188187200926596677124790315652, | ||
469 | 0.640801775389629456615230250730248053243, | ||
470 | 0.72900838882861369317120972149178878677, | ||
471 | 0.8089381222013218742233358820243955094959, | ||
472 | 0.8777022041775015169475505974237211341769, | ||
473 | 0.9328156011939158719402339488561965661937, | ||
474 | 0.9722875115366162880389942077673041725456, | ||
475 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9947004674958249662980770867251663137131}; |
476 | |||
477 | ✗ | w_ = {0.01357622970587704742589028622800905175613, | |
478 | 0.03112676196932394643142191849718884713749, | ||
479 | 0.04757925584124639240496255380112311317763, | ||
480 | 0.06231448562776693602623814109600821007244, | ||
481 | 0.07479799440828836604075086527373927448525, | ||
482 | 0.08457825969750126909465603951517998110582, | ||
483 | 0.09130170752246179443338183398460996969178, | ||
484 | 0.09472530522753424814269836160414155257345, | ||
485 | 0.09472530522753424814269836160414155257345, | ||
486 | 0.09130170752246179443338183398460996969178, | ||
487 | 0.08457825969750126909465603951517998110582, | ||
488 | 0.07479799440828836604075086527373927448525, | ||
489 | 0.06231448562776693602623814109600821007244, | ||
490 | 0.04757925584124639240496255380112311317763, | ||
491 | 0.03112676196932394643142191849718884713749, | ||
492 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.01357622970587704742589028622800905175613}; |
493 | 76 | } | |
494 | std::vector<double> xi_; | ||
495 | std::vector<double> w_; | ||
496 | }; | ||
497 | /** | ||
498 | * \brief Gauss Legendre Rule using 17 point. | ||
499 | */ | ||
500 | template <> | ||
501 | struct GaussLegendreRule<17> { | ||
502 | 76 | GaussLegendreRule() { | |
503 | ✗ | xi_ = {0.004712262342791332162282990029667361746105, | |
504 | 0.02466223911561611938864152105209848927831, | ||
505 | 0.05988042313650704893852215275592215368829, | ||
506 | 0.109242998051599296537384972239761974888, | ||
507 | 0.1711644203916546170748488916784988324261, | ||
508 | 0.2436547314567615160568767156852240627085, | ||
509 | 0.3243841182730618423514072414523269974797, | ||
510 | 0.4107579092520760720746612531729672212623, | ||
511 | 0.5, | ||
512 | 0.5892420907479239279253387468270327787377, | ||
513 | 0.6756158817269381576485927585476730025203, | ||
514 | 0.7563452685432384839431232843147759372915, | ||
515 | 0.8288355796083453829251511083215011675739, | ||
516 | 0.890757001948400703462615027760238025112, | ||
517 | 0.9401195768634929510614778472440778463117, | ||
518 | 0.9753377608843838806113584789479015107217, | ||
519 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9952877376572086678377170099703326382539}; |
520 | |||
521 | ✗ | w_ = {0.01207415143427396598005501314378266234585, | |
522 | 0.02772976468699360056472008267912233025642, | ||
523 | 0.04251807415858959044176768509553103692525, | ||
524 | 0.05594192359670198554739419281317796336792, | ||
525 | 0.06756818423426273664315999085117509868606, | ||
526 | 0.07702288053840514404071579740097930597024, | ||
527 | 0.0840020510782250222549853318941615775106, | ||
528 | 0.08828135268349632316263549505659861957546, | ||
529 | 0.08972323517810326272913282213094281072439, | ||
530 | 0.08828135268349632316263549505659861957546, | ||
531 | 0.0840020510782250222549853318941615775106, | ||
532 | 0.07702288053840514404071579740097930597024, | ||
533 | 0.06756818423426273664315999085117509868606, | ||
534 | 0.05594192359670198554739419281317796336792, | ||
535 | 0.04251807415858959044176768509553103692525, | ||
536 | 0.02772976468699360056472008267912233025642, | ||
537 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.01207415143427396598005501314378266234585}; |
538 | 76 | } | |
539 | std::vector<double> xi_; | ||
540 | std::vector<double> w_; | ||
541 | }; | ||
542 | /** | ||
543 | * \brief Gauss Legendre Rule using 18 point. | ||
544 | */ | ||
545 | template <> | ||
546 | struct GaussLegendreRule<18> { | ||
547 | 76 | GaussLegendreRule() { | |
548 | ✗ | xi_ = {0.004217415789534526634991997646924614873711, | |
549 | 0.02208802521430112240940205353511184501358, | ||
550 | 0.05369876675122213039696970443642724229605, | ||
551 | 0.09814752051373844215879127249270460144835, | ||
552 | 0.1541564784698233960625544593555758052739, | ||
553 | 0.2201145844630262326960642257373354315362, | ||
554 | 0.2941244192685786769820341030834741814605, | ||
555 | 0.3740568871542472452055135725610443849186, | ||
556 | 0.4576124934791323493788690735321080941333, | ||
557 | 0.5423875065208676506211309264678919058667, | ||
558 | 0.6259431128457527547944864274389556150814, | ||
559 | 0.7058755807314213230179658969165258185395, | ||
560 | 0.7798854155369737673039357742626645684638, | ||
561 | 0.8458435215301766039374455406444241947261, | ||
562 | 0.9018524794862615578412087275072953985516, | ||
563 | 0.9463012332487778696030302955635727577039, | ||
564 | 0.9779119747856988775905979464648881549864, | ||
565 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.9957825842104654733650080023530753851263}; |
566 | |||
567 | ✗ | w_ = {0.01080800676324165515667135513322623469384, | |
568 | 0.02485727444748489822666747310131932084043, | ||
569 | 0.03821286512744452826456483880831826280266, | ||
570 | 0.0504710220531435827814069924624173035314, | ||
571 | 0.06127760335573923009225956340010077761408, | ||
572 | 0.07032145733532532560236565187597361404775, | ||
573 | 0.07734233756313262246270900191818738609661, | ||
574 | 0.08213824187291636149302688823296379520617, | ||
575 | 0.08457119148157179592032823506749330516705, | ||
576 | 0.08457119148157179592032823506749330516705, | ||
577 | 0.08213824187291636149302688823296379520617, | ||
578 | 0.07734233756313262246270900191818738609661, | ||
579 | 0.07032145733532532560236565187597361404775, | ||
580 | 0.06127760335573923009225956340010077761408, | ||
581 | 0.0504710220531435827814069924624173035314, | ||
582 | 0.03821286512744452826456483880831826280266, | ||
583 | 0.02485727444748489822666747310131932084043, | ||
584 |
1/2✓ Branch 1 taken 76 times.
✗ Branch 2 not taken.
|
76 | 0.01080800676324165515667135513322623469384}; |
585 | 76 | } | |
586 | std::vector<double> xi_; | ||
587 | std::vector<double> w_; | ||
588 | }; | ||
589 | /** | ||
590 | * \brief Gauss Legendre Rule using 19 point. | ||
591 | */ | ||
592 | template <> | ||
593 | struct GaussLegendreRule<19> { | ||
594 | 71 | GaussLegendreRule() { | |
595 | ✗ | xi_ = {0.003796578078207798405491164873369753205342, | |
596 | 0.01989592393258498457361057965617423669245, | ||
597 | 0.0484220481925910491786695357338437560953, | ||
598 | 0.08864267173142858751053875664364304911273, | ||
599 | 0.1395169113323853106914520695881091851714, | ||
600 | 0.1997273476691594882651809175268803600658, | ||
601 | 0.2677146293120195271413664259479488160119, | ||
602 | 0.3417179500181850840049413355750775410539, | ||
603 | 0.4198206771798873120659519421296282252476, | ||
604 | 0.5, | ||
605 | 0.5801793228201126879340480578703717747524, | ||
606 | 0.6582820499818149159950586644249224589461, | ||
607 | 0.7322853706879804728586335740520511839881, | ||
608 | 0.8002726523308405117348190824731196399342, | ||
609 | 0.8604830886676146893085479304118908148286, | ||
610 | 0.9113573282685714124894612433563569508873, | ||
611 | 0.9515779518074089508213304642661562439047, | ||
612 | 0.9801040760674150154263894203438257633075, | ||
613 |
1/2✓ Branch 1 taken 71 times.
✗ Branch 2 not taken.
|
71 | 0.9962034219217922015945088351266302467947}; |
614 | |||
615 | ✗ | w_ = {0.009730894114863238518156020732219217876453, | |
616 | 0.02240711338284980016641907870099710597588, | ||
617 | 0.03452227136882061329035412900300652248092, | ||
618 | 0.04574501081122499973223104706191982633046, | ||
619 | 0.05578332277366699735801195084088299874067, | ||
620 | 0.06437698126966811383775789242843855852792, | ||
621 | 0.07130335108680330588787305472095148623783, | ||
622 | 0.0763830210329298333894277004488314992305, | ||
623 | 0.07948442169697717382497821973252360083939, | ||
624 | 0.08052722492439184798958181266045836751995, | ||
625 | 0.07948442169697717382497821973252360083939, | ||
626 | 0.0763830210329298333894277004488314992305, | ||
627 | 0.07130335108680330588787305472095148623783, | ||
628 | 0.06437698126966811383775789242843855852792, | ||
629 | 0.05578332277366699735801195084088299874067, | ||
630 | 0.04574501081122499973223104706191982633046, | ||
631 | 0.03452227136882061329035412900300652248092, | ||
632 | 0.02240711338284980016641907870099710597588, | ||
633 |
1/2✓ Branch 1 taken 71 times.
✗ Branch 2 not taken.
|
71 | 0.009730894114863238518156020732219217876453}; |
634 | 71 | } | |
635 | std::vector<double> xi_; | ||
636 | std::vector<double> w_; | ||
637 | }; | ||
638 | /** | ||
639 | * \brief Gauss Legendre Rule using 20 point. | ||
640 | */ | ||
641 | template <> | ||
642 | struct GaussLegendreRule<20> { | ||
643 | 71 | GaussLegendreRule() { | |
644 | ✗ | xi_ = {0.003435700407452537606938805764339860888676, | |
645 | 0.01801403636104310436616693440136138904397, | ||
646 | 0.04388278587433704706612377939835094347541, | ||
647 | 0.08044151408889058830273546914923965733519, | ||
648 | 0.1268340467699246036928474648221792048446, | ||
649 | 0.1819731596367424872735816518868570316283, | ||
650 | 0.2445664990245864509978179745223745007873, | ||
651 | 0.3131469556422902196637259114875363813021, | ||
652 | 0.3861070744291774609597519023157126876285, | ||
653 | 0.4617367394332513331226797953005808944976, | ||
654 | 0.5382632605667486668773202046994191055024, | ||
655 | 0.6138929255708225390402480976842873123715, | ||
656 | 0.6868530443577097803362740885124636186979, | ||
657 | 0.7554335009754135490021820254776254992127, | ||
658 | 0.8180268403632575127264183481131429683717, | ||
659 | 0.8731659532300753963071525351778207951554, | ||
660 | 0.9195584859111094116972645308507603426648, | ||
661 | 0.9561172141256629529338762206016490565246, | ||
662 | 0.981985963638956895633833065598638610956, | ||
663 |
1/2✓ Branch 1 taken 71 times.
✗ Branch 2 not taken.
|
71 | 0.9965642995925474623930611942356601391113}; |
664 | |||
665 | ✗ | w_ = {0.008807003569576059155930981175926408181072, | |
666 | 0.02030071490019347066551997613746605493955, | ||
667 | 0.0313360241670545317847532675935208031758, | ||
668 | 0.04163837078835237436237907161102310305009, | ||
669 | 0.05096505990862021751837506774017493808335, | ||
670 | 0.05909726598075920865618868885569114350252, | ||
671 | 0.06584431922458831344924724987408156745806, | ||
672 | 0.07104805465919102566464916253358246651726, | ||
673 | 0.07458649323630187339391436850098471834634, | ||
674 | 0.07637669356536292534904216597754879674597, | ||
675 | 0.07637669356536292534904216597754879674597, | ||
676 | 0.07458649323630187339391436850098471834634, | ||
677 | 0.07104805465919102566464916253358246651726, | ||
678 | 0.06584431922458831344924724987408156745806, | ||
679 | 0.05909726598075920865618868885569114350252, | ||
680 | 0.05096505990862021751837506774017493808335, | ||
681 | 0.04163837078835237436237907161102310305009, | ||
682 | 0.0313360241670545317847532675935208031758, | ||
683 | 0.02030071490019347066551997613746605493955, | ||
684 |
1/2✓ Branch 1 taken 71 times.
✗ Branch 2 not taken.
|
71 | 0.008807003569576059155930981175926408181072}; |
685 | 71 | } | |
686 | std::vector<double> xi_; | ||
687 | std::vector<double> w_; | ||
688 | }; | ||
689 | |||
690 | } // namespace Bembel | ||
691 | #endif // BEMBEL_SRC_QUADRATURE_GAUSSLEGENDRERULE_HPP_ | ||
692 |