get_flux Subroutine

private subroutine get_flux(u, xC, flux_dim, flux)

Uses

  • proc~~get_flux~3~~UsesGraph proc~get_flux~3 get_flux module~mod_global_parameters mod_global_parameters proc~get_flux~3->module~mod_global_parameters module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Arguments

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

Calls

proc~~get_flux~3~~CallsGraph proc~get_flux~3 get_flux tracer tracer proc~get_flux~3->tracer

Called by

proc~~get_flux~3~~CalledByGraph proc~get_flux~3 get_flux proc~riemann_hll_prim~3 riemann_hll_prim proc~riemann_hll_prim~3->proc~get_flux~3 proc~riemann_hllc_prim~3 riemann_hllc_prim proc~riemann_hllc_prim~3->proc~get_flux~3 proc~riemann_llf_prim~3 riemann_llf_prim proc~riemann_llf_prim~3->proc~get_flux~3 proc~reconflux_muscl_hll_prim~3 reconflux_muscl_hll_prim proc~reconflux_muscl_hll_prim~3->proc~riemann_hll_prim~3 proc~reconflux_muscl_hllc_prim~3 reconflux_muscl_hllc_prim proc~reconflux_muscl_hllc_prim~3->proc~riemann_hllc_prim~3 proc~reconflux_muscl_llf_prim~3 reconflux_muscl_llf_prim proc~reconflux_muscl_llf_prim~3->proc~riemann_llf_prim~3 proc~finite_volume_local_muscl_hllc~3 finite_volume_local_muscl_hllc proc~finite_volume_local_muscl_hllc~3->proc~reconflux_muscl_hllc_prim~3 proc~finite_volume_local_muscl_hll~3 finite_volume_local_muscl_hll proc~finite_volume_local_muscl_hll~3->proc~reconflux_muscl_hll_prim~3 proc~finite_volume_local_muscl_llf~3 finite_volume_local_muscl_llf proc~finite_volume_local_muscl_llf~3->proc~reconflux_muscl_llf_prim~3 proc~finite_volume_local~3 finite_volume_local proc~finite_volume_local~3->proc~finite_volume_local_muscl_hllc~3 proc~finite_volume_local~3->proc~finite_volume_local_muscl_hll~3 proc~finite_volume_local~3->proc~finite_volume_local_muscl_llf~3

Source Code

  subroutine get_flux(u, xC, flux_dim, flux)
    use mod_global_parameters, only: cmax_global
    use mod_global_parameters, only: smalldouble
    
    real(dp), intent(in)  :: u(nw_phys)
    real(dp), intent(in)  :: xC(1:ndim)
    integer, intent(in)   :: flux_dim
    real(dp), intent(out) :: flux(nw_flux)
    real(dp)              :: ptotal

    ! Hyperbolic TC field geometry


    ! Density flux
    flux(iw_rho)=u(iw_rho)*u(iw_mom(flux_dim))

    ! Momentum flux with pressure term
    flux(iw_mom(1))=u(iw_rho)*u(iw_mom(1))*u(iw_mom(flux_dim))-&
      u(iw_mag(flux_dim))*u(iw_mag(1))
    flux(iw_mom(2))=u(iw_rho)*u(iw_mom(2))*u(iw_mom(flux_dim))-&
      u(iw_mag(flux_dim))*u(iw_mag(2))
    flux(iw_mom(3))=u(iw_rho)*u(iw_mom(3))*u(iw_mom(flux_dim))-&
      u(iw_mag(flux_dim))*u(iw_mag(3))
    ptotal=u(iw_e)+0.5_dp*(u(iw_mag(1))**2+u(iw_mag(2))**2+u(iw_mag(3))**2)
    flux(iw_mom(flux_dim))=flux(iw_mom(flux_dim))+ptotal

    ! Energy flux
    flux(iw_e)=u(iw_mom(flux_dim))*(u(iw_e)*inv_gamma_1+0.5_dp*&
      u(iw_rho)*(u(iw_mom(1))**2+u(iw_mom(2))**2+u(iw_mom(3))**2)+&
      2.0_dp*ptotal-u(iw_e))-u(iw_mag(flux_dim))*&
      (u(iw_mag(1))*u(iw_mom(1))+u(iw_mag(2))*u(iw_mom(2))+u(iw_mag(3))*u(iw_mom(3)))

    ! Magnetic flux
    flux(iw_mag(1))=u(iw_mom(flux_dim))*u(iw_mag(1))-u(iw_mag(flux_dim))*u(iw_mom(1))
    flux(iw_mag(2))=u(iw_mom(flux_dim))*u(iw_mag(2))-u(iw_mag(flux_dim))*u(iw_mom(2))
    flux(iw_mag(3))=u(iw_mom(flux_dim))*u(iw_mag(3))-u(iw_mag(flux_dim))*u(iw_mom(3))

    ! GLM psi flux
    flux(iw_mag(flux_dim))=u(psi_)
      !f_i[psi]=Ch^2*b_{i} Eq. 24e and Eq. 38c Dedner et al 2002 JCP, 175, 645
    flux(psi_)=cmax_global**2*u(iw_mag(flux_dim))

    ! Tracer flux. Note that tracers stay conservative.
      flux(tracer(1)) = u(tracer(1)) * u(iw_mom(flux_dim))

    ! Hyperbolic TC fluxes
    flux(iw_e)       = flux(iw_e) + u(iw_qvec(flux_dim))
    flux(iw_qvec(1)) = 0.0_dp
    flux(iw_qvec(2)) = 0.0_dp
    flux(iw_qvec(3)) = 0.0_dp

  end subroutine get_flux