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

Generated by: LCOV version 1.14