20 #ifndef LIBMESH_INF_FE_H 21 #define LIBMESH_INF_FE_H 25 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 74 template <
unsigned int Dim, FEFamily T_radial, InfMapType T_map>
75 class InfFE :
public FEBase 120 static Real D (
const Real v) {
return (1.-v)*(1.-v)/4.; }
148 {
return static_cast<unsigned int>(o_radial)+1; }
160 const unsigned int n_onion);
171 {
return static_cast<unsigned int>(o_radial)+1; }
216 const Order base_mapping_order);
263 const unsigned int i,
280 const unsigned int i,
294 const Elem * inf_elem,
303 {
return n_dofs(fet, t); }
320 const unsigned int n);
351 const std::vector<Number> & elem_soln,
359 const Point & reference_point);
379 const bool secure =
true);
389 const std::vector<Point> & physical_points,
390 std::vector<Point> & reference_points,
392 const bool secure =
true);
405 const std::vector<Point> *
const pts =
nullptr,
406 const std::vector<Real> *
const weights =
nullptr)
override;
414 const unsigned int side,
416 const std::vector<Point> *
const pts =
nullptr,
417 const std::vector<Real> *
const weights =
nullptr)
override;
425 const unsigned int edge,
427 const std::vector<Point> *
const pts =
nullptr,
428 const std::vector<Real> *
const weights =
nullptr)
override;
437 const std::vector<Point> & ,
438 std::vector<Point> & )
override 440 libmesh_not_implemented();
519 const Elem *)
override 520 { libmesh_not_implemented(); }
528 const std::vector<Point> * radial_pts =
nullptr);
537 const std::vector<Point> & base_qp,
538 const Elem * inf_elem);
580 const unsigned int outer_node_index,
581 unsigned int & base_node,
582 unsigned int & radial_node);
593 const unsigned int outer_node_index,
594 unsigned int & base_node,
595 unsigned int & radial_node);
605 const unsigned int i,
606 unsigned int & base_shape,
607 unsigned int & radial_shape);
640 std::vector<std::vector<Real>>
mode;
817 template <
unsigned int friend_Dim, FEFamily friend_T_radial, InfMapType friend_T_map>
825 template <
unsigned int Dim, FEFamily T_radial, InfMapType T_map>
842 libmesh_error_msg(
"Invalid Dim = " << Dim);
849 #endif // ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 852 #endif // LIBMESH_INF_FE_H void init_face_shape_functions(const std::vector< Point > &qp, const Elem *side)
static void compute_node_indices_fast(const ElemType inf_elem_type, const unsigned int outer_node_index, unsigned int &base_node, unsigned int &radial_node)
Manages the family, order, etc. parameters for a given FE.
virtual void init_base_shape_functions(const std::vector< Point > &, const Elem *) override
static unsigned int n_dofs_per_elem(const FEType &fet, const ElemType inf_elem_type)
static Real decay_deriv(const Real)
std::vector< Real > dsomdv
static bool _warned_for_shape
std::vector< std::vector< Real > > dradialdv_map
std::vector< std::vector< Real > > radial_map
static Real D(const Real v)
Base class for all the infinite geometric element types.
std::vector< Real > dphasedxi
static unsigned int n_dofs_at_node(const FEType &fet, const ElemType inf_elem_type, const unsigned int n)
void combine_base_radial(const Elem *inf_elem)
static Real eval_deriv(Real v, Order o_radial, unsigned int i)
std::vector< Real > dweightdv
Helper class used with FEInterface::compute_data().
std::unique_ptr< QBase > radial_qrule
std::vector< unsigned int > _base_node_index
void init_shape_functions(const std::vector< Point > &radial_qp, const std::vector< Point > &base_qp, const Elem *inf_elem)
static Elem * build_elem(const Elem *inf_elem)
The base class for all geometric element types.
static Real shape(const FEType &fet, const ElemType t, const unsigned int i, const Point &p)
static unsigned int n_dofs_at_node(const Order o_radial, const unsigned int n_onion)
static const Real TOLERANCE
static unsigned int n_shape_functions(const FEType &fet, const ElemType t)
static ElemType get_elem_type(const ElemType type)
static void compute_node_indices(const ElemType inf_elem_type, const unsigned int outer_node_index, unsigned int &base_node, unsigned int &radial_node)
virtual FEContinuity get_continuity() const override
std::vector< std::vector< Real > > mode
virtual void compute_shape_functions(const Elem *, const std::vector< Point > &) override
static unsigned int n_dofs_per_elem(const Order o_radial)
static unsigned int n_dofs(const FEType &fet, const ElemType inf_elem_type)
virtual unsigned int n_quadrature_points() const override
std::unique_ptr< Elem > base_elem
static unsigned int n_base_mapping_sf(const ElemType base_elem_type, const Order base_mapping_order)
std::unique_ptr< FEBase > base_fe
static Real decay(const Real v)
std::vector< Real > dphasedzeta
static Real eval(Real v, Order o_radial, unsigned int i)
std::vector< Real > dphasedeta
static Real D_deriv(const Real v)
static unsigned int n_dofs(const Order o_radial)
FEGenericBase< Real > FEBase
virtual bool shapes_need_reinit() const override
unsigned int _n_total_approx_sf
void init_radial_shape_functions(const Elem *inf_elem, const std::vector< Point > *radial_pts=nullptr)
std::vector< unsigned int > _radial_node_index
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 void edge_reinit(const Elem *elem, const unsigned int edge, const Real tolerance=TOLERANCE, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
std::unique_ptr< QBase > base_qrule
static void compute_shape_indices(const FEType &fet, const ElemType inf_elem_type, const unsigned int i, unsigned int &base_shape, unsigned int &radial_shape)
static Point map(const Elem *inf_elem, const Point &reference_point)
std::vector< unsigned int > _radial_shape_index
static bool _warned_for_nodal_soln
static void compute_data(const FEType &fe_t, const Elem *inf_elem, FEComputeData &data)
virtual void reinit(const Elem *elem, const std::vector< Point > *const pts=nullptr, const std::vector< Real > *const weights=nullptr) override
static void nodal_soln(const FEType &fet, const Elem *elem, const std::vector< Number > &elem_soln, std::vector< Number > &nodal_soln)
std::vector< unsigned int > _base_shape_index
virtual void attach_quadrature_rule(QBase *q) override
virtual void side_map(const Elem *, const Elem *, const unsigned int, const std::vector< Point > &, std::vector< Point > &) override
static Order mapping_order()
static ElemType _compute_node_indices_fast_current_elem_type
std::vector< std::vector< Real > > dmodedv
A geometric point in (x,y,z) space.
virtual unsigned int n_shape_functions() const override
virtual bool is_hierarchic() const override
Base class for all quadrature families and orders.
std::vector< Real > _total_qrule_weights
void update_base_elem(const Elem *inf_elem)