19 #include "libmesh/dof_map.h"
20 #include "libmesh/fe.h"
21 #include "libmesh/fe_interface.h"
22 #include "libmesh/elem.h"
23 #include "libmesh/tensor_value.h"
35 monomial_vec_nodal_soln(
const Elem * elem,
37 const std::vector<Number> & elem_soln,
39 std::vector<Number> & nodal_soln)
41 const unsigned int n_nodes = elem->n_nodes();
43 const ElemType elem_type = elem->type();
47 const Order totalorder = static_cast<Order>(order + elem->p_level());
58 libmesh_assert_equal_to(elem_soln.size(), 2);
59 for (
unsigned int n = 0; n <
n_nodes; n++)
61 nodal_soln[2 * n] = elem_soln[0];
62 nodal_soln[1 + 2 * n] = elem_soln[1];
68 libmesh_assert_equal_to(elem_soln.size(), 3);
69 for (
unsigned int n = 0; n <
n_nodes; n++)
71 nodal_soln[3 * n] = elem_soln[0];
72 nodal_soln[1 + 3 * n] = elem_soln[1];
73 nodal_soln[2 + 3 * n] = elem_soln[2];
79 "The monomial_vec_nodal_soln helper should only be called for 2 and 3 dimensions");
88 FEType fe_type(totalorder,
MONOMIAL);
92 std::vector<Point> refspace_nodes;
94 libmesh_assert_equal_to(refspace_nodes.size(),
n_nodes);
95 libmesh_assert_equal_to(elem_soln.size(), n_sf *
dim);
97 for (
unsigned int d = 0; d < static_cast<unsigned int>(
dim); d++)
98 for (
unsigned int n = 0; n <
n_nodes; n++)
102 nodal_soln[d +
dim * n] = 0;
105 for (
unsigned int i = 0; i < n_sf; i++)
106 nodal_soln[d +
dim * n] += elem_soln[d +
dim * i] *
123 const std::vector<Number> & elem_soln,
124 std::vector<Number> & nodal_soln)
133 const std::vector<Number> & elem_soln,
134 std::vector<Number> & nodal_soln)
143 const std::vector<Number> & elem_soln,
144 std::vector<Number> & nodal_soln)
146 monomial_vec_nodal_soln(elem, order, elem_soln, 2 , nodal_soln);
153 const std::vector<Number> & elem_soln,
154 std::vector<Number> & nodal_soln)
156 monomial_vec_nodal_soln(elem, order, elem_soln, 3 , nodal_soln);
166 const unsigned int i,
176 const unsigned int i,
177 const unsigned int j,
184 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
190 const unsigned int i,
191 const unsigned int j,
204 const unsigned int i,
214 const unsigned int i,
215 const unsigned int j,
221 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
226 const unsigned int i,
227 const unsigned int j,
241 const unsigned int i,
255 libmesh_error_msg(
"i%2 must be either 0 or 1!");
265 const unsigned int i,
266 const unsigned int j,
280 libmesh_error_msg(
"i%2 must be either 0 or 1!");
287 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
292 const unsigned int i,
293 const unsigned int j,
307 libmesh_error_msg(
"i%2 must be either 0 or 1!");
321 const unsigned int i,
338 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
348 const unsigned int i,
349 const unsigned int j,
366 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
373 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
379 const unsigned int i,
380 const unsigned int j,
397 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
411 const unsigned int i,
413 const bool add_p_level)
423 const unsigned int i,
424 const unsigned int j,
426 const bool add_p_level)
429 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
433 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
439 const unsigned int i,
440 const unsigned int j,
442 const bool add_p_level)
445 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
456 const unsigned int i,
458 const bool add_p_level)
468 const unsigned int i,
469 const unsigned int j,
471 const bool add_p_level)
474 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
478 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
483 const unsigned int i,
484 const unsigned int j,
486 const bool add_p_level)
489 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i, j, p);
500 const unsigned int i,
502 const bool add_p_level)
516 libmesh_error_msg(
"i%2 must be either 0 or 1!");
526 const unsigned int i,
527 const unsigned int j,
529 const bool add_p_level)
532 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i / 2, j, p);
543 libmesh_error_msg(
"i%2 must be either 0 or 1!");
550 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
555 const unsigned int i,
556 const unsigned int j,
558 const bool add_p_level)
561 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i / 2, j, p);
572 libmesh_error_msg(
"i%2 must be either 0 or 1!");
586 const unsigned int i,
588 const bool add_p_level)
605 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
615 const unsigned int i,
616 const unsigned int j,
618 const bool add_p_level)
621 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i / 3, j, p);
635 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
642 #ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
648 const unsigned int i,
649 const unsigned int j,
651 const bool add_p_level)
654 elem->
type(), static_cast<Order>(order + add_p_level * elem->
p_level()), i / 3, j, p);
668 libmesh_error_msg(
"i%3 must be 0, 1, or 2!");
836 #ifdef LIBMESH_ENABLE_AMR
854 #endif // LIBMESH_ENABLE_AMR