8 amrex::Vector<std::string> bc_hi_str,
9 amrex::Vector<std::string> bc_lo_str,
11 amrex::Vector<amrex::Real> _bc_lo_2,
12 amrex::Vector<amrex::Real> _bc_lo_3),
14 amrex::Vector<amrex::Real> _bc_hi_2,
15 amrex::Vector<amrex::Real> _bc_hi_3))
20 Util::Warning(
INFO,
"This method is going away. Please use pp.queryclass() instead.");
28 #if AMREX_SPACEDIM == 3
38 #if AMREX_SPACEDIM == 3
43 for (
unsigned int i=0;i<
m_ncomp;i++)
45 if (_bc_lo_1.size() > 0)
m_bc_val[Face::XLO][i] = _bc_lo_1[i];
46 if (_bc_hi_1.size() > 0)
m_bc_val[Face::XHI][i] = _bc_hi_1[i];
47 if (_bc_lo_2.size() > 0)
m_bc_val[Face::YLO][i] = _bc_lo_2[i];
48 if (_bc_hi_2.size() > 0)
m_bc_val[Face::YHI][i] = _bc_hi_2[i];
49 #if AMREX_SPACEDIM == 3
50 if (_bc_lo_3.size() > 0)
m_bc_val[Face::ZLO][i] = _bc_lo_3[i];
51 if (_bc_hi_3.size() > 0)
m_bc_val[Face::ZHI][i] = _bc_hi_3[i];
60 const amrex::Box &a_box,
61 int ngrow,
int ,
int , amrex::Real time,
64 const amrex::Real* DX =
m_geom.CellSize();
68 amrex::Box box = a_box;
70 const amrex::Dim3 lo= amrex::lbound(
m_geom.Domain()), hi = amrex::ubound(
m_geom.Domain());
72 amrex::Array4<amrex::Real>
const& in = a_in.array();
74 for (
int n = 0; n < a_in.nComp(); n++)
75 amrex::ParallelFor (box,[=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
77 amrex::IntVect glevel;
78 AMREX_D_TERM(glevel[0] = std::max(std::min(0,i-lo.x),i-hi.x); ,
79 glevel[1] = std::max(std::min(0,j-lo.y),j-hi.y); ,
80 glevel[2] = std::max(std::min(0,k-lo.z),k-hi.z); );
85 in(i,j,k,n) =
m_bc_val[Face::XLO][n](time);
87 in(i,j,k,n) = in(i-glevel[0],j,k,n) - (
m_bc_val[Face::XLO].size() > 0 ?
m_bc_val[Face::XLO][n](time)*DX[0] : 0);
89 in(i,j,k,n) = in(1-glevel[0],j,k,n);
91 in(i,j,k,n) = -in(1-glevel[0],j,k,n);
96 else if (glevel[0]>0 && (face == Orientation::xhi || face ==
Orientation::All))
99 in(i,j,k,n) =
m_bc_val[Face::XHI][n](time);
101 in(i,j,k,n) = in(i-glevel[0],j,k,n) - (
m_bc_val[Face::XHI].size() > 0 ?
m_bc_val[Face::XHI][n](time)*DX[0] : 0);
103 in(i,j,k,n) = in(hi.x-glevel[0],j,k,n);
105 in(i,j,k,n) = -in(hi.x-glevel[0],j,k,n);
111 else if (glevel[1]<0 && (face == Orientation::ylo || face ==
Orientation::All))
114 in(i,j,k,n) =
m_bc_val[Face::YLO][n](time);
116 in(i,j,k,n) = in(i,j-glevel[1],k,n) - (
m_bc_val[Face::YLO].size() > 0 ?
m_bc_val[Face::YLO][n](time)*DX[1] : 0);
118 in(i,j,k,n) = in(i,j-glevel[1],k,n);
120 in(i,j,k,n) = -in(i,j-glevel[1],k,n);
125 else if (glevel[1]>0 && (face == Orientation::yhi || face ==
Orientation::All))
128 in(i,j,k,n) =
m_bc_val[Face::YHI][n](time);
130 in(i,j,k,n) = in(i,j-glevel[1],k,n) - (
m_bc_val[Face::YHI].size() > 0 ?
m_bc_val[Face::YHI][n](time)*DX[1] : 0);
132 in(i,j,k,n) = in(i,hi.y-glevel[1],k,n);
134 in(i,j,k,n) = -in(i,hi.y-glevel[1],k,n);
141 else if (glevel[2]<0 && (face == Orientation::zlo || face ==
Orientation::All))
144 in(i,j,k,n) =
m_bc_val[Face::ZLO][n](time);
146 in(i,j,k,n) = in(i,j,k-glevel[2],n) - (
m_bc_val[Face::ZLO].size() > 0 ?
m_bc_val[Face::ZLO][n](time)*DX[2] : 0);
148 in(i,j,k,n) = in(i,j,1-glevel[2],n);
150 in(i,j,k,n) = -in(i,j,1-glevel[2],n);
154 else if (glevel[2]>0 && (face == Orientation::zhi || face ==
Orientation::All))
157 in(i,j,k,n) =
m_bc_val[Face::ZHI][n](time);
159 in(i,j,k,n) = in(i,j,k-glevel[2],n) - (
m_bc_val[Face::ZHI].size() > 0 ?
m_bc_val[Face::ZHI][n](time)*DX[2] : 0);
161 in(i,j,k,n) = in(i,j,hi.z-glevel[2],n);
163 in(i,j,k,n) = -in(i,j,hi.z-glevel[2],n);
179 return amrex::BCRec(bc_lo,bc_hi);
182 amrex::Array<int,AMREX_SPACEDIM>