20 #ifndef __mast__libmesh_fe_h__ 21 #define __mast__libmesh_fe_h__ 29 #include <libmesh/fe_base.h> 34 namespace libMeshWrapper {
36 template <
typename ScalarType, u
int_t Dim>
42 using fe_t = libMesh::FEBase;
46 using phi_vec_t =
typename Eigen::Map<const typename Eigen::Matrix<ScalarType, Eigen::Dynamic, 1>>;
47 using dphi_dxi_vec_t =
typename Eigen::Map<const typename Eigen::Matrix<ScalarType, Eigen::Dynamic, 1>>;
50 "Class only implemented for scalar type = double.");
65 _fe (libMesh::FEBase::
build (Dim, fe_type).release()),
96 inline void reinit(
const libMesh::Elem& e,
102 _fe->attach_quadrature_rule(&q.quadrature_object());
113 _phi(j, k) =
_fe->get_phi()[j][k];
121 _dphi_dxi(j, k) =
_fe->get_fe_map().get_dphidxi_map()[j][k];
149 _fe->attach_quadrature_rule(&q.quadrature_object());
161 _phi(j, k) =
_fe->get_phi()[j][k];
169 _dphi_dxi(j, k) =
_fe->get_fe_map().get_dphidxi_map()[j][k];
192 Assert0(
_q ||
_q_side,
"Quadrature rule must be specified before quadrature weight can be obtained");
200 "Invalid quadrature point index");
209 "Invalid shape function index");
212 "Invalid quadrature point index");
214 return _phi(phi_i, qp);
242 Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>
_phi;
243 Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>
_dphi_dxi;
250 #endif // __mast__libmesh_fe_h__
const dphi_dxi_vec_t dphi_dxi(uint_t qp, uint_t xi_i) const
FEBasis(const libMesh::FEType fe_type)
scalar_t dphi_dxi(uint_t qp, uint_t phi_i, uint_t xi_i) const
std::enable_if< Dim< 3, ScalarType >::typesource_load_multiplier(const SourceLoadFieldType *f, const SectionAreaType *s, ContextType &c) { Assert0(f, "Invalid pointer");Assert0(s, "Invalid pointer");return f-> value(c) *s -> value(c)
const side_quadrature_t * _q_side
typename Eigen::Map< const typename Eigen::Matrix< ScalarType, Eigen::Dynamic, 1 > > dphi_dxi_vec_t
void reinit(const libMesh::Elem &e, quadrature_t &q)
virtual uint_t n_q_points() const
Eigen::Matrix< ScalarType, Eigen::Dynamic, Eigen::Dynamic > _phi
#define Assert0(cond, msg)
#define Assert2(cond, v1, v2, msg)
scalar_t qp_weight(uint_t qp) const
void reinit_for_side(const libMesh::Elem &e, side_quadrature_t &q, const uint_t s)
typename MAST::Quadrature::libMeshWrapper::Quadrature< ScalarType, Dim > quadrature_t
scalar_t phi(uint_t qp, uint_t phi_i) const
typename Eigen::Map< const typename Eigen::Matrix< ScalarType, Eigen::Dynamic, 1 > > phi_vec_t
typename MAST::Quadrature::libMeshWrapper::Quadrature< ScalarType, Dim-1 > side_quadrature_t
phi_vec_t phi(uint_t qp) const
std::unique_ptr< ValType > build(const libMesh::System &sys)
void set_compute_dphi_dxi(bool f)
Eigen::Matrix< ScalarType, Eigen::Dynamic, Eigen::Dynamic > _dphi_dxi