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)