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)