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_hex27.h"
21 : #include "libmesh/fe_reference_element_traits.h"
22 : #include "libmesh/edge_edge3.h"
23 : #include "libmesh/face_quad9.h"
24 : #include "libmesh/enum_io_package.h"
25 : #include "libmesh/enum_order.h"
26 :
27 : namespace libMesh
28 : {
29 :
30 :
31 :
32 : // ------------------------------------------------------------
33 : // Hex27 class static member initializations
34 : const int Hex27::num_nodes;
35 : const int Hex27::nodes_per_side;
36 : const int Hex27::nodes_per_edge;
37 :
38 : const ReferenceElementTable<Hex27::num_sides, Hex27::nodes_per_side>
39 : Hex27::side_nodes_map = build_side_nodes<Hex27::num_sides, Hex27::nodes_per_side>(HEX27);
40 :
41 : const ReferenceElementTable<Hex27::num_edges, Hex27::nodes_per_edge>
42 : Hex27::edge_nodes_map = hex_edge_nodes();
43 :
44 : // ------------------------------------------------------------
45 : // Hex27 class member functions
46 :
47 11576959 : bool Hex27::is_vertex(const unsigned int i) const
48 : {
49 11576959 : if (i < 8)
50 3486379 : return true;
51 2035262 : return false;
52 : }
53 :
54 3688 : bool Hex27::is_edge(const unsigned int i) const
55 : {
56 3688 : if (i < 8)
57 0 : return false;
58 3688 : if (i > 19)
59 1384 : return false;
60 576 : return true;
61 : }
62 :
63 1444027 : bool Hex27::is_face(const unsigned int i) const
64 : {
65 1444027 : if (i == 26)
66 1187 : return false;
67 1439511 : if (i > 19)
68 217731 : return true;
69 305500 : return false;
70 : }
71 :
72 720114 : bool Hex27::is_node_on_side(const unsigned int n,
73 : const unsigned int s) const
74 : {
75 181305 : libmesh_assert_less (s, n_sides());
76 181305 : return std::find(std::begin(side_nodes_map[s]),
77 181305 : std::end(side_nodes_map[s]),
78 720114 : n) != std::end(side_nodes_map[s]);
79 : }
80 :
81 : std::vector<unsigned>
82 155302102 : Hex27::nodes_on_side(const unsigned int s) const
83 : {
84 37876614 : libmesh_assert_less(s, n_sides());
85 155302102 : return {std::begin(side_nodes_map[s]), std::end(side_nodes_map[s])};
86 : }
87 :
88 : std::vector<unsigned>
89 2772 : Hex27::nodes_on_edge(const unsigned int e) const
90 : {
91 696 : libmesh_assert_less(e, n_edges());
92 2772 : return {std::begin(edge_nodes_map[e]), std::end(edge_nodes_map[e])};
93 : }
94 :
95 668292 : bool Hex27::is_node_on_edge(const unsigned int n,
96 : const unsigned int e) const
97 : {
98 170718 : libmesh_assert_less (e, n_edges());
99 170718 : return std::find(std::begin(edge_nodes_map[e]),
100 170718 : std::end(edge_nodes_map[e]),
101 668292 : n) != std::end(edge_nodes_map[e]);
102 : }
103 :
104 :
105 :
106 900967 : bool Hex27::has_affine_map() const
107 : {
108 : // Make sure x-edge endpoints are affine
109 444776 : Point v = this->point(1) - this->point(0);
110 893562 : if (!v.relative_fuzzy_equals(this->point(2) - this->point(3), affine_tol) ||
111 1792220 : !v.relative_fuzzy_equals(this->point(5) - this->point(4), affine_tol) ||
112 1333708 : !v.relative_fuzzy_equals(this->point(6) - this->point(7), affine_tol))
113 9730 : return false;
114 : // Make sure x-edges are straight
115 : // and x-face and center points are centered
116 220075 : v /= 2;
117 1110832 : if (!v.relative_fuzzy_equals(this->point(8) - this->point(0), affine_tol) ||
118 1110452 : !v.relative_fuzzy_equals(this->point(10) - this->point(3), affine_tol) ||
119 1110364 : !v.relative_fuzzy_equals(this->point(16) - this->point(4), affine_tol) ||
120 1110284 : !v.relative_fuzzy_equals(this->point(18) - this->point(7), affine_tol) ||
121 1110252 : !v.relative_fuzzy_equals(this->point(20) - this->point(11), affine_tol) ||
122 1110252 : !v.relative_fuzzy_equals(this->point(21) - this->point(12), affine_tol) ||
123 1110252 : !v.relative_fuzzy_equals(this->point(23) - this->point(15), affine_tol) ||
124 2221404 : !v.relative_fuzzy_equals(this->point(25) - this->point(19), affine_tol) ||
125 1110464 : !v.relative_fuzzy_equals(this->point(26) - this->point(24), affine_tol))
126 848 : return false;
127 : // Make sure xz-faces are identical parallelograms
128 1110252 : v = this->point(4) - this->point(0);
129 890389 : if (!v.relative_fuzzy_equals(this->point(7) - this->point(3), affine_tol))
130 0 : return false;
131 219863 : v /= 2;
132 1110252 : if (!v.relative_fuzzy_equals(this->point(12) - this->point(0), affine_tol) ||
133 1110252 : !v.relative_fuzzy_equals(this->point(13) - this->point(1), affine_tol) ||
134 1110252 : !v.relative_fuzzy_equals(this->point(14) - this->point(2), affine_tol) ||
135 1110252 : !v.relative_fuzzy_equals(this->point(15) - this->point(3), affine_tol) ||
136 2220504 : !v.relative_fuzzy_equals(this->point(22) - this->point(9), affine_tol) ||
137 1110252 : !v.relative_fuzzy_equals(this->point(24) - this->point(11), affine_tol))
138 0 : return false;
139 : // Make sure y-edges are straight
140 1110252 : v = (this->point(3) - this->point(0))/2;
141 890389 : if (!v.relative_fuzzy_equals(this->point(11) - this->point(0), affine_tol) ||
142 1110252 : !v.relative_fuzzy_equals(this->point(9) - this->point(1), affine_tol) ||
143 2220504 : !v.relative_fuzzy_equals(this->point(17) - this->point(5), affine_tol) ||
144 1330115 : !v.relative_fuzzy_equals(this->point(19) - this->point(4), affine_tol))
145 0 : return false;
146 : // If all the above checks out, the map is affine
147 219863 : return true;
148 : }
149 :
150 :
151 :
152 33282618 : Order Hex27::default_order() const
153 : {
154 33282618 : return SECOND;
155 : }
156 :
157 :
158 :
159 0 : dof_id_type Hex27::key (const unsigned int s) const
160 : {
161 0 : libmesh_assert_less (s, this->n_sides());
162 :
163 : // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
164 0 : switch (s)
165 : {
166 0 : case 0: // the face at z=0
167 :
168 : return
169 0 : this->compute_key (this->node_id(20));
170 :
171 0 : case 1: // the face at y = 0
172 :
173 : return
174 0 : this->compute_key (this->node_id(21));
175 :
176 0 : case 2: // the face at x=1
177 :
178 : return
179 0 : this->compute_key (this->node_id(22));
180 :
181 0 : case 3: // the face at y=1
182 :
183 : return
184 0 : this->compute_key (this->node_id(23));
185 :
186 0 : case 4: // the face at x=0
187 :
188 : return
189 0 : this->compute_key (this->node_id(24));
190 :
191 0 : case 5: // the face at z=1
192 :
193 : return
194 0 : this->compute_key (this->node_id(25));
195 :
196 0 : default:
197 0 : libmesh_error_msg("Invalid side " << s);
198 : }
199 : }
200 :
201 :
202 :
203 1084677 : unsigned int Hex27::local_side_node(unsigned int side,
204 : unsigned int side_node) const
205 : {
206 184944 : libmesh_assert_less (side, this->n_sides());
207 184944 : libmesh_assert_less (side_node, Hex27::nodes_per_side);
208 :
209 1084677 : return Hex27::side_nodes_map[side][side_node];
210 : }
211 :
212 :
213 :
214 202699186 : unsigned int Hex27::local_edge_node(unsigned int edge,
215 : unsigned int edge_node) const
216 : {
217 50433036 : libmesh_assert_less (edge, this->n_edges());
218 50433036 : libmesh_assert_less (edge_node, Hex27::nodes_per_edge);
219 :
220 202699186 : return Hex27::edge_nodes_map[edge][edge_node];
221 : }
222 :
223 :
224 :
225 28484226 : std::unique_ptr<Elem> Hex27::build_side_ptr (const unsigned int i)
226 : {
227 28484226 : return this->simple_build_side_ptr<Quad9, Hex27>(i);
228 : }
229 :
230 :
231 :
232 831198 : void Hex27::build_side_ptr (std::unique_ptr<Elem> & side,
233 : const unsigned int i)
234 : {
235 831198 : this->simple_build_side_ptr<Hex27>(side, i, QUAD9);
236 831198 : }
237 :
238 :
239 :
240 211587 : std::unique_ptr<Elem> Hex27::build_edge_ptr (const unsigned int i)
241 : {
242 211587 : return this->simple_build_edge_ptr<Edge3,Hex27>(i);
243 : }
244 :
245 :
246 :
247 4368 : void Hex27::build_edge_ptr (std::unique_ptr<Elem> & edge, const unsigned int i)
248 : {
249 4368 : this->simple_build_edge_ptr<Hex27>(edge, i, EDGE3);
250 4368 : }
251 :
252 :
253 :
254 0 : void Hex27::connectivity(const unsigned int sc,
255 : const IOPackage iop,
256 : std::vector<dof_id_type> & conn) const
257 : {
258 0 : libmesh_assert(_nodes);
259 0 : libmesh_assert_less (sc, this->n_sub_elem());
260 0 : libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
261 :
262 0 : conn.resize(8);
263 :
264 0 : switch (iop)
265 : {
266 0 : case TECPLOT:
267 : {
268 0 : switch (sc)
269 : {
270 0 : case 0:
271 :
272 0 : conn[0] = this->node_id(0)+1;
273 0 : conn[1] = this->node_id(8)+1;
274 0 : conn[2] = this->node_id(20)+1;
275 0 : conn[3] = this->node_id(11)+1;
276 0 : conn[4] = this->node_id(12)+1;
277 0 : conn[5] = this->node_id(21)+1;
278 0 : conn[6] = this->node_id(26)+1;
279 0 : conn[7] = this->node_id(24)+1;
280 :
281 0 : return;
282 :
283 0 : case 1:
284 :
285 0 : conn[0] = this->node_id(8)+1;
286 0 : conn[1] = this->node_id(1)+1;
287 0 : conn[2] = this->node_id(9)+1;
288 0 : conn[3] = this->node_id(20)+1;
289 0 : conn[4] = this->node_id(21)+1;
290 0 : conn[5] = this->node_id(13)+1;
291 0 : conn[6] = this->node_id(22)+1;
292 0 : conn[7] = this->node_id(26)+1;
293 :
294 0 : return;
295 :
296 0 : case 2:
297 :
298 0 : conn[0] = this->node_id(11)+1;
299 0 : conn[1] = this->node_id(20)+1;
300 0 : conn[2] = this->node_id(10)+1;
301 0 : conn[3] = this->node_id(3)+1;
302 0 : conn[4] = this->node_id(24)+1;
303 0 : conn[5] = this->node_id(26)+1;
304 0 : conn[6] = this->node_id(23)+1;
305 0 : conn[7] = this->node_id(15)+1;
306 :
307 0 : return;
308 :
309 0 : case 3:
310 :
311 0 : conn[0] = this->node_id(20)+1;
312 0 : conn[1] = this->node_id(9)+1;
313 0 : conn[2] = this->node_id(2)+1;
314 0 : conn[3] = this->node_id(10)+1;
315 0 : conn[4] = this->node_id(26)+1;
316 0 : conn[5] = this->node_id(22)+1;
317 0 : conn[6] = this->node_id(14)+1;
318 0 : conn[7] = this->node_id(23)+1;
319 :
320 0 : return;
321 :
322 0 : case 4:
323 :
324 0 : conn[0] = this->node_id(12)+1;
325 0 : conn[1] = this->node_id(21)+1;
326 0 : conn[2] = this->node_id(26)+1;
327 0 : conn[3] = this->node_id(24)+1;
328 0 : conn[4] = this->node_id(4)+1;
329 0 : conn[5] = this->node_id(16)+1;
330 0 : conn[6] = this->node_id(25)+1;
331 0 : conn[7] = this->node_id(19)+1;
332 :
333 0 : return;
334 :
335 0 : case 5:
336 :
337 0 : conn[0] = this->node_id(21)+1;
338 0 : conn[1] = this->node_id(13)+1;
339 0 : conn[2] = this->node_id(22)+1;
340 0 : conn[3] = this->node_id(26)+1;
341 0 : conn[4] = this->node_id(16)+1;
342 0 : conn[5] = this->node_id(5)+1;
343 0 : conn[6] = this->node_id(17)+1;
344 0 : conn[7] = this->node_id(25)+1;
345 :
346 0 : return;
347 :
348 0 : case 6:
349 :
350 0 : conn[0] = this->node_id(24)+1;
351 0 : conn[1] = this->node_id(26)+1;
352 0 : conn[2] = this->node_id(23)+1;
353 0 : conn[3] = this->node_id(15)+1;
354 0 : conn[4] = this->node_id(19)+1;
355 0 : conn[5] = this->node_id(25)+1;
356 0 : conn[6] = this->node_id(18)+1;
357 0 : conn[7] = this->node_id(7)+1;
358 :
359 0 : return;
360 :
361 0 : case 7:
362 :
363 0 : conn[0] = this->node_id(26)+1;
364 0 : conn[1] = this->node_id(22)+1;
365 0 : conn[2] = this->node_id(14)+1;
366 0 : conn[3] = this->node_id(23)+1;
367 0 : conn[4] = this->node_id(25)+1;
368 0 : conn[5] = this->node_id(17)+1;
369 0 : conn[6] = this->node_id(6)+1;
370 0 : conn[7] = this->node_id(18)+1;
371 :
372 0 : return;
373 :
374 0 : default:
375 0 : libmesh_error_msg("Invalid sc = " << sc);
376 : }
377 : }
378 :
379 0 : case VTK:
380 : {
381 : // VTK now supports VTK_TRIQUADRATIC_HEXAHEDRON directly
382 0 : conn.resize(27);
383 :
384 0 : conn[0] = this->node_id(0);
385 0 : conn[1] = this->node_id(1);
386 0 : conn[2] = this->node_id(2);
387 0 : conn[3] = this->node_id(3);
388 0 : conn[4] = this->node_id(4);
389 0 : conn[5] = this->node_id(5);
390 0 : conn[6] = this->node_id(6);
391 0 : conn[7] = this->node_id(7);
392 0 : conn[8] = this->node_id(8);
393 0 : conn[9] = this->node_id(9);
394 0 : conn[10] = this->node_id(10);
395 0 : conn[11] = this->node_id(11);
396 0 : conn[12] = this->node_id(16);
397 0 : conn[13] = this->node_id(17);
398 0 : conn[14] = this->node_id(18);
399 0 : conn[15] = this->node_id(19);
400 0 : conn[16] = this->node_id(12);
401 0 : conn[17] = this->node_id(13);
402 0 : conn[18] = this->node_id(14);
403 0 : conn[19] = this->node_id(15);
404 0 : conn[20] = this->node_id(24);
405 0 : conn[21] = this->node_id(22);
406 0 : conn[22] = this->node_id(21);
407 0 : conn[23] = this->node_id(23);
408 0 : conn[24] = this->node_id(20);
409 0 : conn[25] = this->node_id(25);
410 0 : conn[26] = this->node_id(26);
411 :
412 0 : return;
413 : }
414 :
415 0 : default:
416 0 : libmesh_error_msg("Unsupported IO package " << iop);
417 : }
418 : }
419 :
420 :
421 :
422 :
423 :
424 562539 : unsigned int Hex27::n_second_order_adjacent_vertices (const unsigned int n) const
425 : {
426 168656 : switch (n)
427 : {
428 105664 : case 8:
429 : case 9:
430 : case 10:
431 : case 11:
432 : case 12:
433 : case 13:
434 : case 14:
435 : case 15:
436 : case 16:
437 : case 17:
438 : case 18:
439 : case 19:
440 105664 : return 2;
441 :
442 53848 : case 20:
443 : case 21:
444 : case 22:
445 : case 23:
446 : case 24:
447 : case 25:
448 53848 : return 4;
449 :
450 9144 : case 26:
451 9144 : return 8;
452 :
453 0 : default:
454 0 : libmesh_error_msg("Invalid node number n = " << n);
455 : }
456 : }
457 :
458 :
459 :
460 1667304 : unsigned short int Hex27::second_order_adjacent_vertex (const unsigned int n,
461 : const unsigned int v) const
462 : {
463 499872 : libmesh_assert_greater_equal (n, this->n_vertices());
464 499872 : libmesh_assert_less (n, this->n_nodes());
465 :
466 1667304 : switch (n)
467 : {
468 : /*
469 : * these are all nodes that are unique to Hex27,
470 : * use our _remaining.... matrix
471 : */
472 718440 : case 20:
473 : case 21:
474 : case 22:
475 : case 23:
476 : case 24:
477 : case 25:
478 : {
479 215392 : libmesh_assert_less (v, 4);
480 718440 : return _remaining_second_order_adjacent_vertices[n-20][v];
481 : }
482 :
483 : /*
484 : * for the bubble node the return value is simply v.
485 : * Why? -- the user asks for the v-th adjacent vertex,
486 : * from \p n_second_order_adjacent_vertices() there
487 : * are 8 adjacent vertices, and these happen to be
488 : * 0..7
489 : */
490 244008 : case 26:
491 : {
492 73152 : libmesh_assert_less (v, 8);
493 244008 : return static_cast<unsigned short int>(v);
494 : }
495 :
496 : /*
497 : * nodes 8..19:
498 : * these are all nodes that are identical for
499 : * Hex20 and Hex27. Therefore use the
500 : * matrix stored in cell_hex.C
501 : */
502 704856 : default:
503 : {
504 211328 : libmesh_assert_less (v, 2);
505 704856 : return _second_order_adjacent_vertices[n-this->n_vertices()][v];
506 : }
507 : }
508 : }
509 :
510 :
511 :
512 : const unsigned short int Hex27::_remaining_second_order_adjacent_vertices[6][4] =
513 : {
514 : { 0, 1, 2, 3}, // vertices adjacent to node 20 face nodes
515 : { 0, 1, 4, 5}, // vertices adjacent to node 21
516 : { 1, 2, 5, 6}, // vertices adjacent to node 22
517 : { 2, 3, 6, 7}, // vertices adjacent to node 23
518 : { 0, 3, 4, 7}, // vertices adjacent to node 24
519 : { 4, 5, 6, 7}, // vertices adjacent to node 25
520 : };
521 :
522 :
523 :
524 : std::pair<unsigned short int, unsigned short int>
525 0 : Hex27::second_order_child_vertex (const unsigned int n) const
526 : {
527 0 : libmesh_assert_greater_equal (n, this->n_vertices());
528 0 : libmesh_assert_less (n, this->n_nodes());
529 : /*
530 : * the _second_order_vertex_child_* vectors are
531 : * stored in cell_hex.C, since they are identical
532 : * for Hex20 and Hex27 (for the first 12 higher-order nodes)
533 : */
534 0 : return std::pair<unsigned short int, unsigned short int>
535 0 : (_second_order_vertex_child_number[n],
536 0 : _second_order_vertex_child_index[n]);
537 : }
538 :
539 :
540 :
541 3129 : Real Hex27::volume () const
542 : {
543 : // This specialization is good for Lagrange mappings only in general
544 3129 : if (this->mapping_type() != LAGRANGE_MAP)
545 310 : return this->Elem::volume();
546 :
547 : // Make copies of our points. It makes the subsequent calculations a bit
548 : // shorter and avoids dereferencing the same pointer multiple times.
549 : Point
550 9245 : x0 = point(0), x1 = point(1), x2 = point(2), x3 = point(3), x4 = point(4), x5 = point(5), x6 = point(6), x7 = point(7), x8 = point(8),
551 8531 : x9 = point(9), x10 = point(10), x11 = point(11), x12 = point(12), x13 = point(13), x14 = point(14), x15 = point(15), x16 = point(16), x17 = point(17),
552 8531 : x18 = point(18), x19 = point(19), x20 = point(20), x21 = point(21), x22 = point(22), x23 = point(23), x24 = point(24), x25 = point(25), x26 = point(26);
553 :
554 : // The constant components of the dx/dxi vector,
555 : // dx/dxi = \vec{a000} + \vec{a001}*zeta + \vec{a002}*zeta^2 + ...
556 : // All of the xi^2 terms are zero.
557 : // These were copied directly from the output of a Python script.
558 : Point dx_dxi[3][3][3] =
559 : {
560 : {
561 : {
562 720 : x22/2 - x24/2, // 0, 0, 0
563 720 : x11/4 + x17/4 - x19/4 - x9/4, // 0, 0, 1
564 720 : -x11/4 + x17/4 - x19/4 - x22/2 + x24/2 + x9/4 // 0, 0, 2
565 : },
566 :
567 : {
568 720 : x12/4 - x13/4 + x14/4 - x15/4, // 0, 1, 0
569 720 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 0, 1, 1
570 720 : x0/8 - x1/8 - x12/4 + x13/4 - x14/4 + x15/4 + x2/8 - x3/8 + x4/8 - x5/8 + x6/8 - x7/8 // 0, 1, 2
571 : },
572 :
573 : {
574 720 : -x12/4 + x13/4 + x14/4 - x15/4 - x22/2 + x24/2, // 0, 2, 0
575 720 : x0/8 - x1/8 - x11/4 - x17/4 + x19/4 - x2/8 + x3/8 - x4/8 + x5/8 + x6/8 - x7/8 + x9/4, // 0, 2, 1
576 720 : -x0/8 + x1/8 + x11/4 + x12/4 - x13/4 - x14/4 + x15/4 - x17/4 + x19/4 + x2/8 + x22/2 - x24/2 - x3/8 - x4/8 + x5/8 + x6/8 - x7/8 - x9/4 // 0, 2, 2
577 : }
578 : },
579 : {
580 : {
581 720 : x22 + x24 - 2*x26, // 1, 0, 0
582 720 : -x11/2 + x17/2 + x19/2 + x20 - x25 - x9/2, // 1, 0, 1
583 720 : x11/2 + x17/2 + x19/2 - x20 - x22 - x24 - x25 + 2*x26 + x9/2 // 1, 0, 2
584 : },
585 :
586 : {
587 720 : -x12/2 - x13/2 + x14/2 + x15/2 + x21 - x23, // 1, 1, 0
588 720 : x0/4 + x1/4 + x10/2 + x16/2 - x18/2 - x2/4 - x3/4 - x4/4 - x5/4 + x6/4 + x7/4 - x8/2, // 1, 1, 1
589 720 : -x0/4 - x1/4 - x10/2 + x12/2 + x13/2 - x14/2 - x15/2 + x16/2 - x18/2 + x2/4 - x21 + x23 + x3/4 - x4/4 - x5/4 + x6/4 + x7/4 + x8/2 // 1, 1, 2
590 : },
591 :
592 : {
593 720 : x12/2 + x13/2 + x14/2 + x15/2 - x21 - x22 - x23 - x24 + 2*x26, // 1, 2, 0
594 720 : -x0/4 - x1/4 + x10/2 + x11/2 - x16/2 - x17/2 - x18/2 - x19/2 - x2/4 - x20 + x25 - x3/4 + x4/4 + x5/4 + x6/4 + x7/4 + x8/2 + x9/2, // 1, 2, 1
595 720 : x0/4 + x1/4 - x10/2 - x11/2 - x12/2 - x13/2 - x14/2 - x15/2 - x16/2 - x17/2 - x18/2 - x19/2 + x2/4 + x20 + x21 + x22 + x23 + x24 + x25 - 2*x26 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4 - x8/2 - x9/2 // 1, 2, 2
596 : }
597 : },
598 : {
599 : {Point(0,0,0), Point(0,0,0), Point(0,0,0)},
600 : {Point(0,0,0), Point(0,0,0), Point(0,0,0)},
601 : {Point(0,0,0), Point(0,0,0), Point(0,0,0)}
602 : }
603 13680 : };
604 :
605 :
606 :
607 : // The constant components of the dx/deta vector, all of the eta^2
608 : // terms are zero. These were copied directly from the output of a
609 : // Python script.
610 : Point dx_deta[3][3][3] =
611 : {
612 : {
613 : {
614 720 : -x21/2 + x23/2, // 0, 0, 0
615 720 : -x10/4 - x16/4 + x18/4 + x8/4, // 0, 0, 1
616 720 : x10/4 - x16/4 + x18/4 + x21/2 - x23/2 - x8/4 // 0, 0, 2
617 : },
618 : {
619 720 : x21 + x23 - 2*x26, // 0, 1, 0
620 720 : -x10/2 + x16/2 + x18/2 + x20 - x25 - x8/2, // 0, 1, 1
621 720 : x10/2 + x16/2 + x18/2 - x20 - x21 - x23 - x25 + 2*x26 + x8/2 // 0, 1, 2
622 : },
623 : {
624 : Point(0,0,0), // 0, 2, 0
625 : Point(0,0,0), // 0, 2, 1
626 : Point(0,0,0) // 0, 2, 2
627 : }
628 : },
629 :
630 : {
631 : {
632 720 : x12/4 - x13/4 + x14/4 - x15/4, // 1, 0, 0
633 720 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 1, 0, 1
634 720 : x0/8 - x1/8 - x12/4 + x13/4 - x14/4 + x15/4 + x2/8 - x3/8 + x4/8 - x5/8 + x6/8 - x7/8 // 1, 0, 2
635 : },
636 : {
637 720 : -x12/2 + x13/2 + x14/2 - x15/2 - x22 + x24, // 1, 1, 0
638 720 : x0/4 - x1/4 - x11/2 - x17/2 + x19/2 - x2/4 + x3/4 - x4/4 + x5/4 + x6/4 - x7/4 + x9/2, // 1, 1, 1
639 720 : -x0/4 + x1/4 + x11/2 + x12/2 - x13/2 - x14/2 + x15/2 - x17/2 + x19/2 + x2/4 + x22 - x24 - x3/4 - x4/4 + x5/4 + x6/4 - x7/4 - x9/2 // 1, 1, 2
640 : },
641 : {
642 : Point(0,0,0), // 1, 2, 0
643 : Point(0,0,0), // 1, 2, 1
644 : Point(0,0,0) // 1, 2, 2
645 : }
646 : },
647 :
648 : {
649 : {
650 720 : -x12/4 - x13/4 + x14/4 + x15/4 + x21/2 - x23/2, // 2, 0, 0
651 720 : x0/8 + x1/8 + x10/4 + x16/4 - x18/4 - x2/8 - x3/8 - x4/8 - x5/8 + x6/8 + x7/8 - x8/4, // 2, 0, 1
652 720 : -x0/8 - x1/8 - x10/4 + x12/4 + x13/4 - x14/4 - x15/4 + x16/4 - x18/4 + x2/8 - x21/2 + x23/2 + x3/8 - x4/8 - x5/8 + x6/8 + x7/8 + x8/4, // 2, 0, 2
653 : },
654 : {
655 720 : x12/2 + x13/2 + x14/2 + x15/2 - x21 - x22 - x23 - x24 + 2*x26, // 2, 1, 0
656 720 : -x0/4 - x1/4 + x10/2 + x11/2 - x16/2 - x17/2 - x18/2 - x19/2 - x2/4 - x20 + x25 - x3/4 + x4/4 + x5/4 + x6/4 + x7/4 + x8/2 + x9/2, // 2, 1, 1
657 720 : x0/4 + x1/4 - x10/2 - x11/2 - x12/2 - x13/2 - x14/2 - x15/2 - x16/2 - x17/2 - x18/2 - x19/2 + x2/4 + x20 + x21 + x22 + x23 + x24 + x25 - 2*x26 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4 - x8/2 - x9/2 // 2, 1, 2
658 : },
659 : {
660 : Point(0,0,0), // 2, 2, 0
661 : Point(0,0,0), // 2, 2, 1
662 : Point(0,0,0) // 2, 2, 2
663 : }
664 : }
665 13680 : };
666 :
667 :
668 :
669 : // The constant components of the dx/dzeta vector, all of the zeta^2
670 : // terms are zero. These were copied directly from the output of a
671 : // Python script.
672 : Point dx_dzeta[3][3][3] =
673 : {
674 : {
675 : {
676 720 : -x20/2 + x25/2, // 0, 0, 0
677 720 : x20 + x25 - 2*x26, // 0, 0, 1
678 : Point(0,0,0) // 0, 0, 2
679 : },
680 : {
681 720 : -x10/4 - x16/4 + x18/4 + x8/4, // 0, 1, 0
682 720 : x10/2 - x16/2 + x18/2 + x21 - x23 - x8/2, // 0, 1, 1
683 : Point(0,0,0) // 0, 1, 2
684 : },
685 : {
686 720 : -x10/4 + x16/4 + x18/4 + x20/2 - x25/2 - x8/4, // 0, 2, 0
687 720 : x10/2 + x16/2 + x18/2 - x20 - x21 - x23 - x25 + 2*x26 + x8/2, // 0, 2, 1
688 : Point(0,0,0) // 0, 2, 2
689 : }
690 : },
691 : {
692 : {
693 720 : x11/4 + x17/4 - x19/4 - x9/4, // 1, 0, 0
694 720 : -x11/2 + x17/2 - x19/2 - x22 + x24 + x9/2, // 1, 0, 1
695 : Point(0,0,0) // 1, 0, 2
696 : },
697 : {
698 720 : -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 1, 1, 0
699 720 : x0/4 - x1/4 - x12/2 + x13/2 - x14/2 + x15/2 + x2/4 - x3/4 + x4/4 - x5/4 + x6/4 - x7/4, // 1, 1, 1
700 : Point(0,0,0) // 1, 1, 2
701 : },
702 : {
703 720 : x0/8 - x1/8 - x11/4 - x17/4 + x19/4 - x2/8 + x3/8 - x4/8 + x5/8 + x6/8 - x7/8 + x9/4, // 1, 2, 0
704 720 : -x0/4 + x1/4 + x11/2 + x12/2 - x13/2 - x14/2 + x15/2 - x17/2 + x19/2 + x2/4 + x22 - x24 - x3/4 - x4/4 + x5/4 + x6/4 - x7/4 - x9/2, // 1, 2, 1
705 : Point(0,0,0) // 1, 2, 2
706 : }
707 : },
708 : {
709 : {
710 720 : -x11/4 + x17/4 + x19/4 + x20/2 - x25/2 - x9/4, // 2, 0, 0
711 720 : x11/2 + x17/2 + x19/2 - x20 - x22 - x24 - x25 + 2*x26 + x9/2, // 2, 0, 1
712 : Point(0,0,0) // 2, 0, 2
713 : },
714 : {
715 720 : x0/8 + x1/8 + x10/4 + x16/4 - x18/4 - x2/8 - x3/8 - x4/8 - x5/8 + x6/8 + x7/8 - x8/4, // 2, 1, 0
716 720 : -x0/4 - x1/4 - x10/2 + x12/2 + x13/2 - x14/2 - x15/2 + x16/2 - x18/2 + x2/4 - x21 + x23 + x3/4 - x4/4 - x5/4 + x6/4 + x7/4 + x8/2, // 2, 1, 1
717 : Point(0,0,0) // 2, 1, 2
718 : },
719 : {
720 720 : -x0/8 - x1/8 + x10/4 + x11/4 - x16/4 - x17/4 - x18/4 - x19/4 - x2/8 - x20/2 + x25/2 - x3/8 + x4/8 + x5/8 + x6/8 + x7/8 + x8/4 + x9/4, // 2, 2, 0
721 720 : x0/4 + x1/4 - x10/2 - x11/2 - x12/2 - x13/2 - x14/2 - x15/2 - x16/2 - x17/2 - x18/2 - x19/2 + x2/4 + x20 + x21 + x22 + x23 + x24 + x25 - 2*x26 + x3/4 + x4/4 + x5/4 + x6/4 + x7/4 - x8/2 - x9/2, // 2, 2, 1
722 : Point(0,0,0) // 2, 2, 2
723 : }
724 : }
725 13680 : };
726 :
727 : // 3x3 quadrature, exact for bi-quintics
728 720 : const int N = 3;
729 2819 : const Real w[N] = {5./9, 8./9, 5./9};
730 :
731 : // Quadrature point locations raised to powers. q[0][2] is
732 : // quadrature point 0, squared, q[1][1] is quadrature point 1 to the
733 : // first power, etc.
734 2819 : const Real q[N][N] =
735 : {
736 : //^0 ^1 ^2
737 : { 1., -std::sqrt(15)/5., 15./25},
738 : { 1., 0., 0.},
739 : { 1., std::sqrt(15)/5., 15./25}
740 : };
741 :
742 720 : Real vol = 0.;
743 11276 : for (int i=0; i<N; ++i)
744 33828 : for (int j=0; j<N; ++j)
745 101484 : for (int k=0; k<N; ++k)
746 : {
747 : // Compute dx_dxi, dx_deta, dx_dzeta at the current quadrature point.
748 19440 : Point dx_dxi_q, dx_deta_q, dx_dzeta_q;
749 304452 : for (int ii=0; ii<N; ++ii)
750 913356 : for (int jj=0; jj<N; ++jj)
751 2740068 : for (int kk=0; kk<N; ++kk)
752 : {
753 2055051 : Real coeff = q[i][ii] * q[j][jj] * q[k][kk];
754 :
755 524880 : dx_dxi_q += coeff * dx_dxi[ii][jj][kk];
756 524880 : dx_deta_q += coeff * dx_deta[ii][jj][kk];
757 524880 : dx_dzeta_q += coeff * dx_dzeta[ii][jj][kk];
758 : }
759 :
760 : // Compute scalar triple product, multiply by weight, and accumulate volume.
761 95391 : vol += w[i] * w[j] * w[k] * triple_product(dx_dxi_q, dx_deta_q, dx_dzeta_q);
762 : }
763 :
764 720 : return vol;
765 : }
766 :
767 :
768 :
769 :
770 :
771 :
772 :
773 : #ifdef LIBMESH_ENABLE_AMR
774 :
775 : const Real Hex27::_embedding_matrix[Hex27::num_children][Hex27::num_nodes][Hex27::num_nodes] =
776 : {
777 : // embedding matrix for child 0
778 : {
779 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
780 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
781 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
782 : { 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.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
783 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
784 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
785 : { 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.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
786 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 6
787 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 7
788 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
789 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 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, 0.00000, 0.00000, 0.00000 }, // 9
790 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 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 }, // 10
791 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
792 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
793 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
794 : { 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.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 14
795 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 15
796 : { 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.375000, -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 }, // 16
797 : { 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.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 17
798 : { 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.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 18
799 : { 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.375000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 19
800 : { 0.140625, -0.0468750, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, -0.0937500, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 20
801 : { 0.140625, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 21
802 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.281250, 0.281250, 0.00000, -0.0937500, 0.00000, -0.0937500, 0.562500 }, // 22
803 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.281250, 0.00000, -0.0937500, 0.00000, 0.281250, -0.0937500, 0.562500 }, // 23
804 : { 0.140625, 0.00000, 0.00000, -0.0468750, -0.0468750, 0.00000, 0.00000, 0.0156250, 0.00000, 0.00000, 0.00000, 0.281250, 0.281250, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000 }, // 24
805 : { 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.140625, -0.0468750, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, -0.0937500, 0.281250, 0.00000, 0.562500 }, // 25
806 : { 0.052734375, -0.017578125, 0.005859375, -0.017578125, -0.017578125, 0.005859375, -0.001953125, 0.005859375, 0.10546875, -0.03515625, -0.03515625, 0.10546875, 0.10546875, -0.03515625, 0.01171875, -0.03515625, -0.03515625, 0.01171875, 0.01171875, -0.03515625, 0.2109375, 0.2109375, -0.0703125, -0.0703125, 0.2109375, -0.0703125, 0.421875 } // 26
807 : },
808 :
809 : // embedding matrix for child 1
810 : {
811 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
812 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
813 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
814 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
815 : { 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.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
816 : { 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.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
817 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
818 : { 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.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
819 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 7
820 : { -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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 8
821 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
822 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 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 }, // 10
823 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 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, 0.00000, 0.00000, 0.00000 }, // 11
824 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
825 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
826 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
827 : { 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.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 15
828 : { 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.125000, 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 }, // 16
829 : { 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.375000, -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 }, // 17
830 : { 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.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 18
831 : { 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.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 19
832 : { -0.0468750, 0.140625, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, 0.281250, -0.0937500, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 20
833 : { -0.0468750, 0.140625, 0.00000, 0.00000, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 21
834 : { 0.00000, 0.140625, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000 }, // 22
835 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.281250, 0.00000, 0.281250, 0.00000, -0.0937500, -0.0937500, 0.562500 }, // 23
836 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.281250, 0.281250, 0.00000, -0.0937500, 0.00000, -0.0937500, 0.562500 }, // 24
837 : { 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.0468750, 0.140625, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, 0.281250, -0.0937500, -0.0937500, 0.00000, 0.562500 }, // 25
838 : { -0.017578125, 0.052734375, -0.017578125, 0.005859375, 0.005859375, -0.017578125, 0.005859375, -0.001953125, 0.10546875, 0.10546875, -0.03515625, -0.03515625, -0.03515625, 0.10546875, -0.03515625, 0.01171875, -0.03515625, -0.03515625, 0.01171875, 0.01171875, 0.2109375, 0.2109375, 0.2109375, -0.0703125, -0.0703125, -0.0703125, 0.421875 } // 26
839 :
840 : },
841 :
842 : // embedding matrix for child 2
843 : {
844 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
845 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
846 : { 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.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
847 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
848 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
849 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 4
850 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 5
851 : { 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.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 6
852 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
853 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 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 }, // 8
854 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 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, 0.00000, 0.00000, 0.00000 }, // 9
855 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
856 : { -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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 11
857 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 12
858 : { 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.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 13
859 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 14
860 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 15
861 : { 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.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 16
862 : { 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.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.750000 }, // 17
863 : { 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.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 18
864 : { 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.125000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 19
865 : { -0.0468750, 0.0156250, -0.0468750, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, -0.0937500, 0.281250, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 20
866 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.281250, 0.00000, -0.0937500, 0.00000, 0.281250, -0.0937500, 0.562500 }, // 21
867 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.281250, -0.0937500, 0.00000, 0.281250, 0.00000, -0.0937500, 0.562500 }, // 22
868 : { 0.00000, 0.00000, -0.0468750, 0.140625, 0.00000, 0.00000, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000 }, // 23
869 : { -0.0468750, 0.00000, 0.00000, 0.140625, 0.0156250, 0.00000, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000 }, // 24
870 : { 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.0468750, 0.0156250, -0.0468750, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, -0.0937500, 0.281250, 0.281250, 0.00000, 0.562500 }, // 25
871 : { -0.017578125, 0.005859375, -0.017578125, 0.052734375, 0.005859375, -0.001953125, 0.005859375, -0.017578125, -0.03515625, -0.03515625, 0.10546875, 0.10546875, -0.03515625, 0.01171875, -0.03515625, 0.10546875, 0.01171875, 0.01171875, -0.03515625, -0.03515625, 0.2109375, -0.0703125, -0.0703125, 0.2109375, 0.2109375, -0.0703125, 0.421875 } // 26
872 : },
873 :
874 : // embedding matrix for child 3
875 : {
876 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
877 : { 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.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
878 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
879 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
880 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
881 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 4
882 : { 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.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
883 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
884 : { 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.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 7
885 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 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 }, // 8
886 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 9
887 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 10
888 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 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, 0.00000, 0.00000, 0.00000 }, // 11
889 : { 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.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 12
890 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
891 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
892 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 15
893 : { 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.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 16
894 : { 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.125000, 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 }, // 17
895 : { 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.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 18
896 : { 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.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.750000 }, // 19
897 : { 0.0156250, -0.0468750, 0.140625, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.281250, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 20
898 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.281250, 0.00000, 0.281250, 0.00000, -0.0937500, -0.0937500, 0.562500 }, // 21
899 : { 0.00000, -0.0468750, 0.140625, 0.00000, 0.00000, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000 }, // 22
900 : { 0.00000, 0.00000, 0.140625, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000 }, // 23
901 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.281250, -0.0937500, 0.00000, 0.281250, 0.00000, -0.0937500, 0.562500 }, // 24
902 : { 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.0156250, -0.0468750, 0.140625, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.281250, -0.0937500, 0.00000, 0.562500 }, // 25
903 : { 0.005859375, -0.017578125, 0.052734375, -0.017578125, -0.001953125, 0.005859375, -0.017578125, 0.005859375, -0.03515625, 0.10546875, 0.10546875, -0.03515625, 0.01171875, -0.03515625, 0.10546875, -0.03515625, 0.01171875, -0.03515625, -0.03515625, 0.01171875, 0.2109375, -0.0703125, 0.2109375, 0.2109375, -0.0703125, -0.0703125, 0.421875 } // 26
904 : },
905 :
906 : // embedding matrix for child 4
907 : {
908 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
909 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
910 : { 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.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
911 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 2
912 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 3
913 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
914 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
915 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 6
916 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
917 : { 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.375000, -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 }, // 8
918 : { 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.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 9
919 : { 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.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 10
920 : { 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.375000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 11
921 : { -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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
922 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
923 : { 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.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 14
924 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 15
925 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 16
926 : { 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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 17
927 : { 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.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 18
928 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 19
929 : { 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.140625, -0.0468750, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, -0.0937500, 0.281250, 0.00000, 0.562500 }, // 20
930 : { -0.0468750, 0.0156250, 0.00000, 0.00000, 0.140625, -0.0468750, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 21
931 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, -0.0937500, 0.281250, 0.00000, -0.0937500, 0.00000, 0.281250, 0.562500 }, // 22
932 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, -0.0937500, 0.00000, -0.0937500, 0.00000, 0.281250, 0.281250, 0.562500 }, // 23
933 : { -0.0468750, 0.00000, 0.00000, 0.0156250, 0.140625, 0.00000, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000 }, // 24
934 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, -0.0468750, 0.0156250, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, -0.0937500, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000 }, // 25
935 : { -0.017578125, 0.005859375, -0.001953125, 0.005859375, 0.052734375, -0.017578125, 0.005859375, -0.017578125, -0.03515625, 0.01171875, 0.01171875, -0.03515625, 0.10546875, -0.03515625, 0.01171875, -0.03515625, 0.10546875, -0.03515625, -0.03515625, 0.10546875, -0.0703125, 0.2109375, -0.0703125, -0.0703125, 0.2109375, 0.2109375, 0.421875 } // 26
936 : },
937 :
938 : // embedding matrix for child 5
939 : {
940 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
941 : { 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.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 0
942 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
943 : { 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.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
944 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 3
945 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
946 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
947 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
948 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 7
949 : { 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.125000, 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 }, // 8
950 : { 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.375000, -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 }, // 9
951 : { 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.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 10
952 : { 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.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 11
953 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 12
954 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
955 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
956 : { 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.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 15
957 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 16
958 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 17
959 : { 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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 18
960 : { 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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 19
961 : { 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.0468750, 0.140625, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, 0.281250, -0.0937500, -0.0937500, 0.00000, 0.562500 }, // 20
962 : { 0.0156250, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.140625, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 21
963 : { 0.00000, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.140625, -0.0468750, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000 }, // 22
964 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, -0.0937500, 0.00000, 0.281250, 0.00000, -0.0937500, 0.281250, 0.562500 }, // 23
965 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, 0.00000, -0.0937500, 0.281250, 0.00000, -0.0937500, 0.00000, 0.281250, 0.562500 }, // 24
966 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.140625, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.281250, 0.281250, -0.0937500, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000 }, // 25
967 : { 0.005859375, -0.017578125, 0.005859375, -0.001953125, -0.017578125, 0.052734375, -0.017578125, 0.005859375, -0.03515625, -0.03515625, 0.01171875, 0.01171875, -0.03515625, 0.10546875, -0.03515625, 0.01171875, 0.10546875, 0.10546875, -0.03515625, -0.03515625, -0.0703125, 0.2109375, 0.2109375, -0.0703125, -0.0703125, 0.2109375, 0.421875 } // 26
968 : },
969 :
970 : // embedding matrix for child 6
971 : {
972 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
973 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000 }, // 0
974 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 1
975 : { 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.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 2
976 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 3
977 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 4
978 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 5
979 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
980 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
981 : { 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.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 8
982 : { 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.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.750000 }, // 9
983 : { 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.125000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 10
984 : { 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.125000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 11
985 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000 }, // 12
986 : { 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.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 13
987 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 14
988 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 15
989 : { 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.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 16
990 : { 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.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 17
991 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 18
992 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 19
993 : { 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.0468750, 0.0156250, -0.0468750, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, -0.0937500, 0.281250, 0.281250, 0.00000, 0.562500 }, // 20
994 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, -0.0937500, 0.00000, -0.0937500, 0.00000, 0.281250, 0.281250, 0.562500 }, // 21
995 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, -0.0937500, -0.0937500, 0.00000, 0.281250, 0.00000, 0.281250, 0.562500 }, // 22
996 : { 0.00000, 0.00000, 0.0156250, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.140625, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000 }, // 23
997 : { 0.0156250, 0.00000, 0.00000, -0.0468750, -0.0468750, 0.00000, 0.00000, 0.140625, 0.00000, 0.00000, 0.00000, -0.0937500, -0.0937500, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000 }, // 24
998 : { 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.0156250, -0.0468750, 0.140625, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, -0.0937500, 0.281250, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000 }, // 25
999 : { 0.005859375, -0.001953125, 0.005859375, -0.017578125, -0.017578125, 0.005859375, -0.017578125, 0.052734375, 0.01171875, 0.01171875, -0.03515625, -0.03515625, -0.03515625, 0.01171875, -0.03515625, 0.10546875, -0.03515625, -0.03515625, 0.10546875, 0.10546875, -0.0703125, -0.0703125, -0.0703125, 0.2109375, 0.2109375, 0.2109375, 0.421875 } // 26
1000 : },
1001 :
1002 : // embedding matrix for child 7
1003 : {
1004 : // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
1005 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000 }, // 0
1006 : { 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.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 1
1007 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 2
1008 : { 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.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000, 0.00000, 0.00000 }, // 3
1009 : { 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.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 1.00000, 0.00000 }, // 4
1010 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 5
1011 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 6
1012 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 7
1013 : { 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.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 8
1014 : { 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.125000, 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 }, // 9
1015 : { 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.375000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 10
1016 : { 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.00000, 0.00000, -0.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.750000 }, // 11
1017 : { 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.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 12
1018 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 13
1019 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 14
1020 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000, 0.00000, 0.00000 }, // 15
1021 : { 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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 16
1022 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 17
1023 : { 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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 }, // 18
1024 : { 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.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 19
1025 : { 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.0156250, -0.0468750, 0.140625, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.281250, -0.0937500, 0.00000, 0.562500 }, // 20
1026 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.0156250, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.140625, 0.00000, -0.0468750, -0.0937500, 0.00000, 0.281250, 0.00000, -0.0937500, 0.281250, 0.562500 }, // 21
1027 : { 0.00000, 0.0156250, -0.0468750, 0.00000, 0.00000, -0.0468750, 0.140625, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000, 0.00000 }, // 22
1028 : { 0.00000, 0.00000, -0.0468750, 0.0156250, 0.00000, 0.00000, 0.140625, -0.0468750, 0.00000, 0.00000, -0.0937500, 0.00000, 0.00000, 0.00000, 0.281250, -0.0937500, 0.00000, 0.00000, 0.281250, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000, 0.00000, 0.00000 }, // 23
1029 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, 0.00000, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0468750, 0.00000, 0.140625, 0.00000, -0.0937500, -0.0937500, 0.00000, 0.281250, 0.00000, 0.281250, 0.562500 }, // 24
1030 : { 0.00000, 0.00000, 0.00000, 0.00000, 0.0156250, -0.0468750, 0.140625, -0.0468750, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, -0.0937500, 0.281250, 0.281250, -0.0937500, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.562500, 0.00000 }, // 25
1031 : { -0.001953125, 0.005859375, -0.017578125, 0.005859375, 0.005859375, -0.017578125, 0.052734375, -0.017578125, 0.01171875, -0.03515625, -0.03515625, 0.01171875, 0.01171875, -0.03515625, 0.10546875, -0.03515625, -0.03515625, 0.10546875, 0.10546875, -0.03515625, -0.0703125, -0.0703125, 0.2109375, 0.2109375, -0.0703125, 0.2109375, 0.421875 } // 26
1032 : }
1033 : };
1034 :
1035 : #endif
1036 :
1037 :
1038 : void
1039 57876 : Hex27::permute(unsigned int perm_num)
1040 : {
1041 14580 : libmesh_assert_less (perm_num, 24);
1042 57876 : const unsigned int side = perm_num % 6;
1043 57876 : const unsigned int rotate = perm_num / 6;
1044 :
1045 147098 : for (unsigned int i = 0; i != rotate; ++i)
1046 : {
1047 89222 : swap4nodes(0,1,2,3);
1048 89222 : swap4nodes(4,5,6,7);
1049 89222 : swap4nodes(8,9,10,11);
1050 89222 : swap4nodes(12,13,14,15);
1051 89222 : swap4nodes(16,17,18,19);
1052 89222 : swap4nodes(21,22,23,24);
1053 66714 : swap4neighbors(1,2,3,4);
1054 : }
1055 :
1056 57876 : switch (side) {
1057 2282 : case 0:
1058 2282 : break;
1059 9309 : case 1:
1060 9309 : swap4nodes(3,7,4,0);
1061 9309 : swap4nodes(11,15,19,12);
1062 9309 : swap4nodes(10,18,16,8);
1063 9309 : swap4nodes(2,6,5,1);
1064 9309 : swap4nodes(9,14,17,13);
1065 9309 : swap4nodes(20,23,25,21);
1066 6979 : swap4neighbors(0,3,5,1);
1067 6979 : break;
1068 9004 : case 2:
1069 9004 : swap4nodes(0,4,5,1);
1070 9004 : swap4nodes(8,12,16,13);
1071 9004 : swap4nodes(3,7,6,2);
1072 9004 : swap4nodes(10,15,18,14);
1073 9004 : swap4nodes(11,19,17,9);
1074 9004 : swap4nodes(20,24,25,22);
1075 6744 : swap4neighbors(0,4,5,2);
1076 6744 : break;
1077 9908 : case 3:
1078 9908 : swap4nodes(0,4,7,3);
1079 9908 : swap4nodes(12,19,15,11);
1080 9908 : swap4nodes(8,16,18,10);
1081 9908 : swap4nodes(1,5,6,2);
1082 9908 : swap4nodes(13,17,14,9);
1083 9908 : swap4nodes(20,21,25,23);
1084 7416 : swap4neighbors(0,1,5,3);
1085 7416 : break;
1086 10294 : case 4:
1087 10294 : swap4nodes(1,5,4,0);
1088 10294 : swap4nodes(8,13,16,12);
1089 10294 : swap4nodes(9,17,19,11);
1090 10294 : swap4nodes(2,6,7,3);
1091 10294 : swap4nodes(10,14,18,15);
1092 10294 : swap4nodes(20,22,25,24);
1093 7698 : swap4neighbors(0,2,5,4);
1094 7698 : break;
1095 10266 : case 5:
1096 10266 : swap2nodes(0,7);
1097 10266 : swap2nodes(8,18);
1098 10266 : swap2nodes(1,6);
1099 10266 : swap2nodes(2,5);
1100 10266 : swap2nodes(10,16);
1101 10266 : swap2nodes(3,4);
1102 10266 : swap2nodes(11,19);
1103 10266 : swap2nodes(12,15);
1104 10266 : swap2nodes(9,17);
1105 10266 : swap2nodes(13,14);
1106 10266 : swap2nodes(20,25);
1107 10266 : swap2nodes(21,23);
1108 2620 : swap2neighbors(0,5);
1109 2620 : swap2neighbors(1,3);
1110 2620 : break;
1111 0 : default:
1112 0 : libmesh_error();
1113 : }
1114 57876 : }
1115 :
1116 :
1117 : void
1118 96 : Hex27::flip(BoundaryInfo * boundary_info)
1119 : {
1120 24 : libmesh_assert(boundary_info);
1121 :
1122 96 : swap2nodes(0,1);
1123 96 : swap2nodes(2,3);
1124 96 : swap2nodes(4,5);
1125 96 : swap2nodes(6,7);
1126 96 : swap2nodes(9,11);
1127 96 : swap2nodes(12,13);
1128 96 : swap2nodes(14,15);
1129 96 : swap2nodes(17,19);
1130 96 : swap2nodes(22,24);
1131 24 : swap2neighbors(2,4);
1132 96 : swap2boundarysides(2,4,boundary_info);
1133 96 : swap2boundaryedges(1,3,boundary_info);
1134 96 : swap2boundaryedges(4,5,boundary_info);
1135 96 : swap2boundaryedges(6,7,boundary_info);
1136 96 : swap2boundaryedges(9,11,boundary_info);
1137 96 : }
1138 :
1139 :
1140 192 : unsigned int Hex27::center_node_on_side(const unsigned short side) const
1141 : {
1142 48 : libmesh_assert_less (side, Hex27::num_sides);
1143 192 : return side + 20;
1144 : }
1145 :
1146 :
1147 : ElemType
1148 155393158 : Hex27::side_type (const unsigned int libmesh_dbg_var(s)) const
1149 : {
1150 37874342 : libmesh_assert_less (s, 6);
1151 155393158 : return QUAD9;
1152 : }
1153 :
1154 :
1155 : } // namespace libMesh
|