Rheolef  7.1
an efficient C++ finite element environment
P0.cc
Go to the documentation of this file.
1 // file automatically generated by "../../../rheolef/fem/lib/basis_symbolic_cxx.cc"
22 #include "P0.h"
23 #include "piola_fem_lagrange.h"
24 namespace rheolef {
25 using namespace std;
26 template<class T>
27 class basis_P0_p {
28 public:
29  typedef basis_rep<T> base;
30  typedef typename base::size_type size_type;
31  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
32  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
33  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
34 };
35 template<class T>
36 class basis_P0_e {
37 public:
38  typedef basis_rep<T> base;
39  typedef typename base::size_type size_type;
40  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
41  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
42  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
43 };
44 template<class T>
45 class basis_P0_t {
46 public:
47  typedef basis_rep<T> base;
48  typedef typename base::size_type size_type;
49  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
50  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
51  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
52 };
53 template<class T>
54 class basis_P0_q {
55 public:
56  typedef basis_rep<T> base;
57  typedef typename base::size_type size_type;
58  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
59  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
60  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
61 };
62 template<class T>
63 class basis_P0_T {
64 public:
65  typedef basis_rep<T> base;
66  typedef typename base::size_type size_type;
67  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
68  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
69  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
70 };
71 template<class T>
72 class basis_P0_P {
73 public:
74  typedef basis_rep<T> base;
75  typedef typename base::size_type size_type;
76  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
77  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
78  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
79 };
80 template<class T>
81 class basis_P0_H {
82 public:
83  typedef basis_rep<T> base;
84  typedef typename base::size_type size_type;
85  static void evaluate (const point_basic<T>& hat_x, Eigen::Matrix<T,Eigen::Dynamic,1>& values);
86  static void grad_evaluate (const point_basic<T>& hat_x, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values);
87  static void hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>&);
88 };
89 template<class T>
90 void
92  const point_basic<T>& hat_x,
93  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
94 {
95  values.resize(1);
96  values[0] = 1.0;
97 }
98 template<class T>
99 void
100 basis_P0_p<T>::grad_evaluate (
101  const point_basic<T>& hat_x,
102  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
103 {
104  values.resize(1);
105 }
106 template<class T>
107 void
108 basis_P0_p<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
109 {
110  x.resize(1);
111  x[0] = point_basic<T>();
112 }
113 template<class T>
114 void
116  const point_basic<T>& hat_x,
117  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
118 {
119  values.resize(1);
120  values[0] = 1.0;
121 }
122 template<class T>
123 void
124 basis_P0_e<T>::grad_evaluate (
125  const point_basic<T>& hat_x,
126  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
127 {
128  values.resize(1);
129  values[0][0] = 0.0;
130 }
131 template<class T>
132 void
133 basis_P0_e<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
134 {
135  x.resize(1);
136  x[0] = point_basic<T>(5.0000000000000000e-01);
137 }
138 template<class T>
139 void
141  const point_basic<T>& hat_x,
142  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
143 {
144  values.resize(1);
145  values[0] = 1.0;
146 }
147 template<class T>
148 void
149 basis_P0_t<T>::grad_evaluate (
150  const point_basic<T>& hat_x,
151  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
152 {
153  values.resize(1);
154  values[0][0] = 0.0;
155  values[0][1] = 0.0;
156 }
157 template<class T>
158 void
159 basis_P0_t<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
160 {
161  x.resize(1);
162  x[0] = point_basic<T>((1.0/3.0), (1.0/3.0));
163 }
164 template<class T>
165 void
167  const point_basic<T>& hat_x,
168  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
169 {
170  values.resize(1);
171  values[0] = 1.0;
172 }
173 template<class T>
174 void
175 basis_P0_q<T>::grad_evaluate (
176  const point_basic<T>& hat_x,
177  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
178 {
179  values.resize(1);
180  values[0][0] = 0.0;
181  values[0][1] = 0.0;
182 }
183 template<class T>
184 void
185 basis_P0_q<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
186 {
187  x.resize(1);
188  x[0] = point_basic<T>(0.0, 0.0);
189 }
190 template<class T>
191 void
193  const point_basic<T>& hat_x,
194  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
195 {
196  values.resize(1);
197  values[0] = 1.0;
198 }
199 template<class T>
200 void
201 basis_P0_T<T>::grad_evaluate (
202  const point_basic<T>& hat_x,
203  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
204 {
205  values.resize(1);
206  values[0][0] = 0.0;
207  values[0][1] = 0.0;
208  values[0][2] = 0.0;
209 }
210 template<class T>
211 void
212 basis_P0_T<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
213 {
214  x.resize(1);
215  x[0] = point_basic<T>(2.5000000000000000e-01, 2.5000000000000000e-01, 2.5000000000000000e-01);
216 }
217 template<class T>
218 void
220  const point_basic<T>& hat_x,
221  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
222 {
223  values.resize(1);
224  values[0] = 1.0;
225 }
226 template<class T>
227 void
228 basis_P0_P<T>::grad_evaluate (
229  const point_basic<T>& hat_x,
230  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
231 {
232  values.resize(1);
233  values[0][0] = 0.0;
234  values[0][1] = 0.0;
235  values[0][2] = 0.0;
236 }
237 template<class T>
238 void
239 basis_P0_P<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
240 {
241  x.resize(1);
242  x[0] = point_basic<T>((1.0/3.0), (1.0/3.0), 0.0);
243 }
244 template<class T>
245 void
247  const point_basic<T>& hat_x,
248  Eigen::Matrix<T,Eigen::Dynamic,1>& values)
249 {
250  values.resize(1);
251  values[0] = 1.0;
252 }
253 template<class T>
254 void
255 basis_P0_H<T>::grad_evaluate (
256  const point_basic<T>& hat_x,
257  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values)
258 {
259  values.resize(1);
260  values[0][0] = 0.0;
261  values[0][1] = 0.0;
262  values[0][2] = 0.0;
263 }
264 template<class T>
265 void
266 basis_P0_H<T>::hat_node (Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& x)
267 {
268  x.resize(1);
269  x[0] = point_basic<T>(0.0, 0.0, 0.0);
270 }
271 template<class T>
273  : base(basis_option()), _hat_node()
274 {
277  base::_name = "P0";
278  base::_piola_fem.piola_fem<T>::base::operator= (new_macro(piola_fem_lagrange<T>));
279 }
280 template<class T>
282 {
283 }
284 template<class T>
285 typename basis_P0<T>::size_type
287 {
288  return 0;
289 }
290 template<class T>
291 void
293  reference_element hat_K,
294  const point_basic<T>& hat_x,
295  Eigen::Matrix<T,Eigen::Dynamic,1>& values) const
296 {
297  switch (hat_K.variant()) {
298  case reference_element::p: {
299  return basis_P0_p<T>::evaluate (hat_x, values);
300  }
301  case reference_element::e: {
302  return basis_P0_e<T>::evaluate (hat_x, values);
303  }
304  case reference_element::t: {
305  return basis_P0_t<T>::evaluate (hat_x, values);
306  }
307  case reference_element::q: {
308  return basis_P0_q<T>::evaluate (hat_x, values);
309  }
310  case reference_element::T: {
311  return basis_P0_T<T>::evaluate (hat_x, values);
312  }
313  case reference_element::P: {
314  return basis_P0_P<T>::evaluate (hat_x, values);
315  }
316  case reference_element::H: {
317  return basis_P0_H<T>::evaluate (hat_x, values);
318  }
319  default : {
320  error_macro ("evaluate: unsupported `" << hat_K.name() << "' element type");
321  }
322  }
323 }
324 template<class T>
325 void
327  reference_element hat_K,
328  const point_basic<T>& hat_x,
329  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& values) const
330 {
331  switch (hat_K.variant()) {
332  case reference_element::p: {
333  return basis_P0_p<T>::grad_evaluate (hat_x, values);
334  }
335  case reference_element::e: {
336  return basis_P0_e<T>::grad_evaluate (hat_x, values);
337  }
338  case reference_element::t: {
339  return basis_P0_t<T>::grad_evaluate (hat_x, values);
340  }
341  case reference_element::q: {
342  return basis_P0_q<T>::grad_evaluate (hat_x, values);
343  }
344  case reference_element::T: {
345  return basis_P0_T<T>::grad_evaluate (hat_x, values);
346  }
347  case reference_element::P: {
348  return basis_P0_P<T>::grad_evaluate (hat_x, values);
349  }
350  case reference_element::H: {
351  return basis_P0_H<T>::grad_evaluate (hat_x, values);
352  }
353  default : {
354  error_macro ("grad_evaluate: unsupported `" << hat_K.name() << "' element type");
355  }
356  }
357 }
358 template<class T>
359 void
361  reference_element hat_K,
362  const Eigen::Matrix<T,Eigen::Dynamic,1>& f_xnod,
363  Eigen::Matrix<T,Eigen::Dynamic,1>& dof) const
364 {
365  dof = f_xnod;
366 }
367 template<class T>
368 void
370 {
372  0,
373  base::is_continuous(),
374  base::_ndof_on_subgeo,
375  base::_nnod_on_subgeo,
376  base::_first_idof_by_dimension,
377  base::_first_inod_by_dimension);
378 }
379 template<class T>
380 void
382  reference_element hat_K) const
383 {
384  switch (hat_K.variant()) {
385  case reference_element::p: {
386  return basis_P0_p<T>::hat_node (_hat_node[hat_K.variant()]);
387  }
388  case reference_element::e: {
389  return basis_P0_e<T>::hat_node (_hat_node[hat_K.variant()]);
390  }
391  case reference_element::t: {
392  return basis_P0_t<T>::hat_node (_hat_node[hat_K.variant()]);
393  }
394  case reference_element::q: {
395  return basis_P0_q<T>::hat_node (_hat_node[hat_K.variant()]);
396  }
397  case reference_element::T: {
398  return basis_P0_T<T>::hat_node (_hat_node[hat_K.variant()]);
399  }
400  case reference_element::P: {
401  return basis_P0_P<T>::hat_node (_hat_node[hat_K.variant()]);
402  }
403  case reference_element::H: {
404  return basis_P0_H<T>::hat_node (_hat_node[hat_K.variant()]);
405  }
406  default : {
407  error_macro ("hat_node: unsupported `" << hat_K.name() << "' element type");
408  }
409  }
410 }
411 // instantiation in library:
412 template class basis_P0<Float>;
413 } // namespace rheolef
rheolef::basis_P0::evaluate
void evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< T, Eigen::Dynamic, 1 > &values) const
Definition: P0.cc:292
rheolef::reference_element::e
static const variant_type e
Definition: reference_element.h:76
rheolef::reference_element::H
static const variant_type H
Definition: reference_element.h:81
rheolef::point_basic
Definition: point.h:87
rheolef::piola_fem_lagrange
Definition: piola_fem_lagrange.h:65
rheolef::basis_P0::_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: P0.cc:360
rheolef::reference_element::T
static const variant_type T
Definition: reference_element.h:79
rheolef::basis_P0::_initialize_data
void _initialize_data(reference_element hat_K) const
Definition: P0.cc:381
rheolef::size_type
size_t size_type
Definition: basis_get.cc:76
rheolef::basis_option
see the basis_option page for the full documentation
Definition: basis_option.h:93
rheolef::basis_P0::degree
size_type degree() const
Definition: P0.cc:286
rheolef::basis_P0::grad_evaluate
void grad_evaluate(reference_element hat_K, const point_basic< T > &hat_x, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &values) const
Definition: P0.cc:326
rheolef::reference_element
see the reference_element page for the full documentation
Definition: reference_element.h:66
rheolef::basis_P0::size_type
base::size_type size_type
Definition: P0.h:34
rheolef::basis_rep::_piola_fem
piola_fem< T > _piola_fem
Definition: basis.h:394
rheolef::basis_P0
Definition: P0.h:31
rheolef::reference_element::name
char name() const
Definition: reference_element.h:100
rheolef::basis_P0::_initialize_cstor_sizes
void _initialize_cstor_sizes() const
Definition: P0.cc:369
rheolef::reference_element::variant
variant_type variant() const
Definition: reference_element.h:99
rheolef::basis_rep::_sopt
basis_option _sopt
Definition: basis.h:393
rheolef::basis_rep::_name
std::string _name
Definition: basis.h:392
rheolef::basis_option::set_continuous
void set_continuous(bool c=true)
Definition: basis_option.h:269
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::basis_P0::~basis_P0
~basis_P0()
Definition: P0.cc:281
rheolef::basis_fem_Pk_lagrange::initialize_local_first
static void initialize_local_first(size_type k, bool is_continuous, std::array< std::array< size_type, reference_element::max_variant >, 4 > &ndof_on_subgeo, 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)
Definition: basis_fem_Pk_lagrange.cc:41
error_macro
#define error_macro(message)
Definition: dis_macros.h:49
rheolef::point_basic< T >
point_basic< T >
Definition: piola_fem.h:135
rheolef::reference_element::p
static const variant_type p
Definition: reference_element.h:75
rheolef::reference_element::q
static const variant_type q
Definition: reference_element.h:78
rheolef::reference_element::P
static const variant_type P
Definition: reference_element.h:80
rheolef::reference_element::t
static const variant_type t
Definition: reference_element.h:77
size_type
field::size_type size_type
Definition: branch.cc:425
rheolef::basis_P0::basis_P0
basis_P0()
Definition: P0.cc:272
piola_fem_lagrange.h
rheolef::evaluate
void evaluate(const geo_basic< float_type, M > &omega_K, const geo_element &K, Eigen::Matrix< Result, Eigen::Dynamic, 1 > &value) const
Definition: field_expr_recursive.h:873
rheolef::basis_rep
Definition: basis.h:209
T
Expr1::float_type T
Definition: field_expr.h:261
P0.h