euler_riemann_2d Module

Q = (rho, rhou, rhov, E). For a face with normal in direction dir (1=x, 2=y), normal-momentum index mn and tangential mt: dir=1 -> mn=2 (rhou), mt=3 (rhov); dir=2 -> mn=3 (rhov), mt=2 (rhou). Pressure uses BOTH velocity components (full KE) -- this is why the 3-component 1D solvers cannot be reused directly.



Subroutines

public pure subroutine wall_flux_2d_normal(q, nrm, gam, flux)

Inviscid solid-wall (no-penetration) face flux through unit normal nrm. At a solid wall v.n = 0, so the Euler flux collapses to the pressure term: F = [ 0, pnx, pny, 0 ], with p the interior-side pressure and (nx,ny) the boundary-face normal. Mass and energy flux are EXACTLY zero by construction (a "weak"/pressure wall), so no spurious mass crosses the wall and no spurious entropy is generated by an acoustic over-pressure -- unlike a ghost-reflection wall, whose Riemann star pressure carries an O(rhoc|v_n|) error wherever the reconstructed interior normal velocity is non-zero (always, on a curved wall). q is the interior-side (reconstructed) conserved state; gam the ratio of specific heats. nrm need not be normalised in sign: the residual's +xi/+eta divergence orientation makes the resulting wall pressure force act into the domain at both min and max edges.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: q(neq2d)
real(kind=wp), intent(in) :: nrm(2)
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: flux(neq2d)

private pure subroutine prim_split(q, dir, gam, rho, un, ut, p, c, mn, mt)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: q(neq2d)
integer, intent(in) :: dir
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: rho
real(kind=wp), intent(out) :: un
real(kind=wp), intent(out) :: ut
real(kind=wp), intent(out) :: p
real(kind=wp), intent(out) :: c
integer, intent(out) :: mn
integer, intent(out) :: mt

private pure subroutine normal_phys_flux(q, dir, gam, f)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: q(neq2d)
integer, intent(in) :: dir
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: f(neq2d)

public subroutine face_flux_2d(qL, qR, dir, scheme, gam, flux)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: qL(neq2d)
real(kind=wp), intent(in) :: qR(neq2d)
integer, intent(in) :: dir
character(len=*), intent(in) :: scheme
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: flux(neq2d)

public subroutine face_flux_2d_normal(qL, qR, nrm, scheme, gam, flux)

Face flux through an arbitrary UNIT normal nrm=(nx,ny). Rotates the conserved momentum into the face frame, reuses the axis solver (dir=1), then rotates the momentum flux back to (x,y). nrm must be a unit vector.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: qL(neq2d)
real(kind=wp), intent(in) :: qR(neq2d)
real(kind=wp), intent(in) :: nrm(2)
character(len=*), intent(in) :: scheme
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: flux(neq2d)

private pure subroutine rusanov_flux_2d(qL, qR, dir, gam, flux)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: qL(neq2d)
real(kind=wp), intent(in) :: qR(neq2d)
integer, intent(in) :: dir
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: flux(neq2d)

private pure subroutine hllc_flux_2d(qL, qR, dir, gam, flux)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: qL(neq2d)
real(kind=wp), intent(in) :: qR(neq2d)
integer, intent(in) :: dir
real(kind=wp), intent(in) :: gam
real(kind=wp), intent(out) :: flux(neq2d)