33 const Vec b0 = 60.0 * values[
k] - 24.0 * fv_r - 36.0 * fv_l + 3.0 * (fd_r - 3.0 * fd_l);
34 const Vec b1 = -360.0 * values[
k] + 36.0 * fd_l - 24.0 * fd_r + 168.0 * fv_r + 192.0 * fv_l;
35 const Vec b2 = 360.0 * values[
k] + 30.0 * (fd_r - fd_l) - 180.0 * (fv_l + fv_r);
41 const Vec val_to_sqrt = b1 * b1 - 4 * b0 * b2;
51 const Vec sqrt_val =
select(val_to_sqrt < 0.0,
56 const Vec root1 = (-b1 + sqrt_val) / (2 * b2);
57 const Vec root2 = (-b1 - sqrt_val) / (2 * b2);
60 const Vec plm_slope_l = 2.0 * (values[
k] - values[
k - 1]);
61 const Vec plm_slope_r = 2.0 * (values[
k + 1] - values[
k]);
62 const Vec slope_sign = plm_slope_l + plm_slope_r;
66 const Vec c2 = b1 / 2.0;
67 const Vec c3 = b2 / 3.0;
72 const Vec root1_slope =
select(root1 >= 0.0 && root1 <= 1.0,
73 c0 + root1 * ( c1 + root1 * (c2 + root1 * c3 ) ),
75 const Vec root2_slope =
select(root2 >= 0.0 && root2 <= 1.0,
76 c0 + root2 * ( c1 + root2 * (c2 + root2 * c3 ) ),
78 const Vecb fixInflexion = root1_slope * slope_sign < 0.0 || root2_slope * slope_sign < 0.0;
85 Realf slope_signa[VECL];
86 values[
k].store(valuesa);
91 slope_sign.store(slope_signa);
96 for(uint
i = 0;
i < VECL;
i++) {
99 if(fabs(plm_slope_l[
i]) <= fabs(plm_slope_r[
i])) {
101 fda_l[
i] = 1.0 / 3.0 * ( 10 * valuesa[
i] - 2.0 * fva_r[
i] - 8.0 * fva_l[
i]);
102 fda_r[
i] = -10.0 * valuesa[
i] + 6.0 * fva_r[
i] + 4.0 * fva_l[
i];
104 if (slope_signa[
i] * fda_l[
i] < 0) {
106 fva_r[
i] = 5 * valuesa[
i] - 4 * fva_l[
i];
107 fda_r[
i] = 20 * (valuesa[
i] - fva_l[
i]);
108 }
else if (slope_signa[
i] * fda_r[
i] < 0) {
110 fva_l[
i] = 0.5 * (5 * valuesa[
i] - 3 * fva_r[
i]);
111 fda_l[
i] = 10.0 / 3.0 * (-valuesa[
i] + fva_r[
i]);
115 fda_l[
i] = 10.0 * valuesa[
i] - 6.0 * fva_l[
i] - 4.0 * fva_r[
i];
116 fda_r[
i] = 1.0 / 3.0 * ( - 10.0 * valuesa[
i] + 2 * fva_l[
i] + 8 * fva_r[
i]);
118 if (slope_signa[
i] * fda_l[
i] < 0) {
120 fva_r[
i] = 0.5 * ( 5 * valuesa[
i] - 3 * fva_l[
i]);
121 fda_r[
i] = 10.0 / 3.0 * (valuesa[
i] - fva_l[
i]);
122 }
else if (slope_signa[
i] * fda_r[
i] < 0) {
124 fva_l[
i] = 5 * valuesa[
i] - 4 * fva_r[
i];
125 fda_l[
i] = 20.0 * ( - valuesa[
i] + fva_r[
i]);
159 a[2] = 10.0 * values[
k] - 4.0 * fv_r - 6.0 * fv_l + 0.5 * (fd_r - 3 * fd_l);
160 a[3] = -15.0 * values[
k] + 1.5 * fd_l - fd_r + 7.0 * fv_r + 8 * fv_l;
161 a[4] = 6.0 * values[
k] + 0.5 * (fd_r - fd_l) - 3.0 * (fv_l + fv_r);
static void filter_pqm_monotonicity(const Vec *__restrict__ values, uint k, Vec &fv_l, Vec &fv_r, Vec &fd_l, Vec &fd_r)
void compute_filtered_face_values_derivatives(const Vec *const values, const uint k, const face_estimate_order order, Vec &fv_l, Vec &fv_r, Vec &fd_l, Vec &fd_r, const Realf threshold)