93 const unsigned int s)
const 95 libmesh_assert_less (s,
n_sides());
101 std::vector<unsigned>
104 libmesh_assert_less(s,
n_sides());
105 auto trim = (s > 0 && s < 4) ? 0 : 1;
110 const unsigned int e)
const 112 libmesh_assert_less (e,
n_edges());
142 libmesh_assert_less (i, this->
n_sides());
150 return libmesh_make_unique<Side<Tri3,Prism6>>(
this,i);
155 return libmesh_make_unique<Side<Quad4,Prism6>>(
this,i);
158 libmesh_error_msg(
"Invalid side i = " << i);
165 std::unique_ptr<Elem> face;
172 face = libmesh_make_unique<Tri3>();
179 face = libmesh_make_unique<Quad4>();
183 libmesh_error_msg(
"Invalid side i = " << i);
189 for (
unsigned n=0; n<face->n_nodes(); ++n)
190 face->set_node(n) = this->
node_ptr(Prism6::side_nodes_map[i][n]);
199 const unsigned int i)
208 libmesh_assert_less (i, this->
n_edges());
210 return libmesh_make_unique<SideEdge<Edge2,Prism6>>(
this,i);
217 std::vector<dof_id_type> & conn)
const 252 libmesh_error_msg(
"Unsupported IO package " << iop);
258 #ifdef LIBMESH_ENABLE_AMR 265 { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0},
266 { 0.5, 0.5, 0.0, 0.0, 0.0, 0.0},
267 { 0.5, 0.0, 0.5, 0.0, 0.0, 0.0},
268 { 0.5, 0.0, 0.0, 0.5, 0.0, 0.0},
269 { .25, .25, 0.0, .25, .25, 0.0},
270 { .25, 0.0, .25, .25, 0.0, .25}
276 { 0.5, 0.5, 0.0, 0.0, 0.0, 0.0},
277 { 0.0, 1.0, 0.0, 0.0, 0.0, 0.0},
278 { 0.0, 0.5, 0.5, 0.0, 0.0, 0.0},
279 { .25, .25, 0.0, .25, .25, 0.0},
280 { 0.0, 0.5, 0.0, 0.0, 0.5, 0.0},
281 { 0.0, .25, .25, 0.0, .25, .25}
287 { 0.5, 0.0, 0.5, 0.0, 0.0, 0.0},
288 { 0.0, 0.5, 0.5, 0.0, 0.0, 0.0},
289 { 0.0, 0.0, 1.0, 0.0, 0.0, 0.0},
290 { .25, 0.0, .25, .25, 0.0, .25},
291 { 0.0, .25, .25, 0.0, .25, .25},
292 { 0.0, 0.0, 0.5, 0.0, 0.0, 0.5}
298 { 0.5, 0.5, 0.0, 0.0, 0.0, 0.0},
299 { 0.0, 0.5, 0.5, 0.0, 0.0, 0.0},
300 { 0.5, 0.0, 0.5, 0.0, 0.0, 0.0},
301 { .25, .25, 0.0, .25, .25, 0.0},
302 { 0.0, .25, .25, 0.0, .25, .25},
303 { .25, 0.0, .25, .25, 0.0, .25}
309 { 0.5, 0.0, 0.0, 0.5, 0.0, 0.0},
310 { .25, .25, 0.0, .25, .25, 0.0},
311 { .25, 0.0, .25, .25, 0.0, .25},
312 { 0.0, 0.0, 0.0, 1.0, 0.0, 0.0},
313 { 0.0, 0.0, 0.0, 0.5, 0.5, 0.0},
314 { 0.0, 0.0, 0.0, 0.5, 0.0, 0.5}
320 { .25, .25, 0.0, .25, .25, 0.0},
321 { 0.0, 0.5, 0.0, 0.0, 0.5, 0.0},
322 { 0.0, .25, .25, 0.0, .25, .25},
323 { 0.0, 0.0, 0.0, 0.5, 0.5, 0.0},
324 { 0.0, 0.0, 0.0, 0.0, 1.0, 0.0},
325 { 0.0, 0.0, 0.0, 0.0, 0.5, 0.5}
331 { .25, 0.0, .25, .25, 0.0, .25},
332 { 0.0, .25, .25, 0.0, .25, .25},
333 { 0.0, 0.0, 0.5, 0.0, 0.0, 0.5},
334 { 0.0, 0.0, 0.0, 0.5, 0.0, 0.5},
335 { 0.0, 0.0, 0.0, 0.0, 0.5, 0.5},
336 { 0.0, 0.0, 0.0, 0.0, 0.0, 1.0}
342 { .25, .25, 0.0, .25, .25, 0.0},
343 { 0.0, .25, .25, 0.0, .25, .25},
344 { .25, 0.0, .25, .25, 0.0, .25},
345 { 0.0, 0.0, 0.0, 0.5, 0.5, 0.0},
346 { 0.0, 0.0, 0.0, 0.0, 0.5, 0.5},
347 { 0.0, 0.0, 0.0, 0.5, 0.0, 0.5}
367 -x0/2 + x1/2 - x3/2 + x4/2,
368 x0/2 - x1/2 - x3/2 + x4/2,
375 -x0/2 + x2/2 - x3/2 + x5/2,
376 x0/2 - x2/2 - x3/2 + x5/2,
383 x0/2 - x2/2 - x3/2 + x5/2,
384 x0/2 - x1/2 - x3/2 + x4/2
394 static const Real w2D[N2D] =
396 Real(1.5902069087198858469718450103758e-01L),
397 Real(9.0979309128011415302815498962418e-02L),
398 Real(1.5902069087198858469718450103758e-01L),
399 Real(9.0979309128011415302815498962418e-02L)
402 static const Real xi[N2D] =
404 Real(1.5505102572168219018027159252941e-01L),
405 Real(6.4494897427831780981972840747059e-01L),
406 Real(1.5505102572168219018027159252941e-01L),
407 Real(6.4494897427831780981972840747059e-01L)
410 static const Real eta[N2D] =
412 Real(1.7855872826361642311703513337422e-01L),
413 Real(7.5031110222608118177475598324603e-02L),
414 Real(6.6639024601470138670269327409637e-01L),
415 Real(2.8001991549907407200279599420481e-01L)
423 static const Real zeta[N1D] =
430 for (
int i=0; i<N2D; ++i)
433 Point dx_dzeta_q = dx_dzeta[0] + eta[i]*dx_dzeta[1] + xi[i]*dx_dzeta[2];
435 for (
int j=0; j<N1D; ++j)
439 dx_dxi_q = dx_dxi[0] + zeta[j]*dx_dxi[1],
440 dx_deta_q = dx_deta[0] + zeta[j]*dx_deta[1];
static const unsigned int side_nodes_map[num_sides][nodes_per_side]
virtual Real volume() const override
virtual unsigned int n_sides() const override final
virtual std::unique_ptr< Elem > side_ptr(const unsigned int i) override final
virtual BoundingBox loose_bounding_box() const
static const float _embedding_matrix[num_children][num_nodes][num_nodes]
virtual bool is_edge(const unsigned int i) const override
virtual void connectivity(const unsigned int sc, const IOPackage iop, std::vector< dof_id_type > &conn) const override
virtual bool is_face(const unsigned int i) const override
static const int num_edges
virtual BoundingBox loose_bounding_box() const override
virtual Order default_order() const override
virtual bool is_vertex(const unsigned int i) const override
T triple_product(const TypeVector< T > &a, const TypeVector< T > &b, const TypeVector< T > &c)
virtual bool is_node_on_edge(const unsigned int n, const unsigned int e) const override
virtual std::unique_ptr< Elem > build_side_ptr(const unsigned int i, bool proxy) override
virtual unsigned int n_sub_elem() const override
static const int nodes_per_side
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
subdomain_id_type subdomain_id() const
virtual unsigned int n_edges() const override final
const Node * node_ptr(const unsigned int i) const
static const int nodes_per_edge
static const int num_children
static const int num_sides
virtual bool has_affine_map() const override
static const unsigned int edge_nodes_map[num_edges][nodes_per_edge]
virtual std::unique_ptr< Elem > build_edge_ptr(const unsigned int i) override
static const unsigned int side_elems_map[num_sides][nodes_per_side]
A geometric point in (x,y,z) space.
dof_id_type node_id(const unsigned int i) const
const Point & point(const unsigned int i) const
bool relative_fuzzy_equals(const TypeVector< T > &rhs, Real tol=TOLERANCE) const
virtual bool is_node_on_side(const unsigned int n, const unsigned int s) const override
static const int num_nodes
virtual std::vector< unsigned int > nodes_on_side(const unsigned int s) const override