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)