Line data Source code
1 : /*
2 : * Copyright (c) 2011-2013: G-CSC, Goethe University Frankfurt
3 : *
4 : * This file is part of UG4.
5 : *
6 : * UG4 is free software: you can redistribute it and/or modify it under the
7 : * terms of the GNU Lesser General Public License version 3 (as published by the
8 : * Free Software Foundation) with the following additional attribution
9 : * requirements (according to LGPL/GPL v3 §7):
10 : *
11 : * (1) The following notice must be displayed in the Appropriate Legal Notices
12 : * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
13 : *
14 : * (2) The following notice must be displayed at a prominent place in the
15 : * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
16 : *
17 : * (3) The following bibliography is recommended for citation and must be
18 : * preserved in all covered files:
19 : * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
20 : * parallel geometric multigrid solver on hierarchically distributed grids.
21 : * Computing and visualization in science 16, 4 (2013), 151-164"
22 : * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
23 : * flexible software system for simulating pde based models on high performance
24 : * computers. Computing and visualization in science 16, 4 (2013), 165-179"
25 : *
26 : * This program is distributed in the hope that it will be useful,
27 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
28 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 : * GNU Lesser General Public License for more details.
30 : */
31 :
32 : // This file is parsed from UG 3.9.
33 : // It provides the Gauss Quadratures for a reference edge.
34 :
35 :
36 : #include "../quadrature.h"
37 : #include "gauss_quad_edge.h"
38 :
39 : namespace ug{
40 :
41 : template <>
42 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 1>, 1, 1, 1>::m_vWeight[1] =
43 : {
44 : 1.00000000000000000000000000000000
45 : };
46 :
47 : template <>
48 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 1>, 1, 1, 1>::m_vPoint[1] =
49 : {
50 : MathVector<1>(0.50000000000000000000000000000000)
51 : };
52 :
53 : template <>
54 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 3>, 1, 3, 2>::m_vWeight[2] =
55 : {
56 : 0.50000000000000000000000000000000,
57 : 0.50000000000000000000000000000000
58 : };
59 :
60 : template <>
61 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 3>, 1, 3, 2>::m_vPoint[2] =
62 : {
63 : MathVector<1>(0.21132486540518711774542560974902),
64 : MathVector<1>(0.78867513459481288225457439025098)
65 : };
66 :
67 : template <>
68 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 5>, 1, 5, 3>::m_vWeight[3] =
69 : {
70 : 0.27777777777777777777777777777778,
71 : 0.44444444444444444444444444444444,
72 : 0.27777777777777777777777777777778
73 : };
74 :
75 : template <>
76 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 5>, 1, 5, 3>::m_vPoint[3] =
77 : {
78 : MathVector<1>(0.11270166537925831148207346002176),
79 : MathVector<1>(0.50000000000000000000000000000000),
80 : MathVector<1>(0.88729833462074168851792653997824)
81 : };
82 :
83 : template <>
84 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 7>, 1, 7, 4>::m_vWeight[4] =
85 : {
86 : 0.17392742256872692868653197461100,
87 : 0.32607257743127307131346802538900,
88 : 0.32607257743127307131346802538900,
89 : 0.17392742256872692868653197461100
90 : };
91 :
92 : template <>
93 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 7>, 1, 7, 4>::m_vPoint[4] =
94 : {
95 : MathVector<1>(0.06943184420297371238802675555360),
96 : MathVector<1>(0.33000947820757186759866712044838),
97 : MathVector<1>(0.66999052179242813240133287955162),
98 : MathVector<1>(0.93056815579702628761197324444640)
99 : };
100 :
101 : template <>
102 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 9>, 1, 9, 5>::m_vWeight[5] =
103 : {
104 : 0.11846344252809454375713202035996,
105 : 0.23931433524968323402064575741782,
106 : 0.28444444444444444444444444444444,
107 : 0.23931433524968323402064575741782,
108 : 0.11846344252809454375713202035996
109 : };
110 :
111 : template <>
112 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 9>, 1, 9, 5>::m_vPoint[5] =
113 : {
114 : MathVector<1>(0.04691007703066800360118656085030),
115 : MathVector<1>(0.23076534494715845448184278964990),
116 : MathVector<1>(0.50000000000000000000000000000000),
117 : MathVector<1>(0.76923465505284154551815721035010),
118 : MathVector<1>(0.95308992296933199639881343914970)
119 : };
120 :
121 : template <>
122 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 11>, 1, 11, 6>::m_vWeight[6] =
123 : {
124 : 0.08566224618958517252014807108637,
125 : 0.18038078652406930378491675691886,
126 : 0.23395696728634552369493517199478,
127 : 0.23395696728634552369493517199478,
128 : 0.18038078652406930378491675691886,
129 : 0.08566224618958517252014807108637
130 : };
131 :
132 : template <>
133 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 11>, 1, 11, 6>::m_vPoint[6] =
134 : {
135 : MathVector<1>(0.03376524289842398609384922275300),
136 : MathVector<1>(0.16939530676686774316930020249005),
137 : MathVector<1>(0.38069040695840154568474913915964),
138 : MathVector<1>(0.61930959304159845431525086084036),
139 : MathVector<1>(0.83060469323313225683069979750995),
140 : MathVector<1>(0.96623475710157601390615077724700)
141 : };
142 :
143 : template <>
144 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 13>, 1, 13, 7>::m_vWeight[7] =
145 : {
146 : 0.06474248308443484663530571633954,
147 : 0.13985269574463833395073388571189,
148 : 0.19091502525255947247518488774449,
149 : 0.20897959183673469387755102040816,
150 : 0.19091502525255947247518488774449,
151 : 0.13985269574463833395073388571189,
152 : 0.06474248308443484663530571633954
153 : };
154 :
155 : template <>
156 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 13>, 1, 13, 7>::m_vPoint[7] =
157 : {
158 : MathVector<1>(0.02544604382862073773690515797607),
159 : MathVector<1>(0.12923440720030278006806761335961),
160 : MathVector<1>(0.29707742431130141654669679396152),
161 : MathVector<1>(0.50000000000000000000000000000000),
162 : MathVector<1>(0.70292257568869858345330320603848),
163 : MathVector<1>(0.87076559279969721993193238664039),
164 : MathVector<1>(0.97455395617137926226309484202393)
165 : };
166 :
167 : template <>
168 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 15>, 1, 15, 8>::m_vWeight[8] =
169 : {
170 : 0.05061426814518812957626567715498,
171 : 0.11119051722668723527217799721312,
172 : 0.15685332293894364366898110099330,
173 : 0.18134189168918099148257522463860,
174 : 0.18134189168918099148257522463860,
175 : 0.15685332293894364366898110099330,
176 : 0.11119051722668723527217799721312,
177 : 0.05061426814518812957626567715498
178 : };
179 :
180 : template <>
181 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 15>, 1, 15, 8>::m_vPoint[8] =
182 : {
183 : MathVector<1>(0.01985507175123188415821956571526),
184 : MathVector<1>(0.10166676129318663020422303176208),
185 : MathVector<1>(0.23723379504183550709113047540538),
186 : MathVector<1>(0.40828267875217509753026192881991),
187 : MathVector<1>(0.59171732124782490246973807118009),
188 : MathVector<1>(0.76276620495816449290886952459462),
189 : MathVector<1>(0.89833323870681336979577696823792),
190 : MathVector<1>(0.98014492824876811584178043428474)
191 : };
192 :
193 : template <>
194 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 17>, 1, 17, 9>::m_vWeight[9] =
195 : {
196 : 0.04063719418078720598594607905526,
197 : 0.09032408034742870202923601562146,
198 : 0.13030534820146773115937143470932,
199 : 0.15617353852000142003431520329222,
200 : 0.16511967750062988158226253464349,
201 : 0.15617353852000142003431520329222,
202 : 0.13030534820146773115937143470932,
203 : 0.09032408034742870202923601562146,
204 : 0.04063719418078720598594607905526
205 : };
206 :
207 : template <>
208 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 17>, 1, 17, 9>::m_vPoint[9] =
209 : {
210 : MathVector<1>(0.01591988024618695508221189854816),
211 : MathVector<1>(0.08198444633668210285028510596513),
212 : MathVector<1>(0.19331428364970480134564898032926),
213 : MathVector<1>(0.33787328829809553548073099267833),
214 : MathVector<1>(0.50000000000000000000000000000000),
215 : MathVector<1>(0.66212671170190446451926900732167),
216 : MathVector<1>(0.80668571635029519865435101967074),
217 : MathVector<1>(0.91801555366331789714971489403487),
218 : MathVector<1>(0.98408011975381304491778810145184)
219 : };
220 :
221 : template <>
222 : number GaussQuadBase<GaussQuadrature<ReferenceEdge, 19>, 1, 19, 10>::m_vWeight[10] =
223 : {
224 : 0.03333567215434406879678440494667,
225 : 0.07472567457529029657288816982885,
226 : 0.10954318125799102199776746711408,
227 : 0.13463335965499817754561346078473,
228 : 0.14776211235737643508694649732567,
229 : 0.14776211235737643508694649732567,
230 : 0.13463335965499817754561346078473,
231 : 0.10954318125799102199776746711408,
232 : 0.07472567457529029657288816982885,
233 : 0.03333567215434406879678440494667
234 : };
235 :
236 : template <>
237 : MathVector<1> GaussQuadBase<GaussQuadrature<ReferenceEdge, 19>, 1, 19, 10>::m_vPoint[10] =
238 : {
239 : MathVector<1>(0.01304673574141413996101799395777),
240 : MathVector<1>(0.06746831665550774463395165578825),
241 : MathVector<1>(0.16029521585048779688283631744256),
242 : MathVector<1>(0.28330230293537640460036702841711),
243 : MathVector<1>(0.42556283050918439455758699943514),
244 : MathVector<1>(0.57443716949081560544241300056486),
245 : MathVector<1>(0.71669769706462359539963297158289),
246 : MathVector<1>(0.83970478414951220311716368255744),
247 : MathVector<1>(0.93253168334449225536604834421175),
248 : MathVector<1>(0.98695326425858586003898200604223)
249 : };
250 :
251 :
252 :
253 :
254 : template <>
255 0 : FlexGaussQuadrature<ReferenceEdge>::FlexGaussQuadrature(int order)
256 : {
257 0 : switch(order)
258 : {
259 : case 0:
260 : case 1:
261 0 : m_order = GaussQuadrature<ReferenceEdge, 1>::order();
262 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 1>::size();
263 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 1>::points();
264 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 1>::weights();
265 0 : break;
266 :
267 : case 2:
268 : case 3:
269 0 : m_order = GaussQuadrature<ReferenceEdge, 3>::order();
270 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 3>::size();
271 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 3>::points();
272 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 3>::weights();
273 0 : break;
274 :
275 : case 4:
276 : case 5:
277 0 : m_order = GaussQuadrature<ReferenceEdge, 5>::order();
278 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 5>::size();
279 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 5>::points();
280 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 5>::weights();
281 0 : break;
282 :
283 : case 6:
284 : case 7:
285 0 : m_order = GaussQuadrature<ReferenceEdge, 7>::order();
286 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 7>::size();
287 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 7>::points();
288 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 7>::weights();
289 0 : break;
290 :
291 : case 8:
292 : case 9:
293 0 : m_order = GaussQuadrature<ReferenceEdge, 9>::order();
294 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 9>::size();
295 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 9>::points();
296 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 9>::weights();
297 0 : break;
298 :
299 : case 10:
300 : case 11:
301 0 : m_order = GaussQuadrature<ReferenceEdge, 11>::order();
302 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 11>::size();
303 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 11>::points();
304 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 11>::weights();
305 0 : break;
306 :
307 : case 12:
308 : case 13:
309 0 : m_order = GaussQuadrature<ReferenceEdge, 13>::order();
310 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 13>::size();
311 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 13>::points();
312 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 13>::weights();
313 0 : break;
314 :
315 : case 14:
316 : case 15:
317 0 : m_order = GaussQuadrature<ReferenceEdge, 15>::order();
318 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 15>::size();
319 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 15>::points();
320 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 15>::weights();
321 0 : break;
322 :
323 : case 16:
324 : case 17:
325 0 : m_order = GaussQuadrature<ReferenceEdge, 17>::order();
326 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 17>::size();
327 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 17>::points();
328 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 17>::weights();
329 0 : break;
330 :
331 : case 18:
332 : case 19:
333 0 : m_order = GaussQuadrature<ReferenceEdge, 19>::order();
334 0 : m_numPoints = GaussQuadrature<ReferenceEdge, 19>::size();
335 0 : m_pvPoint = GaussQuadrature<ReferenceEdge, 19>::points();
336 0 : m_pvWeight = GaussQuadrature<ReferenceEdge, 19>::weights();
337 0 : break;
338 :
339 0 : default: UG_THROW("Order "<<order<<" not available for GaussQuadrature of edge.");
340 : }
341 0 : }
342 : }; // namespace ug
343 :
|