22 #include "libmesh/fe.h"
23 #include "libmesh/elem.h"
34 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
45 const bool add_p_level)
50 const Order totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
62 libmesh_assert_less (i, 12);
65 const Real eta = p(1);
66 const Real zeta = p(2);
71 libmesh_assert_less_equal ( std::fabs(xi), 1.0+10*
TOLERANCE );
72 libmesh_assert_less_equal ( std::fabs(eta), 1.0+10*
TOLERANCE );
73 libmesh_assert_less_equal ( std::fabs(zeta), 1.0+10*
TOLERANCE );
80 return RealGradient( -0.125*(1.0-eta-zeta+eta*zeta), 0.0, 0.0 );
82 return RealGradient( 0.125*(1.0-eta-zeta+eta*zeta), 0.0, 0.0 );
87 return RealGradient( 0.0, -0.125*(1.0+xi-zeta-xi*zeta), 0.0 );
89 return RealGradient( 0.0, 0.125*(1.0+xi-zeta-xi*zeta), 0.0 );
94 return RealGradient( 0.125*(1.0+eta-zeta-eta*zeta), 0.0, 0.0 );
96 return RealGradient( -0.125*(1.0+eta-zeta-eta*zeta), 0.0, 0.0 );
101 return RealGradient( 0.0, 0.125*(1.0-xi-zeta+xi*zeta), 0.0 );
103 return RealGradient( 0.0, -0.125*(1.0-xi-zeta+xi*zeta), 0.0 );
108 return RealGradient( 0.0, 0.0, -0.125*(1.0-xi-eta+xi*eta) );
110 return RealGradient( 0.0, 0.0, 0.125*(1.0-xi-eta+xi*eta) );
115 return RealGradient( 0.0, 0.0, -0.125*(1.0+xi-eta-xi*eta) );
117 return RealGradient( 0.0, 0.0, 0.125*(1.0+xi-eta-xi*eta) );
122 return RealGradient( 0.0, 0.0, -0.125*(1.0+xi+eta+xi*eta) );
124 return RealGradient( 0.0, 0.0, 0.125*(1.0+xi+eta+xi*eta) );
129 return RealGradient( 0.0, 0.0, -0.125*(1.0-xi+eta-xi*eta) );
131 return RealGradient( 0.0, 0.0, 0.125*(1.0-xi+eta-xi*eta) );
136 return RealGradient( -0.125*(1.0-eta+zeta-eta*zeta), 0.0, 0.0 );
138 return RealGradient( 0.125*(1.0-eta+zeta-eta*zeta), 0.0, 0.0 );
143 return RealGradient( 0.0, -0.125*(1.0+xi+zeta+xi*zeta), 0.0 );
145 return RealGradient( 0.0, 0.125*(1.0+xi+zeta+xi*zeta), 0.0 );
150 return RealGradient( -0.125*(1.0+eta+zeta+eta*zeta), 0.0, 0.0 );
152 return RealGradient( 0.125*(1.0+eta+zeta+eta*zeta), 0.0, 0.0 );
157 return RealGradient( 0.0, -0.125*(1.0-xi+zeta-xi*zeta), 0.0 );
159 return RealGradient( 0.0, 0.125*(1.0-xi+zeta-xi*zeta), 0.0 );
163 libmesh_error_msg(
"Invalid i = " << i);
171 libmesh_assert_less (i, 6);
173 libmesh_not_implemented();
178 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << elem->
type());
184 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << totalorder);
186 #else // LIBMESH_DIM != 3
188 libmesh_not_implemented();
202 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
209 const unsigned int i,
210 const unsigned int j,
212 const bool add_p_level)
216 libmesh_assert_less (j, 3);
218 const Order totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
224 switch (elem->
type())
229 libmesh_assert_less (i, 12);
231 const Real xi = p(0);
232 const Real eta = p(1);
233 const Real zeta = p(2);
238 libmesh_assert_less_equal ( std::fabs(xi), 1.0+
TOLERANCE );
239 libmesh_assert_less_equal ( std::fabs(eta), 1.0+
TOLERANCE );
240 libmesh_assert_less_equal ( std::fabs(zeta), 1.0+
TOLERANCE );
311 libmesh_error_msg(
"Invalid i = " << i);
383 libmesh_error_msg(
"Invalid i = " << i);
456 libmesh_error_msg(
"Invalid i = " << i);
462 libmesh_error_msg(
"Invalid j = " << j);
470 libmesh_assert_less (i, 6);
472 libmesh_not_implemented();
477 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << elem->
type());
483 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << totalorder);
486 #else // LIBMESH_DIM != 3
488 libmesh_not_implemented();
494 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
502 libmesh_error_msg(
"Nedelec elements require the element type \nbecause edge orientation is needed.");
511 const unsigned int i,
512 const unsigned int j,
513 const Point & libmesh_dbg_var(p),
514 const bool add_p_level)
526 libmesh_assert_less (j, 6);
528 const Order totalorder = static_cast<Order>(order + add_p_level * elem->
p_level());
535 switch (elem->
type())
540 libmesh_assert_less (i, 12);
543 const Real xi = p(0);
544 const Real eta = p(1);
545 const Real zeta = p(2);
548 libmesh_assert_less_equal ( std::fabs(xi), 1.0+
TOLERANCE );
549 libmesh_assert_less_equal ( std::fabs(eta), 1.0+
TOLERANCE );
550 libmesh_assert_less_equal ( std::fabs(zeta), 1.0+
TOLERANCE );
604 libmesh_error_msg(
"Invalid i = " << i);
660 libmesh_error_msg(
"Invalid i = " << i);
709 libmesh_error_msg(
"Invalid i = " << i);
722 libmesh_error_msg(
"Invalid j = " << j);
730 libmesh_assert_less (i, 6);
732 libmesh_not_implemented();
737 libmesh_error_msg(
"ERROR: Unsupported 3D element type!: " << elem->
type());
744 libmesh_error_msg(
"ERROR: Unsupported 3D FE order!: " << totalorder);
747 #else // LIBMESH_DIM != 3
750 libmesh_not_implemented();