3 #include "element_to_refine.h"
9 namespace RefinementSelectors
11 template<
typename Scalar>
17 template<
typename Scalar>
20 refinement.split = H2D_REFINEMENT_H;
21 refinement.p[0] = refinement.p[1] = refinement.p[2] = refinement.p[3] = quad_order;
22 refinement.q[0] = refinement.q[1] = refinement.q[2] = refinement.q[3] = quad_order;
26 template<
typename Scalar>
29 if(suggested_quad_orders != NULL)
31 tgt_quad_orders[i] = suggested_quad_orders[i];
34 tgt_quad_orders[i] = orig_quad_order;
37 template<
typename Scalar>
40 return new POnlySelector(this->max_order, this->order_h_inc, this->order_v_inc);
43 template<
typename Scalar>
45 :
Selector<Scalar>(max_order), order_h_inc(order_h_inc), order_v_inc(order_v_inc)
48 throw Hermes::Exceptions::ValueException(
"horizontal increase", order_h_inc, 0);
50 throw Hermes::Exceptions::ValueException(
"vertical increase", order_v_inc, 0);
53 template<
typename Scalar>
56 refinement.split = H2D_REFINEMENT_P;
59 int max_allowed_order = this->max_order;
64 int order_h =
H2D_GET_H_ORDER(quad_order), order_v = H2D_GET_V_ORDER(quad_order);
65 int new_order_h = std::min(max_allowed_order, order_h + order_h_inc);
66 int new_order_v = std::min(max_allowed_order, order_v + order_v_inc);
67 if(element->is_triangle())
68 refinement.p[0] = refinement.q[0] = new_order_h;
70 refinement.p[0] = refinement.q[0] = H2D_MAKE_QUAD_ORDER(new_order_h, new_order_v);
73 if(new_order_h > order_h || new_order_v > order_v)
79 template<
typename Scalar>
82 if(suggested_quad_orders != NULL)
83 tgt_quad_orders[0] = suggested_quad_orders[0];
85 tgt_quad_orders[0] = orig_quad_order;
88 tgt_quad_orders[i] = 0;