reconflux_muscl_llf_prim Subroutine

private subroutine reconflux_muscl_llf_prim(u, xlocC, flux_dim, flux, typelim)

MUSCL (primitive-variable) reconstruction with slope limiter; LLF/Rusanov numerical flux at faces. Robust and diffusive; uses local max wavespeed for upwinding. Adaptive diffusion (Rempel et al. 2009) is compiled in only when FLUX_AD is defined.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: u(nw_phys,5)
real(kind=dp), intent(in) :: xlocC(1:ndim,2)
integer, intent(in) :: flux_dim
real(kind=dp), intent(out) :: flux(nw_flux,2)
integer, intent(in) :: typelim

Calls

proc~~reconflux_muscl_llf_prim~4~~CallsGraph proc~reconflux_muscl_llf_prim~4 reconflux_muscl_llf_prim proc~muscl_reconstruct_prim~4 muscl_reconstruct_prim proc~reconflux_muscl_llf_prim~4->proc~muscl_reconstruct_prim~4 proc~riemann_llf_prim~4 riemann_llf_prim proc~reconflux_muscl_llf_prim~4->proc~riemann_llf_prim~4 proc~fix_prim_state~4 fix_prim_state proc~muscl_reconstruct_prim~4->proc~fix_prim_state~4 proc~koren~4 koren proc~muscl_reconstruct_prim~4->proc~koren~4 proc~mcbeta~4 mcbeta proc~muscl_reconstruct_prim~4->proc~mcbeta~4 proc~minmod~4 minmod proc~muscl_reconstruct_prim~4->proc~minmod~4 proc~vanleer~4 vanleer proc~muscl_reconstruct_prim~4->proc~vanleer~4 proc~get_cmax~7 get_cmax proc~riemann_llf_prim~4->proc~get_cmax~7 proc~get_flux~4 get_flux proc~riemann_llf_prim~4->proc~get_flux~4 proc~to_conservative~8 to_conservative proc~riemann_llf_prim~4->proc~to_conservative~8

Called by

proc~~reconflux_muscl_llf_prim~4~~CalledByGraph proc~reconflux_muscl_llf_prim~4 reconflux_muscl_llf_prim proc~finite_volume_local_muscl_llf~4 finite_volume_local_muscl_llf proc~finite_volume_local_muscl_llf~4->proc~reconflux_muscl_llf_prim~4 proc~finite_volume_local~4 finite_volume_local proc~finite_volume_local~4->proc~finite_volume_local_muscl_llf~4

Source Code

  subroutine reconflux_muscl_llf_prim(u, xlocC, flux_dim, flux, typelim)
    
    real(dp), intent(in)  :: u(nw_phys, 5)
    real(dp), intent(in)  :: xlocC(1:ndim, 2)
    integer, intent(in)   :: flux_dim, typelim
    real(dp), intent(out) :: flux(nw_flux, 2)

    real(dp) :: uL(nw_phys,2), uR(nw_phys,2)
    integer  :: iface
    real(dp) :: phi(nw_flux,2)
    real(dp) :: delta_rc, delta_ct, phi_v
    integer  :: iw

    call muscl_reconstruct_prim(u, typelim, uL, uR)

    ! Rempel et al. (2009): reduce dissipation where reconstruction and cell-centre agree in sign
    phi = 1.0_dp
    do iface = 1, 2
      do iw = 1, nw_flux
        delta_rc = uR(iw,iface) - uL(iw,iface)
        delta_ct = u(iw, iface+2) - u(iw, iface+1)
        if (delta_rc * delta_ct > 1.0e-18_dp) then
          phi_v = flux_ad_scale * delta_rc**2 / (delta_ct**2 + 1.0e-18_dp)
          phi(iw,iface) = max(flux_ad_min, min(phi_v, 1.0_dp))
        end if
      end do
    end do

    do iface = 1, 2
      call riemann_llf_prim(uL(:,iface), uR(:,iface), xlocC(:,iface), flux_dim, flux(:,iface), phi(:,iface))
    end do


  end subroutine reconflux_muscl_llf_prim