21 #include "libmesh/libmesh_config.h" 22 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES 24 #include "libmesh/elem.h" 25 #include "libmesh/enum_to_string.h" 26 #include "libmesh/fe.h" 27 #include "libmesh/fe_interface.h" 28 #include "libmesh/fe_macro.h" 39 void szabab_nodal_soln(
const Elem * elem,
41 const std::vector<Number> & elem_soln,
42 std::vector<Number> & nodal_soln,
43 const bool add_p_level)
45 const unsigned int n_nodes = elem->n_nodes();
47 const ElemType elem_type = elem->type();
51 const Order totalorder = order + add_p_level*elem->p_level();
54 FEType fe_type(order,
SZABAB);
61 libmesh_assert_equal_to (elem_soln.size(), 1);
63 std::fill(nodal_soln.begin(), nodal_soln.end(), elem_soln[0]);
79 const unsigned int n_sf =
82 std::vector<Point> refspace_nodes;
84 libmesh_assert_equal_to (refspace_nodes.size(),
n_nodes);
85 libmesh_assert_equal_to (elem_soln.size(), n_sf);
88 std::fill(nodal_soln.begin(), nodal_soln.end(), 0);
90 for (
unsigned int n=0; n<
n_nodes; n++)
92 for (
unsigned int i=0; i<n_sf; i++)
93 nodal_soln[n] += elem_soln[i] *
100 libmesh_error_msg(
"ERROR: Invalid total order " << totalorder);
136 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
166 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
195 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
224 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
253 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
282 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
310 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
322 unsigned int szabab_n_dofs(
const Elem * e,
const Order o)
325 return szabab_n_dofs(e->type(), o);
330 unsigned int szabab_n_dofs_at_node(
const ElemType t,
332 const unsigned int n)
358 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
385 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI3/6/7!");
414 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD4/8/9!");
422 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
450 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
476 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6/7!");
504 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
512 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
540 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
549 libmesh_fallthrough();
565 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6/7!");
593 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
601 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
629 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
638 libmesh_fallthrough();
654 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
682 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
690 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
718 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
727 libmesh_fallthrough();
743 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
771 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
779 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
807 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
816 libmesh_fallthrough();
832 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
860 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
868 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
895 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
904 libmesh_fallthrough();
920 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
948 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
956 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
968 unsigned int szabab_n_dofs_at_node(
const Elem & e,
970 const unsigned int n)
972 return szabab_n_dofs_at_node(e.type(), o, n);
977 unsigned int szabab_n_dofs_per_elem(
const ElemType t,
const Order o)
1011 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1052 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1095 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1138 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1181 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1223 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1265 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1278 unsigned int szabab_n_dofs_per_elem(
const Elem & e,
const Order o)
1280 return szabab_n_dofs_per_elem(e.type(), o);
1336 #ifdef LIBMESH_ENABLE_AMR 1341 const unsigned int variable_number,
1343 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1348 const unsigned int variable_number,
1350 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1351 #endif // #ifdef LIBMESH_ENABLE_AMR 1362 #endif //LIBMESH_ENABLE_HIGHER_ORDER_SHAPES static unsigned int n_dofs(const ElemType t, const Order o)
ElemType
Defines an enum for geometric element types.
Order
defines an enum for polynomial orders.
This is the base class from which all geometric element types are derived.
static unsigned int n_dofs_at_node(const ElemType t, const Order o, const unsigned int n)
virtual bool shapes_need_reinit() const override
The libMesh namespace provides an interface to certain functionality in the library.
LIBMESH_FE_NODAL_SOLN(LIBMESH_FE_SIDE_NODAL_SOLN() LIBMESH_DEFAULT_NDOFS(BERNSTEIN) template<> FEContinuity FE< 0 BERNSTEIN, bernstein_nodal_soln)
virtual bool is_hierarchic() const override
This class handles the numbering of degrees of freedom on a mesh.
LIBMESH_FE_SIDE_NODAL_SOLN(HIERARCHIC_VEC)
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)
Computes the constraint matrix contributions (for non-conforming adapted meshes) corresponding to var...
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity.
The constraint matrix storage format.