4compute_primitive_variables =
r"""
5 const auto irho = 1.0 / Q[Shortcuts::rho];
6 const auto u0 = Q[Shortcuts::rhoU + 0] * irho;
7 const auto u1 = Q[Shortcuts::rhoU + 1] * irho;
9 const auto u2 = Q[Shortcuts::rhoU + 2] * irho;
13 const auto uSq = u0 * u0 + u1 * u1 + u2 * u2;
14 const auto u_n = (normal == 0) ? u0 : (normal == 1) ? u1 : u2;
16 const auto uSq = u0 * u0 + u1 * u1;
17 const auto u_n = (normal == 0) ? u0 : u1;
20 const auto internalE = Q[Shortcuts::rhoE] - 0.5 * Q[Shortcuts::rho] * uSq;
21 const auto p = (GAMMA - 1.0) * internalE;
25 {compute_primitive_variables}
26 const auto speedOfSound = std::sqrt(GAMMA * p * irho);
27 auto result = std::fmax(0.0, std::fabs(u_n - speedOfSound));
28 result = std::fmax(result, std::fabs(u_n + speedOfSound));
31 compute_primitive_variables=compute_primitive_variables
35 {compute_primitive_variables}
37 F[Shortcuts::rho] = Q[Shortcuts::rhoU + normal];
39 F[Shortcuts::rhoU + 0] = Q[Shortcuts::rhoU + 0] * u_n;
40 F[Shortcuts::rhoU + 1] = Q[Shortcuts::rhoU + 1] * u_n;
42 F[Shortcuts::rhoU + 2] = Q[Shortcuts::rhoU + 2] * u_n;
45 F[Shortcuts::rhoU + normal] += p;
47 F[Shortcuts::rhoE] = (Q[Shortcuts::rhoE] + p) * u_n;
49 compute_primitive_variables=compute_primitive_variables
53 S[Shortcuts::rho] = 0.0;
54 S[Shortcuts::rhoU + 0] = 0.0;
55 S[Shortcuts::rhoU + 1] = -Q[Shortcuts::rho] * GRAVITY;
57 S[Shortcuts::rhoU + 2] = 0.0;
59 S[Shortcuts::rhoE] = -Q[Shortcuts::rhoU + 1] * GRAVITY;