19 #include "libmesh/dof_map.h"    20 #include "libmesh/elem.h"    21 #include "libmesh/fe.h"    22 #include "libmesh/fe_interface.h"    23 #include "libmesh/fe_macro.h"    24 #include "libmesh/tensor_value.h"    44 monomial_vec_nodal_soln(
const Elem * elem,
    46                         const std::vector<Number> & elem_soln,
    48                         std::vector<Number> & nodal_soln,
    49                         const bool add_p_level)
    57   const Order totalorder = order + add_p_level*elem->
p_level();
    64       libmesh_assert_equal_to(elem_soln.size(), 
static_cast<unsigned int>(
dim));
    70           for (
unsigned int n = 0; n < 
n_nodes; n++)
    71             std::copy(elem_soln.begin(), elem_soln.end(), nodal_soln.begin() + 
dim*n);
    76               "The monomial_vec_nodal_soln helper should only be called for 2 and 3 dimensions");
    89       std::vector<Point> refspace_nodes;
    91       libmesh_assert_equal_to(refspace_nodes.size(), 
n_nodes);
    92       libmesh_assert_equal_to(elem_soln.size(), n_sf * 
dim);
    95       std::fill(nodal_soln.begin(), nodal_soln.end(), 0);
    97       for (
unsigned int d = 0; d < static_cast<unsigned int>(
dim); d++)
    98         for (
unsigned int n = 0; n < 
n_nodes; n++)
   100           for (
unsigned int i = 0; i < n_sf; i++)
   101             nodal_soln[d + 
dim * n] += elem_soln[d + 
dim * i] *
   122                                 const 
bool add_p_level,
   125   monomial_vec_nodal_soln(elem, order, elem_soln, 2 , nodal_soln, add_p_level);
   132                                 const std::vector<Number> & elem_soln,
   133                                 std::vector<Number> & nodal_soln,
   134                                 const bool add_p_level,
   137   monomial_vec_nodal_soln(elem, order, elem_soln, 3 , nodal_soln, add_p_level);
   150                            const unsigned int i,
   160                                  const unsigned int i,
   161                                  const unsigned int j,
   168 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   174                                         const unsigned int i,
   175                                         const unsigned int j,
   188                            const unsigned int i,
   198                                  const unsigned int i,
   199                                  const unsigned int j,
   205 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   210                                         const unsigned int i,
   211                                         const unsigned int j,
   225                            const unsigned int i,
   239       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   249                                  const unsigned int i,
   250                                  const unsigned int j,
   264       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   271 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   276                                         const unsigned int i,
   277                                         const unsigned int j,
   291       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   305                            const unsigned int i,
   322       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   332                                  const unsigned int i,
   333                                  const unsigned int j,
   350       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   357 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   363                                         const unsigned int i,
   364                                         const unsigned int j,
   381       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   395                            const unsigned int i,
   397                            const bool add_p_level)
   407                                  const unsigned int i,
   408                                  const unsigned int j,
   410                                  const bool add_p_level)
   413       elem->
type(), order + add_p_level*elem->
p_level(), i, j, p);
   417 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   423                                         const unsigned int i,
   424                                         const unsigned int j,
   426                                         const bool add_p_level)
   429       elem->
type(), order + add_p_level*elem->
p_level(), i, j, p);
   440                            const unsigned int i,
   442                            const bool add_p_level)
   452                                  const unsigned int i,
   453                                  const unsigned int j,
   455                                  const bool add_p_level)
   458       elem->
type(), order + add_p_level*elem->
p_level(), i, j, p);
   462 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   467                                         const unsigned int i,
   468                                         const unsigned int j,
   470                                         const bool add_p_level)
   473       elem->
type(), order + add_p_level*elem->
p_level(), i, j, p);
   484                            const unsigned int i,
   486                            const bool add_p_level)
   500       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   510                                  const unsigned int i,
   511                                  const unsigned int j,
   513                                  const bool add_p_level)
   516       elem->
type(), order + add_p_level*elem->
p_level(), i / 2, j, p);
   527       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   534 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   539                                         const unsigned int i,
   540                                         const unsigned int j,
   542                                         const bool add_p_level)
   545       elem->
type(), order + add_p_level*elem->
p_level(), i / 2, j, p);
   556       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   570                            const unsigned int i,
   572                            const bool add_p_level)
   589       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   599                                  const unsigned int i,
   600                                  const unsigned int j,
   602                                  const bool add_p_level)
   605       elem->
type(), order + add_p_level*elem->
p_level(), i / 3, j, p);
   619       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   626 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   632                                         const unsigned int i,
   633                                         const unsigned int j,
   635                                         const bool add_p_level)
   638       elem->
type(), order + add_p_level*elem->
p_level(), i / 3, j, p);
   652       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   775 #ifdef LIBMESH_ENABLE_AMR   793 #endif // LIBMESH_ENABLE_AMR class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
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. 
LIBMESH_FE_NODAL_SOLN_DIM(LIBMESH_FE_NODAL_SOLN_DIM(HIERARCHIC_VEC,(FE< 0, HIERARCHIC >::nodal_soln), 0)
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
VectorValue< Real > RealVectorValue
Useful typedefs to allow transparent switching between Real and Complex data types. 
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)
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
unsigned int p_level() const
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_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
A specific instantiation of the FEBase class. 
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)
virtual unsigned int n_nodes() const =0
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
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...
static void nodal_soln(const Elem *elem, const Order o, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, bool add_p_level=true, const unsigned vdim=1)
Build the nodal soln from the element soln. 
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
FEContinuity
defines an enum for finite element types to libmesh_assert a certain level (or type? Hcurl?) of continuity. 
virtual ElemType type() const =0
A Point defines a location in LIBMESH_DIM dimensional Real space. 
The constraint matrix storage format. 
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)