hllc_flux Subroutine

private pure subroutine hllc_flux(q_L, q_R, flux, gam)

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.

Arguments

Type IntentOptional 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