22 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES 38 void szabab_nodal_soln(
const Elem * elem,
40 const std::vector<Number> & elem_soln,
41 std::vector<Number> & nodal_soln,
44 const unsigned int n_nodes = elem->n_nodes();
46 const ElemType elem_type = elem->type();
50 const Order totalorder =
static_cast<Order>(order+elem->p_level());
53 FEType fe_type(totalorder,
SZABAB);
60 libmesh_assert_equal_to (elem_soln.size(), 1);
62 const Number val = elem_soln[0];
64 for (
unsigned int n=0; n<
n_nodes; n++)
82 const unsigned int n_sf =
86 std::vector<Point> refspace_nodes;
88 libmesh_assert_equal_to (refspace_nodes.size(),
n_nodes);
90 for (
unsigned int n=0; n<
n_nodes; n++)
92 libmesh_assert_equal_to (elem_soln.size(), n_sf);
98 for (
unsigned int i=0; i<n_sf; i++)
99 nodal_soln[n] += elem_soln[i] *
108 libmesh_error_msg(
"ERROR: Invalid total order " << totalorder);
144 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
173 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
201 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
229 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
257 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
285 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
312 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
326 unsigned int szabab_n_dofs_at_node(
const ElemType t,
328 const unsigned int n)
354 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
376 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI3/6!");
405 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD4/8/9!");
413 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
441 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
462 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
490 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
498 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
526 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
547 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
575 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
583 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
611 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
632 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
660 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
668 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
696 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
717 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
745 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
753 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
781 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
802 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
830 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
838 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
865 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
886 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
914 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
922 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
934 unsigned int szabab_n_dofs_per_elem(
const ElemType t,
const Order o)
967 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1007 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1047 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1087 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1127 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1166 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1205 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1228 const std::vector<Number> & elem_soln,
1229 std::vector<Number> & nodal_soln)
1230 { szabab_nodal_soln(elem, order, elem_soln, nodal_soln, 0); }
1235 const std::vector<Number> & elem_soln,
1236 std::vector<Number> & nodal_soln)
1237 { szabab_nodal_soln(elem, order, elem_soln, nodal_soln, 1); }
1242 const std::vector<Number> & elem_soln,
1243 std::vector<Number> & nodal_soln)
1244 { szabab_nodal_soln(elem, order, elem_soln, nodal_soln, 2); }
1249 const std::vector<Number> & elem_soln,
1250 std::vector<Number> & nodal_soln)
1251 { szabab_nodal_soln(elem, order, elem_soln, nodal_soln, 3); }
1284 #ifdef LIBMESH_ENABLE_AMR 1289 const unsigned int variable_number,
1291 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1296 const unsigned int variable_number,
1298 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1299 #endif // #ifdef LIBMESH_ENABLE_AMR 1310 #endif //LIBMESH_ENABLE_HIGHER_ORDER_SHAPES static unsigned int n_dofs(const ElemType t, const Order o)
The base class for all geometric element types.
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
virtual bool shapes_need_reinit() const override
virtual bool is_hierarchic() const override
Manages the degrees of freedom (DOFs) in a simulation.
const dof_id_type n_nodes
static unsigned int n_shape_functions(const unsigned int dim, const FEType &fe_t, const ElemType t)
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
static void get_refspace_nodes(const ElemType t, std::vector< Point > &nodes)
static unsigned int n_dofs_per_elem(const ElemType t, const Order o)
virtual FEContinuity get_continuity() const override
std::string enum_to_string(const T e)
static void compute_constraints(DofConstraints &constraints, DofMap &dof_map, const unsigned int variable_number, const Elem *elem)
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)