cell_inf_hex18.C
Go to the documentation of this file.00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2012 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 } 00151 00152 // We'll never get here. 00153 libmesh_error(); 00154 return 0; 00155 } 00156 00157 00158 00159 AutoPtr<Elem> InfHex18::build_side (const unsigned int i, 00160 bool proxy) const 00161 { 00162 libmesh_assert_less (i, this->n_sides()); 00163 00164 if (proxy) 00165 { 00166 switch (i) 00167 { 00168 // base 00169 case 0: 00170 { 00171 AutoPtr<Elem> ap(new Side<Quad9,InfHex18>(this,i)); 00172 return ap; 00173 } 00174 // ifem sides 00175 case 1: 00176 case 2: 00177 case 3: 00178 case 4: 00179 { 00180 AutoPtr<Elem> ap(new Side<InfQuad6,InfHex18>(this,i)); 00181 return ap; 00182 } 00183 default: 00184 libmesh_error(); 00185 } 00186 } 00187 00188 else 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 AutoPtr<Elem> 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 return face; 00210 } 00211 00212 case 1: // connecting to another infinite element 00213 { 00214 AutoPtr<Elem> 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 return face; 00224 } 00225 00226 case 2: // connecting to another infinite element 00227 { 00228 AutoPtr<Elem> 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 return face; 00238 } 00239 00240 case 3: // connecting to another infinite element 00241 { 00242 AutoPtr<Elem> 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 return face; 00252 } 00253 00254 case 4: // connecting to another infinite element 00255 { 00256 AutoPtr<Elem> 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 return face; 00266 } 00267 00268 default: 00269 { 00270 libmesh_error(); 00271 AutoPtr<Elem> ap(NULL); return ap; 00272 } 00273 } 00274 } 00275 00276 // We'll never get here. 00277 libmesh_error(); 00278 AutoPtr<Elem> ap(NULL); return ap; 00279 } 00280 00281 00282 00283 AutoPtr<Elem> InfHex18::build_edge (const unsigned int i) const 00284 { 00285 libmesh_assert_less (i, this->n_edges()); 00286 00287 if (i < 4) // base edges 00288 return AutoPtr<Elem>(new SideEdge<Edge3,InfHex18>(this,i)); 00289 // infinite edges 00290 return AutoPtr<Elem>(new SideEdge<InfEdge2,InfHex18>(this,i)); 00291 } 00292 00293 00294 00295 void InfHex18::connectivity(const unsigned int sc, 00296 const IOPackage iop, 00297 std::vector<dof_id_type>& conn) const 00298 { 00299 libmesh_assert(_nodes); 00300 libmesh_assert_less (sc, this->n_sub_elem()); 00301 libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE); 00302 00303 switch (iop) 00304 { 00305 case TECPLOT: 00306 { 00307 switch (sc) 00308 { 00309 case 0: 00310 00311 conn[0] = this->node(0)+1; 00312 conn[1] = this->node(8)+1; 00313 conn[2] = this->node(16)+1; 00314 conn[3] = this->node(11)+1; 00315 conn[4] = this->node(4)+1; 00316 conn[5] = this->node(12)+1; 00317 conn[6] = this->node(17)+1; 00318 conn[7] = this->node(15)+1; 00319 00320 return; 00321 00322 case 1: 00323 00324 conn[0] = this->node(8)+1; 00325 conn[1] = this->node(1)+1; 00326 conn[2] = this->node(9)+1; 00327 conn[3] = this->node(16)+1; 00328 conn[4] = this->node(12)+1; 00329 conn[5] = this->node(5)+1; 00330 conn[6] = this->node(13)+1; 00331 conn[7] = this->node(17)+1; 00332 00333 return; 00334 00335 case 2: 00336 00337 conn[0] = this->node(11)+1; 00338 conn[1] = this->node(16)+1; 00339 conn[2] = this->node(10)+1; 00340 conn[3] = this->node(3)+1; 00341 conn[4] = this->node(15)+1; 00342 conn[5] = this->node(17)+1; 00343 conn[6] = this->node(14)+1; 00344 conn[7] = this->node(7)+1; 00345 00346 return; 00347 00348 case 3: 00349 00350 conn[0] = this->node(16)+1; 00351 conn[1] = this->node(9)+1; 00352 conn[2] = this->node(2)+1; 00353 conn[3] = this->node(10)+1; 00354 conn[4] = this->node(17)+1; 00355 conn[5] = this->node(13)+1; 00356 conn[6] = this->node(6)+1; 00357 conn[7] = this->node(14)+1; 00358 00359 return; 00360 00361 default: 00362 libmesh_error(); 00363 } 00364 } 00365 00366 default: 00367 libmesh_error(); 00368 } 00369 00370 libmesh_error(); 00371 } 00372 00373 00374 00375 00376 unsigned int InfHex18::n_second_order_adjacent_vertices (const unsigned int n) const 00377 { 00378 switch (n) 00379 { 00380 case 8: 00381 case 9: 00382 case 10: 00383 case 11: 00384 case 12: 00385 case 13: 00386 case 14: 00387 case 15: 00388 return 2; 00389 00390 case 16: 00391 case 17: 00392 return 4; 00393 00394 default: 00395 libmesh_error(); 00396 } 00397 00398 libmesh_error(); 00399 return libMesh::invalid_uint; 00400 } 00401 00402 00403 00404 unsigned short int InfHex18::second_order_adjacent_vertex (const unsigned int n, 00405 const unsigned int v) const 00406 { 00407 libmesh_assert_greater_equal (n, this->n_vertices()); 00408 libmesh_assert_less (n, this->n_nodes()); 00409 libmesh_assert_less (v, this->n_second_order_adjacent_vertices(n)); 00410 00411 if (n == 16) 00412 /* 00413 * for the bubble node in the base the return value is 00414 * simply v. Why? -- the user asks for the v-th 00415 * adjacent vertex, from \p n_second_order_adjacent_vertices() 00416 * there are 4 adjacent vertices, and these happen to be 00417 * 0..3 00418 */ 00419 return static_cast<unsigned short int>(v); 00420 else if (n == 17) 00421 /* 00422 * for the bubble node further out similar reasoning works, 00423 * but v must be shifted to the further-out nodes: 00424 * simply add 4 00425 */ 00426 return static_cast<unsigned short int>(v+4); 00427 00428 else 00429 /* 00430 * all others are stored in the vertices matrix -- note 00431 * that this matrix is kept in \p InfHex to foster 00432 * code-reuse 00433 */ 00434 return _second_order_adjacent_vertices[n-this->n_vertices()][v]; 00435 } 00436 00437 00438 00439 std::pair<unsigned short int, unsigned short int> 00440 InfHex18::second_order_child_vertex (const unsigned int n) const 00441 { 00442 libmesh_assert_greater_equal (n, this->n_vertices()); 00443 libmesh_assert_less (n, this->n_nodes()); 00444 /* 00445 * the _second_order_vertex_child_* vectors are 00446 * stored in cell_inf_hex.C, since they are identical 00447 * for InfHex16 and InfHex18 00448 */ 00449 return std::pair<unsigned short int, unsigned short int> 00450 (_second_order_vertex_child_number[n], 00451 _second_order_vertex_child_index[n]); 00452 } 00453 00454 00455 00456 00457 00458 00459 00460 #ifdef LIBMESH_ENABLE_AMR 00461 00462 const float InfHex18::_embedding_matrix[4][18][18] = 00463 { 00464 // embedding matrix for child 0 00465 { 00466 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node 00467 { 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. 00468 { 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 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, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0}, // 2 00470 { 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 00471 { 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 00472 { 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 00473 { 0.0, 0.0, 0.0, 0.0, 0.0, 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 00474 { 0.0, 0.0, 0.0, 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 00475 { 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 00476 { 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 00477 { 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 00478 { 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 00479 { 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 00480 { 0.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 00481 { 0.0, 0.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 00482 { 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 00483 { 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 00484 { 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 00485 }, 00486 00487 // embedding matrix for child 1 00488 { 00489 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node 00490 { 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. 00491 { 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 00492 { 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 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, 0.0, 0.0, 0.0, 1.0, 0.0}, // 3 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, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0}, // 4 00495 { 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 00496 { 0.0, 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 00497 { 0.0, 0.0, 0.0, 0.0, 0.0, 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 00498 { -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 00499 { 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 00500 { 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 00501 { 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 00502 { 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 00503 { 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 00504 { 0.0, 0.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 00505 { 0.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 00506 { -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 00507 { 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 00508 }, 00509 00510 // embedding matrix for child 2 00511 { 00512 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node 00513 { 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. 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, 0.0, 1.0, 0.0}, // 1 00515 { 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 00516 { 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 00517 { 0.0, 0.0, 0.0, 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 00518 { 0.0, 0.0, 0.0, 0.0, 0.0, 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 00519 { 0.0, 0.0, 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 00520 { 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 00521 { 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 00522 { 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 00523 { 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 00524 { -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 00525 { 0.0, 0.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 00526 { 0.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 00527 { 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 00528 { 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 00529 { -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 00530 { 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 00531 }, 00532 00533 // embedding matrix for child 3 00534 { 00535 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node 00536 { 0.0, 0.0, 0.0, 0.0, 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. 00537 { 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 00538 { 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 00539 { 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 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, 0.0, 0.0, 0.0, 1.0}, // 4 00541 { 0.0, 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 00542 { 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 00543 { 0.0, 0.0, 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 00544 { 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 00545 { 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 00546 { 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 00547 { 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 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.0, 0.375, 0.0, -0.125, 0.0, 0.75}, // 12 00549 { 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 00550 { 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 00551 { 0.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 00552 { 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 00553 { 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 00554 } 00555 }; 00556 00557 00558 00559 00560 #endif 00561 00562 } // namespace libMesh 00563 00564 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 00565
Site Created By: libMesh Developers
Last modified: February 05 2013 19:54:45 UTC
Hosted By: