flux_to_edge Subroutine

private subroutine flux_to_edge(igrid, ixImin1, ixImin2, ixImin3, ixImax1, ixImax2, ixImax3, idims, iside, restrict, fE)

Uses

  • proc~~flux_to_edge~~UsesGraph proc~flux_to_edge flux_to_edge module~mod_global_parameters mod_global_parameters proc~flux_to_edge->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
integer :: igrid
integer :: ixImin1
integer :: ixImin2
integer :: ixImin3
integer :: ixImax1
integer :: ixImax2
integer :: ixImax3
integer :: idims
integer :: iside
logical :: restrict
double precision, intent(in) :: fE(ixImin1:ixImax1,ixImin2:ixImax2,ixImin3:ixImax3,sdim:3)

Source Code

   subroutine flux_to_edge(igrid,ixImin1,ixImin2,ixImin3,ixImax1,ixImax2,&
      ixImax3,idims,iside,restrict,fE)
     use mod_global_parameters

     integer                      :: igrid,ixImin1,ixImin2,ixImin3,ixImax1,&
        ixImax2,ixImax3,idims,iside
     logical                      :: restrict
     double precision, intent(in) :: fE(ixImin1:ixImax1,ixImin2:ixImax2,&
        ixImin3:ixImax3,sdim:3)

     integer                      :: idir1,idir2
     integer                      :: ixEmin1,ixEmin2,ixEmin3,ixEmax1,ixEmax2,&
        ixEmax3,ixFmin1,ixFmin2,ixFmin3,ixFmax1,ixFmax2,ixFmax3, jxFmin1,&
        jxFmin2,jxFmin3,jxFmax1,jxFmax2,jxFmax3, nx1,nx2,nx3,nxCo1,nxCo2,nxCo3

     nx1=ixMhi1-ixMlo1+1;nx2=ixMhi2-ixMlo2+1;nx3=ixMhi3-ixMlo3+1;
     nxCo1=nx1/2;nxCo2=nx2/2;nxCo3=nx3/2;
     ! ixE are the indices on the 'edge' array.
     ! ixF are the indices on the 'fE' array
     ! jxF are indices advanced to perform the flux restriction (sum) in 3D
     ! A line integral of the electric field on the coarse side
     ! lies over two edges on the fine side. So, in 3D we restrict by summing
     ! over two cells on the fine side.

     !!do idir1=1,ndim-1
     !!  ! 3D: rotate indices among 1 and 2 to save space
     !!  idir2=mod(idir1+idims-1,3)+1


     !!  if (restrict) then
     !!    ! Set up indices for restriction
     !!    ixFmin1=ixMlo1-1+kr(1,idir2);ixFmin2=ixMlo2-1+kr(2,idir2)
     !!    ixFmin3=ixMlo3-1+kr(3,idir2);
     !!    ixFmax1=ixMhi1-kr(1,idir2);ixFmax2=ixMhi2-kr(2,idir2)
     !!    ixFmax3=ixMhi3-kr(3,idir2);

     !!    jxFmin1=ixFmin1+kr(1,idir2);jxFmin2=ixFmin2+kr(2,idir2)
     !!    jxFmin3=ixFmin3+kr(3,idir2);jxFmax1=ixFmax1+kr(1,idir2)
     !!    jxFmax2=ixFmax2+kr(2,idir2);jxFmax3=ixFmax3+kr(3,idir2);

     !!    ixEmin1=0+kr(1,idir2);ixEmin2=0+kr(2,idir2);ixEmin3=0+kr(3,idir2);
     !!    ixEmax1=nxCo1;ixEmax2=nxCo2;ixEmax3=nxCo3;
     !!    select case(idims)
     !!   case(1)
     !!      ixEmin1=1;ixEmax1=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax1=ixFmin1
     !!        jxFmax1=ixFmin1
     !!      case(2)
     !!        ixFmin1=ixFmax1
     !!        jxFmin1=ixFmax1
     !!      end select

     !!   case(2)
     !!      ixEmin2=1;ixEmax2=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax2=ixFmin2
     !!        jxFmax2=ixFmin2
     !!      case(2)
     !!        ixFmin2=ixFmax2
     !!        jxFmin2=ixFmax2
     !!      end select

     !!   case(3)
     !!      ixEmin3=1;ixEmax3=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax3=ixFmin3
     !!        jxFmax3=ixFmin3
     !!      case(2)
     !!        ixFmin3=ixFmax3
     !!        jxFmin3=ixFmax3
     !!      end select

     !!    end select

     !!  pflux(iside,idims,igrid)%edge(ixEmin1:ixEmax1,ixEmin2:ixEmax2,&
     !!     ixEmin3:ixEmax3,idir1)=fE(ixFmin1:ixFmax1:2,ixFmin2:ixFmax2:2,&
     !!     ixFmin3:ixFmax3:2,idir2) +fE(jxFmin1:jxFmax1:2,jxFmin2:jxFmax2:2,&
     !!     jxFmin3:jxFmax3:2,idir2);

     !!  else
     !!    ! Set up indices for copying
     !!    ixFmin1=ixMlo1-1+kr(1,idir2);ixFmin2=ixMlo2-1+kr(2,idir2)
     !!    ixFmin3=ixMlo3-1+kr(3,idir2);
     !!    ixFmax1=ixMhi1;ixFmax2=ixMhi2;ixFmax3=ixMhi3;
     !!    ixEmin1=0+kr(1,idir2);ixEmin2=0+kr(2,idir2);ixEmin3=0+kr(3,idir2);
     !!    ixEmax1=nx1;ixEmax2=nx2;ixEmax3=nx3;

     !!    select case(idims)
     !!   case(1)
     !!      ixEmin1=1;ixEmax1=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax1=ixFmin1
     !!      case(2)
     !!        ixFmin1=ixFmax1
     !!      end select

     !!   case(2)
     !!      ixEmin2=1;ixEmax2=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax2=ixFmin2
     !!      case(2)
     !!        ixFmin2=ixFmax2
     !!      end select

     !!   case(3)
     !!      ixEmin3=1;ixEmax3=1;
     !!      select case(iside)
     !!      case(1)
     !!        ixFmax3=ixFmin3
     !!      case(2)
     !!        ixFmin3=ixFmax3
     !!      end select

     !!    end select

     !!    pflux(iside,idims,igrid)%edge(ixEmin1:ixEmax1,ixEmin2:ixEmax2,&
     !!       ixEmin3:ixEmax3,idir1)=fE(ixFmin1:ixFmax1,ixFmin2:ixFmax2,&
     !!       ixFmin3:ixFmax3,idir2)

     !!  end if

     !!end do

   end subroutine flux_to_edge