3 #include "limit_order.h"
9 static int default_order_table_tri[] =
11 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
12 17, 18, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
13 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
14 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
15 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20
19 static int default_order_table_quad[] =
21 1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15,
22 17, 17, 19, 19, 21, 21, 23, 23, 25, 25, 27, 27, 29, 29, 31, 31,
23 33, 33, 35, 35, 37, 37, 39, 39, 41, 41, 43, 43, 45, 45, 47, 47,
24 49, 49, 51, 51, 53, 53, 55, 55, 57, 57, 59, 59, 61, 61, 63, 63,
25 65, 65, 67, 67, 69, 69, 71, 71, 73, 73, 75, 75, 77, 77, 79, 79,
26 81, 81, 83, 83, 85, 85, 87, 87, 89, 89, 91, 91, 93, 93, 95, 95,
27 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99
30 static int default_order_table_quad[] =
32 1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15, 17,
33 17, 19, 19, 21, 21, 23, 23, 24, 24, 24, 24, 24, 24, 24,
34 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
35 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
36 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24
40 static int* g_order_table_quad = default_order_table_quad;
41 static int* g_order_table_tri = default_order_table_tri;
42 static bool warned_order =
false;
44 HERMES_API
int g_max_order;
49 if(n < 24)
throw Hermes::Exceptions::Exception(
"Hermes::Order limit tables must have at least 24 entries.");
50 g_order_table_tri = tri_table;
51 g_order_table_quad = quad_table;
54 HERMES_API
void update_limit_table(ElementMode2D mode)
56 g_max_order = g_quad_2d_std.get_max_order(mode);
69 #pragma omp critical (warn_oder)
74 logger.warn(
"Warning: Not enough integration rules for exact integration.");
80 HERMES_API
void limit_order(
int& o, ElementMode2D mode)
82 if(o > g_quad_2d_std.get_safe_max_order(mode))
84 o = g_quad_2d_std.get_safe_max_order(mode);
87 if(mode == HERMES_MODE_TRIANGLE)
88 o = g_order_table_tri[o];
90 o = g_order_table_quad[o];
93 HERMES_API
void limit_order_nowarn(
int& o, ElementMode2D mode)
95 if(o > g_quad_2d_std.get_safe_max_order(mode))
96 o = g_quad_2d_std.get_safe_max_order(mode);
97 if(mode == HERMES_MODE_TRIANGLE)
98 o = g_order_table_tri[o];
100 o = g_order_table_quad[o];