22#include "rheolef/rheostream.h"
47 "tensor(basis): basis.option.map_dimension should be initialized for component number");
62 const size_type unset = std::numeric_limits<basis_option::size_type>::max();
63 size_type
d = (base::option().dimension() == unset) ? map_d : base::option().
dimension();
64 size_type n_comp =
d*(
d+1)/2;
77 for (
size_type map_d = 0; map_d < 4; ++map_d) {
85 for (
size_type subgeo_d = 0; subgeo_d < 5; ++subgeo_d) {
97const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&
114 value.resize (loc_ndof);
116 for (
size_type loc_comp_idof = 0; loc_comp_idof < loc_comp_ndof; ++loc_comp_idof) {
122 value[loc_idof] (i_comp,j_comp) =
_scalar_value[loc_comp_idof];
123 if (ij.first == ij.second)
continue;
124 value[loc_idof] (j_comp,i_comp) =
_scalar_value[loc_comp_idof];
140 value.resize (loc_ndof);
142 for (
size_type loc_comp_idof = 0; loc_comp_idof < loc_comp_ndof; ++loc_comp_idof) {
149 value[loc_idof](i_comp,j_comp,k_comp) =
_vector_value[loc_comp_idof][k_comp];
150 if (i_comp == j_comp)
continue;
151 value[loc_idof](j_comp,i_comp,k_comp) =
_vector_value[loc_comp_idof][k_comp];
162 Eigen::Matrix<T,Eigen::Dynamic,1>& dof)
const
169 Eigen::Matrix<T,Eigen::Dynamic,1> f_comp_xnod (loc_comp_nnod);
170 Eigen::Matrix<T,Eigen::Dynamic,1> comp_dof (loc_comp_ndof);
171 dof.resize (loc_ndof);
176 for (
size_type loc_comp_inod = 0; loc_comp_inod < loc_comp_nnod; ++loc_comp_inod) {
178 f_comp_xnod [loc_comp_inod]
179 = 0.5*( f_xnod [loc_comp_inod] (i_comp,j_comp)
180 + f_xnod [loc_comp_inod] (j_comp,i_comp));
183 for (
size_type loc_comp_idof = 0; loc_comp_idof < loc_comp_ndof; ++loc_comp_idof) {
185 dof [loc_idof] = comp_dof [loc_comp_idof];
192#define _RHEOLEF_instanciation(T) \
193template class basis_fem_tensor<T>;
#define _RHEOLEF_instanciation(T, M, A)
void _compute_dofs(reference_element hat_K, const Eigen::Matrix< tensor_basic< T >, Eigen::Dynamic, 1 > &f_xnod, Eigen::Matrix< T, Eigen::Dynamic, 1 > &dof) const
basis_fem_tensor(const basis_basic< T > &scalar_basis, const basis_option &sopt)
base::size_type size_type
Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > _vector_value
Eigen::Matrix< T, Eigen::Dynamic, 1 > _scalar_value
void _initialize_cstor_sizes() const
void grad_evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< tensor3_basic< T >, Eigen::Dynamic, 1 > &value) const
void evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< tensor_basic< T >, Eigen::Dynamic, 1 > &value) const
basis_basic< T > _scalar_basis
size_type family_index() const
const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > & hat_node(reference_element hat_K) const
std::string family_name() const
void _initialize_data(reference_element hat_K) const
size_type dimension() const
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
basis_rep(const basis_option &sopt)
piola_fem< T > _piola_fem
const basis_option & option() const
void _initialize_data_guard(reference_element hat_K) const
std::array< std::array< size_type,reference_element::max_variant >,4 > _ndof_on_subgeo
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
static const variant_type max_variant
double Float
see the Float page for the full documentation
check_macro(expr1.have_homogeneous_space(Xh1), "dual(expr1,expr2); expr1 should have homogeneous space. HINT: use dual(interpolate(Xh, expr1),expr2)")
std::pair< size_type, size_type > tensor_subscript(valued_type valued_tag, coordinate_type sys_coord, size_type i_comp)
This file is part of Rheolef.