Line data Source code
1 : // The libMesh Finite Element Library.
2 : // Copyright (C) 2002-2026 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 :
4 : // This library is free software; you can redistribute it and/or
5 : // modify it under the terms of the GNU Lesser General Public
6 : // License as published by the Free Software Foundation; either
7 : // version 2.1 of the License, or (at your option) any later version.
8 :
9 : // This library is distributed in the hope that it will be useful,
10 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 : // Lesser General Public License for more details.
13 :
14 : // You should have received a copy of the GNU Lesser General Public
15 : // License along with this library; if not, write to the Free Software
16 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 :
18 :
19 : // Local includes
20 : #include "libmesh/cell_hex20.h"
21 : #include "libmesh/edge_edge3.h"
22 : #include "libmesh/face_quad8.h"
23 : #include "libmesh/enum_io_package.h"
24 : #include "libmesh/enum_order.h"
25 :
26 : namespace libMesh
27 : {
28 :
29 :
30 :
31 : // ------------------------------------------------------------
32 : // Hex20 class static member initializations
33 : const int Hex20::num_nodes;
34 : const int Hex20::nodes_per_side;
35 : const int Hex20::nodes_per_edge;
36 :
37 : // ------------------------------------------------------------
38 : // Hex20 class member functions
39 :
40 2277268 : bool Hex20::is_vertex(const unsigned int i) const
41 : {
42 2277268 : if (i < 8)
43 1028455 : return true;
44 72960 : return false;
45 : }
46 :
47 183168 : bool Hex20::is_edge(const unsigned int i) const
48 : {
49 183168 : if (i > 7)
50 183168 : return true;
51 0 : return false;
52 : }
53 :
54 0 : bool Hex20::is_face(const unsigned int) const
55 : {
56 0 : return false;
57 : }
58 :
59 36264 : bool Hex20::is_node_on_side(const unsigned int n,
60 : const unsigned int s) const
61 : {
62 2552 : libmesh_assert_less (s, n_sides());
63 2552 : return std::find(std::begin(side_nodes_map[s]),
64 36264 : std::end(side_nodes_map[s]),
65 36264 : n) != std::end(side_nodes_map[s]);
66 : }
67 :
68 : std::vector<unsigned>
69 204570 : Hex20::nodes_on_side(const unsigned int s) const
70 : {
71 17028 : libmesh_assert_less(s, n_sides());
72 221598 : return {std::begin(side_nodes_map[s]), std::end(side_nodes_map[s])};
73 : }
74 :
75 : std::vector<unsigned>
76 22740 : Hex20::nodes_on_edge(const unsigned int e) const
77 : {
78 1848 : libmesh_assert_less(e, n_edges());
79 24588 : return {std::begin(edge_nodes_map[e]), std::end(edge_nodes_map[e])};
80 : }
81 :
82 641808 : bool Hex20::is_node_on_edge(const unsigned int n,
83 : const unsigned int e) const
84 : {
85 22464 : libmesh_assert_less (e, n_edges());
86 22464 : return std::find(std::begin(edge_nodes_map[e]),
87 641808 : std::end(edge_nodes_map[e]),
88 641808 : n) != std::end(edge_nodes_map[e]);
89 : }
90 :
91 :
92 :
93 448086 : bool Hex20::has_affine_map() const
94 : {
95 : // Make sure x-edge endpoints are affine
96 74072 : Point v = this->point(1) - this->point(0);
97 446678 : if (!v.relative_fuzzy_equals(this->point(2) - this->point(3), affine_tol) ||
98 894636 : !v.relative_fuzzy_equals(this->point(5) - this->point(4), affine_tol) ||
99 520494 : !v.relative_fuzzy_equals(this->point(6) - this->point(7), affine_tol))
100 1536 : return false;
101 : // Make sure x-edges are straight
102 36908 : v /= 2;
103 483238 : if (!v.relative_fuzzy_equals(this->point(8) - this->point(0), affine_tol) ||
104 483154 : !v.relative_fuzzy_equals(this->point(10) - this->point(3), affine_tol) ||
105 966536 : !v.relative_fuzzy_equals(this->point(16) - this->point(4), affine_tol) ||
106 483082 : !v.relative_fuzzy_equals(this->point(18) - this->point(7), affine_tol))
107 384 : return false;
108 : // Make sure xz-faces are identical parallelograms
109 483042 : v = this->point(4) - this->point(0);
110 446166 : if (!v.relative_fuzzy_equals(this->point(7) - this->point(3), affine_tol))
111 0 : return false;
112 36876 : v /= 2;
113 483042 : if (!v.relative_fuzzy_equals(this->point(12) - this->point(0), affine_tol) ||
114 483042 : !v.relative_fuzzy_equals(this->point(13) - this->point(1), affine_tol) ||
115 966084 : !v.relative_fuzzy_equals(this->point(14) - this->point(2), affine_tol) ||
116 483042 : !v.relative_fuzzy_equals(this->point(15) - this->point(3), affine_tol))
117 0 : return false;
118 : // Make sure y-edges are straight
119 483042 : v = (this->point(3) - this->point(0))/2;
120 446166 : if (!v.relative_fuzzy_equals(this->point(11) - this->point(0), affine_tol) ||
121 483042 : !v.relative_fuzzy_equals(this->point(9) - this->point(1), affine_tol) ||
122 966084 : !v.relative_fuzzy_equals(this->point(17) - this->point(5), affine_tol) ||
123 519918 : !v.relative_fuzzy_equals(this->point(19) - this->point(4), affine_tol))
124 0 : return false;
125 : // If all the above checks out, the map is affine
126 36876 : return true;
127 : }
128 :
129 :
130 :
131 9957187 : Order Hex20::default_order() const
132 : {
133 9957187 : return SECOND;
134 : }
135 :
136 :
137 :
138 166732 : std::unique_ptr<Elem> Hex20::build_side_ptr (const unsigned int i)
139 : {
140 166732 : return this->simple_build_side_ptr<Quad8, Hex20>(i);
141 : }
142 :
143 :
144 :
145 348914 : void Hex20::build_side_ptr (std::unique_ptr<Elem> & side,
146 : const unsigned int i)
147 : {
148 348914 : this->simple_build_side_ptr<Hex20>(side, i, QUAD8);
149 348914 : }
150 :
151 :
152 :
153 49056 : unsigned int Hex20::local_side_node(unsigned int side,
154 : unsigned int side_node) const
155 : {
156 3840 : libmesh_assert_less (side, this->n_sides());
157 3840 : libmesh_assert_less (side_node, Hex20::nodes_per_side);
158 :
159 49056 : return Hex20::side_nodes_map[side][side_node];
160 : }
161 :
162 :
163 :
164 3673104 : unsigned int Hex20::local_edge_node(unsigned int edge,
165 : unsigned int edge_node) const
166 : {
167 259296 : libmesh_assert_less (edge, this->n_edges());
168 259296 : libmesh_assert_less (edge_node, Hex20::nodes_per_edge);
169 :
170 3673104 : return Hex20::edge_nodes_map[edge][edge_node];
171 : }
172 :
173 :
174 :
175 494896 : std::unique_ptr<Elem> Hex20::build_edge_ptr (const unsigned int i)
176 : {
177 494896 : return this->simple_build_edge_ptr<Edge3,Hex20>(i);
178 : }
179 :
180 :
181 :
182 2832 : void Hex20::build_edge_ptr (std::unique_ptr<Elem> & edge, const unsigned int i)
183 : {
184 2832 : this->simple_build_edge_ptr<Hex20>(edge, i, EDGE3);
185 2832 : }
186 :
187 :
188 :
189 0 : void Hex20::connectivity(const unsigned int sc,
190 : const IOPackage iop,
191 : std::vector<dof_id_type> & conn) const
192 : {
193 0 : libmesh_assert(_nodes);
194 0 : libmesh_assert_less (sc, this->n_sub_elem());
195 0 : libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
196 :
197 :
198 0 : switch (iop)
199 : {
200 0 : case TECPLOT:
201 : {
202 0 : switch (sc)
203 : {
204 0 : case 0:
205 0 : conn.resize(8);
206 0 : conn[0] = this->node_id(0)+1;
207 0 : conn[1] = this->node_id(1)+1;
208 0 : conn[2] = this->node_id(2)+1;
209 0 : conn[3] = this->node_id(3)+1;
210 0 : conn[4] = this->node_id(4)+1;
211 0 : conn[5] = this->node_id(5)+1;
212 0 : conn[6] = this->node_id(6)+1;
213 0 : conn[7] = this->node_id(7)+1;
214 :
215 0 : return;
216 :
217 0 : default:
218 0 : libmesh_error_msg("Unknown sc = " << sc);
219 : }
220 : }
221 :
222 0 : case VTK:
223 : {
224 0 : switch (sc)
225 : {
226 0 : case 0:
227 0 : conn.resize(20);
228 0 : conn[0] = this->node_id(0);
229 0 : conn[1] = this->node_id(1);
230 0 : conn[2] = this->node_id(2);
231 0 : conn[3] = this->node_id(3);
232 0 : conn[4] = this->node_id(4);
233 0 : conn[5] = this->node_id(5);
234 0 : conn[6] = this->node_id(6);
235 0 : conn[7] = this->node_id(7);
236 0 : conn[8] = this->node_id(8);
237 0 : conn[9] = this->node_id(9);
238 0 : conn[10] = this->node_id(10);
239 0 : conn[11] = this->node_id(11);
240 0 : conn[12] = this->node_id(16);
241 0 : conn[13] = this->node_id(17);
242 0 : conn[14] = this->node_id(18);
243 0 : conn[15] = this->node_id(19);
244 0 : conn[16] = this->node_id(12);
245 0 : conn[17] = this->node_id(13);
246 0 : conn[18] = this->node_id(14);
247 0 : conn[19] = this->node_id(15);
248 0 : return;
249 :
250 0 : default:
251 0 : libmesh_error_msg("Unknown sc = " << sc);
252 : }
253 : }
254 :
255 0 : default:
256 0 : libmesh_error_msg("Unsupported IO package " << iop);
257 : }
258 : }
259 :
260 :
261 :
262 :
263 0 : unsigned short int Hex20::second_order_adjacent_vertex (const unsigned int n,
264 : const unsigned int v) const
265 : {
266 0 : libmesh_assert_greater_equal (n, this->n_vertices());
267 0 : libmesh_assert_less (n, this->n_nodes());
268 0 : libmesh_assert_less (v, 2);
269 : /*
270 : * the _second_order_adjacent_vertices matrix is
271 : * stored in cell_hex.C, since this matrix is identical
272 : * for Hex20 and Hex27 (for the first 12 higher-order nodes)
273 : */
274 0 : return _second_order_adjacent_vertices[n-this->n_vertices()][v];
275 : }
276 :
277 :
278 :
279 : std::pair<unsigned short int, unsigned short int>
280 0 : Hex20::second_order_child_vertex (const unsigned int n) const
281 : {
282 0 : libmesh_assert_greater_equal (n, this->n_vertices());
283 0 : libmesh_assert_less (n, this->n_nodes());
284 : /*
285 : * the _second_order_vertex_child_* vectors are
286 : * stored in cell_hex.C, since they are identical
287 : * for Hex20 and Hex27 (for the first 12 higher-order nodes)
288 : */
289 0 : return std::pair<unsigned short int, unsigned short int>
290 0 : (_second_order_vertex_child_number[n],
291 0 : _second_order_vertex_child_index[n]);
292 : }
293 :
294 :
295 :
296 10621 : Real Hex20::volume () const
297 : {
298 : // This specialization is good for Lagrange mappings only in general
299 10621 : if (this->mapping_type() != LAGRANGE_MAP)
300 44 : return this->Elem::volume();
301 :
302 : // Make copies of our points. It makes the subsequent calculations a bit
303 : // shorter and avoids dereferencing the same pointer multiple times.
304 : Point
305 14797 : x0 = point(0), x1 = point(1), x2 = point(2), x3 = point(3), x4 = point(4),
306 13953 : x5 = point(5), x6 = point(6), x7 = point(7), x8 = point(8), x9 = point(9),
307 13953 : x10 = point(10), x11 = point(11), x12 = point(12), x13 = point(13), x14 = point(14),
308 13953 : x15 = point(15), x16 = point(16), x17 = point(17), x18 = point(18), x19 = point(19);
309 :
310 : // The constant components of the dx/dxi vector,
311 : // dx/dxi = \vec{a000} + \vec{a001}*zeta + \vec{a002}*zeta^2 + ...
312 : // These were copied directly from the output of a Python script.
313 : // There are at most 17 terms with total degree <=3, but only 12
314 : // of them are non-zero for each direction.
315 : Point dx_dxi[17] =
316 : {
317 1262 : x0/8 - x1/8 - x11/4 - x12/4 + x13/4 + x14/4 - x15/4 + x17/4 - x19/4 - x2/8 + x3/8 + x4/8 - x5/8 - x6/8 + x7/8 + x9/4,
318 1262 : x11/4 + x17/4 - x19/4 - x9/4,
319 1262 : -x0/8 + x1/8 + x12/4 - x13/4 - x14/4 + x15/4 + x2/8 - x3/8 - x4/8 + x5/8 + x6/8 - x7/8,
320 1262 : x12/4 - x13/4 + x14/4 - x15/4,
321 1262 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8,
322 1262 : x0/8 - x1/8 - x12/4 + x13/4 - x14/4 + x15/4 + x2/8 - x3/8 + x4/8 - x5/8 + x6/8 - x7/8,
323 1262 : -x0/8 + x1/8 + x11/4 - x17/4 + x19/4 + x2/8 - x3/8 - x4/8 + x5/8 + x6/8 - x7/8 - x9/4,
324 1262 : x0/8 - x1/8 - x11/4 - x17/4 + x19/4 - x2/8 + x3/8 - x4/8 + x5/8 + x6/8 - x7/8 + x9/4,
325 1262 : x0/4 + x1/4 - x10/2 - x16/2 - x18/2 + x2/4 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4 - x8/2,
326 1262 : -x0/4 - x1/4 + x10/2 - x16/2 - x18/2 - x2/4 - x3/4 + x4/4 + x5/4 + x6/4 + x7/4 + x8/2,
327 : Point(0,0,0),
328 1262 : -x0/4 - x1/4 - x10/2 + x16/2 - x18/2 + x2/4 + x3/4 - x4/4 - x5/4 + x6/4 + x7/4 + x8/2,
329 1262 : x0/4 + x1/4 + x10/2 + x16/2 - x18/2 - x2/4 - x3/4 - x4/4 - x5/4 + x6/4 + x7/4 - x8/2,
330 : Point(0,0,0),
331 : Point(0,0,0),
332 : Point(0,0,0),
333 : Point(0,0,0)
334 16406 : };
335 :
336 : // The constant components of the dx/deta vector. These were copied
337 : // directly from the output of a Python script. There are at most
338 : // 17 terms with total degree <=3, but only 12 of them are non-zero
339 : // for each direction.
340 : Point dx_deta[17] =
341 : {
342 1262 : x0/8 + x1/8 + x10/4 - x12/4 - x13/4 + x14/4 + x15/4 - x16/4 + x18/4 - x2/8 - x3/8 + x4/8 + x5/8 - x6/8 - x7/8 - x8/4,
343 1262 : -x10/4 - x16/4 + x18/4 + x8/4,
344 1262 : -x0/8 - x1/8 + x12/4 + x13/4 - x14/4 - x15/4 + x2/8 + x3/8 - x4/8 - x5/8 + x6/8 + x7/8,
345 1262 : x0/4 + x1/4 - x11/2 - x17/2 - x19/2 + x2/4 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4 - x9/2,
346 1262 : -x0/4 - x1/4 + x11/2 - x17/2 - x19/2 - x2/4 - x3/4 + x4/4 + x5/4 + x6/4 + x7/4 + x9/2,
347 : Point(0,0,0),
348 : Point(0,0,0),
349 : Point(0,0,0),
350 1262 : x12/4 - x13/4 + x14/4 - x15/4,
351 1262 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8,
352 1262 : x0/8 - x1/8 - x12/4 + x13/4 - x14/4 + x15/4 + x2/8 - x3/8 + x4/8 - x5/8 + x6/8 - x7/8,
353 1262 : -x0/4 + x1/4 + x11/2 - x17/2 + x19/2 + x2/4 - x3/4 - x4/4 + x5/4 + x6/4 - x7/4 - x9/2,
354 1262 : x0/4 - x1/4 - x11/2 - x17/2 + x19/2 - x2/4 + x3/4 - x4/4 + x5/4 + x6/4 - x7/4 + x9/2,
355 : Point(0,0,0),
356 1262 : -x0/8 - x1/8 - x10/4 + x16/4 - x18/4 + x2/8 + x3/8 - x4/8 - x5/8 + x6/8 + x7/8 + x8/4,
357 1262 : x0/8 + x1/8 + x10/4 + x16/4 - x18/4 - x2/8 - x3/8 - x4/8 - x5/8 + x6/8 + x7/8 - x8/4,
358 : Point(0,0,0)
359 16406 : };
360 :
361 : // The constant components of the dx/dzeta vector. These were copied
362 : // directly from the output of a Python script. There are at most
363 : // 17 terms with total degree <=3, but only 12 of them are non-zero
364 : // for each direction.
365 : Point dx_dzeta[17] =
366 : {
367 1262 : x0/8 + x1/8 - x10/4 - x11/4 + x16/4 + x17/4 + x18/4 + x19/4 + x2/8 + x3/8 - x4/8 - x5/8 - x6/8 - x7/8 - x8/4 - x9/4,
368 1262 : x0/4 + x1/4 - x12/2 - x13/2 - x14/2 - x15/2 + x2/4 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4,
369 : Point(0,0,0),
370 1262 : -x10/4 - x16/4 + x18/4 + x8/4,
371 1262 : -x0/4 - x1/4 + x12/2 + x13/2 - x14/2 - x15/2 + x2/4 + x3/4 - x4/4 - x5/4 + x6/4 + x7/4,
372 : Point(0,0,0),
373 1262 : -x0/8 - x1/8 + x11/4 - x17/4 - x19/4 - x2/8 - x3/8 + x4/8 + x5/8 + x6/8 + x7/8 + x9/4,
374 : Point(0,0,0),
375 1262 : x11/4 + x17/4 - x19/4 - x9/4,
376 1262 : -x0/4 + x1/4 + x12/2 - x13/2 - x14/2 + x15/2 + x2/4 - x3/4 - x4/4 + x5/4 + x6/4 - x7/4,
377 : Point(0,0,0),
378 1262 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8,
379 1262 : x0/4 - x1/4 - x12/2 + x13/2 - x14/2 + x15/2 + x2/4 - x3/4 + x4/4 - x5/4 + x6/4 - x7/4,
380 1262 : x0/8 - x1/8 - x11/4 - x17/4 + x19/4 - x2/8 + x3/8 - x4/8 + x5/8 + x6/8 - x7/8 + x9/4,
381 1262 : -x0/8 - x1/8 + x10/4 - x16/4 - x18/4 - x2/8 - x3/8 + x4/8 + x5/8 + x6/8 + x7/8 + x8/4,
382 : Point(0,0,0),
383 1262 : x0/8 + x1/8 + x10/4 + x16/4 - x18/4 - x2/8 - x3/8 - x4/8 - x5/8 + x6/8 + x7/8 - x8/4,
384 16406 : };
385 :
386 : // The integer exponents for each term.
387 : static const int exponents[17][3] =
388 : {
389 : {0, 0, 0},
390 : {0, 0, 1},
391 : {0, 0, 2},
392 : {0, 1, 0},
393 : {0, 1, 1},
394 : {0, 1, 2},
395 : {0, 2, 0},
396 : {0, 2, 1},
397 : {1, 0, 0},
398 : {1, 0, 1},
399 : {1, 0, 2},
400 : {1, 1, 0},
401 : {1, 1, 1},
402 : {1, 2, 0},
403 : {2, 0, 0},
404 : {2, 0, 1},
405 : {2, 1, 0}
406 : };
407 :
408 :
409 : // 3x3 quadrature, exact for bi-quintics
410 1262 : const int N = 3;
411 10577 : const Real w[N] = {5./9, 8./9, 5./9};
412 :
413 : // Quadrature point locations raised to powers. q[0][2] is
414 : // quadrature point 0, squared, q[1][1] is quadrature point 1 to the
415 : // first power, etc.
416 10577 : const Real q[N][N] =
417 : {
418 : //^0 ^1 ^2
419 : { 1., -std::sqrt(15)/5., 15./25},
420 : { 1., 0., 0.},
421 : { 1., std::sqrt(15)/5., 15./25}
422 : };
423 :
424 :
425 1262 : Real vol = 0.;
426 42308 : for (int i=0; i<N; ++i)
427 126924 : for (int j=0; j<N; ++j)
428 380772 : for (int k=0; k<N; ++k)
429 : {
430 : // Compute dx_dxi, dx_deta, dx_dzeta at the current quadrature point.
431 34074 : Point dx_dxi_q, dx_deta_q, dx_dzeta_q;
432 5140422 : for (int c=0; c<17; ++c)
433 : {
434 579258 : Real coeff =
435 5821497 : q[i][exponents[c][0]] *
436 5821497 : q[j][exponents[c][1]] *
437 4854843 : q[k][exponents[c][2]];
438 :
439 579258 : dx_dxi_q += coeff * dx_dxi[c];
440 579258 : dx_deta_q += coeff * dx_deta[c];
441 579258 : dx_dzeta_q += coeff * dx_dzeta[c];
442 : }
443 :
444 : // Compute scalar triple product, multiply by weight, and accumulate volume.
445 308367 : vol += w[i] * w[j] * w[k] * triple_product(dx_dxi_q, dx_deta_q, dx_dzeta_q);
446 : }
447 :
448 1262 : return vol;
449 : }
450 :
451 :
452 :
453 :
454 : #ifdef LIBMESH_ENABLE_AMR
455 :
456 : const Real Hex20::_embedding_matrix[Hex20::num_children][Hex20::num_nodes][Hex20::num_nodes] =
457 : {
458 : // embedding matrix for child 0
459 : {
460 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
461 : { 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
462 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
463 : { -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
464 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
465 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
466 : { -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000 }, // 5
467 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 6
468 : { -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000 }, // 7
469 : { 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
470 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.250000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
471 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.375000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
472 : { 0.375000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
473 : { 0.375000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
474 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000 }, // 13
475 : { -0.281250, -0.281250, -0.281250, -0.281250, -0.156250, -0.156250, -0.156250, -0.156250, 0.375000, 0.375000, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.125000, 0.125000, 0.125000, 0.125000 }, // 14
476 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000 }, // 15
477 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000 }, // 16
478 : { -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500 }, // 17
479 : { -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000 }, // 18
480 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000 } // 19
481 : },
482 :
483 : // embedding matrix for child 1
484 : {
485 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
486 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
487 : { 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
488 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
489 : { -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
490 : { -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000 }, // 4
491 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
492 : { 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000 }, // 6
493 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 7
494 : { -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
495 : { 0.00000, 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
496 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.375000, 0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
497 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.250000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
498 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000 }, // 12
499 : { 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
500 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000 }, // 14
501 : { -0.281250, -0.281250, -0.281250, -0.281250, -0.156250, -0.156250, -0.156250, -0.156250, 0.375000, 0.375000, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.125000, 0.125000, 0.125000, 0.125000 }, // 15
502 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000 }, // 16
503 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000 }, // 17
504 : { -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000 }, // 18
505 : { -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500 } // 19
506 : },
507 :
508 : // embedding matrix for child 2
509 : {
510 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
511 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
512 : { -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
513 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
514 : { 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
515 : { -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000 }, // 4
516 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 5
517 : { 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000 }, // 6
518 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
519 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.375000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
520 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.750000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
521 : { 0.00000, 0.00000, -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
522 : { -0.125000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
523 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000 }, // 12
524 : { -0.281250, -0.281250, -0.281250, -0.281250, -0.156250, -0.156250, -0.156250, -0.156250, 0.375000, 0.375000, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.125000, 0.125000, 0.125000, 0.125000 }, // 13
525 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000 }, // 14
526 : { 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 15
527 : { -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000 }, // 16
528 : { -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500 }, // 17
529 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000 }, // 18
530 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000 } // 19
531 : },
532 :
533 : // embedding matrix for child 3
534 : {
535 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
536 : { -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
537 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
538 : { 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
539 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
540 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 4
541 : { 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000 }, // 5
542 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
543 : { 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000 }, // 7
544 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.375000, 0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
545 : { 0.00000, -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
546 : { 0.00000, 0.00000, 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
547 : { -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.750000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
548 : { -0.281250, -0.281250, -0.281250, -0.281250, -0.156250, -0.156250, -0.156250, -0.156250, 0.375000, 0.375000, 0.375000, 0.375000, 0.187500, 0.187500, 0.187500, 0.187500, 0.125000, 0.125000, 0.125000, 0.125000 }, // 12
549 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000 }, // 13
550 : { 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
551 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.250000, 0.00000 }, // 15
552 : { -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000 }, // 16
553 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000 }, // 17
554 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000 }, // 18
555 : { -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500 } // 19
556 : },
557 :
558 : // embedding matrix for child 4
559 : {
560 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
561 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
562 : { -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000 }, // 1
563 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 2
564 : { -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000 }, // 3
565 : { 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
566 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 5
567 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000 }, // 6
568 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 7
569 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000 }, // 8
570 : { -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500 }, // 9
571 : { -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000 }, // 10
572 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000 }, // 11
573 : { -0.125000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
574 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 13
575 : { -0.156250, -0.156250, -0.156250, -0.156250, -0.281250, -0.281250, -0.281250, -0.281250, 0.125000, 0.125000, 0.125000, 0.125000, 0.187500, 0.187500, 0.187500, 0.187500, 0.375000, 0.375000, 0.375000, 0.375000 }, // 14
576 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000 }, // 15
577 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 16
578 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.250000, 0.375000 }, // 17
579 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.375000, 0.750000 }, // 18
580 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000 } // 19
581 : },
582 :
583 : // embedding matrix for child 5
584 : {
585 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
586 : { -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000 }, // 0
587 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
588 : { 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000 }, // 2
589 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 3
590 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 4
591 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
592 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 6
593 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000 }, // 7
594 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000 }, // 8
595 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000 }, // 9
596 : { -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000 }, // 10
597 : { -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500 }, // 11
598 : { -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 12
599 : { 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
600 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 14
601 : { -0.156250, -0.156250, -0.156250, -0.156250, -0.281250, -0.281250, -0.281250, -0.281250, 0.125000, 0.125000, 0.125000, 0.125000, 0.187500, 0.187500, 0.187500, 0.187500, 0.375000, 0.375000, 0.375000, 0.375000 }, // 15
602 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 16
603 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 17
604 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.375000, 0.250000 }, // 18
605 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.375000, 0.250000, 0.375000 } // 19
606 : },
607 :
608 : // embedding matrix for child 6
609 : {
610 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
611 : { -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000 }, // 0
612 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 1
613 : { 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000 }, // 2
614 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
615 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 4
616 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000 }, // 5
617 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 6
618 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
619 : { -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, 0.187500, 0.125000, 0.187500, 0.375000, 0.375000, 0.125000, 0.125000, 0.375000, 0.187500, 0.125000, 0.187500, 0.375000 }, // 8
620 : { -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500 }, // 9
621 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000 }, // 10
622 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.375000 }, // 11
623 : { -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000 }, // 12
624 : { -0.156250, -0.156250, -0.156250, -0.156250, -0.281250, -0.281250, -0.281250, -0.281250, 0.125000, 0.125000, 0.125000, 0.125000, 0.187500, 0.187500, 0.187500, 0.187500, 0.375000, 0.375000, 0.375000, 0.375000 }, // 13
625 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 14
626 : { 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 15
627 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.250000, 0.375000, 0.750000 }, // 16
628 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.750000, 0.375000 }, // 17
629 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 18
630 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000 } // 19
631 : },
632 :
633 : // embedding matrix for child 7
634 : {
635 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
636 : { -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, -0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000, 0.250000 }, // 0
637 : { 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000 }, // 1
638 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
639 : { 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, -0.250000, -0.250000, 0.00000, 0.00000, 0.500000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.00000, 0.00000, 0.500000, 0.00000 }, // 3
640 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.250000, -0.250000, -0.250000, -0.250000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.500000, 0.500000, 0.500000, 0.500000 }, // 4
641 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 5
642 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
643 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 7
644 : { -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000 }, // 8
645 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.250000, 0.750000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000 }, // 9
646 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.750000, 0.250000, 0.00000, 0.00000, 0.375000, 0.00000 }, // 10
647 : { -0.156250, -0.156250, -0.281250, -0.281250, -0.156250, -0.156250, -0.281250, -0.281250, 0.125000, 0.187500, 0.375000, 0.187500, 0.125000, 0.125000, 0.375000, 0.375000, 0.125000, 0.187500, 0.375000, 0.187500 }, // 11
648 : { -0.156250, -0.156250, -0.156250, -0.156250, -0.281250, -0.281250, -0.281250, -0.281250, 0.125000, 0.125000, 0.125000, 0.125000, 0.187500, 0.187500, 0.187500, 0.187500, 0.375000, 0.375000, 0.375000, 0.375000 }, // 12
649 : { 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 13
650 : { 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
651 : { 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, -0.187500, -0.187500, 0.00000, 0.00000, 0.250000, 0.00000, 0.00000, 0.00000, 0.375000, 0.375000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 15
652 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000, 0.375000, 0.250000 }, // 16
653 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 17
654 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 18
655 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.187500, -0.187500, -0.187500, -0.187500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.250000, 0.375000, 0.750000, 0.375000 } // 19
656 : }
657 : };
658 :
659 : #endif
660 :
661 : void
662 8352 : Hex20::permute(unsigned int perm_num)
663 : {
664 768 : libmesh_assert_less (perm_num, 24);
665 8352 : const unsigned int side = perm_num % 6;
666 8352 : const unsigned int rotate = perm_num / 6;
667 :
668 23040 : for (unsigned int i = 0; i != rotate; ++i)
669 : {
670 14688 : swap4nodes(0,1,2,3);
671 14688 : swap4nodes(4,5,6,7);
672 14688 : swap4nodes(8,9,10,11);
673 14688 : swap4nodes(12,13,14,15);
674 14688 : swap4nodes(16,17,18,19);
675 13248 : swap4neighbors(1,2,3,4);
676 : }
677 :
678 8352 : switch (side) {
679 96 : case 0:
680 96 : break;
681 1152 : case 1:
682 1152 : swap4nodes(3,7,4,0);
683 1152 : swap4nodes(11,15,19,12);
684 1152 : swap4nodes(10,18,16,8);
685 1152 : swap4nodes(2,6,5,1);
686 1152 : swap4nodes(9,14,17,13);
687 1056 : swap4neighbors(0,3,5,1);
688 1056 : break;
689 1152 : case 2:
690 1152 : swap4nodes(0,4,5,1);
691 1152 : swap4nodes(8,12,16,13);
692 1152 : swap4nodes(3,7,6,2);
693 1152 : swap4nodes(10,15,18,14);
694 1152 : swap4nodes(11,19,17,9);
695 1056 : swap4neighbors(0,4,5,2);
696 1056 : break;
697 1152 : case 3:
698 1152 : swap4nodes(0,4,7,3);
699 1152 : swap4nodes(12,19,15,11);
700 1152 : swap4nodes(8,16,18,10);
701 1152 : swap4nodes(1,5,6,2);
702 1152 : swap4nodes(13,17,14,9);
703 1056 : swap4neighbors(0,1,5,3);
704 1056 : break;
705 1152 : case 4:
706 1152 : swap4nodes(1,5,4,0);
707 1152 : swap4nodes(8,13,16,12);
708 1152 : swap4nodes(9,17,19,11);
709 1152 : swap4nodes(2,6,7,3);
710 1152 : swap4nodes(10,14,18,15);
711 1056 : swap4neighbors(0,2,5,4);
712 1056 : break;
713 2592 : case 5:
714 2592 : swap2nodes(0,7);
715 2592 : swap2nodes(8,18);
716 2592 : swap2nodes(1,6);
717 2592 : swap2nodes(2,5);
718 2592 : swap2nodes(10,16);
719 2592 : swap2nodes(3,4);
720 2592 : swap2nodes(11,19);
721 2592 : swap2nodes(12,15);
722 2592 : swap2nodes(9,17);
723 2592 : swap2nodes(13,14);
724 288 : swap2neighbors(0,5);
725 288 : swap2neighbors(1,3);
726 288 : break;
727 0 : default:
728 0 : libmesh_error();
729 : }
730 8352 : }
731 :
732 :
733 : void
734 288 : Hex20::flip(BoundaryInfo * boundary_info)
735 : {
736 24 : libmesh_assert(boundary_info);
737 :
738 288 : swap2nodes(0,1);
739 288 : swap2nodes(2,3);
740 288 : swap2nodes(4,5);
741 288 : swap2nodes(6,7);
742 288 : swap2nodes(9,11);
743 288 : swap2nodes(12,13);
744 288 : swap2nodes(14,15);
745 288 : swap2nodes(17,19);
746 24 : swap2neighbors(2,4);
747 288 : swap2boundarysides(2,4,boundary_info);
748 288 : swap2boundaryedges(1,3,boundary_info);
749 288 : swap2boundaryedges(4,5,boundary_info);
750 288 : swap2boundaryedges(6,7,boundary_info);
751 288 : swap2boundaryedges(9,11,boundary_info);
752 288 : }
753 :
754 :
755 : ElemType
756 72072 : Hex20::side_type (const unsigned int libmesh_dbg_var(s)) const
757 : {
758 6072 : libmesh_assert_less (s, 6);
759 72072 : return QUAD8;
760 : }
761 :
762 :
763 : } // namespace libMesh
|