Rheolef  7.1
an efficient C++ finite element environment
basis_fem_Pk_bernstein.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_BASIS_FEM_PK_BERNSTEIN_H
2 #define _RHEOLEF_BASIS_FEM_PK_BERNSTEIN_H
3 /*Class:sherwin
24 NAME: @code{Bk} - Bernstein polynomial basis
25 @cindex polynomial basis
26 @clindex space
27 @clindex basis
28 @clindex reference_element
29 @clindex basis_option
30 SYNOPSIS:
31  space Vh(omega,"B5");
32 DESCRIPTION:
33  @noindent
34  This @code{basis} was initially introduced by Bernstein
35  (Comm. Soc. Math. Kharkov, 2th series, 1912) and more
36  recently used in the context of finite elements.
37  It is indicated in the @code{space} (see @ref{space class})
38  by a string starting with
39  the letter @code{"B"},
40  followed by digits indicating the polynomial order.
41 
42 OPTIONS:
43  This basis do not recognizes any option.
44  See @ref{basis_option class}.
45 
46 AUTHOR: Pierre.Saramito@imag.fr
47 DATE: 23 september 2017
48 End:
49 */
50 //
51 // Bernstein Pk basis
52 //
53 // author: Pierre.Saramito@imag.fr
54 //
55 // date: 11 september 2017
56 //
57 #include "rheolef/basis.h"
58 namespace rheolef {
59 
60 template<class T>
62 public:
63 
64 // typedefs:
65 
66  typedef basis_rep<T> base;
68  typedef T value_type;
69 
70 // allocators:
71 
74 
75 // accessors:
76 
77  std::string family_name() const { return "B"; }
78  size_type degree() const { return _raw_basis.degree(); }
79  bool is_nodal() const { return false; }
80 
81  const Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&
82  hat_node (reference_element hat_K) const;
83 
84  const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>&
85  vdm (reference_element hat_K) const;
86 
87  const Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>&
88  inv_vdm (reference_element hat_K) const;
89 
90 
91 // evaluation of all basis functions at hat_x:
92 
93  void evaluate (
94  reference_element hat_K,
95  const point_basic<T>& hat_x,
96  Eigen::Matrix<T,Eigen::Dynamic,1>& value) const;
97 
98 // evaluate the gradient:
99 
100  void grad_evaluate (
101  reference_element hat_K,
102  const point_basic<T>& hat_x,
103  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& value) const;
104 
105 // internals:
106 
107  void _initialize_cstor_sizes() const;
108  void _initialize_data (reference_element hat_K) const;
109  void _compute_dofs (
110  reference_element hat_K,
111  const Eigen::Matrix<T,Eigen::Dynamic,1>& f_xnod, // scalar-valued case
112  Eigen::Matrix<T,Eigen::Dynamic,1>& dof) const;
113 
114 protected:
115 // data:
117 
118  mutable std::array<
119  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>,
121 
122  mutable std::array<Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>,
124 };
125 
126 } // namespace rheolef
127 #endif // _RHEOLEF_BASIS_FEM_PK_BERNSTEIN_H
rheolef::basis_fem_Pk_bernstein::evaluate
void evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< T, Eigen::Dynamic, 1 > &value) const
Definition: basis_fem_Pk_bernstein.cc:115
rheolef::basis_fem_Pk_bernstein::_vdm
std::array< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >, reference_element::max_variant > _vdm
Definition: basis_fem_Pk_bernstein.h:123
rheolef::basis_fem_Pk_bernstein::family_name
std::string family_name() const
Definition: basis_fem_Pk_bernstein.h:77
rheolef::basis_fem_Pk_bernstein::_compute_dofs
void _compute_dofs(reference_element hat_K, const Eigen::Matrix< T, Eigen::Dynamic, 1 > &f_xnod, Eigen::Matrix< T, Eigen::Dynamic, 1 > &dof) const
Definition: basis_fem_Pk_bernstein.cc:137
rheolef::basis_fem_Pk_bernstein::basis_fem_Pk_bernstein
basis_fem_Pk_bernstein(size_type degree, const basis_option &sopt)
Definition: basis_fem_Pk_bernstein.cc:41
rheolef::basis_fem_Pk_bernstein::_initialize_data
void _initialize_data(reference_element hat_K) const
Definition: basis_fem_Pk_bernstein.cc:92
rheolef::point_basic
Definition: point.h:87
rheolef::basis_fem_Pk_bernstein::grad_evaluate
void grad_evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &value) const
Definition: basis_fem_Pk_bernstein.cc:126
rheolef::basis_raw_basic
Definition: basis_raw.h:107
rheolef::basis_fem_Pk_bernstein
Definition: basis_fem_Pk_bernstein.h:61
rheolef::value
rheolef::std value
rheolef::basis_fem_Pk_bernstein::degree
size_type degree() const
Definition: basis_fem_Pk_bernstein.h:78
rheolef::basis_fem_Pk_bernstein::_initialize_cstor_sizes
void _initialize_cstor_sizes() const
Definition: basis_fem_Pk_bernstein.cc:59
rheolef::basis_option
see the basis_option page for the full documentation
Definition: basis_option.h:93
rheolef::basis_rep::size_type
reference_element::size_type size_type
Definition: basis.h:214
rheolef::basis_fem_Pk_bernstein::inv_vdm
const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > & inv_vdm(reference_element hat_K) const
Definition: basis_fem_Pk_bernstein.cc:85
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::basis_fem_Pk_bernstein::base
basis_rep< T > base
Definition: basis_fem_Pk_bernstein.h:66
rheolef::basis_fem_Pk_bernstein::_raw_basis
basis_raw_basic< T > _raw_basis
Definition: basis_fem_Pk_bernstein.h:116
rheolef::basis_fem_Pk_bernstein::value_type
T value_type
Definition: basis_fem_Pk_bernstein.h:68
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::basis_fem_Pk_bernstein::is_nodal
bool is_nodal() const
Definition: basis_fem_Pk_bernstein.h:79
rheolef::basis_fem_Pk_bernstein::_inv_vdm
std::array< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >, reference_element::max_variant > _inv_vdm
Definition: basis_fem_Pk_bernstein.h:123
rheolef::reference_element::max_variant
static const variant_type max_variant
Definition: reference_element.h:82
rheolef::basis_fem_Pk_bernstein::hat_node
const Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > & hat_node(reference_element hat_K) const
Definition: basis_fem_Pk_bernstein.cc:71
rheolef::reference_element::size_type
std::vector< int >::size_type size_type
Definition: reference_element.h:71
rheolef::basis_fem_Pk_bernstein::~basis_fem_Pk_bernstein
~basis_fem_Pk_bernstein()
Definition: basis_fem_Pk_bernstein.cc:37
rheolef::basis_fem_Pk_bernstein::size_type
reference_element::size_type size_type
Definition: basis_fem_Pk_bernstein.h:67
rheolef::basis_fem_Pk_bernstein::vdm
const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > & vdm(reference_element hat_K) const
Definition: basis_fem_Pk_bernstein.cc:78
rheolef::basis_rep
Definition: basis.h:209
T
Expr1::float_type T
Definition: field_expr.h:218
rheolef::basis_fem_Pk_bernstein::_hat_node
std::array< Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 >, reference_element::max_variant > _hat_node
Definition: basis_fem_Pk_bernstein.h:120