Rheolef  7.1
an efficient C++ finite element environment
basis_fem_Pk_sherwin.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_BASIS_FEM_PK_SHERWIN_H
2 #define _RHEOLEF_BASIS_FEM_PK_SHERWIN_H
3 /*Class:sherwin
24 NAME: @code{Sk} - Dubiner-Sherwin-Karniadakis polynomial basis
25 @cindex polynomial basis
26 @clindex space
27 @clindex basis
28 @clindex reference_element
29 SYNOPSIS:
30  space Vh(omega,"S5");
31 DESCRIPTION:
32  @noindent
33  This @code{basis} is described for the triangle
34  by Dubiner (J. Sci. Comput., 1991)
35  and extended by Sherwin and Karniadakis (2005, Cambridge Univ. Press)
36  to others reference elements.
37  It is indicated in the @code{space} (see @ref{space class})
38  by a string starting with
39  the letter @code{"S"},
40  followed by digits indicating the polynomial order.
41 
42 OPTIONS:
43  This basis recognizes the equispaced/warburton node option
44  for degrees of freedom located on sides.
45  See @ref{basis_option class}.
46 
47 AUTHOR: Pierre.Saramito@imag.fr
48 DATE: 23 september 2017
49 End:
50 */
51 #include "rheolef/basis.h"
52 #include "rheolef/ad3.h"
53 namespace rheolef {
54 
55 template<class T>
56 class basis_fem_Pk_sherwin: public basis_rep<T> {
57 public:
58 
59 // typedefs:
60 
61  typedef basis_rep<T> base;
63  typedef T value_type;
64 
65 // allocators:
66 
69 
70 // accessors:
71 
72  std::string family_name() const { return "S"; }
73  size_type degree() const { return _degree; }
74  bool is_nodal() const { return false; }
75 
76 // evaluation of all basis functions at hat_x:
77 
78  void evaluate (
79  reference_element hat_K,
80  const point_basic<T>& hat_x,
81  Eigen::Matrix<T,Eigen::Dynamic,1>& value) const;
82 
83 // evaluate the gradient:
84 
85  void grad_evaluate (
86  reference_element hat_K,
87  const point_basic<T>& hat_x,
88  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& value) const;
89 
90  void _initialize_cstor_sizes() const;
91  void _initialize_data (reference_element hat_K) const;
92  void _compute_dofs (
93  reference_element hat_K,
94  const Eigen::Matrix<T,Eigen::Dynamic,1>& f_xnod, // scalar-valued case
95  Eigen::Matrix<T,Eigen::Dynamic,1>& dof) const;
96 
97 protected:
98 // data:
102 
103 #ifdef TODO
104  mutable std::array<std::vector<ad3_basic<T> >,
106 
107  mutable std::vector<ad3_basic<T> > _work0_ad, _work1_ad, _work2_ad;
108 
109  mutable Eigen::Matrix<T,Eigen::Dynamic,1> _work0, _work1, _work2;
110 #endif // TODO
111 };
112 
113 } // namespace rheolef
114 #endif // _RHEOLEF_BASIS_FEM_PK_SHERWIN_H
rheolef::basis_fem_Pk_sherwin::_work0_ad
std::vector< ad3_basic< T > > _work0_ad
Definition: basis_fem_Pk_sherwin.h:107
rheolef::basis_fem_Pk_sherwin::_work1_ad
std::vector< ad3_basic< T > > _work1_ad
Definition: basis_fem_Pk_sherwin.h:107
rheolef::point_basic
Definition: point.h:87
rheolef::basis_fem_Pk_sherwin::_alpha
T _alpha
Definition: basis_fem_Pk_sherwin.h:100
rheolef::basis_fem_Pk_sherwin::_initialize_data
void _initialize_data(reference_element hat_K) const
Definition: basis_fem_Pk_sherwin.cc:82
rheolef::basis_fem_Pk_sherwin::_initialize_cstor_sizes
void _initialize_cstor_sizes() const
Definition: basis_fem_Pk_sherwin.cc:70
rheolef::basis_fem_Pk_sherwin::~basis_fem_Pk_sherwin
~basis_fem_Pk_sherwin()
Definition: basis_fem_Pk_sherwin.cc:38
rheolef::basis_fem_Pk_sherwin::_work2
Eigen::Matrix< T, Eigen::Dynamic, 1 > _work2
Definition: basis_fem_Pk_sherwin.h:109
rheolef::basis_fem_Pk_sherwin::value_type
T value_type
Definition: basis_fem_Pk_sherwin.h:63
rheolef::value
rheolef::std value
rheolef::basis_fem_Pk_sherwin::basis_fem_Pk_sherwin
basis_fem_Pk_sherwin(size_type degree, const basis_option &sopt)
Definition: basis_fem_Pk_sherwin.cc:42
rheolef::basis_fem_Pk_sherwin::_value_ad
std::array< std::vector< ad3_basic< T > >, reference_element::max_variant > _value_ad
Definition: basis_fem_Pk_sherwin.h:105
rheolef::basis_option
see the basis_option page for the full documentation
Definition: basis_option.h:93
rheolef::basis_fem_Pk_sherwin::_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_sherwin.cc:146
rheolef::basis_rep::size_type
reference_element::size_type size_type
Definition: basis.h:214
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::basis_fem_Pk_sherwin::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_sherwin.cc:108
rheolef::basis_fem_Pk_sherwin::_work0
Eigen::Matrix< T, Eigen::Dynamic, 1 > _work0
Definition: basis_fem_Pk_sherwin.h:109
rheolef::basis_fem_Pk_sherwin::_beta
T _beta
Definition: basis_fem_Pk_sherwin.h:101
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::basis_fem_Pk_sherwin::is_nodal
bool is_nodal() const
Definition: basis_fem_Pk_sherwin.h:74
rheolef::basis_fem_Pk_sherwin::_work1
Eigen::Matrix< T, Eigen::Dynamic, 1 > _work1
Definition: basis_fem_Pk_sherwin.h:109
rheolef::reference_element::max_variant
static const variant_type max_variant
Definition: reference_element.h:82
rheolef::basis_fem_Pk_sherwin::family_name
std::string family_name() const
Definition: basis_fem_Pk_sherwin.h:72
rheolef::basis_fem_Pk_sherwin::size_type
reference_element::size_type size_type
Definition: basis_fem_Pk_sherwin.h:62
rheolef::basis_fem_Pk_sherwin::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_sherwin.cc:122
rheolef::basis_fem_Pk_sherwin::degree
size_type degree() const
Definition: basis_fem_Pk_sherwin.h:73
rheolef::basis_fem_Pk_sherwin::_degree
size_type _degree
Definition: basis_fem_Pk_sherwin.h:99
rheolef::basis_fem_Pk_sherwin::_work2_ad
std::vector< ad3_basic< T > > _work2_ad
Definition: basis_fem_Pk_sherwin.h:107
rheolef::basis_fem_Pk_sherwin::base
basis_rep< T > base
Definition: basis_fem_Pk_sherwin.h:61
rheolef::reference_element::size_type
std::vector< int >::size_type size_type
Definition: reference_element.h:71
rheolef::basis_fem_Pk_sherwin
Definition: basis_fem_Pk_sherwin.h:56
rheolef::basis_rep
Definition: basis.h:209
T
Expr1::float_type T
Definition: field_expr.h:261