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