16 #ifndef __H2D_SHAPESET_H
17 #define __H2D_SHAPESET_H
19 #include "../global.h"
34 namespace RefinementSelectors
36 template<
typename Scalar>
class Selector;
37 template<
typename Scalar>
class POnlySelector;
38 template<
typename Scalar>
class HOnlySelector;
39 template<
typename Scalar>
class OptimumSelector;
40 template<
typename Scalar>
class ProjBasedSelector;
41 template<
typename Scalar>
class H1ProjBasedSelector;
42 template<
typename Scalar>
class L2ProjBasedSelector;
43 template<
typename Scalar>
class HcurlProjBasedSelector;
48 HERMES_HCURL_SPACE = 1,
49 HERMES_HDIV_SPACE = 2,
51 HERMES_INVALID_SPACE = -9999
86 class HERMES_API
Shapeset :
public Hermes::Mixins::Loggable
92 typedef double (*shape_fn_t)(double, double);
97 int get_order(
int index, ElementMode2D mode)
const;
102 int get_num_components()
const;
105 int get_max_order()
const;
108 virtual int get_max_index(ElementMode2D mode) = 0;
111 int get_vertex_index(
int vertex, ElementMode2D mode)
const;
116 int get_edge_index(
int edge,
int ori,
int order, ElementMode2D mode)
const;
119 virtual SpaceType get_space_type()
const = 0;
123 int* get_bubble_indices(
int order, ElementMode2D mode)
const;
126 int get_num_bubbles(
int order, ElementMode2D mode)
const;
130 int get_constrained_edge_index(
int edge,
int order,
int ori,
int part, ElementMode2D mode)
const;
134 double get_value(
int n,
int index,
double x,
double y,
int component, ElementMode2D mode);
136 double get_fn_value (
int index,
double x,
double y,
int component, ElementMode2D mode);
137 double get_dx_value (
int index,
double x,
double y,
int component, ElementMode2D mode);
138 double get_dy_value (
int index,
double x,
double y,
int component, ElementMode2D mode);
139 double get_dxx_value(
int index,
double x,
double y,
int component, ElementMode2D mode);
140 double get_dyy_value(
int index,
double x,
double y,
int component, ElementMode2D mode);
141 double get_dxy_value(
int index,
double x,
double y,
int component, ElementMode2D mode);
144 double2* get_ref_vertex(
int vertex, ElementMode2D mode);
147 virtual int get_id()
const = 0;
149 shape_fn_t*** shape_table[6];
151 int** vertex_indices;
153 int*** bubble_indices;
155 int** index_to_order;
190 double* calculate_constrained_edge_combination(
int order,
int part,
int ori, ElementMode2D mode);
196 double* get_constrained_edge_combination(
int order,
int part,
int ori,
int& nitems, ElementMode2D mode);
199 void free_constrained_edge_combinations();
203 double get_constrained_value(
int n,
int index,
double x,
double y,
int component, ElementMode2D mode);
206 template<
typename Scalar>
friend class Solution;
213 friend void check_leg_tri(
Shapeset* shapeset);
214 friend void check_gradleg_tri(
Shapeset* shapeset);
215 template<
typename Scalar>
friend class Form;
216 template<
typename Scalar>
friend class MatrixForm;
217 template<
typename Scalar>
friend class VectorForm;
218 template<
typename Scalar>
friend class Space;
219 template<
typename Scalar>
friend class H1Space;
220 template<
typename Scalar>
friend class L2Space;
221 template<
typename Scalar>
friend class HcurlSpace;
222 template<
typename Scalar>
friend class HdivSpace;