Reconstruct scalar q within ixO^L to 1/2 dx in direction idir Return both left and right reconstructed values
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | ixImin1 | |||
| integer, | intent(in) | :: | ixImin2 | |||
| integer, | intent(in) | :: | ixImin3 | |||
| integer, | intent(in) | :: | ixImax1 | |||
| integer, | intent(in) | :: | ixImax2 | |||
| integer, | intent(in) | :: | ixImax3 | |||
| integer, | intent(in) | :: | ixCmin1 | |||
| integer, | intent(in) | :: | ixCmin2 | |||
| integer, | intent(in) | :: | ixCmin3 | |||
| integer, | intent(in) | :: | ixCmax1 | |||
| integer, | intent(in) | :: | ixCmax2 | |||
| integer, | intent(in) | :: | ixCmax3 | |||
| integer, | intent(in) | :: | idir | |||
| double precision, | intent(in) | :: | q(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3) | |||
| double precision, | intent(out) | :: | qL(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3) | |||
| double precision, | intent(out) | :: | qR(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3) |
subroutine reconstruct(ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,& ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3,idir,q,qL,qR) use mod_limiter use mod_global_parameters integer, intent(in) :: ixImin1,ixImin2,ixImin3,ixImax1,& ixImax2,ixImax3, ixCmin1,ixCmin2,ixCmin3,ixCmax1,ixCmax2,ixCmax3, idir double precision, intent(in) :: q(ixImin1:ixImax1,ixImin2:ixImax2,& ixImin3:ixImax3) double precision, intent(out) :: qL(ixImin1:ixImax1,ixImin2:ixImax2,& ixImin3:ixImax3), qR(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3) double precision :: qC(ixImin1:ixImax1,ixImin2:ixImax2,& ixImin3:ixImax3) double precision,dimension(ixImin1:ixImax1,ixImin2:ixImax2,& ixImin3:ixImax3) :: dqC,ldq,rdq integer :: ixOmin1,ixOmin2,ixOmin3,ixOmax1,& ixOmax2,ixOmax3,jxCmin1,jxCmin2,jxCmin3,jxCmax1,jxCmax2,jxCmax3,gxCmin1,& gxCmin2,gxCmin3,gxCmax1,gxCmax2,gxCmax3,hxCmin1,hxCmin2,hxCmin3,hxCmax1,& hxCmax2,hxCmax3 jxCmin1=ixCmin1+kr(idir,1);jxCmin2=ixCmin2+kr(idir,2) jxCmin3=ixCmin3+kr(idir,3);jxCmax1=ixCmax1+kr(idir,1) jxCmax2=ixCmax2+kr(idir,2);jxCmax3=ixCmax3+kr(idir,3); gxCmin1=ixCmin1-kr(idir,1);gxCmin2=ixCmin2-kr(idir,2) gxCmin3=ixCmin3-kr(idir,3);gxCmax1=jxCmax1;gxCmax2=jxCmax2 gxCmax3=jxCmax3; hxCmin1=gxCmin1+kr(idir,1);hxCmin2=gxCmin2+kr(idir,2) hxCmin3=gxCmin3+kr(idir,3);hxCmax1=gxCmax1+kr(idir,1) hxCmax2=gxCmax2+kr(idir,2);hxCmax3=gxCmax3+kr(idir,3); qR(gxCmin1:gxCmax1,gxCmin2:gxCmax2,gxCmin3:gxCmax3) = q(hxCmin1:hxCmax1,& hxCmin2:hxCmax2,hxCmin3:hxCmax3) qL(gxCmin1:gxCmax1,gxCmin2:gxCmax2,gxCmin3:gxCmax3) = q(gxCmin1:gxCmax1,& gxCmin2:gxCmax2,gxCmin3:gxCmax3) dqC(gxCmin1:gxCmax1,gxCmin2:gxCmax2,gxCmin3:gxCmax3)= qR(gxCmin1:gxCmax1,& gxCmin2:gxCmax2,gxCmin3:gxCmax3)-qL(gxCmin1:gxCmax1,gxCmin2:gxCmax2,& gxCmin3:gxCmax3) call dwlimiter2(dqC,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,ixImax3,& gxCmin1,gxCmin2,gxCmin3,gxCmax1,gxCmax2,gxCmax3,idir,& type_limiter(block%level),ldq,rdq) qL(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ixCmin3:ixCmax3) = qL(ixCmin1:ixCmax1,& ixCmin2:ixCmax2,ixCmin3:ixCmax3) + half*ldq(ixCmin1:ixCmax1,& ixCmin2:ixCmax2,ixCmin3:ixCmax3) qR(ixCmin1:ixCmax1,ixCmin2:ixCmax2,ixCmin3:ixCmax3) = qR(ixCmin1:ixCmax1,& ixCmin2:ixCmax2,ixCmin3:ixCmax3) - half*rdq(jxCmin1:jxCmax1,& jxCmin2:jxCmax2,jxCmin3:jxCmax3) end subroutine reconstruct