21 #ifndef __H2D_LINEARIZER_SUPPORT_H
22 #define __H2D_LINEARIZER_SUPPORT_H
25 #include "../quadrature/quad_all.h"
33 const double HERMES_EPS_LOW = 0.007;
34 const double HERMES_EPS_NORMAL = 0.0004;
35 const double HERMES_EPS_HIGH = 0.0001;
36 const double HERMES_EPS_VERYHIGH = 0.000002;
47 extern double3 lin_pts_0_quad[];
49 extern double3 lin_pts_1_tri[12];
51 extern double3 lin_pts_1_quad[21];
53 extern int quad_indices[9][5];
55 extern int tri_indices[5][3];
57 extern int lin_np_tri[2];
58 extern int lin_np_quad[2];
59 extern int* lin_np[2];
61 extern double3* lin_tables_tri[2];
62 extern double3* lin_tables_quad[2];
63 extern double3** lin_tables[2];
75 class HERMES_API
LinearizerBase :
public Hermes::Mixins::TimeMeasurable,
public Hermes::Mixins::Loggable
78 void set_max_absolute_value(
double max_abs);
80 double get_min_value()
const;
81 double get_max_value()
const;
83 void lock_data()
const;
84 void unlock_data()
const;
86 int3* get_triangles();
87 int* get_triangle_markers();
88 int get_num_triangles();
90 int* get_edge_markers();
95 virtual bool is_empty();
104 void process_edge(
int iv1,
int iv2,
int marker);
110 void regularize_triangle(
int iv0,
int iv1,
int iv2,
int mid0,
int mid1,
int mid2,
int marker);
126 double min_val, max_val;
130 int peek_vertex(
int p1,
int p2);
132 void add_edge(
int iv1,
int iv2,
int marker);
133 void add_triangle(
int iv0,
int iv1,
int iv2,
int marker);
135 int hash(
int p1,
int p2);
137 mutable pthread_mutex_t data_mutex;
139 Hermes::Exceptions::Exception* caughtException;
142 static void calc_aabb(
double* x,
double* y,
int stride,
int num,
double* min_x,
double* max_x,
double* min_y,
double* max_y);
150 const int LIN_MAX_LEVEL = 6;