|
rp1_burgers.f90.html |
|
|
Source file: rp1_burgers.f90
|
|
Directory: /Users/rjl/git/amath574w2017/am574-class/homeworks/hw3/burgers
|
|
Converted: Sat Feb 4 2017 at 11:00:39
using clawcode2html
|
|
This documentation file will
not reflect any later changes in the source file.
|
! =============================================================================
subroutine rp1(maxmx,meqn,mwaves,maux,mbc,mx,ql,qr,auxl,auxr,wave,s,amdq,apdq)
! =============================================================================
!
! Riemann problems for the 1D Burgers' equation with entropy fix for
! transonic rarefaction. See "Finite Volume Method for Hyperbolic Problems",
! R. J. LeVeque.
! waves: 1
! equations: 1
! Conserved quantities:
! 1 q
implicit none
integer, intent(in) :: maxmx, meqn, mwaves, maux, mbc, mx
real(kind=8), intent(in), dimension(meqn,1-mbc:maxmx+mbc) :: ql, qr
real(kind=8), intent(in), dimension(maux,1-mbc:maxmx+mbc) :: auxl, auxr
real(kind=8), intent(out) :: s(mwaves, 1-mbc:maxmx+mbc)
real(kind=8), intent(out) :: wave(meqn, mwaves, 1-mbc:maxmx+mbc)
real(kind=8), intent(out), dimension(meqn,1-mbc:maxmx+mbc) :: amdq,apdq
! local variables:
real(kind=8) :: qs,fs,qi,qim,fi,fim
integer :: i
logical :: efix
common /comrp/ efix
qs = 0.d0 ! sonic point
fs = 0.d0 ! flux at sonic point
do i=2-mbc,mx+mbc
qim = qr(1,i-1) ! left state for Riemann problem at i-1/2
qi = ql(1,i) ! right state for Riemann problem at i-1/2
wave(1,1,i) = qi - qim
if (qi == qim) then
s(1,i) = qi ! f'(q)
else
fim = 0.5d0*qim**2
fi = 0.5d0*qi**2
s(1,i) = (fi - fim) / (qi - qim)
endif
amdq(1,i) = dmin1(s(1,i), 0.d0) * wave(1,1,i)
apdq(1,i) = dmax1(s(1,i), 0.d0) * wave(1,1,i)
if (efix) then
if (qim < qs .and. qi > qs) then
amdq(1,i) = fs - fim
apdq(1,i) = fi - fs
endif
endif
enddo
end subroutine