split_contravariant_2d Subroutine

public subroutine split_contravariant_2d(q, smetric, scheme, gam, fp, fm)

Contravariant flux-vector splitting along a general metric/area vector smetric = S_xi or S_eta (size 2). Splits the CONTRAVARIANT flux Fhat = smetric(1)F + smetric(2)G (F,G physical Euler fluxes) into fp/fm with eigenvalues U, U, U +- c|S| where the contravariant velocity is U = smetric(1)u + smetric(2)v and |S| = norm2(smetric).

Realized by ROTATING the state into the metric-normal frame n = S/|S|, applying the proven axis split_flux_2d (dir=1, eigenvalues u_n -+ c), rotating the split fluxes back, and scaling by |S|. Because the rotation is orthogonal and |S| > 0, this is algebraically IDENTICAL to the metric-normal Steger-Warming/van-Leer/Lax-Friedrichs split (eigenvalues |S|*(u_n -+ c) = U -+ c|S|), so it inherits: * consistency fp + fm == Fhat (rotational invariance of the Euler flux); * axis reduction: with smetric=(s,0), s>0, n=(1,0) and the rotation is the identity, so the result is exactly s * split_flux_2d(...,dir=1,...). NOT pure: may reach steger_warming_split_2d (LAPACK) via split_flux_2d.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: q(neq2d)
real(kind=wp), intent(in) :: smetric(2)
character(len=*), intent(in) :: scheme
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: fp(neq2d)
real(kind=wp), intent(out) :: fm(neq2d)