20 #include "libmesh/side.h"
21 #include "libmesh/cell_prism6.h"
22 #include "libmesh/edge_edge2.h"
23 #include "libmesh/face_quad4.h"
24 #include "libmesh/face_tri3.h"
25 #include "libmesh/enum_io_package.h"
26 #include "libmesh/enum_order.h"
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 (
auto n : face->node_index_range())
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];