HLLC approximate Riemann solver with contact-wave restoration.
Extends HLL by including the contact/shear wave at speed S*, yielding sharper resolution of contact discontinuities and shear layers.
Uses the same Einfeldt wave-speed estimates as HLL: S_L = min(u_L - c_L, ũ - c̃), S_R = max(u_R + c_R, ũ + c̃)
Contact speed: S* = (p_R - p_L + ρ_L u_L (S_L - u_L) - ρ_R u_R (S_R - u_R)) / (ρ_L (S_L - u_L) - ρ_R (S_R - u_R))
Intermediate state (K = L or R): U_K = ρ_K (S_K - u_K)/(S_K - S) · [1, S, E_K/ρ_K + (S-u_K)(S* + p_K/(ρ_K(S_K-u_K)))]
Numerical flux: F_L if S_L ≥ 0 F_L + S_L (U_L - Q_L) if S_L ≤ 0 ≤ S F_R + S_R (U_R - Q_R) if S ≤ 0 ≤ S_R F_R if S_R ≤ 0
See Toro, Spruce & Speares (1994), Shock Waves 4, 25–34.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | q_L(:) | |||
| real(kind=wp), | intent(in) | :: | q_R(:) | |||
| real(kind=wp), | intent(out) | :: | flux(:) | |||
| real(kind=wp), | intent(in) | :: | gam |
Ratio of specific heats |