Loading [MathJax]/extensions/tex2jax.js
libMesh
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
cell_hex27.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2025 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/side.h"
21 #include "libmesh/cell_hex27.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 
39  {
40  {0, 3, 2, 1, 11, 10, 9, 8, 20}, // Side 0
41  {0, 1, 5, 4, 8, 13, 16, 12, 21}, // Side 1
42  {1, 2, 6, 5, 9, 14, 17, 13, 22}, // Side 2
43  {2, 3, 7, 6, 10, 15, 18, 14, 23}, // Side 3
44  {3, 0, 4, 7, 11, 12, 19, 15, 24}, // Side 4
45  {4, 5, 6, 7, 16, 17, 18, 19, 25} // Side 5
46  };
47 
49  {
50  {0, 1, 8}, // Edge 0
51  {1, 2, 9}, // Edge 1
52  {2, 3, 10}, // Edge 2
53  {0, 3, 11}, // Edge 3
54  {0, 4, 12}, // Edge 4
55  {1, 5, 13}, // Edge 5
56  {2, 6, 14}, // Edge 6
57  {3, 7, 15}, // Edge 7
58  {4, 5, 16}, // Edge 8
59  {5, 6, 17}, // Edge 9
60  {6, 7, 18}, // Edge 10
61  {4, 7, 19} // Edge 11
62  };
63 
64 // ------------------------------------------------------------
65 // Hex27 class member functions
66 
67 bool Hex27::is_vertex(const unsigned int i) const
68 {
69  if (i < 8)
70  return true;
71  return false;
72 }
73 
74 bool Hex27::is_edge(const unsigned int i) const
75 {
76  if (i < 8)
77  return false;
78  if (i > 19)
79  return false;
80  return true;
81 }
82 
83 bool Hex27::is_face(const unsigned int i) const
84 {
85  if (i == 26)
86  return false;
87  if (i > 19)
88  return true;
89  return false;
90 }
91 
92 bool Hex27::is_node_on_side(const unsigned int n,
93  const unsigned int s) const
94 {
95  libmesh_assert_less (s, n_sides());
96  return std::find(std::begin(side_nodes_map[s]),
97  std::end(side_nodes_map[s]),
98  n) != std::end(side_nodes_map[s]);
99 }
100 
101 std::vector<unsigned>
102 Hex27::nodes_on_side(const unsigned int s) const
103 {
104  libmesh_assert_less(s, n_sides());
105  return {std::begin(side_nodes_map[s]), std::end(side_nodes_map[s])};
106 }
107 
108 std::vector<unsigned>
109 Hex27::nodes_on_edge(const unsigned int e) const
110 {
111  libmesh_assert_less(e, n_edges());
112  return {std::begin(edge_nodes_map[e]), std::end(edge_nodes_map[e])};
113 }
114 
115 bool Hex27::is_node_on_edge(const unsigned int n,
116  const unsigned int e) const
117 {
118  libmesh_assert_less (e, n_edges());
119  return std::find(std::begin(edge_nodes_map[e]),
120  std::end(edge_nodes_map[e]),
121  n) != std::end(edge_nodes_map[e]);
122 }
123 
124 
125 
127 {
128  // Make sure x-edge endpoints are affine
129  Point v = this->point(1) - this->point(0);
130  if (!v.relative_fuzzy_equals(this->point(2) - this->point(3), affine_tol) ||
131  !v.relative_fuzzy_equals(this->point(5) - this->point(4), affine_tol) ||
132  !v.relative_fuzzy_equals(this->point(6) - this->point(7), affine_tol))
133  return false;
134  // Make sure x-edges are straight
135  // and x-face and center points are centered
136  v /= 2;
137  if (!v.relative_fuzzy_equals(this->point(8) - this->point(0), affine_tol) ||
138  !v.relative_fuzzy_equals(this->point(10) - this->point(3), affine_tol) ||
139  !v.relative_fuzzy_equals(this->point(16) - this->point(4), affine_tol) ||
140  !v.relative_fuzzy_equals(this->point(18) - this->point(7), affine_tol) ||
141  !v.relative_fuzzy_equals(this->point(20) - this->point(11), affine_tol) ||
142  !v.relative_fuzzy_equals(this->point(21) - this->point(12), affine_tol) ||
143  !v.relative_fuzzy_equals(this->point(23) - this->point(15), affine_tol) ||
144  !v.relative_fuzzy_equals(this->point(25) - this->point(19), affine_tol) ||
145  !v.relative_fuzzy_equals(this->point(26) - this->point(24), affine_tol))
146  return false;
147  // Make sure xz-faces are identical parallelograms
148  v = this->point(4) - this->point(0);
149  if (!v.relative_fuzzy_equals(this->point(7) - this->point(3), affine_tol))
150  return false;
151  v /= 2;
152  if (!v.relative_fuzzy_equals(this->point(12) - this->point(0), affine_tol) ||
153  !v.relative_fuzzy_equals(this->point(13) - this->point(1), affine_tol) ||
154  !v.relative_fuzzy_equals(this->point(14) - this->point(2), affine_tol) ||
155  !v.relative_fuzzy_equals(this->point(15) - this->point(3), affine_tol) ||
156  !v.relative_fuzzy_equals(this->point(22) - this->point(9), affine_tol) ||
157  !v.relative_fuzzy_equals(this->point(24) - this->point(11), affine_tol))
158  return false;
159  // Make sure y-edges are straight
160  v = (this->point(3) - this->point(0))/2;
161  if (!v.relative_fuzzy_equals(this->point(11) - this->point(0), affine_tol) ||
162  !v.relative_fuzzy_equals(this->point(9) - this->point(1), affine_tol) ||
163  !v.relative_fuzzy_equals(this->point(17) - this->point(5), affine_tol) ||
164  !v.relative_fuzzy_equals(this->point(19) - this->point(4), affine_tol))
165  return false;
166  // If all the above checks out, the map is affine
167  return true;
168 }
169 
170 
171 
173 {
174  return SECOND;
175 }
176 
177 
178 
179 dof_id_type Hex27::key (const unsigned int s) const
180 {
181  libmesh_assert_less (s, this->n_sides());
182 
183  // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
184  switch (s)
185  {
186  case 0: // the face at z=0
187 
188  return
189  this->compute_key (this->node_id(20));
190 
191  case 1: // the face at y = 0
192 
193  return
194  this->compute_key (this->node_id(21));
195 
196  case 2: // the face at x=1
197 
198  return
199  this->compute_key (this->node_id(22));
200 
201  case 3: // the face at y=1
202 
203  return
204  this->compute_key (this->node_id(23));
205 
206  case 4: // the face at x=0
207 
208  return
209  this->compute_key (this->node_id(24));
210 
211  case 5: // the face at z=1
212 
213  return
214  this->compute_key (this->node_id(25));
215 
216  default:
217  libmesh_error_msg("Invalid side " << s);
218  }
219 }
220 
221 
222 
223 unsigned int Hex27::local_side_node(unsigned int side,
224  unsigned int side_node) const
225 {
226  libmesh_assert_less (side, this->n_sides());
227  libmesh_assert_less (side_node, Hex27::nodes_per_side);
228 
229  return Hex27::side_nodes_map[side][side_node];
230 }
231 
232 
233 
234 unsigned int Hex27::local_edge_node(unsigned int edge,
235  unsigned int edge_node) const
236 {
237  libmesh_assert_less (edge, this->n_edges());
238  libmesh_assert_less (edge_node, Hex27::nodes_per_edge);
239 
240  return Hex27::edge_nodes_map[edge][edge_node];
241 }
242 
243 
244 
245 std::unique_ptr<Elem> Hex27::build_side_ptr (const unsigned int i,
246  bool proxy)
247 {
248  return this->simple_build_side_ptr<Quad9, Hex27>(i, proxy);
249 }
250 
251 
252 
253 void Hex27::build_side_ptr (std::unique_ptr<Elem> & side,
254  const unsigned int i)
255 {
256  this->simple_build_side_ptr<Hex27>(side, i, QUAD9);
257 }
258 
259 
260 
261 std::unique_ptr<Elem> Hex27::build_edge_ptr (const unsigned int i)
262 {
263  return this->simple_build_edge_ptr<Edge3,Hex27>(i);
264 }
265 
266 
267 
268 void Hex27::build_edge_ptr (std::unique_ptr<Elem> & edge, const unsigned int i)
269 {
270  this->simple_build_edge_ptr<Hex27>(edge, i, EDGE3);
271 }
272 
273 
274 
275 void Hex27::connectivity(const unsigned int sc,
276  const IOPackage iop,
277  std::vector<dof_id_type> & conn) const
278 {
280  libmesh_assert_less (sc, this->n_sub_elem());
281  libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
282 
283  conn.resize(8);
284 
285  switch (iop)
286  {
287  case TECPLOT:
288  {
289  switch (sc)
290  {
291  case 0:
292 
293  conn[0] = this->node_id(0)+1;
294  conn[1] = this->node_id(8)+1;
295  conn[2] = this->node_id(20)+1;
296  conn[3] = this->node_id(11)+1;
297  conn[4] = this->node_id(12)+1;
298  conn[5] = this->node_id(21)+1;
299  conn[6] = this->node_id(26)+1;
300  conn[7] = this->node_id(24)+1;
301 
302  return;
303 
304  case 1:
305 
306  conn[0] = this->node_id(8)+1;
307  conn[1] = this->node_id(1)+1;
308  conn[2] = this->node_id(9)+1;
309  conn[3] = this->node_id(20)+1;
310  conn[4] = this->node_id(21)+1;
311  conn[5] = this->node_id(13)+1;
312  conn[6] = this->node_id(22)+1;
313  conn[7] = this->node_id(26)+1;
314 
315  return;
316 
317  case 2:
318 
319  conn[0] = this->node_id(11)+1;
320  conn[1] = this->node_id(20)+1;
321  conn[2] = this->node_id(10)+1;
322  conn[3] = this->node_id(3)+1;
323  conn[4] = this->node_id(24)+1;
324  conn[5] = this->node_id(26)+1;
325  conn[6] = this->node_id(23)+1;
326  conn[7] = this->node_id(15)+1;
327 
328  return;
329 
330  case 3:
331 
332  conn[0] = this->node_id(20)+1;
333  conn[1] = this->node_id(9)+1;
334  conn[2] = this->node_id(2)+1;
335  conn[3] = this->node_id(10)+1;
336  conn[4] = this->node_id(26)+1;
337  conn[5] = this->node_id(22)+1;
338  conn[6] = this->node_id(14)+1;
339  conn[7] = this->node_id(23)+1;
340 
341  return;
342 
343  case 4:
344 
345  conn[0] = this->node_id(12)+1;
346  conn[1] = this->node_id(21)+1;
347  conn[2] = this->node_id(26)+1;
348  conn[3] = this->node_id(24)+1;
349  conn[4] = this->node_id(4)+1;
350  conn[5] = this->node_id(16)+1;
351  conn[6] = this->node_id(25)+1;
352  conn[7] = this->node_id(19)+1;
353 
354  return;
355 
356  case 5:
357 
358  conn[0] = this->node_id(21)+1;
359  conn[1] = this->node_id(13)+1;
360  conn[2] = this->node_id(22)+1;
361  conn[3] = this->node_id(26)+1;
362  conn[4] = this->node_id(16)+1;
363  conn[5] = this->node_id(5)+1;
364  conn[6] = this->node_id(17)+1;
365  conn[7] = this->node_id(25)+1;
366 
367  return;
368 
369  case 6:
370 
371  conn[0] = this->node_id(24)+1;
372  conn[1] = this->node_id(26)+1;
373  conn[2] = this->node_id(23)+1;
374  conn[3] = this->node_id(15)+1;
375  conn[4] = this->node_id(19)+1;
376  conn[5] = this->node_id(25)+1;
377  conn[6] = this->node_id(18)+1;
378  conn[7] = this->node_id(7)+1;
379 
380  return;
381 
382  case 7:
383 
384  conn[0] = this->node_id(26)+1;
385  conn[1] = this->node_id(22)+1;
386  conn[2] = this->node_id(14)+1;
387  conn[3] = this->node_id(23)+1;
388  conn[4] = this->node_id(25)+1;
389  conn[5] = this->node_id(17)+1;
390  conn[6] = this->node_id(6)+1;
391  conn[7] = this->node_id(18)+1;
392 
393  return;
394 
395  default:
396  libmesh_error_msg("Invalid sc = " << sc);
397  }
398  }
399 
400  case VTK:
401  {
402  // VTK now supports VTK_TRIQUADRATIC_HEXAHEDRON directly
403  conn.resize(27);
404 
405  conn[0] = this->node_id(0);
406  conn[1] = this->node_id(1);
407  conn[2] = this->node_id(2);
408  conn[3] = this->node_id(3);
409  conn[4] = this->node_id(4);
410  conn[5] = this->node_id(5);
411  conn[6] = this->node_id(6);
412  conn[7] = this->node_id(7);
413  conn[8] = this->node_id(8);
414  conn[9] = this->node_id(9);
415  conn[10] = this->node_id(10);
416  conn[11] = this->node_id(11);
417  conn[12] = this->node_id(16);
418  conn[13] = this->node_id(17);
419  conn[14] = this->node_id(18);
420  conn[15] = this->node_id(19);
421  conn[16] = this->node_id(12);
422  conn[17] = this->node_id(13);
423  conn[18] = this->node_id(14);
424  conn[19] = this->node_id(15);
425  conn[20] = this->node_id(24);
426  conn[21] = this->node_id(22);
427  conn[22] = this->node_id(21);
428  conn[23] = this->node_id(23);
429  conn[24] = this->node_id(20);
430  conn[25] = this->node_id(25);
431  conn[26] = this->node_id(26);
432 
433  return;
434  }
435 
436  default:
437  libmesh_error_msg("Unsupported IO package " << iop);
438  }
439 }
440 
441 
442 
443 
444 
445 unsigned int Hex27::n_second_order_adjacent_vertices (const unsigned int n) const
446 {
447  switch (n)
448  {
449  case 8:
450  case 9:
451  case 10:
452  case 11:
453  case 12:
454  case 13:
455  case 14:
456  case 15:
457  case 16:
458  case 17:
459  case 18:
460  case 19:
461  return 2;
462 
463  case 20:
464  case 21:
465  case 22:
466  case 23:
467  case 24:
468  case 25:
469  return 4;
470 
471  case 26:
472  return 8;
473 
474  default:
475  libmesh_error_msg("Invalid node number n = " << n);
476  }
477 }
478 
479 
480 
481 unsigned short int Hex27::second_order_adjacent_vertex (const unsigned int n,
482  const unsigned int v) const
483 {
484  libmesh_assert_greater_equal (n, this->n_vertices());
485  libmesh_assert_less (n, this->n_nodes());
486 
487  switch (n)
488  {
489  /*
490  * these are all nodes that are unique to Hex27,
491  * use our _remaining.... matrix
492  */
493  case 20:
494  case 21:
495  case 22:
496  case 23:
497  case 24:
498  case 25:
499  {
500  libmesh_assert_less (v, 4);
502  }
503 
504  /*
505  * for the bubble node the return value is simply v.
506  * Why? -- the user asks for the v-th adjacent vertex,
507  * from \p n_second_order_adjacent_vertices() there
508  * are 8 adjacent vertices, and these happen to be
509  * 0..7
510  */
511  case 26:
512  {
513  libmesh_assert_less (v, 8);
514  return static_cast<unsigned short int>(v);
515  }
516 
517  /*
518  * nodes 8..19:
519  * these are all nodes that are identical for
520  * Hex20 and Hex27. Therefore use the
521  * matrix stored in cell_hex.C
522  */
523  default:
524  {
525  libmesh_assert_less (v, 2);
526  return _second_order_adjacent_vertices[n-this->n_vertices()][v];
527  }
528  }
529 }
530 
531 
532 
533 const unsigned short int Hex27::_remaining_second_order_adjacent_vertices[6][4] =
534  {
535  { 0, 1, 2, 3}, // vertices adjacent to node 20 face nodes
536  { 0, 1, 4, 5}, // vertices adjacent to node 21
537  { 1, 2, 5, 6}, // vertices adjacent to node 22
538  { 2, 3, 6, 7}, // vertices adjacent to node 23
539  { 0, 3, 4, 7}, // vertices adjacent to node 24
540  { 4, 5, 6, 7}, // vertices adjacent to node 25
541  };
542 
543 
544 
545 std::pair<unsigned short int, unsigned short int>
546 Hex27::second_order_child_vertex (const unsigned int n) const
547 {
548  libmesh_assert_greater_equal (n, this->n_vertices());
549  libmesh_assert_less (n, this->n_nodes());
550  /*
551  * the _second_order_vertex_child_* vectors are
552  * stored in cell_hex.C, since they are identical
553  * for Hex20 and Hex27 (for the first 12 higher-order nodes)
554  */
555  return std::pair<unsigned short int, unsigned short int>
558 }
559 
560 
561 
563 {
564  // This specialization is good for Lagrange mappings only
565  if (this->mapping_type() != LAGRANGE_MAP)
566  return this->Elem::volume();
567 
568  // Make copies of our points. It makes the subsequent calculations a bit
569  // shorter and avoids dereferencing the same pointer multiple times.
570  Point
571  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),
572  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),
573  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);
574 
575  // The constant components of the dx/dxi vector,
576  // dx/dxi = \vec{a000} + \vec{a001}*zeta + \vec{a002}*zeta^2 + ...
577  // All of the xi^2 terms are zero.
578  // These were copied directly from the output of a Python script.
579  Point dx_dxi[3][3][3] =
580  {
581  {
582  {
583  x22/2 - x24/2, // 0, 0, 0
584  x11/4 + x17/4 - x19/4 - x9/4, // 0, 0, 1
585  -x11/4 + x17/4 - x19/4 - x22/2 + x24/2 + x9/4 // 0, 0, 2
586  },
587 
588  {
589  x12/4 - x13/4 + x14/4 - x15/4, // 0, 1, 0
590  -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 0, 1, 1
591  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
592  },
593 
594  {
595  -x12/4 + x13/4 + x14/4 - x15/4 - x22/2 + x24/2, // 0, 2, 0
596  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
597  -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
598  }
599  },
600  {
601  {
602  x22 + x24 - 2*x26, // 1, 0, 0
603  -x11/2 + x17/2 + x19/2 + x20 - x25 - x9/2, // 1, 0, 1
604  x11/2 + x17/2 + x19/2 - x20 - x22 - x24 - x25 + 2*x26 + x9/2 // 1, 0, 2
605  },
606 
607  {
608  -x12/2 - x13/2 + x14/2 + x15/2 + x21 - x23, // 1, 1, 0
609  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
610  -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
611  },
612 
613  {
614  x12/2 + x13/2 + x14/2 + x15/2 - x21 - x22 - x23 - x24 + 2*x26, // 1, 2, 0
615  -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
616  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
617  }
618  },
619  {
620  {Point(0,0,0), Point(0,0,0), Point(0,0,0)},
621  {Point(0,0,0), Point(0,0,0), Point(0,0,0)},
622  {Point(0,0,0), Point(0,0,0), Point(0,0,0)}
623  }
624  };
625 
626 
627 
628  // The constant components of the dx/deta vector, all of the eta^2
629  // terms are zero. These were copied directly from the output of a
630  // Python script.
631  Point dx_deta[3][3][3] =
632  {
633  {
634  {
635  -x21/2 + x23/2, // 0, 0, 0
636  -x10/4 - x16/4 + x18/4 + x8/4, // 0, 0, 1
637  x10/4 - x16/4 + x18/4 + x21/2 - x23/2 - x8/4 // 0, 0, 2
638  },
639  {
640  x21 + x23 - 2*x26, // 0, 1, 0
641  -x10/2 + x16/2 + x18/2 + x20 - x25 - x8/2, // 0, 1, 1
642  x10/2 + x16/2 + x18/2 - x20 - x21 - x23 - x25 + 2*x26 + x8/2 // 0, 1, 2
643  },
644  {
645  Point(0,0,0), // 0, 2, 0
646  Point(0,0,0), // 0, 2, 1
647  Point(0,0,0) // 0, 2, 2
648  }
649  },
650 
651  {
652  {
653  x12/4 - x13/4 + x14/4 - x15/4, // 1, 0, 0
654  -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 1, 0, 1
655  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
656  },
657  {
658  -x12/2 + x13/2 + x14/2 - x15/2 - x22 + x24, // 1, 1, 0
659  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
660  -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
661  },
662  {
663  Point(0,0,0), // 1, 2, 0
664  Point(0,0,0), // 1, 2, 1
665  Point(0,0,0) // 1, 2, 2
666  }
667  },
668 
669  {
670  {
671  -x12/4 - x13/4 + x14/4 + x15/4 + x21/2 - x23/2, // 2, 0, 0
672  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
673  -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
674  },
675  {
676  x12/2 + x13/2 + x14/2 + x15/2 - x21 - x22 - x23 - x24 + 2*x26, // 2, 1, 0
677  -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
678  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
679  },
680  {
681  Point(0,0,0), // 2, 2, 0
682  Point(0,0,0), // 2, 2, 1
683  Point(0,0,0) // 2, 2, 2
684  }
685  }
686  };
687 
688 
689 
690  // The constant components of the dx/dzeta vector, all of the zeta^2
691  // terms are zero. These were copied directly from the output of a
692  // Python script.
693  Point dx_dzeta[3][3][3] =
694  {
695  {
696  {
697  -x20/2 + x25/2, // 0, 0, 0
698  x20 + x25 - 2*x26, // 0, 0, 1
699  Point(0,0,0) // 0, 0, 2
700  },
701  {
702  -x10/4 - x16/4 + x18/4 + x8/4, // 0, 1, 0
703  x10/2 - x16/2 + x18/2 + x21 - x23 - x8/2, // 0, 1, 1
704  Point(0,0,0) // 0, 1, 2
705  },
706  {
707  -x10/4 + x16/4 + x18/4 + x20/2 - x25/2 - x8/4, // 0, 2, 0
708  x10/2 + x16/2 + x18/2 - x20 - x21 - x23 - x25 + 2*x26 + x8/2, // 0, 2, 1
709  Point(0,0,0) // 0, 2, 2
710  }
711  },
712  {
713  {
714  x11/4 + x17/4 - x19/4 - x9/4, // 1, 0, 0
715  -x11/2 + x17/2 - x19/2 - x22 + x24 + x9/2, // 1, 0, 1
716  Point(0,0,0) // 1, 0, 2
717  },
718  {
719  -x0/8 + x1/8 - x2/8 + x3/8 + x4/8 - x5/8 + x6/8 - x7/8, // 1, 1, 0
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
721  Point(0,0,0) // 1, 1, 2
722  },
723  {
724  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
725  -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
726  Point(0,0,0) // 1, 2, 2
727  }
728  },
729  {
730  {
731  -x11/4 + x17/4 + x19/4 + x20/2 - x25/2 - x9/4, // 2, 0, 0
732  x11/2 + x17/2 + x19/2 - x20 - x22 - x24 - x25 + 2*x26 + x9/2, // 2, 0, 1
733  Point(0,0,0) // 2, 0, 2
734  },
735  {
736  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
737  -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
738  Point(0,0,0) // 2, 1, 2
739  },
740  {
741  -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
742  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
743  Point(0,0,0) // 2, 2, 2
744  }
745  }
746  };
747 
748  // 3x3 quadrature, exact for bi-quintics
749  const int N = 3;
750  const Real w[N] = {5./9, 8./9, 5./9};
751 
752  // Quadrature point locations raised to powers. q[0][2] is
753  // quadrature point 0, squared, q[1][1] is quadrature point 1 to the
754  // first power, etc.
755  const Real q[N][N] =
756  {
757  //^0 ^1 ^2
758  { 1., -std::sqrt(15)/5., 15./25},
759  { 1., 0., 0.},
760  { 1., std::sqrt(15)/5., 15./25}
761  };
762 
763  Real vol = 0.;
764  for (int i=0; i<N; ++i)
765  for (int j=0; j<N; ++j)
766  for (int k=0; k<N; ++k)
767  {
768  // Compute dx_dxi, dx_deta, dx_dzeta at the current quadrature point.
769  Point dx_dxi_q, dx_deta_q, dx_dzeta_q;
770  for (int ii=0; ii<N; ++ii)
771  for (int jj=0; jj<N; ++jj)
772  for (int kk=0; kk<N; ++kk)
773  {
774  Real coeff = q[i][ii] * q[j][jj] * q[k][kk];
775 
776  dx_dxi_q += coeff * dx_dxi[ii][jj][kk];
777  dx_deta_q += coeff * dx_deta[ii][jj][kk];
778  dx_dzeta_q += coeff * dx_dzeta[ii][jj][kk];
779  }
780 
781  // Compute scalar triple product, multiply by weight, and accumulate volume.
782  vol += w[i] * w[j] * w[k] * triple_product(dx_dxi_q, dx_deta_q, dx_dzeta_q);
783  }
784 
785  return vol;
786 }
787 
788 
789 
790 
791 
792 
793 
794 #ifdef LIBMESH_ENABLE_AMR
795 
797  {
798  // embedding matrix for child 0
799  {
800  // 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
801  { 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
802  { 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
803  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
804  { 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
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, 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
806  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
807  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
808  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
809  { 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
810  { 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
811  { 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
812  { 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
813  { 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
814  { 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
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, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 14
816  { 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
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.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
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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 17
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.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 18
820  { 0.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
821  { 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
822  { 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
823  { 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
824  { 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
825  { 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
826  { 0.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
827  { 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
828  },
829 
830  // embedding matrix for child 1
831  {
832  // 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
833  { 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
834  { 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
835  { 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
836  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
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.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
838  { 0.00000, 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
839  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
840  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
841  { -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
842  { 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
843  { 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
844  { 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
845  { 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
846  { 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
847  { 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
848  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
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.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
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.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
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.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 18
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, 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
853  { -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
854  { -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
855  { 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
856  { 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
857  { 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
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.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
859  { -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
860 
861  },
862 
863  // embedding matrix for child 2
864  {
865  // 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
866  { 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
867  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
868  { 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
869  { 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
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.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
871  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
872  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
873  { 0.00000, 0.00000, 0.00000, 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
874  { 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
875  { 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
876  { 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
877  { -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
878  { 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
879  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
880  { 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
881  { 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
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, -0.125000, 0.00000, 0.375000, 0.00000, 0.750000 }, // 16
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, 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
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.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
885  { 0.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
886  { -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
887  { 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
888  { 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
889  { 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
890  { -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
891  { 0.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
892  { -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
893  },
894 
895  // embedding matrix for child 3
896  {
897  // 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
898  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
899  { 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
900  { 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
901  { 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
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.00000, 0.00000, 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
903  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
904  { 0.00000, 0.00000, 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
905  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
906  { 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
907  { 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
908  { 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
909  { 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
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.375000, 0.00000, 0.00000, 0.00000, 0.00000, -0.125000, 0.750000 }, // 12
911  { 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
912  { 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
913  { 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
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, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.00000, -0.125000, 0.00000, 0.750000 }, // 16
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.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
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.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
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.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
918  { 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
919  { 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
920  { 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
921  { 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
922  { 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
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.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
924  { 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
925  },
926 
927  // embedding matrix for child 4
928  {
929  // 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
930  { 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
931  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
932  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
933  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
934  { 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
935  { 0.00000, 0.00000, 0.00000, 0.00000, 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
936  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
937  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
938  { 0.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
939  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
940  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
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.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
942  { -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
943  { 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
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.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 14
945  { 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
946  { 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
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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 17
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.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 18
949  { 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
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.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
951  { -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
952  { 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
953  { 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
954  { -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
955  { 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
956  { -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
957  },
958 
959  // embedding matrix for child 5
960  {
961  // 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
962  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
963  { 0.00000, 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
964  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
965  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
966  { 0.00000, 0.00000, 0.00000, 0.00000, 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
967  { 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
968  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
969  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
970  { 0.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
971  { 0.00000, 0.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
972  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.750000 }, // 11
974  { 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
975  { 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
976  { 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
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, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.375000, 0.750000 }, // 15
978  { 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
979  { 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
980  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
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.375000, 0.00000, -0.125000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 19
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.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
983  { 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
984  { 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
985  { 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
986  { 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
987  { 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
988  { 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
989  },
990 
991  // embedding matrix for child 6
992  {
993  // 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
994  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
995  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
996  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
997  { 0.00000, 0.00000, 0.00000, 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
998  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
999  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1000  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1001  { 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
1002  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1003  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1004  { 0.00000, 0.00000, 0.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
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.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
1006  { 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
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, 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
1008  { 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
1009  { 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
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, -0.125000, 0.00000, 0.375000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.750000, 0.00000 }, // 16
1011  { 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1012  { 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
1013  { 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
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.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
1015  { 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
1016  { 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
1017  { 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
1018  { 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
1019  { 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
1020  { 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
1021  },
1022 
1023  // embedding matrix for child 7
1024  {
1025  // 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
1026  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1027  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1028  { 0.00000, 0.00000, 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
1029  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1030  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1031  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1032  { 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
1033  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 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
1034  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1035  { 0.00000, 0.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
1036  { 0.00000, 0.00000, 0.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
1037  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1038  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1039  { 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
1040  { 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
1041  { 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
1042  { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1043  { 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
1044  { 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
1045  { 0.00000, 0.00000, 0.00000, 0.00000, 0.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
1046  { 0.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
1047  { 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
1048  { 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
1049  { 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
1050  { 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
1051  { 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
1052  { -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
1053  }
1054  };
1055 
1056 #endif
1057 
1058 
1059 void
1060 Hex27::permute(unsigned int perm_num)
1061 {
1062  libmesh_assert_less (perm_num, 24);
1063  const unsigned int side = perm_num % 6;
1064  const unsigned int rotate = perm_num / 6;
1065 
1066  for (unsigned int i = 0; i != rotate; ++i)
1067  {
1068  swap4nodes(0,1,2,3);
1069  swap4nodes(4,5,6,7);
1070  swap4nodes(8,9,10,11);
1071  swap4nodes(12,13,14,15);
1072  swap4nodes(16,17,18,19);
1073  swap4nodes(21,22,23,24);
1074  swap4neighbors(1,2,3,4);
1075  }
1076 
1077  switch (side) {
1078  case 0:
1079  break;
1080  case 1:
1081  swap4nodes(3,7,4,0);
1082  swap4nodes(11,15,19,12);
1083  swap4nodes(10,18,16,8);
1084  swap4nodes(2,6,5,1);
1085  swap4nodes(9,14,17,13);
1086  swap4nodes(20,23,25,21);
1087  swap4neighbors(0,3,5,1);
1088  break;
1089  case 2:
1090  swap4nodes(0,4,5,1);
1091  swap4nodes(8,12,16,13);
1092  swap4nodes(3,7,6,2);
1093  swap4nodes(10,15,18,14);
1094  swap4nodes(11,19,17,9);
1095  swap4nodes(20,24,25,22);
1096  swap4neighbors(0,4,5,2);
1097  break;
1098  case 3:
1099  swap4nodes(0,4,7,3);
1100  swap4nodes(12,19,15,11);
1101  swap4nodes(8,16,18,10);
1102  swap4nodes(1,5,6,2);
1103  swap4nodes(13,17,14,9);
1104  swap4nodes(20,21,25,23);
1105  swap4neighbors(0,1,5,3);
1106  break;
1107  case 4:
1108  swap4nodes(1,5,4,0);
1109  swap4nodes(8,13,16,12);
1110  swap4nodes(9,17,19,11);
1111  swap4nodes(2,6,7,3);
1112  swap4nodes(10,14,18,15);
1113  swap4nodes(20,22,25,24);
1114  swap4neighbors(0,2,5,4);
1115  break;
1116  case 5:
1117  swap2nodes(0,7);
1118  swap2nodes(8,18);
1119  swap2nodes(1,6);
1120  swap2nodes(2,5);
1121  swap2nodes(10,16);
1122  swap2nodes(3,4);
1123  swap2nodes(11,19);
1124  swap2nodes(12,15);
1125  swap2nodes(9,17);
1126  swap2nodes(13,14);
1127  swap2nodes(20,25);
1128  swap2nodes(21,23);
1129  swap2neighbors(0,5);
1130  swap2neighbors(1,3);
1131  break;
1132  default:
1133  libmesh_error();
1134  }
1135 }
1136 
1137 
1138 void
1139 Hex27::flip(BoundaryInfo * boundary_info)
1140 {
1141  libmesh_assert(boundary_info);
1142 
1143  swap2nodes(0,1);
1144  swap2nodes(2,3);
1145  swap2nodes(4,5);
1146  swap2nodes(6,7);
1147  swap2nodes(9,11);
1148  swap2nodes(12,13);
1149  swap2nodes(14,15);
1150  swap2nodes(17,19);
1151  swap2nodes(22,24);
1152  swap2neighbors(2,4);
1153  swap2boundarysides(2,4,boundary_info);
1154  swap2boundaryedges(1,3,boundary_info);
1155  swap2boundaryedges(4,5,boundary_info);
1156  swap2boundaryedges(6,7,boundary_info);
1157  swap2boundaryedges(9,11,boundary_info);
1158 }
1159 
1160 
1161 unsigned int Hex27::center_node_on_side(const unsigned short side) const
1162 {
1163  libmesh_assert_less (side, Hex27::num_sides);
1164  return side + 20;
1165 }
1166 
1167 
1168 ElemType
1169 Hex27::side_type (const unsigned int libmesh_dbg_var(s)) const
1170 {
1171  libmesh_assert_less (s, 6);
1172  return QUAD9;
1173 }
1174 
1175 
1176 } // namespace libMesh
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
Definition: cell_hex27.C:275
virtual void flip(BoundaryInfo *) override final
Flips the element (by swapping node and neighbor pointers) to have a mapping Jacobian of opposite sig...
Definition: cell_hex27.C:1139
ElemType
Defines an enum for geometric element types.
void swap2boundaryedges(unsigned short e1, unsigned short e2, BoundaryInfo *boundary_info) const
Swaps two edges in boundary_info, if it is non-null.
Definition: elem.C:3553
Order
defines an enum for polynomial orders.
Definition: enum_order.h:40
Node ** _nodes
Pointers to the nodes we are connected to.
Definition: elem.h:2227
static const Real _embedding_matrix[num_children][num_nodes][num_nodes]
Matrix that computes new nodal locations/solution values from current nodes/solution.
Definition: cell_hex27.h:280
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
Definition: cell_hex27.C:546
virtual unsigned int n_nodes() const override
Definition: cell_hex27.h:96
virtual bool has_affine_map() const override
Definition: cell_hex27.C:126
virtual Order default_order() const override
Definition: cell_hex27.C:172
virtual dof_id_type key() const
Definition: elem.C:756
static const int num_nodes
Geometric constants for Hex27.
Definition: cell_hex27.h:228
static const unsigned short int _second_order_adjacent_vertices[12][2]
Matrix that tells which vertices define the location of mid-side (or second-order) nodes...
Definition: cell_hex.h:215
virtual bool is_vertex(const unsigned int i) const override
Definition: cell_hex27.C:67
IOPackage
libMesh interfaces with several different software packages for the purposes of creating, reading, and writing mesh files.
void swap2boundarysides(unsigned short s1, unsigned short s2, BoundaryInfo *boundary_info) const
Swaps two sides in boundary_info, if it is non-null.
Definition: elem.C:3537
unsigned int center_node_on_side(const unsigned short side) const override final
Definition: cell_hex27.C:1161
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
Definition: cell_hex27.C:92
virtual unsigned int n_second_order_adjacent_vertices(const unsigned int) const override
Definition: cell_hex27.C:445
The libMesh namespace provides an interface to certain functionality in the library.
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy=false) override
Builds a QUAD9 built coincident with face i.
Definition: cell_hex27.C:245
virtual void permute(unsigned int perm_num) override final
Permutes the element (by swapping node and neighbor pointers) according to the specified index...
Definition: cell_hex27.C:1060
T triple_product(const TypeVector< T > &a, const TypeVector< T > &b, const TypeVector< T > &c)
Definition: type_vector.h:1029
void swap4nodes(unsigned int n1, unsigned int n2, unsigned int n3, unsigned int n4)
Swaps four node_ptrs, "rotating" them.
Definition: elem.h:2124
ElemMappingType mapping_type() const
Definition: elem.h:3117
void swap2nodes(unsigned int n1, unsigned int n2)
Swaps two node_ptrs.
Definition: elem.h:2073
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
Definition: cell_hex27.C:115
static const int num_edges
Definition: cell_hex.h:74
ElemType side_type(const unsigned int s) const override final
Definition: cell_hex27.C:1169
static const int num_children
Definition: cell_hex.h:75
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
This maps the node of the edge to element node numbers.
Definition: cell_hex27.h:242
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
Definition: boundary_info.h:57
libmesh_assert(ctx)
virtual Real volume() const override
A specialization for computing the volume of a Hex27.
Definition: cell_hex27.C:562
static constexpr Real affine_tol
Default tolerance to use in has_affine_map().
Definition: elem.h:2042
RealTensorValue rotate(MeshBase &mesh, const Real phi, const Real theta=0., const Real psi=0.)
Rotates the mesh in the xy plane.
virtual unsigned int n_edges() const override final
Definition: cell_hex.h:90
virtual unsigned int local_edge_node(unsigned int edge, unsigned int edge_node) const override
Definition: cell_hex27.C:234
void swap2neighbors(unsigned int n1, unsigned int n2)
Swaps two neighbor_ptrs.
Definition: elem.h:2083
static const int nodes_per_side
Definition: cell_hex27.h:229
static const int nodes_per_edge
Definition: cell_hex27.h:230
virtual unsigned int n_vertices() const override final
Definition: cell_hex.h:85
static const unsigned short int _remaining_second_order_adjacent_vertices[6][4]
Matrix that tells which vertices define the location of mid-side (or second-order) nodes...
Definition: cell_hex27.h:301
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
Definition: cell_hex27.C:102
virtual unsigned int n_sides() const override final
Definition: cell_hex.h:80
virtual bool is_face(const unsigned int i) const override
Definition: cell_hex27.C:83
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
Definition: cell_hex27.C:481
virtual Real volume() const
Definition: elem.C:3432
void swap4neighbors(unsigned int n1, unsigned int n2, unsigned int n3, unsigned int n4)
Swaps four neighbor_ptrs, "rotating" them.
Definition: elem.h:2134
virtual unsigned int n_sub_elem() const override
Definition: cell_hex27.h:101
static const int num_sides
Geometric constants for all Hexes.
Definition: cell_hex.h:73
static const unsigned short int _second_order_vertex_child_number[27]
Vector that names a child sharing each second order node.
Definition: cell_hex.h:220
static const unsigned short int _second_order_vertex_child_index[27]
Vector that names the child vertex index for each second order node.
Definition: cell_hex.h:225
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
Builds a EDGE3 built coincident with edge i.
Definition: cell_hex27.C:261
virtual std::vector< unsigned int > nodes_on_edge(const unsigned int e) const override
Definition: cell_hex27.C:109
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
This maps the node of the side to element node numbers.
Definition: cell_hex27.h:236
static dof_id_type compute_key(dof_id_type n0)
Definition: elem.h:3291
virtual unsigned int local_side_node(unsigned int side, unsigned int side_node) const override
Definition: cell_hex27.C:223
virtual bool is_edge(const unsigned int i) const override
Definition: cell_hex27.C:74
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:39
dof_id_type node_id(const unsigned int i) const
Definition: elem.h:2444
const Point & point(const unsigned int i) const
Definition: elem.h:2422
bool relative_fuzzy_equals(const TypeVector< T > &rhs, Real tol=TOLERANCE) const
Definition: type_vector.h:981
uint8_t dof_id_type
Definition: id_types.h:67