$extrastylesheet
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