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