LCOV - code coverage report
Current view: top level - src/geom - cell_hex20.C (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4343 (6ea38c) with base 8c3130 Lines: 213 281 75.8 %
Date: 2026-10-13 21:47:33 Functions: 18 23 78.3 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.14