21 #include "libmesh/libmesh_config.h"
22 #ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
24 #include "libmesh/fe.h"
25 #include "libmesh/elem.h"
26 #include "libmesh/fe_interface.h"
27 #include "libmesh/enum_to_string.h"
36 void rational_nodal_soln(
const Elem * elem,
38 const std::vector<Number> & elem_soln,
39 std::vector<Number> & nodal_soln,
48 const Order totalorder = static_cast<Order>(order + elem->
p_level());
51 FEType fe_type(totalorder, _underlying_fe_family);
58 libmesh_assert_equal_to (elem_soln.size(), 1);
60 const Number val = elem_soln[0];
62 for (
unsigned int n=0; n<
n_nodes; n++)
73 const unsigned int n_sf =
76 std::vector<Point> refspace_nodes;
78 libmesh_assert_equal_to (refspace_nodes.size(),
n_nodes);
79 libmesh_assert_equal_to (n_sf,
n_nodes);
80 libmesh_assert_equal_to (elem_soln.size(), n_sf);
82 std::vector<Real> node_weights(
n_nodes);
84 for (
unsigned int n=0; n<
n_nodes; n++)
87 for (
unsigned int n=0; n<
n_nodes; n++)
89 std::vector<Real> weighted_shape(n_sf);
90 Real weighted_sum = 0;
92 for (
unsigned int i=0; i<n_sf; i++)
94 weighted_shape[i] = node_weights[i] *
96 weighted_sum += weighted_shape[i];
103 for (
unsigned int i=0; i<n_sf; i++)
104 nodal_soln[n] += elem_soln[i] * weighted_shape[i];
105 nodal_soln[n] /= weighted_sum;
121 const std::vector<Number> & elem_soln,
122 std::vector<Number> & nodal_soln)
123 { rational_nodal_soln(elem, order, elem_soln, nodal_soln, 0); }
128 const std::vector<Number> & elem_soln,
129 std::vector<Number> & nodal_soln)
130 { rational_nodal_soln(elem, order, elem_soln, nodal_soln, 1); }
135 const std::vector<Number> & elem_soln,
136 std::vector<Number> & nodal_soln)
137 { rational_nodal_soln(elem, order, elem_soln, nodal_soln, 2); }
142 const std::vector<Number> & elem_soln,
143 std::vector<Number> & nodal_soln)
144 { rational_nodal_soln(elem, order, elem_soln, nodal_soln, 3); }
177 #ifdef LIBMESH_ENABLE_AMR
182 const unsigned int variable_number,
184 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
189 const unsigned int variable_number,
191 { compute_proj_constraints(constraints, dof_map, variable_number, elem); }
192 #endif // #ifdef LIBMESH_ENABLE_AMR
204 #endif //LIBMESH_ENABLE_HIGHER_ORDER_SHAPES