Rheolef  7.1
an efficient C++ finite element environment
fekete.icc
Go to the documentation of this file.
1 #ifndef _RHEOLEF_FEKETE_ICC
2 #define _RHEOLEF_FEKETE_ICC
23 //
24 // compute the Fekete point set (see BriSomVia-2012)
25 //
26 // author: Pierre.Saramito@imag.fr
27 //
28 // date: 2 october 2017
29 //
30 #include "warburton.icc"
31 
32 namespace rheolef {
33 
34 template<class T>
35 void set_simplex_leb_gll (size_t degree, Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& pts);
36 
37 // ---------------------------------------------------------------------------
38 // all cases
39 // ---------------------------------------------------------------------------
40 template<class T>
41 void
43  reference_element hat_K,
44  size_t degree,
45  Eigen::Matrix<point_basic<T>,Eigen::Dynamic,1>& hat_xnod,
46  bool map_on_reference_element = true)
47 {
48  hat_xnod.resize (reference_element::n_node(hat_K.variant(), degree));
49  if (degree == 0) {
50  reference_element_barycenter (hat_K, hat_xnod[0]);
51  return;
52  }
53  switch (hat_K.variant()) {
55  set_simplex_leb_gll (degree, hat_xnod); break;
56  // ------------------------------------------------------------------
57  // others are provided with Warburton or Legendre node tensor product
58  // ------------------------------------------------------------------
60  hat_xnod [0] = point_basic<T> (T(0)); break;
62  warburton_e (degree, hat_xnod, map_on_reference_element); break;
64  warburton_q (degree, hat_xnod, map_on_reference_element); break;
66  warburton_H (degree, hat_xnod, map_on_reference_element); break;
67  case reference_element::P: // TODO: as triangle*Legendre_edge
68  warburton_P (degree, hat_xnod, map_on_reference_element); break;
69  case reference_element::T: // TODO: how to compute nodes ?
70  warburton_T (degree, hat_xnod, map_on_reference_element); break;
71  default: error_macro ("unexpected element type `"<<hat_K.name()<<"'");
72  }
73 }
74 
75 } // namespace rheolef
76 #endif // _RHEOLEF_WARBURTON_ICC
see the reference_element page for the full documentation
static const variant_type H
static const variant_type q
static const variant_type e
static const variant_type p
variant_type variant() const
static size_type n_node(variant_type variant, size_type order)
static const variant_type T
static const variant_type P
static const variant_type t
point_basic< T >
Definition: piola_fem.h:135
Expr1::float_type T
Definition: field_expr.h:261
This file is part of Rheolef.
void warburton_H(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &x, bool dummy=true)
Definition: warburton.icc:91
void pointset_lagrange_fekete(reference_element hat_K, size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &hat_xnod, bool map_on_reference_element=true)
Definition: fekete.icc:42
void warburton_q(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &x, bool dummy=true)
Definition: warburton.icc:73
void warburton_P(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &x, bool map_on_reference_element=true)
Definition: warburton.icc:276
void reference_element_barycenter(reference_element hat_K, point_basic< T > &c)
void warburton_T(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &x, bool map_on_reference_element=true)
Definition: warburton.icc:443
void warburton_e(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &x, bool map_on_reference_element=true)
Definition: warburton.icc:45
void set_simplex_leb_gll(size_t degree, Eigen::Matrix< point_basic< T >, Eigen::Dynamic, 1 > &pts)