Line data Source code
1 : /*
2 : * Copyright (c) 2015: 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 provides the Gauss Quadratures for a reference octahedron.
33 :
34 :
35 : #include "../quadrature.h"
36 : #include "gauss_quad_octahedron.h"
37 :
38 : namespace ug{
39 :
40 : template <>
41 : number GaussQuadBase<GaussQuadrature<ReferenceOctahedron, 2>, 3, 2, 16>::m_vWeight[16] =
42 : {
43 : 2./3. * 0.06250000000000000000000000000000,
44 : 2./3. * 0.06250000000000000000000000000000,
45 : 2./3. * 0.06250000000000000000000000000000,
46 : 2./3. * 0.06250000000000000000000000000000,
47 : 2./3. * 0.06250000000000000000000000000000,
48 : 2./3. * 0.06250000000000000000000000000000,
49 : 2./3. * 0.06250000000000000000000000000000,
50 : 2./3. * 0.06250000000000000000000000000000,
51 : 2./3. * 0.06250000000000000000000000000000,
52 : 2./3. * 0.06250000000000000000000000000000,
53 : 2./3. * 0.06250000000000000000000000000000,
54 : 2./3. * 0.06250000000000000000000000000000,
55 : 2./3. * 0.06250000000000000000000000000000,
56 : 2./3. * 0.06250000000000000000000000000000,
57 : 2./3. * 0.06250000000000000000000000000000,
58 : 2./3. * 0.06250000000000000000000000000000
59 : };
60 :
61 : template <>
62 : MathVector<3> GaussQuadBase<GaussQuadrature<ReferenceOctahedron, 2>, 3, 2, 16>::m_vPoint[16] =
63 : {
64 : MathVector<3>(0.58541020000000000000000000000000, 0.72360680000000000000000000000000, 0.13819660000000000000000000000000),
65 : MathVector<3>(0.13819660000000000000000000000000, 0.72360680000000000000000000000000, 0.13819660000000000000000000000000),
66 : MathVector<3>(0.13819660000000000000000000000000, 0.27639320000000000000000000000000, 0.58541020000000000000000000000000),
67 : MathVector<3>(0.13819660000000000000000000000000, 0.27639320000000000000000000000000, 0.13819660000000000000000000000000),
68 :
69 : MathVector<3>(0.72360680000000000000000000000000, 0.13819660000000000000000000000000, 0.13819660000000000000000000000000),
70 : MathVector<3>(0.72360680000000000000000000000000, 0.58541020000000000000000000000000, 0.13819660000000000000000000000000),
71 : MathVector<3>(0.27639320000000000000000000000000, 0.13819660000000000000000000000000, 0.58541020000000000000000000000000),
72 : MathVector<3>(0.27639320000000000000000000000000, 0.13819660000000000000000000000000, 0.13819660000000000000000000000000),
73 :
74 : MathVector<3>(0.58541020000000000000000000000000, 0.72360680000000000000000000000000, -0.13819660000000000000000000000000),
75 : MathVector<3>(0.13819660000000000000000000000000, 0.72360680000000000000000000000000, -0.13819660000000000000000000000000),
76 : MathVector<3>(0.13819660000000000000000000000000, 0.27639320000000000000000000000000, -0.58541020000000000000000000000000),
77 : MathVector<3>(0.13819660000000000000000000000000, 0.27639320000000000000000000000000, -0.13819660000000000000000000000000),
78 :
79 : MathVector<3>(0.72360680000000000000000000000000, 0.13819660000000000000000000000000, -0.13819660000000000000000000000000),
80 : MathVector<3>(0.72360680000000000000000000000000, 0.58541020000000000000000000000000, -0.13819660000000000000000000000000),
81 : MathVector<3>(0.27639320000000000000000000000000, 0.13819660000000000000000000000000, -0.58541020000000000000000000000000),
82 : MathVector<3>(0.27639320000000000000000000000000, 0.13819660000000000000000000000000, -0.13819660000000000000000000000000)
83 :
84 : // MORE ACCURATE
85 : //MathVector<3>(0.5854101966249685, 0.72360679774998, 0.1381966011250105),
86 : //MathVector<3>(0.1381966011250105, 0.72360679774998, 0.1381966011250105),
87 : //MathVector<3>(0.1381966011250105, 0.27639320225002, 0.5854101966249685),
88 : //MathVector<3>(0.1381966011250105, 0.27639320225002, 0.1381966011250105),
89 : //
90 : //MathVector<3>(0.72360679774998, 0.1381966011250105, 0.1381966011250105),
91 : //MathVector<3>(0.72360679774998, 0.5854101966249685, 0.1381966011250105),
92 : //MathVector<3>(0.27639320225002, 0.1381966011250105, 0.5854101966249685),
93 : //MathVector<3>(0.27639320225002, 0.1381966011250105, 0.1381966011250105),
94 : //
95 : //MathVector<3>(0.5854101966249685, 0.72360679774998, -0.1381966011250105),
96 : //MathVector<3>(0.1381966011250105, 0.72360679774998, -0.1381966011250105),
97 : //MathVector<3>(0.1381966011250105, 0.27639320225002, -0.5854101966249685),
98 : //MathVector<3>(0.1381966011250105, 0.27639320225002, -0.1381966011250105),
99 : //
100 : //MathVector<3>(0.72360679774998, 0.1381966011250105, -0.1381966011250105),
101 : //MathVector<3>(0.72360679774998, 0.5854101966249685, -0.1381966011250105),
102 : //MathVector<3>(0.27639320225002, 0.1381966011250105, -0.5854101966249685),
103 : //MathVector<3>(0.27639320225002, 0.1381966011250105, -0.1381966011250105)
104 : };
105 :
106 :
107 :
108 :
109 : template <>
110 0 : FlexGaussQuadrature<ReferenceOctahedron>::FlexGaussQuadrature(int order)
111 : {
112 0 : switch(order)
113 : {
114 : case 0:
115 : case 1:
116 : case 2:
117 0 : m_order = GaussQuadrature<ReferenceOctahedron, 2>::order();
118 0 : m_numPoints = GaussQuadrature<ReferenceOctahedron, 2>::size();
119 0 : m_pvPoint = GaussQuadrature<ReferenceOctahedron, 2>::points();
120 0 : m_pvWeight = GaussQuadrature<ReferenceOctahedron, 2>::weights();
121 : break;
122 :
123 0 : default: UG_THROW("Order "<<order<<" not available for GaussQuadrature of octahedron.");
124 : }
125 0 : }
126 : }; // namespace ug
127 :
|