Rheolef  7.1
an efficient C++ finite element environment
basis_fem_tensor.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_BASIS_FEM_TENSOR_H
2 #define _RHEOLEF_BASIS_FEM_TENSOR_H
3 /*Class:sherwin
24 NAME: @code{tensor(X)} - symmetric tensor-valued basis
25 @cindex polynomial basis
26 @clindex space
27 @clindex basis
28 @clindex reference_element
29 SYNOPSIS:
30  space Mh (omega,"P1","tensor");
31 DESCRIPTION:
32  @noindent
33  This polynomial @code{basis} is used for symmetric tensor-valued basis
34  when all components are approcimated by the same scalar-valued basis.
35 AUTHOR: Pierre.Saramito@imag.fr
36 DATE: 25 january 2019
37 End:
38 */
39 #include "rheolef/basis.h"
40 namespace rheolef {
41 
42 template<class T>
43 class basis_fem_tensor: public basis_rep<T> {
44 public:
45 
46 // typedefs:
47 
48  typedef basis_rep<T> base;
49  typedef typename base::size_type size_type;
52 
53 // allocators:
54 
55  basis_fem_tensor (const basis_basic<T>& scalar_basis, const basis_option& sopt);
57 
58 // accessors:
59 
60  std::string family_name() const { return _scalar_basis.family_name(); }
61  size_type family_index() const { return _scalar_basis.family_index(); }
62  size_type degree() const { return _scalar_basis.degree(); }
64  bool is_hierarchical() const { return true; }
65  size_type size() const { return _n_comp; }
66  const basis_basic<T>& operator[] (size_type i_comp) const { return _scalar_basis; }
67  bool is_continuous() const { return _scalar_basis.is_continuous(); }
68  bool have_index_parameter() const { return _scalar_basis.have_index_parameter(); }
69  bool have_continuous_feature() const { return _scalar_basis.have_continuous_feature(); }
70  bool is_nodal() const { return _scalar_basis.is_nodal(); }
71  bool have_compact_support_inside_element() const { return _scalar_basis.have_compact_support_inside_element(); }
72 
73  const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&
74  hat_node (reference_element hat_K) const;
75 
76  // evaluation of all basis functions at hat_x:
77  void evaluate (
78  reference_element hat_K,
79  const point_basic<T>& hat_x,
80  Eigen::Matrix<tensor_basic<T>,Eigen::Dynamic,1>& value) const;
81 
82  void grad_evaluate (
83  reference_element hat_K,
84  const point_basic<T>& hat_x,
85  Eigen::Matrix<tensor3_basic<T>,Eigen::Dynamic,1>& value) const;
86 
87  // dofs for a tensor-valued function
88  void _compute_dofs (
89  reference_element hat_K,
90  const Eigen::Matrix<tensor_basic<T>,Eigen::Dynamic,1>& f_xnod,
91  Eigen::Matrix<T,Eigen::Dynamic,1>& dof) const;
92 
93 // internals:
94 
95  void _initialize_cstor_sizes() const;
96  void _initialize_data (reference_element hat_K) const;
97 
98 protected:
99 // data:
102 
103 // working area:
104  mutable Eigen::Matrix<T,Eigen::Dynamic,1> _scalar_value;
105  mutable Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1> _vector_value;
106 };
107 
108 } // namespace rheolef
109 #endif // _RHEOLEF_BASIS_FEM_TENSOR_H
rheolef::basis_fem_tensor::operator[]
const basis_basic< T > & operator[](size_type i_comp) const
Definition: basis_fem_tensor.h:66
rheolef::basis_fem_tensor::value_type
tensor_basic< T > value_type
Definition: basis_fem_tensor.h:50
rheolef::basis_fem_tensor::_scalar_value
Eigen::Matrix< T, Eigen::Dynamic, 1 > _scalar_value
Definition: basis_fem_tensor.h:104
rheolef::basis_fem_tensor
Definition: basis_fem_tensor.h:43
rheolef::basis_fem_tensor::basis_fem_tensor
basis_fem_tensor(const basis_basic< T > &scalar_basis, const basis_option &sopt)
Definition: basis_fem_tensor.cc:36
rheolef::point_basic
Definition: point.h:87
rheolef::basis_fem_tensor::_scalar_basis
basis_basic< T > _scalar_basis
Definition: basis_fem_tensor.h:101
rheolef::basis_fem_tensor::have_compact_support_inside_element
bool have_compact_support_inside_element() const
Definition: basis_fem_tensor.h:71
rheolef::basis_fem_tensor::hat_node
const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > & hat_node(reference_element hat_K) const
Definition: basis_fem_tensor.cc:98
rheolef::basis_fem_tensor::is_continuous
bool is_continuous() const
Definition: basis_fem_tensor.h:67
rheolef::value
rheolef::std value
rheolef::tensor_basic
Definition: tensor.h:90
rheolef::basis_fem_tensor::have_index_parameter
bool have_index_parameter() const
Definition: basis_fem_tensor.h:68
rheolef::space_constant::valued_type
valued_type
Definition: space_constant.h:135
rheolef::basis_option
see the basis_option page for the full documentation
Definition: basis_option.h:93
rheolef::basis_fem_tensor::evaluate
void evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< tensor_basic< T >, Eigen::Dynamic, 1 > &value) const
Definition: basis_fem_tensor.cc:104
rheolef::basis_fem_tensor::size
size_type size() const
Definition: basis_fem_tensor.h:65
rheolef::basis_rep::size_type
reference_element::size_type size_type
Definition: basis.h:214
rheolef::basis_fem_tensor::degree
size_type degree() const
Definition: basis_fem_tensor.h:62
rheolef::basis_basic
Definition: basis.h:206
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::space_constant::tensor
@ tensor
Definition: space_constant.h:138
rheolef::basis_fem_tensor::base
basis_rep< T > base
Definition: basis_fem_tensor.h:48
rheolef::basis_fem_tensor::have_continuous_feature
bool have_continuous_feature() const
Definition: basis_fem_tensor.h:69
rheolef::basis_fem_tensor::_initialize_data
void _initialize_data(reference_element hat_K) const
Definition: basis_fem_tensor.cc:93
rheolef::tensor3_basic
Definition: tensor3.h:73
rheolef::basis_fem_tensor::grad_evaluate
void grad_evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< tensor3_basic< T >, Eigen::Dynamic, 1 > &value) const
Definition: basis_fem_tensor.cc:130
rheolef::basis_fem_tensor::_compute_dofs
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
Definition: basis_fem_tensor.cc:159
rheolef::basis_fem_tensor::family_index
size_type family_index() const
Definition: basis_fem_tensor.h:61
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::basis_fem_tensor::size_type
base::size_type size_type
Definition: basis_fem_tensor.h:49
rheolef::basis_fem_tensor::~basis_fem_tensor
~basis_fem_tensor()
Definition: basis_fem_tensor.cc:32
rheolef::basis_fem_tensor::is_nodal
bool is_nodal() const
Definition: basis_fem_tensor.h:70
rheolef::basis_fem_tensor::valued_tag
valued_type valued_tag() const
Definition: basis_fem_tensor.h:63
rheolef::basis_fem_tensor::_vector_value
Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > _vector_value
Definition: basis_fem_tensor.h:105
rheolef::basis_fem_tensor::_initialize_cstor_sizes
void _initialize_cstor_sizes() const
Definition: basis_fem_tensor.cc:75
rheolef::basis_fem_tensor::valued_type
space_constant::valued_type valued_type
Definition: basis_fem_tensor.h:51
rheolef::basis_fem_tensor::is_hierarchical
bool is_hierarchical() const
Definition: basis_fem_tensor.h:64
rheolef::basis_fem_tensor::family_name
std::string family_name() const
Definition: basis_fem_tensor.h:60
rheolef::basis_fem_tensor::_n_comp
size_type _n_comp
Definition: basis_fem_tensor.h:100
rheolef::basis_rep
Definition: basis.h:209