24 #include "rheolef/rheostream.h"
43 _raw_basis(
"B"+
itos(degree)),
63 base::is_continuous(),
64 base::_ndof_on_subgeo,
65 base::_nnod_on_subgeo,
66 base::_first_idof_by_dimension,
67 base::_first_inod_by_dimension);
70 const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&
73 base::_initialize_data_guard (hat_K);
74 return _hat_node [hat_K.
variant()];
77 const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>&
80 base::_initialize_data_guard (hat_K);
84 const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>&
87 base::_initialize_data_guard (hat_K);
88 return _inv_vdm [hat_K.
variant()];
99 switch (base::_sopt.get_node()) {
105 default: error_macro (
"unsupported node set: "<<base::_sopt.get_node_name());
110 "unisolvence failed for " <<
base::name() <<
"(" << hat_K.
name() <<
") basis");
118 Eigen::Matrix<T,Eigen::Dynamic,1>&
value)
const
120 base::_initialize_data_guard (hat_K);
121 _raw_basis.evaluate (hat_K, hat_x,
value);
131 base::_initialize_data_guard (hat_K);
132 _raw_basis.grad_evaluate (hat_K, hat_x,
value);
139 const Eigen::Matrix<T,Eigen::Dynamic,1>& f_xnod,
140 Eigen::Matrix<T,Eigen::Dynamic,1>& dof)
const
142 base::_initialize_data_guard (hat_K);
143 dof = _inv_vdm[hat_K.
variant()]*f_xnod;
148 #define _RHEOLEF_instanciation(T) \
149 template class basis_fem_Pk_bernstein<T>;
see the Float page for the full documentation
basis_fem_Pk_bernstein(size_type degree, const basis_option &sopt)
const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > & vdm(reference_element hat_K) const
void _initialize_cstor_sizes() const
void evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< T, Eigen::Dynamic, 1 > &value) const
void grad_evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &value) const
~basis_fem_Pk_bernstein()
void _compute_dofs(reference_element hat_K, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &f_xnod, Eigen::Matrix< T, Eigen::Dynamic, 1 > &dof) const
const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > & hat_node(reference_element hat_K) const
std::string family_name() const
const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > & inv_vdm(reference_element hat_K) const
void _initialize_data(reference_element hat_K) const
static void initialize_local_first(size_type k, bool is_continuous, std::array< std::array< size_type, reference_element::max_variant >, 4 > &ndof_on_subgeo, std::array< std::array< size_type, reference_element::max_variant >, 4 > &nnod_on_subgeo, std::array< std::array< size_type, 5 >, reference_element::max_variant > &first_idof_by_dimension, std::array< std::array< size_type, 5 >, reference_element::max_variant > &first_inod_by_dimension)
see the basis_option page for the full documentation
void set_node(node_type type)
reference_element::size_type size_type
piola_fem< T > _piola_fem
static std::string standard_naming(std::string family_name, size_t degree, const basis_option &sopt)
see the reference_element page for the full documentation
variant_type variant() const
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
void basis_on_pointset_evaluate(const Basis &b, const reference_element &hat_K, const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_x, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &vdm)
This file is part of Rheolef.
void pointset_lagrange_equispaced(reference_element hat_K, size_t order_in, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_xnod, size_t internal=0)
void pointset_lagrange_warburton(reference_element hat_K, size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_xnod, bool map_on_reference_element=true)
_RHEOLEF_instanciation(Float) _RHEOLEF_instanciation_evaluate(Float
std::string itos(std::string::size_type i)
itos: see the rheostream page for the full documentation
void invert(tiny_matrix< T > &a, tiny_matrix< T > &inv_a)