| Type | Intent | Optional | 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) |
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