libMesh
cell_inf_hex18.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2017 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 // Local includes
19 #include "libmesh/libmesh_config.h"
20 
21 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
22 
23 // C++ includes
24 
25 // Local includes cont'd
26 #include "libmesh/cell_inf_hex18.h"
27 #include "libmesh/edge_edge3.h"
28 #include "libmesh/edge_inf_edge2.h"
29 #include "libmesh/face_quad9.h"
30 #include "libmesh/face_inf_quad6.h"
31 #include "libmesh/side.h"
32 
33 namespace libMesh
34 {
35 
36 
37 // ------------------------------------------------------------
38 // InfHex18 class static member initializations
39 const unsigned int InfHex18::side_nodes_map[5][9] =
40  {
41  { 0, 1, 2, 3, 8, 9, 10, 11, 16}, // Side 0
42  { 0, 1, 4, 5, 8, 12, 99, 99, 99}, // Side 1
43  { 1, 2, 5, 6, 9, 13, 99, 99, 99}, // Side 2
44  { 2, 3, 6, 7, 10, 14, 99, 99, 99}, // Side 3
45  { 3, 0, 7, 4, 11, 15, 99, 99, 99} // Side 4
46  };
47 
48 const unsigned int InfHex18::edge_nodes_map[8][3] =
49  {
50  {0, 1, 8}, // Edge 0
51  {1, 2, 9}, // Edge 1
52  {2, 3, 10}, // Edge 2
53  {0, 3, 11}, // Edge 3
54  {0, 4, 99}, // Edge 4
55  {1, 5, 99}, // Edge 5
56  {2, 6, 99}, // Edge 6
57  {3, 7, 99} // Edge 7
58  };
59 
60 // ------------------------------------------------------------
61 // InfHex18 class member functions
62 
63 bool InfHex18::is_vertex(const unsigned int i) const
64 {
65  if (i < 4)
66  return true;
67  return false;
68 }
69 
70 bool InfHex18::is_edge(const unsigned int i) const
71 {
72  if (i < 4)
73  return false;
74  if (i > 11)
75  return false;
76  return true;
77 }
78 
79 bool InfHex18::is_face(const unsigned int i) const
80 {
81  if (i > 11)
82  return true;
83  return false;
84 }
85 
86 bool InfHex18::is_node_on_side(const unsigned int n,
87  const unsigned int s) const
88 {
89  libmesh_assert_less (s, n_sides());
90  for (unsigned int i = 0; i != 9; ++i)
91  if (side_nodes_map[s][i] == n)
92  return true;
93  return false;
94 }
95 
96 bool InfHex18::is_node_on_edge(const unsigned int n,
97  const unsigned int e) const
98 {
99  libmesh_assert_less (e, n_edges());
100  for (unsigned int i = 0; i != 3; ++i)
101  if (edge_nodes_map[e][i] == n)
102  return true;
103  return false;
104 }
105 
106 
107 
108 dof_id_type InfHex18::key (const unsigned int s) const
109 {
110  libmesh_assert_less (s, this->n_sides());
111 
112  // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
113  switch (s)
114  {
115  case 0: // the base face
116  return this->compute_key (this->node_id(16));
117 
118  case 1: // the face at y = -1
119  case 2: // the face at x = 1
120  case 3: // the face at y = 1
121  case 4: // the face at x = -1
122  return InfHex::key(s);
123 
124  default:
125  libmesh_error_msg("Invalid side s = " << s);
126  }
127 
128  libmesh_error_msg("We'll never get here!");
129  return 0;
130 }
131 
132 
133 
134 unsigned int InfHex18::which_node_am_i(unsigned int side,
135  unsigned int side_node) const
136 {
137  libmesh_assert_less (side, this->n_sides());
138 
139  // Never more than 9 nodes per side.
140  libmesh_assert_less (side_node, 9);
141 
142  // Some sides have 6 nodes.
143  libmesh_assert(side == 0 || side_node < 6);
144 
145  return InfHex18::side_nodes_map[side][side_node];
146 }
147 
148 
149 
150 UniquePtr<Elem> InfHex18::build_side_ptr (const unsigned int i,
151  bool proxy)
152 {
153  libmesh_assert_less (i, this->n_sides());
154 
155  if (proxy)
156  {
157  switch (i)
158  {
159  // base
160  case 0:
161  return UniquePtr<Elem>(new Side<Quad9,InfHex18>(this,i));
162 
163  // ifem sides
164  case 1:
165  case 2:
166  case 3:
167  case 4:
168  return UniquePtr<Elem>(new Side<InfQuad6,InfHex18>(this,i));
169 
170  default:
171  libmesh_error_msg("Invalid side i = " << i);
172  }
173  }
174 
175  else
176  {
177  // Create NULL pointer to be initialized, returned later.
178  Elem * face = libmesh_nullptr;
179 
180  // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
181  switch (i)
182  {
183  // the base face
184  case 0:
185  {
186  face = new Quad9;
187  break;
188  }
189 
190  // connecting to another infinite element
191  case 1:
192  case 2:
193  case 3:
194  case 4:
195  {
196  face = new InfQuad6;
197  break;
198  }
199 
200  default:
201  libmesh_error_msg("Invalid side i = " << i);
202  }
203 
204  face->subdomain_id() = this->subdomain_id();
205 
206  // Set the nodes
207  for (unsigned n=0; n<face->n_nodes(); ++n)
208  face->set_node(n) = this->node_ptr(InfHex18::side_nodes_map[i][n]);
209 
210  return UniquePtr<Elem>(face);
211  }
212 
213  libmesh_error_msg("We'll never get here!");
214  return UniquePtr<Elem>();
215 }
216 
217 
218 
219 UniquePtr<Elem> InfHex18::build_edge_ptr (const unsigned int i)
220 {
221  libmesh_assert_less (i, this->n_edges());
222 
223  if (i < 4) // base edges
224  return UniquePtr<Elem>(new SideEdge<Edge3,InfHex18>(this,i));
225  // infinite edges
226  return UniquePtr<Elem>(new SideEdge<InfEdge2,InfHex18>(this,i));
227 }
228 
229 
230 
231 void InfHex18::connectivity(const unsigned int sc,
232  const IOPackage iop,
233  std::vector<dof_id_type> & conn) const
234 {
235  libmesh_assert(_nodes);
236  libmesh_assert_less (sc, this->n_sub_elem());
237  libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
238 
239  switch (iop)
240  {
241  case TECPLOT:
242  {
243  switch (sc)
244  {
245  case 0:
246 
247  conn[0] = this->node_id(0)+1;
248  conn[1] = this->node_id(8)+1;
249  conn[2] = this->node_id(16)+1;
250  conn[3] = this->node_id(11)+1;
251  conn[4] = this->node_id(4)+1;
252  conn[5] = this->node_id(12)+1;
253  conn[6] = this->node_id(17)+1;
254  conn[7] = this->node_id(15)+1;
255 
256  return;
257 
258  case 1:
259 
260  conn[0] = this->node_id(8)+1;
261  conn[1] = this->node_id(1)+1;
262  conn[2] = this->node_id(9)+1;
263  conn[3] = this->node_id(16)+1;
264  conn[4] = this->node_id(12)+1;
265  conn[5] = this->node_id(5)+1;
266  conn[6] = this->node_id(13)+1;
267  conn[7] = this->node_id(17)+1;
268 
269  return;
270 
271  case 2:
272 
273  conn[0] = this->node_id(11)+1;
274  conn[1] = this->node_id(16)+1;
275  conn[2] = this->node_id(10)+1;
276  conn[3] = this->node_id(3)+1;
277  conn[4] = this->node_id(15)+1;
278  conn[5] = this->node_id(17)+1;
279  conn[6] = this->node_id(14)+1;
280  conn[7] = this->node_id(7)+1;
281 
282  return;
283 
284  case 3:
285 
286  conn[0] = this->node_id(16)+1;
287  conn[1] = this->node_id(9)+1;
288  conn[2] = this->node_id(2)+1;
289  conn[3] = this->node_id(10)+1;
290  conn[4] = this->node_id(17)+1;
291  conn[5] = this->node_id(13)+1;
292  conn[6] = this->node_id(6)+1;
293  conn[7] = this->node_id(14)+1;
294 
295  return;
296 
297  default:
298  libmesh_error_msg("Invalid sc = " << sc);
299  }
300  }
301 
302  default:
303  libmesh_error_msg("Unsupported IO package " << iop);
304  }
305 }
306 
307 
308 
309 
310 unsigned int InfHex18::n_second_order_adjacent_vertices (const unsigned int n) const
311 {
312  switch (n)
313  {
314  case 8:
315  case 9:
316  case 10:
317  case 11:
318  case 12:
319  case 13:
320  case 14:
321  case 15:
322  return 2;
323 
324  case 16:
325  case 17:
326  return 4;
327 
328  default:
329  libmesh_error_msg("Invalid node n = " << n);
330  }
331 
332  libmesh_error_msg("We'll never get here!");
333  return libMesh::invalid_uint;
334 }
335 
336 
337 
338 unsigned short int InfHex18::second_order_adjacent_vertex (const unsigned int n,
339  const unsigned int v) const
340 {
341  libmesh_assert_greater_equal (n, this->n_vertices());
342  libmesh_assert_less (n, this->n_nodes());
343  libmesh_assert_less (v, this->n_second_order_adjacent_vertices(n));
344 
345  if (n == 16)
346  /*
347  * for the bubble node in the base the return value is
348  * simply v. Why? -- the user asks for the v-th
349  * adjacent vertex, from \p n_second_order_adjacent_vertices()
350  * there are 4 adjacent vertices, and these happen to be
351  * 0..3
352  */
353  return static_cast<unsigned short int>(v);
354  else if (n == 17)
355  /*
356  * for the bubble node further out similar reasoning works,
357  * but v must be shifted to the further-out nodes:
358  * simply add 4
359  */
360  return static_cast<unsigned short int>(v+4);
361 
362  else
363  /*
364  * all others are stored in the vertices matrix -- note
365  * that this matrix is kept in \p InfHex to foster
366  * code-reuse
367  */
368  return _second_order_adjacent_vertices[n-this->n_vertices()][v];
369 }
370 
371 
372 
373 std::pair<unsigned short int, unsigned short int>
374 InfHex18::second_order_child_vertex (const unsigned int n) const
375 {
376  libmesh_assert_greater_equal (n, this->n_vertices());
377  libmesh_assert_less (n, this->n_nodes());
378  /*
379  * the _second_order_vertex_child_* vectors are
380  * stored in cell_inf_hex.C, since they are identical
381  * for InfHex16 and InfHex18
382  */
383  return std::pair<unsigned short int, unsigned short int>
384  (_second_order_vertex_child_number[n],
385  _second_order_vertex_child_index[n]);
386 }
387 
388 
389 
390 
391 
392 
393 
394 #ifdef LIBMESH_ENABLE_AMR
395 
396 const float InfHex18::_embedding_matrix[4][18][18] =
397  {
398  // embedding matrix for child 0
399  {
400  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node
401  { 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.
402  { 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
403  { 0.0, 0.0, 0.0, 0.0, 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
404  { 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
405  { 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
406  { 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
407  { 0.0, 0.0, 0.0, 0.0, 0.0, 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
408  { 0.0, 0.0, 0.0, 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
409  { 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
410  { 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
411  { 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
412  { 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
413  { 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
414  { 0.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
415  { 0.0, 0.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
416  { 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
417  { 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
418  { 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
419  },
420 
421  // embedding matrix for child 1
422  {
423  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node
424  { 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.
425  { 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
426  { 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
427  { 0.0, 0.0, 0.0, 0.0, 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
428  { 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
429  { 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
430  { 0.0, 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
431  { 0.0, 0.0, 0.0, 0.0, 0.0, 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
432  { -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
433  { 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
434  { 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
435  { 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
436  { 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
437  { 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
438  { 0.0, 0.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
439  { 0.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
440  { -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
441  { 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
442  },
443 
444  // embedding matrix for child 2
445  {
446  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node
447  { 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.
448  { 0.0, 0.0, 0.0, 0.0, 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
449  { 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
450  { 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
451  { 0.0, 0.0, 0.0, 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
452  { 0.0, 0.0, 0.0, 0.0, 0.0, 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
453  { 0.0, 0.0, 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
454  { 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
455  { 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
456  { 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
457  { 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
458  { -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
459  { 0.0, 0.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
460  { 0.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
461  { 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
462  { 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
463  { -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
464  { 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
465  },
466 
467  // embedding matrix for child 3
468  {
469  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 th parent Node
470  { 0.0, 0.0, 0.0, 0.0, 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.
471  { 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
472  { 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
473  { 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
474  { 0.0, 0.0, 0.0, 0.0, 0.0, 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
475  { 0.0, 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
476  { 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
477  { 0.0, 0.0, 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
478  { 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
479  { 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
480  { 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
481  { 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
482  { 0.0, 0.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
483  { 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
484  { 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
485  { 0.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
486  { 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
487  { 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
488  }
489  };
490 
491 
492 
493 
494 #endif
495 
496 } // namespace libMesh
497 
498 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value.
Definition: libmesh.h:184
unsigned short int side
Definition: xdr_io.C:49
const class libmesh_nullptr_t libmesh_nullptr
The libMesh namespace provides an interface to certain functionality in the library.
libmesh_assert(j)
const dof_id_type n_nodes
Definition: tecplot_io.C:67
virtual dof_id_type key() const
Definition: elem.C:503
IOPackage
libMesh interfaces with several different software packages for the purposes of creating, reading, and writing mesh files.
uint8_t dof_id_type
Definition: id_types.h:64