76 libmesh_assert_less (s, this->
n_sides());
87 unsigned int side_node)
const 90 libmesh_assert_less (side_node, 4);
99 libmesh_assert_less (i, this->
n_sides());
101 std::unique_ptr<Elem> face = libmesh_make_unique<Quad4>();
103 for (
unsigned n=0; n<face->n_nodes(); ++n)
112 const unsigned int i)
114 this->simple_build_side_ptr<Hex8>(
side, i,
QUAD4);
120 const unsigned int s)
const 123 libmesh_assert_less (s, this->
n_sides());
129 const unsigned int node_child_map[8] = { 0, 1, 3, 2, 4, 5, 7, 6 };
131 for (
unsigned int i = 0; i != 4; ++i)
141 const unsigned int s)
const 143 libmesh_assert_less (e, this->
n_edges());
144 libmesh_assert_less (s, this->
n_sides());
154 libmesh_assert_less (side_in, 6);
155 static const unsigned char hex_opposites[6] = {5, 3, 4, 1, 2, 0};
156 return hex_opposites[side_in];
162 const unsigned int side_in)
const 164 libmesh_assert_less (node_in, 26);
165 libmesh_assert_less (node_in, this->
n_nodes());
166 libmesh_assert_less (side_in, this->
n_sides());
169 static const unsigned char side05_nodes_map[] =
170 {4, 5, 6, 7, 0, 1, 2, 3, 16, 17, 18, 19, 255, 255, 255, 255, 8, 9, 10, 11, 25, 255, 255, 255, 255, 20};
171 static const unsigned char side13_nodes_map[] =
172 {3, 2, 1, 0, 7, 6, 5, 4, 10, 255, 8, 255, 15, 14, 13, 12, 18, 255, 16, 255, 255, 23, 255, 21, 255, 255};
173 static const unsigned char side24_nodes_map[] =
174 {1, 0, 3, 2, 5, 4, 7, 6, 255, 11, 255, 9, 13, 12, 15, 14, 255, 19, 255, 17, 255, 255, 24, 255, 22, 255};
180 return side05_nodes_map[node_in];
183 return side13_nodes_map[node_in];
186 return side24_nodes_map[node_in];
188 libmesh_error_msg(
"Unsupported side_in = " << side_in);
221 libmesh_assert_not_equal_to (
max, 0.0);
251 std::vector<Real> edge_ratios(12);
276 return *(std::min_element(edge_ratios.begin(), edge_ratios.end())) ;
288 const Real sqrt3 = 1.73205080756888;
299 libmesh_assert_not_equal_to ( max_diag, 0.0 );
304 std::vector<Real> edges(12);
305 edges[0] = this->
length(0,1);
306 edges[1] = this->
length(1,2);
307 edges[2] = this->
length(2,3);
308 edges[3] = this->
length(0,3);
309 edges[4] = this->
length(4,5);
310 edges[5] = this->
length(5,6);
311 edges[6] = this->
length(6,7);
312 edges[7] = this->
length(4,7);
313 edges[8] = this->
length(0,4);
314 edges[9] = this->
length(1,5);
315 edges[10] = this->
length(2,6);
316 edges[11] = this->
length(3,7);
318 const Real min_edge = *(std::min_element(edges.begin(), edges.end()));
319 return sqrt3 * min_edge / max_diag ;
336 std::pair<Real, Real> bounds;
393 libMesh::out <<
"Warning: Invalid quality measure chosen." << std::endl;
405 99,99,99,99,99,99,99,99,
406 0,1,2,0,0,1,2,3,4,5,6,5,
415 99,99,99,99,99,99,99,99,
416 1,2,3,3,4,5,6,7,5,6,7,7,
441 #ifdef LIBMESH_ENABLE_AMR 448 { 0, 2, 12, 10, 50, 52, 62, 60, 1, 7, 11, 5, 25, 27, 37, 35,
449 51, 57, 61, 55, 6, 26, 32, 36, 30, 56, 31},
452 { 2, 4, 14, 12, 52, 54, 64, 62, 3, 9, 13, 7, 27, 29, 39, 37,
453 53, 59, 63, 57, 8, 28, 34, 38, 32, 58, 33},
456 { 10, 12, 22, 20, 60, 62, 72, 70, 11, 17, 21, 15, 35, 37, 47, 45,
457 61, 67, 71, 65, 16, 36, 42, 46, 40, 66, 41},
460 { 12, 14, 24, 22, 62, 64, 74, 72, 13, 19, 23, 17, 37, 39, 49, 47,
461 63, 69, 73, 67, 18, 38, 44, 48, 42, 68, 43},
464 { 50, 52, 62, 60, 100, 102, 112, 110, 51, 57, 61, 55, 75, 77, 87, 85,
465 101, 107, 111, 105, 56, 76, 82, 86, 80, 106, 81},
468 { 52, 54, 64, 62, 102, 104, 114, 112, 53, 59, 63, 57, 77, 79, 89, 87,
469 103, 109, 113, 107, 58, 78, 84, 88, 82, 108, 93},
472 { 60, 62, 72, 70, 110, 112, 122, 120, 61, 67, 71, 65, 85, 87, 97, 95,
473 111, 117, 121, 115, 66, 86, 92, 96, 90, 116, 91},
476 { 62, 64, 74, 72, 112, 114, 124, 122, 63, 69, 73, 67, 87, 89, 99, 97,
477 113, 119, 123, 117, 68, 88, 94, 98, 92, 118, 103}
480 #endif // LIBMESH_ENABLE_AMR virtual unsigned int opposite_side(const unsigned int s) const override final
static const Real _master_points[27][3]
virtual dof_id_type key() const
virtual std::pair< Real, Real > qual_bounds(const ElemQuality q) const override
static const unsigned short int _second_order_adjacent_vertices[12][2]
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const =0
virtual unsigned int n_children() const override final
long double max(long double a, double b)
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
Real length(const unsigned int n1, const unsigned int n2) const
virtual bool is_child_on_side(const unsigned int c, const unsigned int s) const override final
virtual unsigned int n_nodes() const =0
static const int _child_node_lookup[8][27]
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
virtual std::unique_ptr< Elem > side_ptr(const unsigned int i) override final
virtual unsigned int n_edges() const override final
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual unsigned int n_sides() const override final
const Node * node_ptr(const unsigned int i) const
virtual Real quality(const ElemQuality q) const
virtual Real quality(const ElemQuality q) const override
static const unsigned short int _second_order_vertex_child_number[27]
static const unsigned short int _second_order_vertex_child_index[27]
virtual unsigned int opposite_node(const unsigned int n, const unsigned int s) const override final
static dof_id_type compute_key(dof_id_type n0)
OStreamProxy out(std::cout)
virtual unsigned int which_node_am_i(unsigned int side, unsigned int side_node) const override
long double min(long double a, double b)
dof_id_type node_id(const unsigned int i) const
std::unique_ptr< Elem > side(const unsigned int i) const
virtual bool is_edge_on_side(const unsigned int e, const unsigned int s) const override final