reconstruct Subroutine

public subroutine reconstruct(ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, ixCmin1, ixCmin2, ixCmin3, ixCmax1, ixCmax2, ixCmax3, idir, q, qL, qR)

Uses

  • proc~~reconstruct~~UsesGraph proc~reconstruct reconstruct module~mod_global_parameters mod_global_parameters proc~reconstruct->module~mod_global_parameters module~mod_limiter mod_limiter proc~reconstruct->module~mod_limiter 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

Reconstruct scalar q within ixO^L to 1/2 dx in direction idir Return both left and right reconstructed values

Arguments

Type IntentOptional 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)

Calls

proc~~reconstruct~~CallsGraph proc~reconstruct reconstruct proc~dwlimiter2 dwlimiter2 proc~reconstruct->proc~dwlimiter2 proc~mpistop mpistop proc~dwlimiter2->proc~mpistop mpi_abort mpi_abort proc~mpistop->mpi_abort

Source Code

  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