21 #include "libmesh/libmesh_config.h" 23 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 25 #include "libmesh/fe_interface.h" 26 #include "libmesh/fe_interface_macros.h" 27 #include "libmesh/inf_fe.h" 28 #include "libmesh/elem.h" 29 #include "libmesh/enum_to_string.h" 39 #ifdef LIBMESH_ENABLE_DEPRECATED 66 libmesh_error_msg(
"Unsupported dim = " <<
dim);
69 #endif // LIBMESH_ENABLE_DEPRECATED 96 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
102 #ifdef LIBMESH_ENABLE_DEPRECATED 107 libmesh_deprecated();
129 libmesh_error_msg(
"Unsupported dim = " <<
dim);
132 #endif // LIBMESH_ENABLE_DEPRECATED 160 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
166 #ifdef LIBMESH_ENABLE_DEPRECATED 170 const unsigned int n)
172 libmesh_deprecated();
194 libmesh_error_msg(
"Unsupported dim = " <<
dim);
197 #endif // LIBMESH_ENABLE_DEPRECATED 203 const unsigned int n)
225 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
233 #ifdef LIBMESH_ENABLE_DEPRECATED 238 libmesh_deprecated();
260 libmesh_error_msg(
"Unsupported dim = " <<
dim);
263 #endif // LIBMESH_ENABLE_DEPRECATED 290 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
300 const std::vector<Number> & elem_soln,
301 std::vector<Number> & nodal_soln)
312 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
324 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
339 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
354 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
369 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
390 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
402 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
417 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
432 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
447 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
468 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
480 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
495 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
510 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
525 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
540 libmesh_error_msg(
"Invalid dim = " <<
dim);
565 libmesh_error_msg(
"Invalid dim = " <<
dim);
570 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
582 const Real tolerance,
597 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
623 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
649 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
665 libmesh_error_msg(
"Invalid dim = " <<
dim);
674 const std::vector<Point> & physical_points,
675 std::vector<Point> & reference_points,
676 const Real tolerance,
726 libmesh_error_msg(
"Invalid dim = " <<
dim);
732 #ifdef LIBMESH_ENABLE_DEPRECATED 745 const unsigned int i,
748 libmesh_deprecated();
750 inf_fe_switch(
shape(fe_t, t, i, p));
758 const unsigned int i,
761 libmesh_deprecated();
763 inf_fe_switch(
shape(fe_t, elem, i, p));
765 #endif // LIBMESH_ENABLE_DEPRECATED 771 const unsigned int i,
777 inf_fe_switch(
shape(fe_t, elem, i, p));
782 #ifdef LIBMESH_ENABLE_DEPRECATED 786 const unsigned int i,
787 const unsigned int j,
790 libmesh_deprecated();
800 const unsigned int i,
801 const unsigned int j,
804 libmesh_deprecated();
808 #endif // LIBMESH_ENABLE_DEPRECATED 814 const unsigned int i,
815 const unsigned int j,
834 inf_fe_family_mapping_switch(1,
compute_data(fe_t, elem,data), , ;
break;);
839 inf_fe_family_mapping_switch(2,
compute_data(fe_t, elem,data), , ;
break;);
844 inf_fe_family_mapping_switch(3,
compute_data(fe_t, elem,data), , ;
break;);
850 libmesh_error_msg(
"Invalid dim = " <<
dim);
857 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
ElemType
Defines an enum for geometric element types.
static Point map(const Elem *inf_elem, const Point &reference_point)
static unsigned int n_dofs_per_elem(const FEType &fet, const ElemType inf_elem_type)
static unsigned int ifem_n_shape_functions(const unsigned int dim, const FEType &fe_t, const ElemType t)
static unsigned int n_dofs_at_node(const FEType &fet, const ElemType inf_elem_type, const unsigned int n)
static bool ifem_on_reference_element(const Point &p, const ElemType t, const Real eps)
static Real shape_deriv(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const unsigned int j, const Point &p)
static Real ifem_shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
class FEComputeData hides arbitrary data to be passed to and from children of FEBase through the FEIn...
This is the base class from which all geometric element types are derived.
The libMesh namespace provides an interface to certain functionality in the library.
static Point ifem_inverse_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
static bool on_reference_element(const Point &p, const ElemType t, const Real eps=TOLERANCE)
static void ifem_compute_data(const unsigned int dim, const FEType &fe_t, const Elem *elem, FEComputeData &data)
static unsigned int n_dofs(const FEType &fet, const ElemType inf_elem_type)
static Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
static void compute_data(const unsigned int dim, const FEType &fe_t, const Elem *elem, FEComputeData &data)
Lets the appropriate child of FEBase compute the requested data for the input specified in data...
InfMapType inf_map
The coordinate mapping type of the infinite element.
static Point ifem_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p)
static void ifem_nodal_soln(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)
static unsigned int ifem_n_dofs_per_elem(const unsigned int dim, const FEType &fe_t, const ElemType t)
FEFamily radial_family
The type of approximation in radial direction.
std::string enum_to_string(const T e)
static Point inverse_map(const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
static unsigned int ifem_n_dofs(const unsigned int dim, const FEType &fe_t, const ElemType t)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual unsigned short dim() const =0
static void nodal_soln(const FEType &fet, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)
Usually, this method would build the nodal soln from the element soln.
static void nodal_soln(const unsigned int dim, const FEType &fe_t, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln, const bool add_p_level=true, const unsigned int vdim=1)
Build the nodal soln from the element soln.
static Real ifem_shape_deriv(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const unsigned int j, const Point &p)
A Point defines a location in LIBMESH_DIM dimensional Real space.
virtual unsigned int n_shape_functions() const override
static unsigned int ifem_n_dofs_at_node(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int n)