cell_inf_hex16.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2018 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 // Local includes cont'd
24 #include "libmesh/cell_inf_hex16.h"
25 #include "libmesh/edge_edge3.h"
26 #include "libmesh/edge_inf_edge2.h"
27 #include "libmesh/face_quad8.h"
28 #include "libmesh/face_inf_quad6.h"
29 #include "libmesh/side.h"
31 #include "libmesh/enum_order.h"
32 
33 namespace libMesh
34 {
35 
36 
37 // ------------------------------------------------------------
38 // InfHex16 class static member initializations
39 const int InfHex16::num_nodes;
40 const int InfHex16::num_sides;
41 const int InfHex16::num_edges;
42 const int InfHex16::num_children;
43 const int InfHex16::nodes_per_side;
44 const int InfHex16::nodes_per_edge;
45 
47  {
48  { 0, 1, 2, 3, 8, 9, 10, 11}, // Side 0
49  { 0, 1, 4, 5, 8, 12, 99, 99}, // Side 1
50  { 1, 2, 5, 6, 9, 13, 99, 99}, // Side 2
51  { 2, 3, 6, 7, 10, 14, 99, 99}, // Side 3
52  { 3, 0, 7, 4, 11, 15, 99, 99} // Side 4
53  };
54 
56  {
57  {0, 1, 8}, // Edge 0
58  {1, 2, 9}, // Edge 1
59  {2, 3, 10}, // Edge 2
60  {0, 3, 11}, // Edge 3
61  {0, 4, 99}, // Edge 4
62  {1, 5, 99}, // Edge 5
63  {2, 6, 99}, // Edge 6
64  {3, 7, 99} // Edge 7
65  };
66 
67 
68 // ------------------------------------------------------------
69 // InfHex16 class member functions
70 
71 bool InfHex16::is_vertex(const unsigned int i) const
72 {
73  if (i < 4)
74  return true;
75  return false;
76 }
77 
78 bool InfHex16::is_edge(const unsigned int i) const
79 {
80  if (i < 4)
81  return false;
82  if (i > 11)
83  return false;
84  return true;
85 }
86 
87 bool InfHex16::is_face(const unsigned int i) const
88 {
89  if (i > 11)
90  return true;
91  return false;
92 }
93 
94 bool InfHex16::is_node_on_side(const unsigned int n,
95  const unsigned int s) const
96 {
97  libmesh_assert_less (s, n_sides());
98  return std::find(std::begin(side_nodes_map[s]),
100  n) != std::end(side_nodes_map[s]);
101 }
102 
103 std::vector<unsigned>
104 InfHex16::nodes_on_side(const unsigned int s) const
105 {
106  libmesh_assert_less(s, n_sides());
107  auto trim = (s == 0) ? 0 : 2;
108  return {std::begin(side_nodes_map[s]), std::end(side_nodes_map[s]) - trim};
109 }
110 
111 bool InfHex16::is_node_on_edge(const unsigned int n,
112  const unsigned int e) const
113 {
114  libmesh_assert_less (e, n_edges());
115  return std::find(std::begin(edge_nodes_map[e]),
117  n) != std::end(edge_nodes_map[e]);
118 }
119 
120 
121 
123 {
124  return SECOND;
125 }
126 
127 
128 
129 unsigned int InfHex16::which_node_am_i(unsigned int side,
130  unsigned int side_node) const
131 {
132  libmesh_assert_less (side, this->n_sides());
133 
134  // Never more than 8 nodes per side.
135  libmesh_assert_less (side_node, InfHex16::nodes_per_side);
136 
137  // Some sides have 6 nodes.
138  libmesh_assert(side == 0 || side_node < 6);
139 
140  return InfHex16::side_nodes_map[side][side_node];
141 }
142 
143 
144 
145 std::unique_ptr<Elem> InfHex16::build_side_ptr (const unsigned int i,
146  bool proxy)
147 {
148  libmesh_assert_less (i, this->n_sides());
149 
150  if (proxy)
151  {
152  switch (i)
153  {
154  // base
155  case 0:
156  return libmesh_make_unique<Side<Quad8,InfHex16>>(this,i);
157 
158  // ifem sides
159  case 1:
160  case 2:
161  case 3:
162  case 4:
163  return libmesh_make_unique<Side<InfQuad6,InfHex16>>(this,i);
164 
165  default:
166  libmesh_error_msg("Invalid side i = " << i);
167  }
168  }
169 
170  else
171  {
172  // Return value
173  std::unique_ptr<Elem> face;
174 
175  // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
176  switch (i)
177  {
178  // the base face
179  case 0:
180  {
181  face = libmesh_make_unique<Quad8>();
182  break;
183  }
184 
185  // connecting to another infinite element
186  case 1:
187  case 2:
188  case 3:
189  case 4:
190  {
191  face = libmesh_make_unique<InfQuad6>();
192  break;
193  }
194 
195  default:
196  libmesh_error_msg("Invalid side i = " << i);
197  }
198 
199  face->subdomain_id() = this->subdomain_id();
200 
201  // Set the nodes
202  for (unsigned n=0; n<face->n_nodes(); ++n)
203  face->set_node(n) = this->node_ptr(InfHex16::side_nodes_map[i][n]);
204 
205  return face;
206  }
207 }
208 
209 
210 
211 void InfHex16::build_side_ptr (std::unique_ptr<Elem> & side,
212  const unsigned int i)
213 {
214  libmesh_assert_less (i, this->n_sides());
215 
216  // Think of a unit cube: (-1,1) x (-1,1) x (1,1)
217  switch (i)
218  {
219  // the base face
220  case 0:
221  {
222  if (!side.get() || side->type() != QUAD8)
223  {
224  side = this->build_side_ptr(i, false);
225  return;
226  }
227  break;
228  }
229 
230  // connecting to another infinite element
231  case 1:
232  case 2:
233  case 3:
234  case 4:
235  {
236  if (!side.get() || side->type() != INFQUAD6)
237  {
238  side = this->build_side_ptr(i, false);
239  return;
240  }
241  break;
242  }
243 
244  default:
245  libmesh_error_msg("Invalid side i = " << i);
246  }
247 
248  side->subdomain_id() = this->subdomain_id();
249 
250  // Set the nodes
251  for (auto n : side->node_index_range())
252  side->set_node(n) = this->node_ptr(InfHex16::side_nodes_map[i][n]);
253 }
254 
255 
256 
257 std::unique_ptr<Elem> InfHex16::build_edge_ptr (const unsigned int i)
258 {
259  libmesh_assert_less (i, this->n_edges());
260 
261  if (i < 4) // base edges
262  return libmesh_make_unique<SideEdge<Edge3,InfHex16>>(this,i);
263 
264  // infinite edges
265  return libmesh_make_unique<SideEdge<InfEdge2,InfHex16>>(this,i);
266 }
267 
268 
269 void InfHex16::connectivity(const unsigned int sc,
270  const IOPackage iop,
271  std::vector<dof_id_type> & conn) const
272 {
273  libmesh_assert(_nodes);
274  libmesh_assert_less (sc, this->n_sub_elem());
275  libmesh_assert_not_equal_to (iop, INVALID_IO_PACKAGE);
276 
277  switch (iop)
278  {
279  case TECPLOT:
280  {
281  switch (sc)
282  {
283  case 0:
284 
285  conn[0] = this->node_id(0)+1;
286  conn[1] = this->node_id(1)+1;
287  conn[2] = this->node_id(2)+1;
288  conn[3] = this->node_id(3)+1;
289  conn[4] = this->node_id(4)+1;
290  conn[5] = this->node_id(5)+1;
291  conn[6] = this->node_id(6)+1;
292  conn[7] = this->node_id(7)+1;
293  return;
294 
295  default:
296  libmesh_error_msg("Invalid sc = " << sc);
297  }
298  }
299 
300  default:
301  libmesh_error_msg("Unsupported IO package " << iop);
302  }
303 }
304 
305 
306 
307 
308 unsigned short int InfHex16::second_order_adjacent_vertex (const unsigned int n,
309  const unsigned int v) const
310 {
311  libmesh_assert_greater_equal (n, this->n_vertices());
312  libmesh_assert_less (n, this->n_nodes());
313  libmesh_assert_less (v, 2);
314  // note that the _second_order_adjacent_vertices matrix is
315  // stored in \p InfHex
316  return _second_order_adjacent_vertices[n-this->n_vertices()][v];
317 }
318 
319 
320 
321 std::pair<unsigned short int, unsigned short int>
322 InfHex16::second_order_child_vertex (const unsigned int n) const
323 {
324  libmesh_assert_greater_equal (n, this->n_vertices());
325  libmesh_assert_less (n, this->n_nodes());
326  /*
327  * the _second_order_vertex_child_* vectors are
328  * stored in cell_inf_hex.C, since they are identical
329  * for InfHex16 and InfHex18
330  */
331  return std::pair<unsigned short int, unsigned short int>
334 }
335 
336 
337 
338 
339 
340 #ifdef LIBMESH_ENABLE_AMR
341 
343  {
344  // embedding matrix for child 0
345  {
346  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 th parent Node
347  { 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}, // 0th child N.
348  { 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}, // 1
349  { -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0}, // 2
350  { 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}, // 3
351  { 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}, // 4
352  { 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}, // 5
353  { 0.0, 0.0, 0.0, 0.0, -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5}, // 6
354  { 0.0, 0.0, 0.0, 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
355  { 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}, // 8
356  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.75, 0.375, 0.25, 0.375, 0.0, 0.0, 0.0, 0.0}, // 9
357  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.25, 0.375, 0.75, 0.0, 0.0, 0.0, 0.0}, // 10
358  { 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}, // 11
359  { 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}, // 12
360  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.75, 0.375, 0.25, 0.375}, // 13
361  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.25, 0.375, 0.75}, // 14
362  { 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} // 15
363  },
364 
365  // embedding matrix for child 1
366  {
367  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 th parent Node
368  { 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}, // 0th child N.
369  { 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}, // 1
370  { 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}, // 2
371  { -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0}, // 3
372  { 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}, // 4
373  { 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}, // 5
374  { 0.0, 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}, // 6
375  { 0.0, 0.0, 0.0, 0.0, -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5}, // 7
376  { -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}, // 8
377  { 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}, // 9
378  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.75, 0.375, 0.25, 0.0, 0.0, 0.0, 0.0}, // 10
379  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.75, 0.375, 0.25, 0.375, 0.0, 0.0, 0.0, 0.0}, // 11
380  { 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}, // 12
381  { 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}, // 13
382  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.75, 0.375, 0.25}, // 14
383  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.75, 0.375, 0.25, 0.375} // 15
384  },
385 
386  // embedding matrix for child 2
387  {
388  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 th parent Node
389  { 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}, // 0th child N.
390  { -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0}, // 1
391  { 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}, // 2
392  { 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}, // 3
393  { 0.0, 0.0, 0.0, 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
394  { 0.0, 0.0, 0.0, 0.0, -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5}, // 5
395  { 0.0, 0.0, 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}, // 6
396  { 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}, // 7
397  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.25, 0.375, 0.75, 0.0, 0.0, 0.0, 0.0}, // 8
398  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.25, 0.375, 0.75, 0.375, 0.0, 0.0, 0.0, 0.0}, // 9
399  { 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}, // 10
400  { -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}, // 11
401  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.25, 0.375, 0.75}, // 12
402  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.25, 0.375, 0.75, 0.375}, // 13
403  { 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}, // 14
404  { 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} // 15
405  },
406 
407  // embedding matrix for child 3
408  {
409  // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 th parent Node
410  { -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0}, // 0th child N.
411  { 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}, // 1
412  { 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}, // 2
413  { 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}, // 3
414  { 0.0, 0.0, 0.0, 0.0, -0.25, -0.25, -0.25, -0.25, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5}, // 4
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, 1.0, 0.0, 0.0}, // 5
416  { 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}, // 6
417  { 0.0, 0.0, 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}, // 7
418  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.75, 0.375, 0.25, 0.0, 0.0, 0.0, 0.0}, // 8
419  { 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}, // 9
420  { 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}, // 10
421  { -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.25, 0.375, 0.75, 0.375, 0.0, 0.0, 0.0, 0.0}, // 11
422  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.375, 0.75, 0.375, 0.25}, // 12
423  { 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}, // 13
424  { 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}, // 14
425  { 0.0, 0.0, 0.0, 0.0, -0.1875, -0.1875, -0.1875, -0.1875, 0.0, 0.0, 0.0, 0.0, 0.25, 0.375, 0.75, 0.375} // 15
426  }
427  };
428 
429 
430 
431 #endif
432 
433 } // namespace libMesh
434 
435 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS
Node ** _nodes
Definition: elem.h:1695
static const int nodes_per_edge
virtual std::pair< unsigned short int, unsigned short int > second_order_child_vertex(const unsigned int n) const override
unsigned short int side
Definition: xdr_io.C:50
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy) override
static const int num_edges
static const int num_nodes
IterBase * end
virtual bool is_edge(const unsigned int i) const override
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
static const unsigned short int _second_order_adjacent_vertices[8][2]
Definition: cell_inf_hex.h:195
virtual unsigned int which_node_am_i(unsigned int side, unsigned int side_node) const override
virtual Order default_order() const override
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
static const int num_children
static const float _embedding_matrix[num_children][num_nodes][num_nodes]
virtual bool is_vertex(const unsigned int i) const override
virtual unsigned int n_vertices() const override final
Definition: cell_inf_hex.h:91
virtual unsigned int n_sub_elem() const override
static const unsigned short int _second_order_vertex_child_index[18]
Definition: cell_inf_hex.h:205
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
subdomain_id_type subdomain_id() const
Definition: elem.h:2034
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
virtual unsigned int n_nodes() const override
const Node * node_ptr(const unsigned int i) const
Definition: elem.h:1957
virtual bool is_face(const unsigned int i) const override
static const int nodes_per_side
static const int num_sides
virtual unsigned int n_edges() const override final
Definition: cell_inf_hex.h:104
dof_id_type node_id(const unsigned int i) const
Definition: elem.h:1914
virtual unsigned short int second_order_adjacent_vertex(const unsigned int n, const unsigned int v) const override
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
static const unsigned short int _second_order_vertex_child_number[18]
Definition: cell_inf_hex.h:200
std::unique_ptr< Elem > side(const unsigned int i) const
Definition: elem.h:2202
virtual unsigned int n_sides() const override final
Definition: cell_inf_hex.h:85