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.