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 =
static_cast<Order>(order + add_p_level*elem->p_level());
54 FEType fe_type(order,
SZABAB);
61 libmesh_assert_equal_to (elem_soln.size(), 1);
63 const Number val = elem_soln[0];
65 for (
unsigned int n=0; n<
n_nodes; n++)
82 const unsigned int n_sf =
85 std::vector<Point> refspace_nodes;
87 libmesh_assert_equal_to (refspace_nodes.size(),
n_nodes);
89 for (
unsigned int n=0; n<
n_nodes; n++)
91 libmesh_assert_equal_to (elem_soln.size(), n_sf);
97 for (
unsigned int i=0; i<n_sf; i++)
98 nodal_soln[n] += elem_soln[i] *
106 libmesh_error_msg(
"ERROR: Invalid total order " << totalorder);
143 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!");
202 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
231 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
260 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
289 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
317 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
331 unsigned int szabab_n_dofs_at_node(
const ElemType t,
333 const unsigned int n)
359 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
386 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI3/6/7!");
415 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD4/8/9!");
423 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
451 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
477 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6/7!");
505 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
513 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
541 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
550 libmesh_fallthrough();
566 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6/7!");
594 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
602 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
630 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
639 libmesh_fallthrough();
655 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
683 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
691 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
719 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
728 libmesh_fallthrough();
744 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
772 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
780 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
808 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
817 libmesh_fallthrough();
833 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
861 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
869 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
896 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for EDGE2/3!");
905 libmesh_fallthrough();
921 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for TRI6!");
949 libmesh_error_msg(
"ERROR: Invalid node ID " << n <<
" selected for QUAD8/9!");
957 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
969 unsigned int szabab_n_dofs_per_elem(
const ElemType t,
const Order o)
1003 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1044 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!");
1130 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1173 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1215 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1257 libmesh_error_msg(
"ERROR: Invalid ElemType " <<
Utility::enum_to_string(t) <<
" selected for SZABAB FE family!");
1306 #ifdef LIBMESH_ENABLE_AMR 1311 const unsigned int variable_number,
1313 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1318 const unsigned int variable_number,
1320 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
1321 #endif // #ifdef LIBMESH_ENABLE_AMR 1332 #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.
virtual bool is_hierarchic() const override
This class handles the numbering of degrees of freedom on a mesh.
LIBMESH_FE_NODAL_SOLN(BERNSTEIN, bernstein_nodal_soln)
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.