3 #include "limit_order.h"
9 static unsigned short 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 unsigned short 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 unsigned short 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 unsigned short* g_order_table_quad = default_order_table_quad;
41 static unsigned short* g_order_table_tri = default_order_table_tri;
42 static bool warned_order =
false;
44 HERMES_API
unsigned short g_max_order;
47 HERMES_API
void set_order_limit_table(
unsigned short* tri_table,
unsigned short* quad_table,
unsigned short n)
50 throw Hermes::Exceptions::Exception(
"Hermes::Order limit tables must have at least 24 entries.");
51 g_order_table_tri = tri_table;
52 g_order_table_quad = quad_table;
57 g_max_order = g_quad_2d_std.get_max_order(mode);
58 g_safe_max_order = g_quad_2d_std.get_safe_max_order(mode);
61 HERMES_API
void reset_warn_order()
68 if (HermesCommonApi.get_integral_param_value(Hermes::showInternalWarnings))
71 #pragma omp critical (warn_oder)
75 Hermes::Mixins::Loggable::Static::warn(
"Warning: Not enough integration rules for exact integration.");
83 if (o >= g_quad_2d_std.get_safe_max_order(mode))
85 o = g_quad_2d_std.get_safe_max_order(mode);
88 if (mode == HERMES_MODE_TRIANGLE)
89 o = g_order_table_tri[o];
91 o = g_order_table_quad[o];
94 HERMES_API
void limit_order_nowarn(
int& o,
ElementMode2D mode)
96 if (o > g_quad_2d_std.get_safe_max_order(mode))
97 o = g_quad_2d_std.get_safe_max_order(mode);
98 if (mode == HERMES_MODE_TRIANGLE)
99 o = g_order_table_tri[o];
101 o = g_order_table_quad[o];
HERMES_API void set_order_limit_table(int *tri_table, unsigned short *quad_table, unsigned short n)
can be called to set a custom order limiting table
Common definitions for Hermes2D.
HERMES_API unsigned short g_safe_max_order
limit_order is used in integrals
HERMES_API void warn_order()