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);
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);
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));
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();
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);
This is the base class from which all geometric element types are derived.
virtual unsigned short dim() const =0
static bool on_reference_element(const Point &p, const ElemType t, const Real eps=TOLERANCE)
class FEComputeData hides arbitrary data to be passed to and from children of FEBase through the FEIn...
static Real ifem_shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, 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 Real shape(const unsigned int dim, const FEType &fe_t, const ElemType t, const unsigned int i, const Point &p)
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 void ifem_compute_data(const unsigned int dim, const FEType &fe_t, const Elem *elem, FEComputeData &data)
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)
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 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,...
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 ifem_n_dofs_per_elem(const unsigned int dim, const FEType &fe_t, const ElemType t)
static unsigned int ifem_n_shape_functions(const FEType &fe_t, const Elem *elem)
static Point ifem_map(const unsigned int dim, const FEType &fe_t, const Elem *elem, const Point &p)
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 unsigned int ifem_n_dofs(const FEType &fe_t, const Elem *elem)
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
InfMapType inf_map
The coordinate mapping type of the infinite element.
FEFamily radial_family
The type of approximation in radial direction.
static unsigned int n_dofs(const FEType &fet, const Elem *inf_elem)
static Point map(const Elem *inf_elem, const Point &reference_point)
static unsigned int n_dofs_at_node(const FEType &fet, const ElemType inf_elem_type, const unsigned int n)
virtual unsigned int n_shape_functions() const override
static Point inverse_map(const Elem *elem, const Point &p, const Real tolerance=TOLERANCE, const bool secure=true)
static unsigned int n_dofs_per_elem(const FEType &fet, const ElemType inf_elem_type)
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.
A Point defines a location in LIBMESH_DIM dimensional Real space.
std::string enum_to_string(const T e)
The libMesh namespace provides an interface to certain functionality in the library.
ElemType
Defines an enum for geometric element types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real