FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
shunn_ham_driver.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
8// includes, FEAT
9#include <kernel/cubature/symmetric_simplex_driver.hpp>
10#include <kernel/util/meta_math.hpp>
11
12namespace FEAT
13{
14 namespace Cubature
15 {
29 template<typename Shape_>
30 class ShunnHamDriver DOXY({});
31
33 template<>
34 class ShunnHamDriver<Shape::Simplex<3>> :
35 public DriverBase<Shape::Simplex<3>>
36 {
37 public:
39 static constexpr bool variadic = true;
40 static constexpr int min_points = 2;
41 static constexpr int max_points = 6;
42
44 static String name()
45 {
46 return "shunn-ham";
47 }
48
49 static int count(int param)
50 {
51 switch(param)
52 {
53 case 2:
54 return 4;
55 case 3:
56 return 10;
57 case 4:
58 return 20;
59 case 5:
60 return 35;
61 case 6:
62 return 56;
63 default:
64 return 0;
65 }
66 }
67
68 // note: the coords and weights are only given in double precision,
69 // so we use 'double' for the parameters here...
70 template<
71 typename Weight_,
72 typename Coord_,
73 typename Point_>
74 static void set(Rule<Shape::Simplex<3>, Weight_, Coord_, Point_>& rule,
75 int k, double w, double x, double y, double z)
76 {
77 rule.get_weight(k) = Weight_(w);
78 rule.get_coord(k, 0) = Coord_(x);
79 rule.get_coord(k, 1) = Coord_(y);
80 rule.get_coord(k, 2) = Coord_(z);
81 }
82
89 template<
90 typename Weight_,
91 typename Coord_,
92 typename Point_>
93 static void fill(Rule<Shape::Simplex<3>, Weight_, Coord_, Point_>& rule, int num_points)
94 {
95 switch(num_points)
96 {
97 case 2:
98 set(rule, 0, 0.0416666666666667, 0.1381966011250110, 0.1381966011250110, 0.1381966011250110);
99 set(rule, 1, 0.0416666666666667, 0.5854101966249680, 0.1381966011250110, 0.1381966011250110);
100 set(rule, 2, 0.0416666666666667, 0.1381966011250110, 0.5854101966249680, 0.1381966011250110);
101 set(rule, 3, 0.0416666666666667, 0.1381966011250110, 0.1381966011250110, 0.5854101966249680);
102 break;
103
104 case 3:
105 set(rule, 0, 0.0079388558072015, 0.0738349017262234, 0.0738349017262234, 0.0738349017262234);
106 set(rule, 1, 0.0079388558072015, 0.7784952948213300, 0.0738349017262234, 0.0738349017262234);
107 set(rule, 2, 0.0079388558072015, 0.0738349017262234, 0.7784952948213300, 0.0738349017262234);
108 set(rule, 3, 0.0079388558072015, 0.0738349017262234, 0.0738349017262234, 0.7784952948213300);
109 set(rule, 4, 0.0224852072396435, 0.4062443438840510, 0.0937556561159491, 0.0937556561159491);
110 set(rule, 5, 0.0224852072396435, 0.0937556561159491, 0.4062443438840510, 0.0937556561159491);
111 set(rule, 6, 0.0224852072396435, 0.0937556561159491, 0.0937556561159491, 0.4062443438840510);
112 set(rule, 7, 0.0224852072396435, 0.4062443438840510, 0.4062443438840510, 0.0937556561159491);
113 set(rule, 8, 0.0224852072396435, 0.4062443438840510, 0.0937556561159491, 0.4062443438840510);
114 set(rule, 9, 0.0224852072396435, 0.0937556561159491, 0.4062443438840510, 0.4062443438840510);
115 break;
116
117 case 4:
118 set(rule, 0, 0.0011778457990783, 0.0323525947272439, 0.0323525947272439, 0.0323525947272439);
119 set(rule, 1, 0.0011778457990783, 0.9029422158182679, 0.0323525947272439, 0.0323525947272439);
120 set(rule, 2, 0.0011778457990783, 0.0323525947272439, 0.9029422158182679, 0.0323525947272439);
121 set(rule, 3, 0.0011778457990783, 0.0323525947272439, 0.0323525947272439, 0.9029422158182679);
122 set(rule, 4, 0.0078331114953146, 0.6165965330619370, 0.0603604415251421, 0.0603604415251421);
123 set(rule, 5, 0.0078331114953146, 0.2626825838877790, 0.0603604415251421, 0.0603604415251421);
124 set(rule, 6, 0.0078331114953146, 0.0603604415251421, 0.6165965330619370, 0.0603604415251421);
125 set(rule, 7, 0.0078331114953146, 0.0603604415251421, 0.2626825838877790, 0.0603604415251421);
126 set(rule, 8, 0.0078331114953146, 0.0603604415251421, 0.0603604415251421, 0.6165965330619370);
127 set(rule, 9, 0.0078331114953146, 0.0603604415251421, 0.0603604415251421, 0.2626825838877790);
128 set(rule, 10, 0.0078331114953146, 0.2626825838877790, 0.6165965330619370, 0.0603604415251421);
129 set(rule, 11, 0.0078331114953146, 0.6165965330619370, 0.2626825838877790, 0.0603604415251421);
130 set(rule, 12, 0.0078331114953146, 0.2626825838877790, 0.0603604415251421, 0.6165965330619370);
131 set(rule, 13, 0.0078331114953146, 0.6165965330619370, 0.0603604415251421, 0.2626825838877790);
132 set(rule, 14, 0.0078331114953146, 0.0603604415251421, 0.2626825838877790, 0.6165965330619370);
133 set(rule, 15, 0.0078331114953146, 0.0603604415251421, 0.6165965330619370, 0.2626825838877790);
134 set(rule, 16, 0.0169894863816447, 0.3097693042728620, 0.3097693042728620, 0.0706920871814129);
135 set(rule, 17, 0.0169894863816447, 0.3097693042728620, 0.0706920871814129, 0.3097693042728620);
136 set(rule, 18, 0.0169894863816447, 0.0706920871814129, 0.3097693042728620, 0.3097693042728620);
137 set(rule, 19, 0.0169894863816447, 0.3097693042728620, 0.3097693042728620, 0.3097693042728620);
138 break;
139
140 case 5:
141 set(rule, 0, 0.0003650077327565, 0.0267367755543735, 0.0267367755543735, 0.0267367755543735);
142 set(rule, 1, 0.0003650077327565, 0.9197896733368800, 0.0267367755543735, 0.0267367755543735);
143 set(rule, 2, 0.0003650077327565, 0.0267367755543735, 0.9197896733368800, 0.0267367755543735);
144 set(rule, 3, 0.0003650077327565, 0.0267367755543735, 0.0267367755543735, 0.9197896733368800);
145 set(rule, 4, 0.0023899278362944, 0.7477598884818090, 0.0391022406356488, 0.0391022406356488);
146 set(rule, 5, 0.0023899278362944, 0.1740356302468940, 0.0391022406356488, 0.0391022406356488);
147 set(rule, 6, 0.0023899278362944, 0.0391022406356488, 0.7477598884818090, 0.0391022406356488);
148 set(rule, 7, 0.0023899278362944, 0.0391022406356488, 0.1740356302468940, 0.0391022406356488);
149 set(rule, 8, 0.0023899278362944, 0.0391022406356488, 0.0391022406356488, 0.7477598884818090);
150 set(rule, 9, 0.0023899278362944, 0.0391022406356488, 0.0391022406356488, 0.1740356302468940);
151 set(rule, 10, 0.0023899278362944, 0.1740356302468940, 0.7477598884818090, 0.0391022406356488);
152 set(rule, 11, 0.0023899278362944, 0.7477598884818090, 0.1740356302468940, 0.0391022406356488);
153 set(rule, 12, 0.0023899278362944, 0.1740356302468940, 0.0391022406356488, 0.7477598884818090);
154 set(rule, 13, 0.0023899278362944, 0.7477598884818090, 0.0391022406356488, 0.1740356302468940);
155 set(rule, 14, 0.0023899278362944, 0.0391022406356488, 0.1740356302468940, 0.7477598884818090);
156 set(rule, 15, 0.0023899278362944, 0.0391022406356488, 0.7477598884818090, 0.1740356302468940);
157 set(rule, 16, 0.0041717565947791, 0.4547545999844830, 0.0452454000155172, 0.0452454000155172);
158 set(rule, 17, 0.0041717565947791, 0.0452454000155172, 0.4547545999844830, 0.0452454000155172);
159 set(rule, 18, 0.0041717565947791, 0.0452454000155172, 0.0452454000155172, 0.4547545999844830);
160 set(rule, 19, 0.0041717565947791, 0.4547545999844830, 0.4547545999844830, 0.0452454000155172);
161 set(rule, 20, 0.0041717565947791, 0.4547545999844830, 0.0452454000155172, 0.4547545999844830);
162 set(rule, 21, 0.0041717565947791, 0.0452454000155172, 0.4547545999844830, 0.4547545999844830);
163 set(rule, 22, 0.0079973222176259, 0.2232010379623150, 0.2232010379623150, 0.0504792790607720);
164 set(rule, 23, 0.0079973222176259, 0.5031186450145980, 0.2232010379623150, 0.0504792790607720);
165 set(rule, 24, 0.0079973222176259, 0.2232010379623150, 0.5031186450145980, 0.0504792790607720);
166 set(rule, 25, 0.0079973222176259, 0.2232010379623150, 0.0504792790607720, 0.2232010379623150);
167 set(rule, 26, 0.0079973222176259, 0.5031186450145980, 0.0504792790607720, 0.2232010379623150);
168 set(rule, 27, 0.0079973222176259, 0.2232010379623150, 0.0504792790607720, 0.5031186450145980);
169 set(rule, 28, 0.0079973222176259, 0.0504792790607720, 0.2232010379623150, 0.2232010379623150);
170 set(rule, 29, 0.0079973222176259, 0.0504792790607720, 0.5031186450145980, 0.2232010379623150);
171 set(rule, 30, 0.0079973222176259, 0.0504792790607720, 0.2232010379623150, 0.5031186450145980);
172 set(rule, 31, 0.0079973222176259, 0.5031186450145980, 0.2232010379623150, 0.2232010379623150);
173 set(rule, 32, 0.0079973222176259, 0.2232010379623150, 0.5031186450145980, 0.2232010379623150);
174 set(rule, 33, 0.0079973222176259, 0.2232010379623150, 0.2232010379623150, 0.5031186450145980);
175 set(rule, 34, 0.0155290955199223, 0.2500000000000000, 0.2500000000000000, 0.2500000000000000);
176 break;
177
178 case 6:
179 set(rule, 0, 0.0001728852056023, 0.0149520651530592, 0.0149520651530592, 0.0149520651530592);
180 set(rule, 1, 0.0001728852056023, 0.9551438045408220, 0.0149520651530592, 0.0149520651530592);
181 set(rule, 2, 0.0001728852056023, 0.0149520651530592, 0.9551438045408220, 0.0149520651530592);
182 set(rule, 3, 0.0001728852056023, 0.0149520651530592, 0.0149520651530592, 0.9551438045408220);
183 set(rule, 4, 0.0016002774233247, 0.1518319491659370, 0.0340960211962615, 0.0340960211962615);
184 set(rule, 5, 0.0016002774233247, 0.7799760084415400, 0.0340960211962615, 0.0340960211962615);
185 set(rule, 6, 0.0016002774233247, 0.0340960211962615, 0.1518319491659370, 0.0340960211962615);
186 set(rule, 7, 0.0016002774233247, 0.0340960211962615, 0.7799760084415400, 0.0340960211962615);
187 set(rule, 8, 0.0016002774233247, 0.0340960211962615, 0.0340960211962615, 0.1518319491659370);
188 set(rule, 9, 0.0016002774233247, 0.0340960211962615, 0.0340960211962615, 0.7799760084415400);
189 set(rule, 10, 0.0016002774233247, 0.7799760084415400, 0.1518319491659370, 0.0340960211962615);
190 set(rule, 11, 0.0016002774233247, 0.1518319491659370, 0.7799760084415400, 0.0340960211962615);
191 set(rule, 12, 0.0016002774233247, 0.7799760084415400, 0.0340960211962615, 0.1518319491659370);
192 set(rule, 13, 0.0016002774233247, 0.1518319491659370, 0.0340960211962615, 0.7799760084415400);
193 set(rule, 14, 0.0016002774233247, 0.0340960211962615, 0.7799760084415400, 0.1518319491659370);
194 set(rule, 15, 0.0016002774233247, 0.0340960211962615, 0.1518319491659370, 0.7799760084415400);
195 set(rule, 16, 0.0027415662799705, 0.5526556431060170, 0.0462051504150017, 0.0462051504150017);
196 set(rule, 17, 0.0027415662799705, 0.3549340560639790, 0.0462051504150017, 0.0462051504150017);
197 set(rule, 18, 0.0027415662799705, 0.0462051504150017, 0.5526556431060170, 0.0462051504150017);
198 set(rule, 19, 0.0027415662799705, 0.0462051504150017, 0.3549340560639790, 0.0462051504150017);
199 set(rule, 20, 0.0027415662799705, 0.0462051504150017, 0.0462051504150017, 0.5526556431060170);
200 set(rule, 21, 0.0027415662799705, 0.0462051504150017, 0.0462051504150017, 0.3549340560639790);
201 set(rule, 22, 0.0027415662799705, 0.3549340560639790, 0.5526556431060170, 0.0462051504150017);
202 set(rule, 23, 0.0027415662799705, 0.5526556431060170, 0.3549340560639790, 0.0462051504150017);
203 set(rule, 24, 0.0027415662799705, 0.3549340560639790, 0.0462051504150017, 0.5526556431060170);
204 set(rule, 25, 0.0027415662799705, 0.5526556431060170, 0.0462051504150017, 0.3549340560639790);
205 set(rule, 26, 0.0027415662799705, 0.0462051504150017, 0.3549340560639790, 0.5526556431060170);
206 set(rule, 27, 0.0027415662799705, 0.0462051504150017, 0.5526556431060170, 0.3549340560639790);
207 set(rule, 28, 0.0025624627752218, 0.2281904610687610, 0.2281904610687610, 0.0055147549744775);
208 set(rule, 29, 0.0025624627752218, 0.5381043228880020, 0.2281904610687610, 0.0055147549744775);
209 set(rule, 30, 0.0025624627752218, 0.2281904610687610, 0.5381043228880020, 0.0055147549744775);
210 set(rule, 31, 0.0025624627752218, 0.2281904610687610, 0.0055147549744775, 0.2281904610687610);
211 set(rule, 32, 0.0025624627752218, 0.5381043228880020, 0.0055147549744775, 0.2281904610687610);
212 set(rule, 33, 0.0025624627752218, 0.2281904610687610, 0.0055147549744775, 0.5381043228880020);
213 set(rule, 34, 0.0025624627752218, 0.0055147549744775, 0.2281904610687610, 0.2281904610687610);
214 set(rule, 35, 0.0025624627752218, 0.0055147549744775, 0.5381043228880020, 0.2281904610687610);
215 set(rule, 36, 0.0025624627752218, 0.0055147549744775, 0.2281904610687610, 0.5381043228880020);
216 set(rule, 37, 0.0025624627752218, 0.5381043228880020, 0.2281904610687610, 0.2281904610687610);
217 set(rule, 38, 0.0025624627752218, 0.2281904610687610, 0.5381043228880020, 0.2281904610687610);
218 set(rule, 39, 0.0025624627752218, 0.2281904610687610, 0.2281904610687610, 0.5381043228880020);
219 set(rule, 40, 0.0048920019729205, 0.3523052600879940, 0.3523052600879940, 0.0992057202494530);
220 set(rule, 41, 0.0048920019729205, 0.1961837595745600, 0.3523052600879940, 0.0992057202494530);
221 set(rule, 42, 0.0048920019729205, 0.3523052600879940, 0.1961837595745600, 0.0992057202494530);
222 set(rule, 43, 0.0048920019729205, 0.3523052600879940, 0.0992057202494530, 0.3523052600879940);
223 set(rule, 44, 0.0048920019729205, 0.1961837595745600, 0.0992057202494530, 0.3523052600879940);
224 set(rule, 45, 0.0048920019729205, 0.3523052600879940, 0.0992057202494530, 0.1961837595745600);
225 set(rule, 46, 0.0048920019729205, 0.0992057202494530, 0.3523052600879940, 0.3523052600879940);
226 set(rule, 47, 0.0048920019729205, 0.0992057202494530, 0.1961837595745600, 0.3523052600879940);
227 set(rule, 48, 0.0048920019729205, 0.0992057202494530, 0.3523052600879940, 0.1961837595745600);
228 set(rule, 49, 0.0048920019729205, 0.1961837595745600, 0.3523052600879940, 0.3523052600879940);
229 set(rule, 50, 0.0048920019729205, 0.3523052600879940, 0.1961837595745600, 0.3523052600879940);
230 set(rule, 51, 0.0048920019729205, 0.3523052600879940, 0.3523052600879940, 0.1961837595745600);
231 set(rule, 52, 0.0061048561067518, 0.1344783347929940, 0.1344783347929940, 0.1344783347929940);
232 set(rule, 53, 0.0061048561067518, 0.5965649956210169, 0.1344783347929940, 0.1344783347929940);
233 set(rule, 54, 0.0061048561067518, 0.1344783347929940, 0.5965649956210169, 0.1344783347929940);
234 set(rule, 55, 0.0061048561067518, 0.1344783347929940, 0.1344783347929940, 0.5965649956210169);
235 break;
236 }
237 }
238 }; // class ShunnHamDriver<Simplex<3>>
239
240 } // namespace Cubature
241} // namespace FEAT
Cubature Rule class template.
Definition: rule.hpp:38
static String name()
Returns the name of the cubature rule.
static void fill(Rule< Shape::Simplex< 3 >, Weight_, Coord_, Point_ > &rule, int num_points)
Fills the cubature rule structure.
Shunn-Ham driver class template.
String class implementation.
Definition: string.hpp:47
FEAT namespace.
Definition: adjactor.hpp:12
Simplex shape tag struct template.
Definition: shape.hpp:44