31 const typename FSpec::Tprim &prim_l,
32 const typename FSpec::Tprim &prim_r,
33 const typename FSpec::Tvec &n) {
34 const auto cs_l = fspec.sound_speed(prim_l);
35 const auto cs_r = fspec.sound_speed(prim_r);
37 const auto vn_l = fspec.vn(prim_l, n);
38 const auto vn_r = fspec.vn(prim_r, n);
43 const auto S = sham::max((sham::abs(vn_l) + cs_l), (sham::abs(vn_r) + cs_r));
47 const auto f_l = fspec.flux(prim_l, n, vn_l);
48 const auto f_r = fspec.flux(prim_r, n, vn_r);
50 const auto cons_l = fspec.prim_to_cons(prim_l);
51 const auto cons_r = fspec.prim_to_cons(prim_r);
54 return 0.5 * ((f_l + f_r) - (cons_r - cons_l) * S);
constexpr FSpec::Tcons rusanov_flux(const FSpec &fspec, const typename FSpec::Tprim &prim_l, const typename FSpec::Tprim &prim_r, const typename FSpec::Tvec &n)
Rusanov flux across a face with unit normal n.