21 #include "libmesh/fe.h"
22 #include "libmesh/elem.h"
23 #include "libmesh/fe_interface.h"
24 #include "libmesh/enum_to_string.h"
32 void monomial_nodal_soln(
const Elem * elem,
34 const std::vector<Number> & elem_soln,
35 std::vector<Number> & nodal_soln,
38 const unsigned int n_nodes = elem->n_nodes();
40 const ElemType elem_type = elem->type();
44 const Order totalorder = static_cast<Order>(order+elem->p_level());
51 libmesh_assert_equal_to (elem_soln.size(), 1);
53 const Number val = elem_soln[0];
55 for (
unsigned int n=0; n<
n_nodes; n++)
67 FEType fe_type(totalorder,
MONOMIAL);
69 const unsigned int n_sf =
73 std::vector<Point> refspace_nodes;
75 libmesh_assert_equal_to (refspace_nodes.size(),
n_nodes);
77 for (
unsigned int n=0; n<
n_nodes; n++)
79 libmesh_assert_equal_to (elem_soln.size(), n_sf);
85 for (
unsigned int i=0; i<n_sf; i++)
86 nodal_soln[n] += elem_soln[i] *
295 const unsigned int order = static_cast<unsigned int>(o);
313 return (order+1)*(order+2)/2;
326 return (order+1)*(order+2)*(order+3)/6;
351 const std::vector<Number> & elem_soln,
352 std::vector<Number> & nodal_soln)
353 { monomial_nodal_soln(elem, order, elem_soln, nodal_soln, 0); }
358 const std::vector<Number> & elem_soln,
359 std::vector<Number> & nodal_soln)
360 { monomial_nodal_soln(elem, order, elem_soln, nodal_soln, 1); }
365 const std::vector<Number> & elem_soln,
366 std::vector<Number> & nodal_soln)
367 { monomial_nodal_soln(elem, order, elem_soln, nodal_soln, 2); }
372 const std::vector<Number> & elem_soln,
373 std::vector<Number> & nodal_soln)
374 { monomial_nodal_soln(elem, order, elem_soln, nodal_soln, 3); }
410 #ifdef LIBMESH_ENABLE_AMR
418 #endif // #ifdef LIBMESH_ENABLE_AMR