16#ifndef Coloc_Operator_tools_included
17#define Coloc_Operator_tools_included
22inline void compute_hll_bounds(
const DoubleTab& vit_n,
const DoubleTab& c,
const int f,
const int el,
const int er,
const int nb_phases,
double& Sm,
double& Sp)
26 for (
int n = 0; n < nb_phases; n++)
28 const double un_l = vit_n(f, n);
29 const double un_r = vit_n(f, n + nb_phases);
30 const double c_l = c(el, n), c_r = c(er, n);
31 const double Sm_k = std::min(un_l - c_l, un_r - c_r);
32 const double Sp_k = std::max(un_l + c_l, un_r + c_r);
34 Sm = std::min(Sm, std::min(0.0, Sm_k));
35 Sp = std::max(Sp, std::max(0.0, Sp_k));
39inline double compute_rusanov_speed(
const DoubleTab& vit_n,
const DoubleTab& c,
const int f,
const int el,
const int er,
const int n,
const int nb_phases)
41 const double un_l = vit_n(f, n);
42 const double un_r = vit_n(f, n + nb_phases);
43 const double c_l = c(el, n), c_r = c(er, n);
44 double s = std::max(fabs(un_l - c_l), fabs(un_l + c_l));
46 s = std::max(s, std::max(fabs(un_r - c_r), fabs(un_r + c_r)));
50inline void compute_non_conservative_hll_left_bounds(
const DoubleTab& vit_n,
const DoubleTab& c,
const int f,
const int el,
const int er,
51 const int m,
const int n,
const int nb_phases,
double& Sm,
double& Sp,
double& un)
54 double un_l = vit_n(f, k);
55 double un_r = vit_n(f, k + nb_phases);
56 double c_l = c(el, k);
57 double c_r = c(er, k);
58 const double Sm1 = std::min(un_l - c_l, un_r - c_r);
59 const double Sp1 = std::max(un_l + c_l, un_r + c_r);
63 un_r = vit_n(f, k + nb_phases);
66 const double Sm2 = std::min(un_l - c_l, un_r - c_r);
67 const double Sp2 = std::max(un_l + c_l, un_r + c_r);
69 Sm = std::min(0.0, std::min(Sm1, Sm2));
70 Sp = std::max(0.0, std::max(Sp1, Sp2));
74inline void compute_non_conservative_hll_right_bounds(
const DoubleTab& vit_n,
const DoubleTab& c,
const int f,
const int el,
const int er,
75 const int m,
const int n,
const int nb_phases,
double& Sm,
double& Sp,
double& un)
78 double un_r = -vit_n(f, k);
79 double un_l = -vit_n(f, k + nb_phases);
80 double c_l = c(er, k);
81 double c_r = c(el, k);
82 const double Sm1 = std::min(un_l - c_l, un_r - c_r);
83 const double Sp1 = std::max(un_l + c_l, un_r + c_r);
87 un_l = -vit_n(f, k + nb_phases);
90 const double Sm2 = std::min(un_l - c_l, un_r - c_r);
91 const double Sp2 = std::max(un_l + c_l, un_r + c_r);
93 Sm = std::min(0.0, std::min(Sm1, Sm2));
94 Sp = std::max(0.0, std::max(Sp1, Sp2));