21 #include "libmesh/dof_map.h"    22 #include "libmesh/elem.h"    23 #include "libmesh/enum_to_string.h"    24 #include "libmesh/fe.h"    25 #include "libmesh/fe_interface.h"    26 #include "libmesh/fe_macro.h"    27 #include "libmesh/tensor_value.h"    50 void hierarchic_vec_nodal_soln(
const Elem * elem,
    52                                const std::vector<Number> & elem_soln,
    54                                std::vector<Number> &       nodal_soln,
    55                                const bool add_p_level)
    69   const unsigned int n_sf =
    72   std::vector<Point> refspace_nodes;
    74   libmesh_assert_equal_to (refspace_nodes.size(), 
n_nodes);
    75   libmesh_assert_equal_to (elem_soln.size(), n_sf*
dim);
    78   std::fill(nodal_soln.begin(), nodal_soln.end(), 0);
    80   for (
unsigned int n=0; n<
n_nodes; n++)
    81     for (
int d=0; d != 
dim; ++d)
    84       for (
unsigned int i=0; i<n_sf; i++)
    85         nodal_soln[n*
dim+d] += elem_soln[i*
dim+d] *
   104                                       const 
bool add_p_level,
   106 { hierarchic_vec_nodal_soln(elem, order, elem_soln, 2 , nodal_soln, add_p_level); }
   111                                       const std::vector<Number> & elem_soln,
   112                                       std::vector<Number> & nodal_soln,
   113                                       const bool add_p_level,
   115 { hierarchic_vec_nodal_soln(elem, order, elem_soln, 3 , nodal_soln, add_p_level); }
   131                                                      const 
unsigned int i, const 
Point & p)
   137                                                            const unsigned int i, 
const unsigned int j,
   144 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   147                                                                   const unsigned int i, 
const unsigned int j,
   156                                                         const unsigned int i, 
const Point & p)
   161                                                               const unsigned int i, 
const unsigned int j,
   167 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   170                                                                      const unsigned int i, 
const unsigned int j,
   179                                                      const unsigned int i, 
const Point & p)
   185                                                            const unsigned int i, 
const unsigned int j,
   191 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   193                                                                   const unsigned int i, 
const unsigned int j,
   203                                                         const unsigned int i, 
const Point & p)
   208                                                               const unsigned int i, 
const unsigned int j,
   214 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   217                                                                      const unsigned int i, 
const unsigned int j,
   226                                                      const unsigned int i, 
const Point & p)
   239       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   246                                                            const unsigned int i, 
const unsigned int j,
   260       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   267 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   269                                                                   const unsigned int i, 
const unsigned int j,
   283       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   293                                                         const unsigned int i, 
const Point & p)
   299                                                               const unsigned int i, 
const unsigned int j,
   305 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   307                                                                      const unsigned int i, 
const unsigned int j,
   317                                                      const unsigned int i, 
const Point & p)
   333       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   340                                                            const unsigned int i, 
const unsigned int j,
   357       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   364 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   367                                                                   const unsigned int i, 
const unsigned int j,
   384       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   394                                                         const unsigned int i, 
const Point & p)
   400                                                               const unsigned int i, 
const unsigned int j,
   406 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   408                                                                      const unsigned int i, 
const unsigned int j,
   419                                                      const unsigned int i, 
const Point & p,
   420                                                      const bool add_p_level)
   426                                                            const unsigned int i, 
const unsigned int j,
   428                                                            const bool add_p_level)
   434 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   437                                                                   const unsigned int i, 
const unsigned int j,
   439                                                                   const bool add_p_level)
   448                                                         const unsigned int i, 
const Point & p,
   449                                                         const bool add_p_level)
   455                                                               const unsigned int i, 
const unsigned int j,
   457                                                               const bool add_p_level)
   462 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   465                                                                      const unsigned int i, 
const unsigned int j,
   467                                                                      const bool add_p_level)
   476                                                      const unsigned int i, 
const Point & p,
   477                                                      const bool add_p_level)
   483                                                            const unsigned int i, 
const unsigned int j,
   485                                                            const bool add_p_level)
   491 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   493                                                                   const unsigned int i, 
const unsigned int j,
   495                                                                   const bool add_p_level)
   504                                                         const unsigned int i, 
const Point & p,
   505                                                         const bool add_p_level)
   511                                                               const unsigned int i, 
const unsigned int j,
   513                                                               const bool add_p_level)
   518 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   521                                                                      const unsigned int i, 
const unsigned int j,
   523                                                                      const bool add_p_level)
   532                                                      const unsigned int i, 
const Point & p,
   533                                                      const bool add_p_level)
   546       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   553                                                            const unsigned int i, 
const unsigned int j,
   555                                                            const bool add_p_level)
   568       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   575 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   577                                                                   const unsigned int i, 
const unsigned int j,
   579                                                                   const bool add_p_level)
   592       libmesh_error_msg(
"i%2 must be either 0 or 1!");
   602                                                         const unsigned int i, 
const Point & p,
   603                                                         const bool add_p_level)
   608                                                               const unsigned int i, 
const unsigned int j,
   610                                                               const bool add_p_level)
   615 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   618                                                                      const unsigned int i, 
const unsigned int j,
   620                                                                      const bool add_p_level)
   629                                                      const unsigned int i, 
const Point & p,
   630                                                      const bool add_p_level)
   646       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   654                                                            const unsigned int i, 
const unsigned int j,
   656                                                            const bool add_p_level)
   672       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   679 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   682                                                                   const unsigned int i, 
const unsigned int j,
   684                                                                   const bool add_p_level)
   700       libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
   710                                                         const unsigned int i, 
const Point & p,
   711                                                         const bool add_p_level)
   717                                                               const unsigned int i, 
const unsigned int j,
   719                                                               const bool add_p_level)
   724 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES   727                                                                    const unsigned int i, 
const unsigned int j,
   729                                                                    const bool add_p_level)
   808 #ifdef LIBMESH_ENABLE_AMR   812                                                 const unsigned int variable_number,
   821                                                 const unsigned int variable_number,
   830                                                    const unsigned int variable_number,
   839                                                    const unsigned int variable_number,
   844 #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. 
RealVectorValue RealGradient
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)
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)
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 void compute_proj_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 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
LIBMESH_DEFAULT_VEC_NDOFS(HIERARCHIC)
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)