Rheolef  7.1
an efficient C++ finite element environment
fem_on_pointset.h
Go to the documentation of this file.
1 #ifndef _RHEOLEF_FEM_ON_POINTSET_H
2 #define _RHEOLEF_FEM_ON_POINTSET_H
3 //
24 // evaluate a FEM basis on a mapped element K
25 // on a full pointset, e.g. a quadrature node set
26 // or an interpolation node set
27 // where the FEM on K is defined via the Piola transformation:
28 //
29 // F : hat_K ---> K
30 // hat_x +--> x = F(hat_x)
31 //
32 // and the corresponding FEM on the reference element
33 //
34 #include "rheolef/geo.h"
35 #include "rheolef/basis_on_pointset.h"
36 #include "rheolef/piola_on_pointset.h"
37 namespace rheolef {
38 
39 // ----------------------------------------------------------------------------
40 // representation
41 // ----------------------------------------------------------------------------
42 template<class T>
44 public:
47 
48 // allocators:
49 
51 
52 // accessors:
53 
56 
57 // modifiers:
58 
59  void initialize (
60  const basis_basic<T>& fem_basis,
61  const piola_on_pointset<T>& pops);
62 
63  template<class M, class Value, diff_type Diff>
64  void
65  evaluate (
66  const geo_basic<T,M>& omega_K,
67  const geo_element& K,
69  Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& value) const;
70 
71  template<class M, class Value, diff_type Diff>
72  void
74  const geo_basic<T,M>& omega_K,
75  const geo_element& K,
76  const side_information_type& sid,
78  Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& value) const;
79 
80 // internals:
81  template<class M, class Value>
83  const geo_basic<T,M>& omega_K,
84  const geo_element& K,
85  const Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& hat_phij_xi,
86  Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& value) const;
87 
88 //protected:
91 
92 // working area:
93 public:
94  mutable std::array<
95  Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>
97  mutable std::array<
98  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,Eigen::Dynamic>
100  mutable std::array<
101  Eigen::Matrix<tensor_basic<T>,Eigen::Dynamic,Eigen::Dynamic>
103 };
104 template<class T>
106  : _bops(),
107  _pops(),
108  _scalar_phij_xi(),
109  _vector_phij_xi(),
110  _tensor_phij_xi()
111 {
112 }
113 // ----------------------------------------------------------------------------
114 // interface
115 // ----------------------------------------------------------------------------
116 template<class T>
117 class fem_on_pointset: public smart_pointer<fem_on_pointset_rep<T> > {
118 public:
121  typedef typename rep::size_type size_type;
122  typedef typename rep::diff_type diff_type;
123 
124 // allocators:
125 
126  fem_on_pointset();
127 
128 // modifiers:
129 
130  void initialize (
131  const basis_basic<T>& fem_basis,
132  const piola_on_pointset<T>& pops)
133  { base::data().initialize (fem_basis, pops); }
134 
135 // accessors:
136 
138  { return base::data().get_basis_on_pointset(); }
140  { return base::data().get_piola_on_pointset(); }
141 
142  template<class M, class Value, diff_type Diff>
143  void
145  const geo_basic<T,M>& omega_K,
146  const geo_element& K,
147  const details::differentiate_option& gopt,
148  Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& value) const
149  { base::data().template evaluate<M,Value,Diff> (omega_K, K, gopt, value); }
150 
151  template<class M, class Value, diff_type Diff>
152  void
154  const geo_basic<T,M>& omega_K,
155  const geo_element& K,
156  const side_information_type& sid,
157  const details::differentiate_option& gopt,
158  Eigen::Matrix<Value,Eigen::Dynamic,Eigen::Dynamic>& value) const
159  { base::data().template evaluate_on_side<M,Value,Diff> (omega_K, K, sid, gopt, value); }
160 };
161 template<class T>
162 inline
164  : base(new_macro(rep))
165 {
166 }
167 
168 }// namespace rheolef
169 #endif // _RHEOLEF_FEM_ON_POINTSET_H
rheolef::fem_on_pointset_rep::diff_type
details::differentiate_option::type diff_type
Definition: fem_on_pointset.h:46
rheolef::fem_on_pointset_rep::_scalar_phij_xi
std::array< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic >,reference_element::max_variant > _scalar_phij_xi
Definition: fem_on_pointset.h:96
rheolef::geo_basic< T, M >
rheolef::fem_on_pointset_rep::fem_on_pointset_rep
fem_on_pointset_rep()
Definition: fem_on_pointset.h:105
rheolef::fem_on_pointset::rep
fem_on_pointset_rep< T > rep
Definition: fem_on_pointset.h:119
rheolef::smart_pointer_base< T, details::constructor_copy< T > >::data
const T & data() const
Definition: smart_pointer.h:266
rheolef::smart_pointer_base
Definition: smart_pointer.h:131
rheolef::fem_on_pointset::base
smart_pointer< rep > base
Definition: fem_on_pointset.h:120
rheolef::fem_on_pointset::diff_type
rep::diff_type diff_type
Definition: fem_on_pointset.h:122
rheolef::value
rheolef::std value
rheolef::fem_on_pointset::evaluate_on_side
void evaluate_on_side(const geo_basic< T, M > &omega_K, const geo_element &K, const side_information_type &sid, const details::differentiate_option &gopt, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &value) const
Definition: fem_on_pointset.h:153
rheolef::geo_element
see the geo_element page for the full documentation
Definition: geo_element.h:102
rheolef::fem_on_pointset::get_basis_on_pointset
const basis_on_pointset< T > & get_basis_on_pointset() const
Definition: fem_on_pointset.h:137
rheolef::fem_on_pointset_rep::_evaluate_post_piola
void _evaluate_post_piola(const geo_basic< T, M > &omega_K, const geo_element &K, const Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &hat_phij_xi, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &value) const
Definition: fem_on_pointset.cc:79
rheolef::side_information_type
Definition: reference_element_face_transformation.h:37
rheolef::basis_basic
Definition: basis.h:206
rheolef::smart_pointer
see the smart_pointer page for the full documentation
Definition: smart_pointer.h:351
rheolef::details::differentiate_option
Definition: piola.h:41
rheolef::fem_on_pointset::initialize
void initialize(const basis_basic< T > &fem_basis, const piola_on_pointset< T > &pops)
Definition: fem_on_pointset.h:130
rheolef::fem_on_pointset_rep::get_basis_on_pointset
const basis_on_pointset< T > & get_basis_on_pointset() const
Definition: fem_on_pointset.h:54
rheolef::piola_on_pointset
Definition: piola_on_pointset.h:142
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::fem_on_pointset
Definition: fem_on_pointset.h:117
rheolef::fem_on_pointset_rep
Definition: fem_on_pointset.h:43
rheolef::reference_element::max_variant
static const variant_type max_variant
Definition: reference_element.h:82
rheolef::fem_on_pointset_rep::get_piola_on_pointset
const piola_on_pointset< T > & get_piola_on_pointset() const
Definition: fem_on_pointset.h:55
rheolef::basis_on_pointset
Definition: basis_on_pointset.h:191
rheolef::fem_on_pointset_rep::_tensor_phij_xi
std::array< Eigen::Matrix< tensor_basic< T >, Eigen::Dynamic, Eigen::Dynamic >,reference_element::max_variant > _tensor_phij_xi
Definition: fem_on_pointset.h:102
rheolef::fem_on_pointset_rep::evaluate_on_side
void evaluate_on_side(const geo_basic< T, M > &omega_K, const geo_element &K, const side_information_type &sid, const details::differentiate_option &gopt, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &value) const
Definition: fem_on_pointset.cc:466
rheolef::fem_on_pointset_rep::_vector_phij_xi
std::array< Eigen::Matrix< point_basic< T >, Eigen::Dynamic, Eigen::Dynamic >,reference_element::max_variant > _vector_phij_xi
Definition: fem_on_pointset.h:99
rheolef::fem_on_pointset_rep::size_type
reference_element::size_type size_type
Definition: fem_on_pointset.h:45
rheolef::fem_on_pointset::size_type
rep::size_type size_type
Definition: fem_on_pointset.h:121
rheolef::fem_on_pointset::fem_on_pointset
fem_on_pointset()
Definition: fem_on_pointset.h:163
rheolef::fem_on_pointset_rep::evaluate
void evaluate(const geo_basic< T, M > &omega_K, const geo_element &K, const details::differentiate_option &gopt, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &value) const
Definition: fem_on_pointset.cc:454
rheolef::fem_on_pointset_rep::_pops
piola_on_pointset< T > _pops
Definition: fem_on_pointset.h:90
rheolef::reference_element::size_type
std::vector< int >::size_type size_type
Definition: reference_element.h:71
rheolef::fem_on_pointset_rep::initialize
void initialize(const basis_basic< T > &fem_basis, const piola_on_pointset< T > &pops)
Definition: fem_on_pointset.cc:31
rheolef::fem_on_pointset::get_piola_on_pointset
const piola_on_pointset< T > & get_piola_on_pointset() const
Definition: fem_on_pointset.h:139
rheolef::fem_on_pointset_rep::_bops
basis_on_pointset< T > _bops
Definition: fem_on_pointset.h:89
rheolef::details::differentiate_option::type
type
Definition: piola.h:42
rheolef::fem_on_pointset::evaluate
void evaluate(const geo_basic< T, M > &omega_K, const geo_element &K, const details::differentiate_option &gopt, Eigen::Matrix< Value, Eigen::Dynamic, Eigen::Dynamic > &value) const
Definition: fem_on_pointset.h:144