$extrastylesheet
cell_inf_hex18.C
Go to the documentation of this file.
00001 // The libMesh Finite Element Library.
00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
00003 
00004 // This library is free software; you can redistribute it and/or
00005 // modify it under the terms of the GNU Lesser General Public
00006 // License as published by the Free Software Foundation; either
00007 // version 2.1 of the License, or (at your option) any later version.
00008 
00009 // This library is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // Lesser General Public License for more details.
00013 
00014 // You should have received a copy of the GNU Lesser General Public
00015 // License along with this library; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 // Local includes
00019 #include "libmesh/libmesh_config.h"
00020 
00021 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
00022 
00023 // C++ includes
00024 
00025 // Local includes cont'd
00026 #include "libmesh/cell_inf_hex18.h"
00027 #include "libmesh/edge_edge3.h"
00028 #include "libmesh/edge_inf_edge2.h"
00029 #include "libmesh/face_quad9.h"
00030 #include "libmesh/face_inf_quad6.h"
00031 #include "libmesh/side.h"
00032 
00033 namespace libMesh
00034 {
00035 
00036 
00037 // ------------------------------------------------------------
00038 // InfHex18 class static member initializations
00039 const unsigned int InfHex18::side_nodes_map[5][9] =
00040   {
00041     { 0, 1, 2, 3, 8, 9, 10, 11, 16},   // Side 0
00042     { 0, 1, 4, 5, 8, 12, 99, 99, 99},  // Side 1
00043     { 1, 2, 5, 6, 9, 13, 99, 99, 99},  // Side 2
00044     { 2, 3, 6, 7, 10, 14, 99, 99, 99}, // Side 3
00045     { 3, 0, 7, 4, 11, 15, 99, 99, 99}  // Side 4
00046   };
00047 
00048 const unsigned int InfHex18::edge_nodes_map[8][3] =
00049   {
00050     { 0, 1, 8},  // Side 0
00051     { 1, 2, 9},  // Side 1
00052     { 2, 3, 10}, // Side 2
00053     { 0, 3, 11}, // Side 3
00054     { 0, 4, 99}, // Side 4
00055     { 1, 5, 99}, // Side 5
00056     { 2, 6, 99}, // Side 6
00057     { 3, 7, 99}  // Side 7
00058   };
00059 
00060 // ------------------------------------------------------------
00061 // InfHex18 class member functions
00062 
00063 bool InfHex18::is_vertex(const unsigned int i) const
00064 {
00065   if (i < 4)
00066     return true;
00067   return false;
00068 }
00069 
00070 bool InfHex18::is_edge(const unsigned int i) const
00071 {
00072   if (i < 4)
00073     return false;
00074   if (i > 11)
00075     return false;
00076   return true;
00077 }
00078 
00079 bool InfHex18::is_face(const unsigned int i) const
00080 {
00081   if (i > 11)
00082     return true;
00083   return false;
00084 }
00085 
00086 bool InfHex18::is_node_on_side(const unsigned int n,
00087                                const unsigned int s) const
00088 {
00089   libmesh_assert_less (s, n_sides());
00090   for (unsigned int i = 0; i != 9; ++i)
00091     if (side_nodes_map[s][i] == n)
00092       return true;
00093   return false;
00094 }
00095 
00096 bool InfHex18::is_node_on_edge(const unsigned int n,
00097                                const unsigned int e) const
00098 {
00099   libmesh_assert_less (e, n_edges());
00100   for (unsigned int i = 0; i != 3; ++i)
00101     if (edge_nodes_map[e][i] == n)
00102       return true;
00103   return false;
00104 }
00105 
00106 dof_id_type InfHex18::key (const unsigned int s) const
00107 {
00108   libmesh_assert_less (s, this->n_sides());
00109 
00110   // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
00111   switch (s)
00112     {
00113     case 0: // the base face
00114 
00115       return
00116         this->compute_key (this->node(16));
00117 
00118 
00119     case 1:  // the face at y = -1
00120 
00121       return
00122         this->compute_key (this->node(0),
00123                            this->node(1),
00124                            this->node(5),
00125                            this->node(4));
00126 
00127     case 2:  // the face at x = 1
00128 
00129       return
00130         this->compute_key (this->node(1),
00131                            this->node(2),
00132                            this->node(6),
00133                            this->node(5));
00134 
00135     case 3: // the face at y = 1
00136 
00137       return
00138         this->compute_key (this->node(2),
00139                            this->node(3),
00140                            this->node(7),
00141                            this->node(6));
00142 
00143     case 4: // the face at x = -1
00144 
00145       return
00146         this->compute_key (this->node(3),
00147                            this->node(0),
00148                            this->node(4),
00149                            this->node(7));
00150     default:
00151       libmesh_error_msg("Invalid side s = " << s);
00152     }
00153 
00154   libmesh_error_msg("We'll never get here!");
00155   return 0;
00156 }
00157 
00158 
00159 
00160 UniquePtr<Elem> InfHex18::build_side (const unsigned int i,
00161                                       bool proxy) const
00162 {
00163   libmesh_assert_less (i, this->n_sides());
00164 
00165   if (proxy)
00166     {
00167       switch (i)
00168         {
00169           // base
00170         case 0:
00171           return UniquePtr<Elem>(new Side<Quad9,InfHex18>(this,i));
00172 
00173           // ifem sides
00174         case 1:
00175         case 2:
00176         case 3:
00177         case 4:
00178           return UniquePtr<Elem>(new Side<InfQuad6,InfHex18>(this,i));
00179 
00180         default:
00181           libmesh_error_msg("Invalid side i = " << i);
00182         }
00183     }
00184 
00185   else
00186     {
00187       // Create NULL pointer to be initialized, returned later.
00188       Elem* face = NULL;
00189 
00190       // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
00191       switch (i)
00192         {
00193         case 0: // the base face
00194           {
00195             face = new Quad9;
00196 
00197             // This is the exception: all other face elements' normals
00198             // point outwards; but the base element's normal points inward
00199             face->set_node(0) = this->get_node(0);
00200             face->set_node(1) = this->get_node(1);
00201             face->set_node(2) = this->get_node(2);
00202             face->set_node(3) = this->get_node(3);
00203             face->set_node(4) = this->get_node(8);
00204             face->set_node(5) = this->get_node(9);
00205             face->set_node(6) = this->get_node(10);
00206             face->set_node(7) = this->get_node(11);
00207             face->set_node(8) = this->get_node(16);
00208 
00209             break;
00210           }
00211 
00212         case 1:  // connecting to another infinite element
00213           {
00214             face = new InfQuad6;
00215 
00216             face->set_node(0) = this->get_node(0);
00217             face->set_node(1) = this->get_node(1);
00218             face->set_node(2) = this->get_node(4);
00219             face->set_node(3) = this->get_node(5);
00220             face->set_node(4) = this->get_node(8);
00221             face->set_node(5) = this->get_node(12);
00222 
00223             break;
00224           }
00225 
00226         case 2:  // connecting to another infinite element
00227           {
00228             face = new InfQuad6;
00229 
00230             face->set_node(0) = this->get_node(1);
00231             face->set_node(1) = this->get_node(2);
00232             face->set_node(2) = this->get_node(5);
00233             face->set_node(3) = this->get_node(6);
00234             face->set_node(4) = this->get_node(9);
00235             face->set_node(5) = this->get_node(13);
00236 
00237             break;
00238           }
00239 
00240         case 3:  // connecting to another infinite element
00241           {
00242             face = new InfQuad6;
00243 
00244             face->set_node(0) = this->get_node(2);
00245             face->set_node(1) = this->get_node(3);
00246             face->set_node(2) = this->get_node(6);
00247             face->set_node(3) = this->get_node(7);
00248             face->set_node(4) = this->get_node(10);
00249             face->set_node(5) = this->get_node(14);
00250 
00251             break;
00252           }
00253 
00254         case 4:  // connecting to another infinite element
00255           {
00256             face = new InfQuad6;
00257 
00258             face->set_node(0) = this->get_node(3);
00259             face->set_node(1) = this->get_node(0);
00260             face->set_node(2) = this->get_node(7);
00261             face->set_node(3) = this->get_node(4);
00262             face->set_node(4) = this->get_node(11);
00263             face->set_node(5) = this->get_node(15);
00264 
00265             break;
00266           }
00267 
00268         default:
00269           libmesh_error_msg("Invalid side i = " << i);
00270         }
00271 
00272       face->subdomain_id() = this->subdomain_id();
00273       return UniquePtr<Elem>(face);
00274     }
00275 
00276   libmesh_error_msg("We'll never get here!");
00277   return UniquePtr<Elem>();
00278 }
00279 
00280 
00281 
00282 UniquePtr<Elem> InfHex18::build_edge (const unsigned int i) const
00283 {
00284   libmesh_assert_less (i, this->n_edges());
00285 
00286   if (i < 4) // base edges
00287     return UniquePtr<Elem>(new SideEdge<Edge3,InfHex18>(this,i));
00288   // infinite edges
00289   return UniquePtr<Elem>(new SideEdge<InfEdge2,InfHex18>(this,i));
00290 }
00291 
00292 
00293 
00294 void InfHex18::connectivity(const unsigned int sc,
00295                             const IOPackage iop,
00296                             std::vector<dof_id_type>& conn) const
00297 {
00298   libmesh_assert(_nodes);
00299   libmesh_assert_less (sc, this->n_sub_elem());
00300   libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
00301 
00302   switch (iop)
00303     {
00304     case TECPLOT:
00305       {
00306         switch (sc)
00307           {
00308           case 0:
00309 
00310             conn[0] = this->node(0)+1;
00311             conn[1] = this->node(8)+1;
00312             conn[2] = this->node(16)+1;
00313             conn[3] = this->node(11)+1;
00314             conn[4] = this->node(4)+1;
00315             conn[5] = this->node(12)+1;
00316             conn[6] = this->node(17)+1;
00317             conn[7] = this->node(15)+1;
00318 
00319             return;
00320 
00321           case 1:
00322 
00323             conn[0] = this->node(8)+1;
00324             conn[1] = this->node(1)+1;
00325             conn[2] = this->node(9)+1;
00326             conn[3] = this->node(16)+1;
00327             conn[4] = this->node(12)+1;
00328             conn[5] = this->node(5)+1;
00329             conn[6] = this->node(13)+1;
00330             conn[7] = this->node(17)+1;
00331 
00332             return;
00333 
00334           case 2:
00335 
00336             conn[0] = this->node(11)+1;
00337             conn[1] = this->node(16)+1;
00338             conn[2] = this->node(10)+1;
00339             conn[3] = this->node(3)+1;
00340             conn[4] = this->node(15)+1;
00341             conn[5] = this->node(17)+1;
00342             conn[6] = this->node(14)+1;
00343             conn[7] = this->node(7)+1;
00344 
00345             return;
00346 
00347           case 3:
00348 
00349             conn[0] = this->node(16)+1;
00350             conn[1] = this->node(9)+1;
00351             conn[2] = this->node(2)+1;
00352             conn[3] = this->node(10)+1;
00353             conn[4] = this->node(17)+1;
00354             conn[5] = this->node(13)+1;
00355             conn[6] = this->node(6)+1;
00356             conn[7] = this->node(14)+1;
00357 
00358             return;
00359 
00360           default:
00361             libmesh_error_msg("Invalid sc = " << sc);
00362           }
00363       }
00364 
00365     default:
00366       libmesh_error_msg("Unsupported IO package " << iop);
00367     }
00368 }
00369 
00370 
00371 
00372 
00373 unsigned int InfHex18::n_second_order_adjacent_vertices (const unsigned int n) const
00374 {
00375   switch (n)
00376     {
00377     case 8:
00378     case 9:
00379     case 10:
00380     case 11:
00381     case 12:
00382     case 13:
00383     case 14:
00384     case 15:
00385       return 2;
00386 
00387     case 16:
00388     case 17:
00389       return 4;
00390 
00391     default:
00392       libmesh_error_msg("Invalid node n = " << n);
00393     }
00394 
00395   libmesh_error_msg("We'll never get here!");
00396   return libMesh::invalid_uint;
00397 }
00398 
00399 
00400 
00401 unsigned short int InfHex18::second_order_adjacent_vertex (const unsigned int n,
00402                                                            const unsigned int v) const
00403 {
00404   libmesh_assert_greater_equal (n, this->n_vertices());
00405   libmesh_assert_less (n, this->n_nodes());
00406   libmesh_assert_less (v, this->n_second_order_adjacent_vertices(n));
00407 
00408   if (n == 16)
00409     /*
00410      * for the bubble node in the base the return value is
00411      * simply v.  Why? -- the user asks for the v-th
00412      * adjacent vertex, from \p n_second_order_adjacent_vertices()
00413      * there are 4 adjacent vertices, and these happen to be
00414      * 0..3
00415      */
00416     return static_cast<unsigned short int>(v);
00417   else if (n == 17)
00418     /*
00419      * for the bubble node further out similar reasoning works,
00420      * but v must be shifted to the further-out nodes:
00421      * simply add 4
00422      */
00423     return static_cast<unsigned short int>(v+4);
00424 
00425   else
00426     /*
00427      * all others are stored in the vertices matrix -- note
00428      * that this matrix is kept in \p InfHex to foster
00429      * code-reuse
00430      */
00431     return _second_order_adjacent_vertices[n-this->n_vertices()][v];
00432 }
00433 
00434 
00435 
00436 std::pair<unsigned short int, unsigned short int>
00437 InfHex18::second_order_child_vertex (const unsigned int n) const
00438 {
00439   libmesh_assert_greater_equal (n, this->n_vertices());
00440   libmesh_assert_less (n, this->n_nodes());
00441   /*
00442    * the _second_order_vertex_child_* vectors are
00443    * stored in cell_inf_hex.C, since they are identical
00444    * for InfHex16 and InfHex18
00445    */
00446   return std::pair<unsigned short int, unsigned short int>
00447     (_second_order_vertex_child_number[n],
00448      _second_order_vertex_child_index[n]);
00449 }
00450 
00451 
00452 
00453 
00454 
00455 
00456 
00457 #ifdef LIBMESH_ENABLE_AMR
00458 
00459 const float InfHex18::_embedding_matrix[4][18][18] =
00460   {
00461     // embedding matrix for child 0
00462     {
00463       //          0           1           2           3           4           5           6           7           8           9          10          11          12          13          14          15          16          17 th parent Node
00464       {         1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 0th child N.
00465       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 1
00466       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0}, // 2
00467       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 3
00468       {         0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 4
00469       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 5
00470       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0}, // 6
00471       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0}, // 7
00472       {       0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 8
00473       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 9
00474       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 10
00475       {       0.375,        0.0,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 11
00476       {         0.0,        0.0,        0.0,        0.0,      0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0}, // 12
00477       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,       0.75}, // 13
00478       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,       0.75}, // 14
00479       {         0.0,        0.0,        0.0,        0.0,      0.375,        0.0,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0}, // 15
00480       {    0.140625,  -0.046875,   0.015625,  -0.046875,        0.0,        0.0,        0.0,        0.0,    0.28125,   -0.09375,   -0.09375,    0.28125,        0.0,        0.0,        0.0,        0.0,     0.5625,        0.0}, // 16
00481       {         0.0,        0.0,        0.0,        0.0,   0.140625,  -0.046875,   0.015625,  -0.046875,        0.0,        0.0,        0.0,        0.0,    0.28125,   -0.09375,   -0.09375,    0.28125,        0.0,     0.5625}  // 17
00482     },
00483 
00484     // embedding matrix for child 1
00485     {
00486       //          0           1           2           3           4           5           6           7           8           9          10          11          12          13          14          15          16          17 th parent Node
00487       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 0th child N.
00488       {         0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 1
00489       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 2
00490       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0}, // 3
00491       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 4
00492       {         0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 5
00493       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0}, // 6
00494       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0}, // 7
00495       {      -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 8
00496       {         0.0,      0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 9
00497       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 10
00498       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 11
00499       {         0.0,        0.0,        0.0,        0.0,     -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0}, // 12
00500       {         0.0,        0.0,        0.0,        0.0,        0.0,      0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0}, // 13
00501       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,       0.75}, // 14
00502       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,       0.75}, // 15
00503       {   -0.046875,   0.140625,  -0.046875,   0.015625,        0.0,        0.0,        0.0,        0.0,    0.28125,    0.28125,   -0.09375,   -0.09375,        0.0,        0.0,        0.0,        0.0,     0.5625,        0.0}, // 16
00504       {         0.0,        0.0,        0.0,        0.0,  -0.046875,   0.140625,  -0.046875,   0.015625,        0.0,        0.0,        0.0,        0.0,    0.28125,    0.28125,   -0.09375,   -0.09375,        0.0,     0.5625}  // 17
00505     },
00506 
00507     // embedding matrix for child 2
00508     {
00509       //          0           1           2           3           4           5           6           7           8           9          10          11          12          13          14          15          16          17 th parent Node
00510       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 0th child N.
00511       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0}, // 1
00512       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 2
00513       {         0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 3
00514       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0}, // 4
00515       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0}, // 5
00516       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0}, // 6
00517       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 7
00518       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 8
00519       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 9
00520       {         0.0,        0.0,     -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 10
00521       {      -0.125,        0.0,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 11
00522       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,       0.75}, // 12
00523       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,       0.75}, // 13
00524       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0}, // 14
00525       {         0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0}, // 15
00526       {   -0.046875,   0.015625,  -0.046875,   0.140625,        0.0,        0.0,        0.0,        0.0,   -0.09375,   -0.09375,    0.28125,    0.28125,        0.0,        0.0,        0.0,        0.0,     0.5625,        0.0}, // 16
00527       {         0.0,        0.0,        0.0,        0.0,  -0.046875,   0.015625,  -0.046875,   0.140625,        0.0,        0.0,        0.0,        0.0,   -0.09375,   -0.09375,    0.28125,    0.28125,        0.0,     0.5625}  // 17
00528     },
00529 
00530     // embedding matrix for child 3
00531     {
00532       //          0           1           2           3           4           5           6           7           8           9          10          11          12          13          14          15          16          17 th parent Node
00533       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0}, // 0th child N.
00534       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 1
00535       {         0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 2
00536       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 3
00537       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0}, // 4
00538       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0}, // 5
00539       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 6
00540       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        1.0,        0.0,        0.0,        0.0}, // 7
00541       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 8
00542       {         0.0,     -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 9
00543       {         0.0,        0.0,      0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0}, // 10
00544       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0}, // 11
00545       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,        0.0,     -0.125,        0.0,       0.75}, // 12
00546       {         0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,      0.375,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0,        0.0}, // 13
00547       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,      0.375,     -0.125,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,       0.75,        0.0,        0.0,        0.0}, // 14
00548       {         0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,        0.0,     -0.125,        0.0,      0.375,        0.0,        0.0,       0.75}, // 15
00549       {    0.015625,  -0.046875,   0.140625,  -0.046875,        0.0,        0.0,        0.0,        0.0,   -0.09375,    0.28125,    0.28125,   -0.09375,        0.0,        0.0,        0.0,        0.0,     0.5625,        0.0}, // 16
00550       {         0.0,        0.0,        0.0,        0.0,   0.015625,  -0.046875,   0.140625,  -0.046875,        0.0,        0.0,        0.0,        0.0,   -0.09375,    0.28125,    0.28125,   -0.09375,        0.0,     0.5625}  // 17
00551     }
00552   };
00553 
00554 
00555 
00556 
00557 #endif
00558 
00559 } // namespace libMesh
00560 
00561 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS