ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERFPhysBCFunct_w Class Reference

#include <ERF_PhysBCFunct.H>

Collaboration diagram for ERFPhysBCFunct_w:

Public Member Functions

 ERFPhysBCFunct_w (const int lev, const amrex::Geometry &geom, const amrex::Vector< amrex::BCRec > &domain_bcs_type, const amrex::Gpu::DeviceVector< amrex::BCRec > &domain_bcs_type_d, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_extdir_vals, amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > bc_neumann_vals, const TerrainType &terrain_type, std::unique_ptr< amrex::MultiFab > &z_phys_nd, const bool use_real_bcs, amrex::Real *w_bc_data)
 
 ~ERFPhysBCFunct_w ()
 
void operator() (amrex::MultiFab &mf, amrex::MultiFab &xvel, amrex::MultiFab &yvel, amrex::IntVect const &nghost, const amrex::Real time, int bccomp, bool do_fb)
 
void impose_lateral_zvel_bcs (const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp)
 
void impose_vertical_zvel_bcs (const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp_u, int bccomp_v, int bccomp_w, TerrainType terrain_type)
 

Private Attributes

int m_lev
 
amrex::Geometry m_geom
 
amrex::Vector< amrex::BCRec > m_domain_bcs_type
 
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
 
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_maxm_bc_extdir_vals
 
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_maxm_bc_neumann_vals
 
TerrainType m_terrain_type
 
amrex::MultiFab * m_z_phys_nd
 
bool m_use_real_bcs
 
amrex::Real * m_w_bc_data
 

Constructor & Destructor Documentation

◆ ERFPhysBCFunct_w()

ERFPhysBCFunct_w::ERFPhysBCFunct_w ( const int  lev,
const amrex::Geometry &  geom,
const amrex::Vector< amrex::BCRec > &  domain_bcs_type,
const amrex::Gpu::DeviceVector< amrex::BCRec > &  domain_bcs_type_d,
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max bc_extdir_vals,
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max bc_neumann_vals,
const TerrainType &  terrain_type,
std::unique_ptr< amrex::MultiFab > &  z_phys_nd,
const bool  use_real_bcs,
amrex::Real *  w_bc_data 
)
inline
204  : m_lev(lev),
205  m_geom(geom), m_domain_bcs_type(domain_bcs_type),
206  m_domain_bcs_type_d(domain_bcs_type_d),
207  m_bc_extdir_vals(bc_extdir_vals),
208  m_bc_neumann_vals(bc_neumann_vals),
209  m_terrain_type(terrain_type),
210  m_z_phys_nd(z_phys_nd.get()),
211  m_use_real_bcs(use_real_bcs),
212  m_w_bc_data(w_bc_data)
213  { }
amrex::Vector< amrex::BCRec > m_domain_bcs_type
Definition: ERF_PhysBCFunct.H:250
amrex::Geometry m_geom
Definition: ERF_PhysBCFunct.H:249
int m_lev
Definition: ERF_PhysBCFunct.H:248
amrex::Real * m_w_bc_data
Definition: ERF_PhysBCFunct.H:257
bool m_use_real_bcs
Definition: ERF_PhysBCFunct.H:256
amrex::Gpu::DeviceVector< amrex::BCRec > m_domain_bcs_type_d
Definition: ERF_PhysBCFunct.H:251
TerrainType m_terrain_type
Definition: ERF_PhysBCFunct.H:254
amrex::MultiFab * m_z_phys_nd
Definition: ERF_PhysBCFunct.H:255
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_neumann_vals
Definition: ERF_PhysBCFunct.H:253
amrex::Array< amrex::Array< amrex::Real, AMREX_SPACEDIM *2 >, AMREX_SPACEDIM+NBCVAR_max > m_bc_extdir_vals
Definition: ERF_PhysBCFunct.H:252

◆ ~ERFPhysBCFunct_w()

ERFPhysBCFunct_w::~ERFPhysBCFunct_w ( )
inline
215 {}

Member Function Documentation

◆ impose_lateral_zvel_bcs()

void ERFPhysBCFunct_w::impose_lateral_zvel_bcs ( const amrex::Array4< amrex::Real > &  dest_arr,
const amrex::Array4< amrex::Real const > &  xvel_arr,
const amrex::Array4< amrex::Real const > &  yvel_arr,
const amrex::Box &  bx,
const amrex::Box &  domain,
const amrex::Array4< amrex::Real const > &  z_nd,
const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM >  dxInv,
int  bccomp 
)
23 {
24  BL_PROFILE_VAR("impose_lateral_zvel_bcs()",impose_lateral_zvel_bcs);
25  const auto& dom_lo = lbound(domain);
26  const auto& dom_hi = ubound(domain);
27 
28  // Based on BCRec for the domain, we need to make BCRec for this Box
29  // bccomp is used as starting index for m_domain_bcs_type
30  // 0 is used as starting index for bcrs
31  Vector<BCRec> bcrs_w(1);
32  setBC(enclosedCells(bx), domain, bccomp, 0, 1, m_domain_bcs_type, bcrs_w);
33 
34  // xlo: ori = 0
35  // ylo: ori = 1
36  // zlo: ori = 2
37  // xhi: ori = 3
38  // yhi: ori = 4
39  // zhi: ori = 5
40 
41  Gpu::DeviceVector<BCRec> bcrs_w_d(1);
42  Gpu::copyAsync(Gpu::hostToDevice, bcrs_w.begin(), bcrs_w.end(), bcrs_w_d.begin());
43  const BCRec* bc_ptr_w = bcrs_w_d.data();
44 
45  GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>,1> l_bc_extdir_vals_d;
46 
47  bool l_use_terrain = (m_z_phys_nd != nullptr);
48 
49  for (int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
50  l_bc_extdir_vals_d[0][ori] = m_bc_extdir_vals[bccomp][ori];
51  }
52 
53  GeometryData const& geomdata = m_geom.data();
54  bool is_periodic_in_x = geomdata.isPeriodic(0);
55  bool is_periodic_in_y = geomdata.isPeriodic(1);
56 
57  FArrayBox dhdtfab;
58 
59  // First do all ext_dir bcs
60  if (!is_periodic_in_x)
61  {
62  Real* zvel_bc_ptr = m_w_bc_data;
63  Box bx_xlo(bx); bx_xlo.setBig (0,dom_lo.x-1);
64  Box bx_xhi(bx); bx_xhi.setSmall(0,dom_hi.x+1);
65  ParallelFor(bx_xlo, bx_xhi,
66  [=] AMREX_GPU_DEVICE (int i, int j, int k) {
67  int iflip = dom_lo.x - 1 - i;
68  if (bc_ptr_w[0].lo(0) == ERFBCType::ext_dir) {
69  dest_arr(i,j,k) = (zvel_bc_ptr) ? zvel_bc_ptr[k] : l_bc_extdir_vals_d[0][0];
70  if (l_use_terrain) {
71  dest_arr(i,j,k) = WFromOmega(i,j,k,dest_arr(i,j,k),xvel_arr,yvel_arr,z_phys_nd,dxInv);
72  }
73  } else if (bc_ptr_w[0].lo(0) == ERFBCType::foextrap) {
74  dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
75  } else if (bc_ptr_w[0].lo(0) == ERFBCType::open) {
76  dest_arr(i,j,k) = dest_arr(dom_lo.x,j,k);
77  } else if (bc_ptr_w[0].lo(0) == ERFBCType::reflect_even) {
78  dest_arr(i,j,k) = dest_arr(iflip,j,k);
79  } else if (bc_ptr_w[0].lo(0) == ERFBCType::reflect_odd) {
80  dest_arr(i,j,k) = -dest_arr(iflip,j,k);
81  }
82  },
83  [=] AMREX_GPU_DEVICE (int i, int j, int k) {
84  int iflip = 2*dom_hi.x + 1 - i;
85  if (bc_ptr_w[0].hi(0) == ERFBCType::ext_dir) {
86  dest_arr(i,j,k) = (zvel_bc_ptr) ? zvel_bc_ptr[k] : l_bc_extdir_vals_d[0][3];
87  if (l_use_terrain) {
88  dest_arr(i,j,k) = WFromOmega(i,j,k,dest_arr(i,j,k),xvel_arr,yvel_arr,z_phys_nd,dxInv);
89  }
90  } else if (bc_ptr_w[0].hi(0) == ERFBCType::foextrap) {
91  dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
92  } else if (bc_ptr_w[0].hi(0) == ERFBCType::open) {
93  dest_arr(i,j,k) = dest_arr(dom_hi.x,j,k);
94  } else if (bc_ptr_w[0].hi(0) == ERFBCType::reflect_even) {
95  dest_arr(i,j,k) = dest_arr(iflip,j,k);
96  } else if (bc_ptr_w[0].hi(0) == ERFBCType::reflect_odd) {
97  dest_arr(i,j,k) = -dest_arr(iflip,j,k);
98  }
99  }
100  );
101  }
102 
103  // First do all ext_dir bcs
104  if (!is_periodic_in_y)
105  {
106  Real* zvel_bc_ptr = m_w_bc_data;
107  Box bx_ylo(bx); bx_ylo.setBig (1,dom_lo.y-1);
108  Box bx_yhi(bx); bx_yhi.setSmall(1,dom_hi.y+1);
109  ParallelFor(bx_ylo, bx_yhi,
110  [=] AMREX_GPU_DEVICE (int i, int j, int k) {
111  int jflip = dom_lo.y - 1 - j;
112  if (bc_ptr_w[0].lo(1) == ERFBCType::ext_dir) {
113  dest_arr(i,j,k) = (zvel_bc_ptr) ? zvel_bc_ptr[k] : l_bc_extdir_vals_d[0][1];
114  if (l_use_terrain) {
115  dest_arr(i,j,k) = WFromOmega(i,j,k,dest_arr(i,j,k),xvel_arr,yvel_arr,z_phys_nd,dxInv);
116  }
117  } else if (bc_ptr_w[0].lo(1) == ERFBCType::foextrap) {
118  dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
119  } else if (bc_ptr_w[0].lo(1) == ERFBCType::open) {
120  dest_arr(i,j,k) = dest_arr(i,dom_lo.y,k);
121  } else if (bc_ptr_w[0].lo(1) == ERFBCType::reflect_even) {
122  dest_arr(i,j,k) = dest_arr(i,jflip,k);
123  } else if (bc_ptr_w[0].lo(1) == ERFBCType::reflect_odd) {
124  dest_arr(i,j,k) = -dest_arr(i,jflip,k);
125  }
126  },
127  [=] AMREX_GPU_DEVICE (int i, int j, int k) {
128  int jflip = 2*dom_hi.y + 1 - j;
129  if (bc_ptr_w[0].hi(1) == ERFBCType::ext_dir) {
130  dest_arr(i,j,k) = (zvel_bc_ptr) ? zvel_bc_ptr[k] : l_bc_extdir_vals_d[0][4];
131  if (l_use_terrain) {
132  dest_arr(i,j,k) = WFromOmega(i,j,k,dest_arr(i,j,k),xvel_arr,yvel_arr,z_phys_nd,dxInv);
133  }
134  } else if (bc_ptr_w[0].hi(1) == ERFBCType::foextrap) {
135  dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
136  } else if (bc_ptr_w[0].hi(1) == ERFBCType::open) {
137  dest_arr(i,j,k) = dest_arr(i,dom_hi.y,k);
138  } else if (bc_ptr_w[0].hi(1) == ERFBCType::reflect_even) {
139  dest_arr(i,j,k) = dest_arr(i,jflip,k);
140  } else if (bc_ptr_w[0].hi(1) == ERFBCType::reflect_odd) {
141  dest_arr(i,j,k) = -dest_arr(i,jflip,k);
142  }
143  });
144  }
145  Gpu::streamSynchronize();
146 }
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real WFromOmega(int i, int j, int k, amrex::Real omega, amrex::Real u, amrex::Real v, const amrex::Array4< const amrex::Real > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxInv)
Definition: ERF_TerrainMetrics.H:407
void impose_lateral_zvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp)
Definition: ERF_BoundaryConditionsZvel.cpp:16
@ open
Definition: ERF_IndexDefines.H:186
@ reflect_odd
Definition: ERF_IndexDefines.H:176
@ foextrap
Definition: ERF_IndexDefines.H:179
@ ext_dir
Definition: ERF_IndexDefines.H:180
@ reflect_even
Definition: ERF_IndexDefines.H:178
Here is the call graph for this function:

◆ impose_vertical_zvel_bcs()

void ERFPhysBCFunct_w::impose_vertical_zvel_bcs ( const amrex::Array4< amrex::Real > &  dest_arr,
const amrex::Array4< amrex::Real const > &  xvel_arr,
const amrex::Array4< amrex::Real const > &  yvel_arr,
const amrex::Box &  bx,
const amrex::Box &  domain,
const amrex::Array4< amrex::Real const > &  z_nd,
const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM >  dxInv,
int  bccomp_u,
int  bccomp_v,
int  bccomp_w,
TerrainType  terrain_type 
)
170 {
171  BL_PROFILE_VAR("impose_vertical_zvel_bcs()",impose_vertical_zvel_bcs);
172  const auto& dom_lo = lbound(domain);
173  const auto& dom_hi = ubound(domain);
174 
175  // xlo: ori = 0
176  // ylo: ori = 1
177  // zlo: ori = 2
178  // xhi: ori = 3
179  // yhi: ori = 4
180  // zhi: ori = 5
181 
182  // Based on BCRec for the domain, we need to make BCRec for this Box
183  // bccomp is used as starting index for m_domain_bcs_type
184  // 0 is used as starting index for bcrs
185  Vector<BCRec> bcrs_u(1), bcrs_v(1), bcrs_w(1);
186  setBC(enclosedCells(bx), domain, bccomp_u, 0, 1, m_domain_bcs_type, bcrs_u);
187  setBC(enclosedCells(bx), domain, bccomp_v, 0, 1, m_domain_bcs_type, bcrs_v);
188  setBC(enclosedCells(bx), domain, bccomp_w, 0, 1, m_domain_bcs_type, bcrs_w);
189 
190  // We use these for the asserts below
191  const BCRec* bc_ptr_u_h = bcrs_u.data();
192  const BCRec* bc_ptr_v_h = bcrs_v.data();
193  const BCRec* bc_ptr_w_h = bcrs_w.data();
194 
195  bool l_use_terrain = (m_z_phys_nd != nullptr);
196  bool l_moving_terrain = (terrain_type == TerrainType::Moving);
197 
198  GpuArray<GpuArray<Real, AMREX_SPACEDIM*2>,1> l_bc_extdir_vals_d;
199 
200  for (int ori = 0; ori < 2*AMREX_SPACEDIM; ori++) {
201  l_bc_extdir_vals_d[0][ori] = m_bc_extdir_vals[bccomp_w][ori];
202  }
203 
204  // *******************************************************
205  // Bottom boundary
206  // *******************************************************
207 
208  // *******************************************************
209  // Moving terrain
210  // *******************************************************
211  if (l_use_terrain && l_moving_terrain)
212  {
213  //************************************************************
214  // NOTE: z_t depends on the time interval in which it is
215  // evaluated so we can't arbitrarily define it at a
216  // given time, we must specify an interval
217  //************************************************************
218 
219  // Static terrain
220  } else if (l_use_terrain) {
221 
222  if (m_lev == 0) {
223  AMREX_ALWAYS_ASSERT( (bc_ptr_u_h[0].lo(2) == ERFBCType::ext_dir && bc_ptr_v_h[0].lo(2) == ERFBCType::ext_dir) ||
224  (bc_ptr_u_h[0].lo(2) != ERFBCType::ext_dir && bc_ptr_v_h[0].lo(2) != ERFBCType::ext_dir) );
225  } else {
226  // If we do not reach to the top or bottom boundary then the z-vel should be
227  // filled by interpolation from the coarser grid using ERF_FillPatcher.
228  }
229  if (bx.smallEnd(2) == dom_lo.z) {
230  ParallelFor(makeSlab(bx,2,dom_lo.z), [=] AMREX_GPU_DEVICE (int i, int j, int k) {
231  dest_arr(i,j,k) = WFromOmega(i,j,k,l_bc_extdir_vals_d[0][2],xvel_arr,yvel_arr,z_phys_nd,dxInv);
232  });
233  }
234 
235  // No terrain
236  } else {
237  if (bx.smallEnd(2) == dom_lo.z) {
238  ParallelFor(makeSlab(bx,2,dom_lo.z), [=] AMREX_GPU_DEVICE (int i, int j, int k) {
239  dest_arr(i,j,k) = l_bc_extdir_vals_d[0][2];
240  });
241  }
242  }
243 
244  // *******************************************************
245  // Top boundary
246  // *******************************************************
247 
248  // NOTE: if we set SlipWall at top, that generates ERFBCType::ext_dir which sets w=0 here
249  // NOTE: if we set Outflow at top, that generates ERFBCType::foextrap which doesn't touch w here
250  if (bx.bigEnd(2) == dom_hi.z+1) {
251  if (bc_ptr_w_h[0].hi(2) == ERFBCType::ext_dir) {
252  ParallelFor(makeSlab(bx,2,dom_hi.z+1), [=] AMREX_GPU_DEVICE (int i, int j, int k)
253  {
254  if (l_use_terrain) {
255  dest_arr(i,j,k) = WFromOmega(i,j,k,l_bc_extdir_vals_d[0][5],xvel_arr,yvel_arr,z_phys_nd,dxInv);
256  } else {
257  dest_arr(i,j,k) = l_bc_extdir_vals_d[0][5];
258  }
259  });
260  } else if (bc_ptr_w_h[0].hi(2) == ERFBCType::neumann_int) {
261  ParallelFor(makeSlab(bx,2,dom_hi.z+1), [=] AMREX_GPU_DEVICE (int i, int j, int k)
262  {
263  dest_arr(i,j,k) = (4.0*dest_arr(i,j,dom_hi.z) - dest_arr(i,j,dom_hi.z-1))/3.0;
264  });
265  }
266  }
267  Gpu::streamSynchronize();
268 }
void impose_vertical_zvel_bcs(const amrex::Array4< amrex::Real > &dest_arr, const amrex::Array4< amrex::Real const > &xvel_arr, const amrex::Array4< amrex::Real const > &yvel_arr, const amrex::Box &bx, const amrex::Box &domain, const amrex::Array4< amrex::Real const > &z_nd, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > dxInv, int bccomp_u, int bccomp_v, int bccomp_w, TerrainType terrain_type)
Definition: ERF_BoundaryConditionsZvel.cpp:162
@ neumann_int
Definition: ERF_IndexDefines.H:185
Here is the call graph for this function:

◆ operator()()

void ERFPhysBCFunct_w::operator() ( amrex::MultiFab &  mf,
amrex::MultiFab &  xvel,
amrex::MultiFab &  yvel,
amrex::IntVect const &  nghost,
const amrex::Real  time,
int  bccomp,
bool  do_fb 
)
231 {
232  BL_PROFILE("ERFPhysBCFunct_w::()");
233 
234  int bccomp_u = BCVars::xvel_bc;
235  int bccomp_v = BCVars::yvel_bc;
236 
237  if (m_geom.isAllPeriodic()) return;
238 
239  const auto& domain = m_geom.Domain();
240  const auto dxInv = m_geom.InvCellSizeArray();
241 
242  Box gdomainz = surroundingNodes(domain,2);
243  for (int i = 0; i < AMREX_SPACEDIM; ++i) {
244  if (m_geom.isPeriodic(i)) {
245  gdomainz.grow(i, nghost[i]);
246  }
247  }
248  //
249  // We want to make sure we impose the z-vels at k=0 if the box includes k=0
250  //
251  if (gdomainz.smallEnd(2) == 0) gdomainz.setSmall(2,1);
252 
253  //
254  // We fill all of the interior and periodic ghost cells first, so we can fill
255  // those directly inside the lateral and vertical calls.
256  //
257  if (do_fb) {
258  mf.FillBoundary(m_geom.periodicity());
259  }
260 
261 #ifdef AMREX_USE_OMP
262 #pragma omp parallel if (Gpu::notInLaunchRegion())
263 #endif
264  {
265  for (MFIter mfi(mf,false); mfi.isValid(); ++mfi)
266  {
267  //
268  // This is the box we pass to the different routines
269  // NOTE -- this is the full grid NOT the tile box
270  //
271  Box bx = mfi.validbox();
272 
273  //
274  // These are the boxes we use to test on relative to the domain
275  //
276  Box zbx = surroundingNodes(bx,2); zbx.grow(nghost);
277  if (zbx.smallEnd(2) < domain.smallEnd(2)) zbx.setSmall(2,domain.smallEnd(2));
278  if (zbx.bigEnd(2) > domain.bigEnd(2)) zbx.setBig(2,domain.bigEnd(2)+1);
279 
280  Array4<const Real> z_nd_arr;
281 
282  if (m_z_phys_nd)
283  {
284  z_nd_arr = m_z_phys_nd->const_array(mfi);
285  }
286 
287  //
288  // Recall that gdomainz.smallEnd(2) = 1 not 0!
289  //
290  if (!gdomainz.contains(zbx))
291  {
292  Array4<const Real> const& velx_arr = xvel.const_array(mfi);
293  Array4<const Real> const& vely_arr = yvel.const_array(mfi);
294  Array4< Real> const& velz_arr = mf.array(mfi);
295 
296  if (!m_use_real_bcs)
297  {
298  if (!gdomainz.contains(zbx))
299  {
300  impose_lateral_zvel_bcs(velz_arr,velx_arr,vely_arr,zbx,domain,z_nd_arr,dxInv,bccomp_w);
301  }
302  }
303 
304  impose_vertical_zvel_bcs(velz_arr,velx_arr,vely_arr,zbx,domain,z_nd_arr,dxInv,
305  bccomp_u, bccomp_v, bccomp_w, m_terrain_type);
306  }
307  } // MFIter
308  } // OpenMP
309 } // operator()
@ yvel_bc
Definition: ERF_IndexDefines.H:89
@ xvel_bc
Definition: ERF_IndexDefines.H:88
@ xvel
Definition: ERF_IndexDefines.H:130
@ yvel
Definition: ERF_IndexDefines.H:131

Member Data Documentation

◆ m_bc_extdir_vals

amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> ERFPhysBCFunct_w::m_bc_extdir_vals
private

◆ m_bc_neumann_vals

amrex::Array<amrex::Array<amrex::Real, AMREX_SPACEDIM*2>,AMREX_SPACEDIM+NBCVAR_max> ERFPhysBCFunct_w::m_bc_neumann_vals
private

◆ m_domain_bcs_type

amrex::Vector<amrex::BCRec> ERFPhysBCFunct_w::m_domain_bcs_type
private

◆ m_domain_bcs_type_d

amrex::Gpu::DeviceVector<amrex::BCRec> ERFPhysBCFunct_w::m_domain_bcs_type_d
private

◆ m_geom

amrex::Geometry ERFPhysBCFunct_w::m_geom
private

◆ m_lev

int ERFPhysBCFunct_w::m_lev
private

◆ m_terrain_type

TerrainType ERFPhysBCFunct_w::m_terrain_type
private

◆ m_use_real_bcs

bool ERFPhysBCFunct_w::m_use_real_bcs
private

◆ m_w_bc_data

amrex::Real* ERFPhysBCFunct_w::m_w_bc_data
private

◆ m_z_phys_nd

amrex::MultiFab* ERFPhysBCFunct_w::m_z_phys_nd
private

The documentation for this class was generated from the following files: