8                        const amrex::Box &a_box,
 
   12    const amrex::Real* DX = 
m_geom.CellSize();
 
   16    amrex::Box box = a_box;
 
   18    const amrex::Dim3 lo= amrex::lbound(
m_geom.Domain()), hi = amrex::ubound(
m_geom.Domain());
 
   20    amrex::Array4<amrex::Real> 
const& in = a_in.array();
 
   22    amrex::IndexType type = amrex::IndexType::TheCellType();
 
   24    for (
int n = 0; n < a_in.nComp(); n++)
 
   25    amrex::ParallelFor (box,[=] AMREX_GPU_DEVICE(
int i, 
int j, 
int k)
 
   30        #if AMREX_SPACEDIM > 1 
   32        #if AMREX_SPACEDIM > 2 
   38        amrex::IntVect glevel;
 
   39        AMREX_D_TERM(glevel[0] = std::max(std::min(0,i-lo.x),i-hi.x); ,
 
   40                    glevel[1] = std::max(std::min(0,j-lo.y),j-hi.y); ,
 
   41                    glevel[2] = std::max(std::min(0,k-lo.z),k-hi.z); );
 
   46                in(i,j,k,n) = 
m_bc_func[Face::XLO][n](x,y,z,
t);
 
   48                in(i,j,k,n) = in(i-glevel[0],j,k,n) - (
m_bc_func[Face::XLO].size() > 0 ? 
m_bc_func[Face::XLO][n](x,y,z,
t)*DX[0] : 0);
 
   50                in(i,j,k,n) = in(1-glevel[0],j,k,n);
 
   52                in(i,j,k,n) = -in(1-glevel[0],j,k,n);
 
   57        else if (glevel[0]>0 && (face == Orientation::xhi || face == 
Orientation::All)) 
 
   60                in(i,j,k,n) = 
m_bc_func[Face::XHI][n](x,y,z,
t);
 
   62                in(i,j,k,n) = in(i-glevel[0],j,k,n) - (
m_bc_func[Face::XHI].size() > 0 ? 
m_bc_func[Face::XHI][n](x,y,z,
t)*DX[0] : 0);
 
   64                in(i,j,k,n) = in(hi.x-glevel[0],j,k,n);
 
   66                in(i,j,k,n) = -in(hi.x-glevel[0],j,k,n);
 
   72        else if (glevel[1]<0 && (face == Orientation::ylo || face == 
Orientation::All)) 
 
   75                in(i,j,k,n) = 
m_bc_func[Face::YLO][n](x,y,z,
t);
 
   77                in(i,j,k,n) = in(i,j-glevel[1],k,n) - (
m_bc_func[Face::YLO].size() > 0 ? 
m_bc_func[Face::YLO][n](x,y,z,
t)*DX[1] : 0);
 
   79                in(i,j,k,n) = in(i,j-glevel[1],k,n);
 
   81                in(i,j,k,n) = -in(i,j-glevel[1],k,n);
 
   86        else if (glevel[1]>0 && (face == Orientation::yhi || face == 
Orientation::All)) 
 
   89                in(i,j,k,n) = 
m_bc_func[Face::YHI][n](x,y,z,
t);
 
   91                in(i,j,k,n) = in(i,j-glevel[1],k,n) - (
m_bc_func[Face::YHI].size() > 0 ? 
m_bc_func[Face::YHI][n](x,y,z,
t)*DX[1] : 0);
 
   93                in(i,j,k,n) = in(i,hi.y-glevel[1],k,n);
 
   95                in(i,j,k,n) = -in(i,hi.y-glevel[1],k,n);
 
  102        else if (glevel[2]<0 && (face == Orientation::zlo || face == 
Orientation::All))
 
  105                in(i,j,k,n) = 
m_bc_func[Face::ZLO][n](x,y,z,
t);
 
  107                in(i,j,k,n) = in(i,j,k-glevel[2],n) - (
m_bc_func[Face::ZLO].size() > 0 ? 
m_bc_func[Face::ZLO][n](x,y,z,
t)*DX[2] : 0);
 
  109                in(i,j,k,n) = in(i,j,1-glevel[2],n);
 
  111                in(i,j,k,n) = -in(i,j,1-glevel[2],n);
 
  115        else if (glevel[2]>0 && (face == Orientation::zhi || face == 
Orientation::All))
 
  118                in(i,j,k,n) = 
m_bc_func[Face::ZHI][n](x,y,z,
t);
 
  120                in(i,j,k,n) = in(i,j,k-glevel[2],n) - (
m_bc_func[Face::ZHI].size() > 0 ? 
m_bc_func[Face::ZHI][n](x,y,z,
t)*DX[2] : 0);
 
  122                in(i,j,k,n) = in(i,j,hi.z-glevel[2],n);
 
  124                in(i,j,k,n) = -in(i,j,hi.z-glevel[2],n);