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" 62 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
92 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
98 #ifdef LIBMESH_ENABLE_DEPRECATED 102 const unsigned int n)
104 libmesh_deprecated();
126 libmesh_error_msg(
"Unsupported dim = " <<
dim);
129 #endif // LIBMESH_ENABLE_DEPRECATED 135 const unsigned int n)
157 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
165 #ifdef LIBMESH_ENABLE_DEPRECATED 170 libmesh_deprecated();
192 libmesh_error_msg(
"Unsupported dim = " <<
dim);
195 #endif // LIBMESH_ENABLE_DEPRECATED 222 libmesh_error_msg(
"Unsupported dim = " << elem->
dim());
232 const std::vector<Number> & elem_soln,
233 std::vector<Number> & nodal_soln)
244 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
256 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
271 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
286 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
301 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
322 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
334 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
349 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
364 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
379 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
400 libmesh_error_msg(
"ERROR: INFINITE_MAP is not a valid shape family for radial approximation.");
412 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
427 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
442 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
457 libmesh_error_msg(
"ERROR: Spherical & Ellipsoidal IFEMs not implemented.");
472 libmesh_error_msg(
"Invalid dim = " <<
dim);
497 libmesh_error_msg(
"Invalid dim = " <<
dim);
502 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
514 const Real tolerance,
529 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
555 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
581 libmesh_not_implemented_msg(
"ERROR: Spherical and Ellipsoidal IFEMs not (yet) implemented.");
597 libmesh_error_msg(
"Invalid dim = " <<
dim);
606 const std::vector<Point> & physical_points,
607 std::vector<Point> & reference_points,
608 const Real tolerance,
658 libmesh_error_msg(
"Invalid dim = " <<
dim);
664 #ifdef LIBMESH_ENABLE_DEPRECATED 677 const unsigned int i,
680 libmesh_deprecated();
682 inf_fe_switch(
shape(fe_t, t, i, p));
690 const unsigned int i,
693 libmesh_deprecated();
695 inf_fe_switch(
shape(fe_t, elem, i, p));
697 #endif // LIBMESH_ENABLE_DEPRECATED 703 const unsigned int i,
709 inf_fe_switch(
shape(fe_t, elem, i, p));
714 #ifdef LIBMESH_ENABLE_DEPRECATED 718 const unsigned int i,
719 const unsigned int j,
722 libmesh_deprecated();
732 const unsigned int i,
733 const unsigned int j,
736 libmesh_deprecated();
740 #endif // LIBMESH_ENABLE_DEPRECATED 746 const unsigned int i,
747 const unsigned int j,
766 inf_fe_family_mapping_switch(1,
compute_data(fe_t, elem,data), , ;
break;);
771 inf_fe_family_mapping_switch(2,
compute_data(fe_t, elem,data), , ;
break;);
776 inf_fe_family_mapping_switch(3,
compute_data(fe_t, elem,data), , ;
break;);
782 libmesh_error_msg(
"Invalid dim = " <<
dim);
789 #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 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...
static unsigned int ifem_n_shape_functions(const FEType &fe_t, const Elem *elem)
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 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)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual unsigned short dim() const =0
static unsigned int ifem_n_dofs(const FEType &fe_t, const Elem *elem)
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)
static unsigned int n_dofs(const FEType &fet, const Elem *inf_elem)