2#ifndef AMREX_INTERPBNDRYDATA_H_
3#define AMREX_INTERPBNDRYDATA_H_
4#include <AMReX_Config.H>
94 int bnd_start,
int num_comp, const
IntVect& ratio,
119template <typename MF>
128template <
typename MF>
137#pragma omp parallel if (Gpu::notInLaunchRegion())
141 const Box& bx = mfi.validbox();
147 auto & bnd_fab = this->
bndry[face][mfi];
148 auto const& src_fab = mf[mfi];
149 auto const& bnd_array = bnd_fab.array();
150 auto const& src_array = src_fab.const_array();
151 const Box&
b = src_fab.box() & bnd_fab.box();
154 bnd_array(i,j,k,n+bnd_start) = src_array(i,j,k,n+mf_start);
161template <
typename MF>
164 int f_start,
int bnd_start,
int num_comp,
const IntVect& ratio,
165 int max_order,
int max_width)
171 if (max_order==3 || max_order==1)
176#pragma omp parallel if (Gpu::notInLaunchRegion())
180 const Box& fine_bx = mfi.validbox();
184 if (fine_bx[face] != fine_domain[face] || this->
geom.
isPeriodic(dir))
186 auto const& crse_array =
crse[face].const_array(mfi);
187 auto const& bdry_array = this->
bndry[face].array(mfi);
188 Box const&
b = this->
bndry[face][mfi].box();
189 const auto rr = ratio.
dim3();
196 crse_array,c_start,rr);
201 auto const& mask_array = this->
masks[face].const_array(mfi);
209 crse_array,c_start,rr,
210 mask_array, is_not_covered, max_width);
214#if (AMREX_SPACEDIM >= 2)
220 crse_array,c_start,rr,
221 mask_array, is_not_covered, max_width);
225#if (AMREX_SPACEDIM == 3)
231 crse_array,c_start,rr,
232 mask_array, is_not_covered, max_width);
242 else if (
fine.defined(mfi)) {
244 auto & bnd_fab = this->
bndry[face][mfi];
245 auto const& src_fab =
fine[mfi];
246 auto const& bnd_array = bnd_fab.array();
247 auto const& src_array = src_fab.const_array();
248 const Box&
b = bnd_fab.box() & src_fab.box();
251 bnd_array(ii,jj,kk,nn+bnd_start) = src_array(ii,jj,kk,nn+f_start);
259 amrex::Abort(
"InterpBndryDataT<MF>::setBndryValues supports only max_order=1 or 3");
263template <
typename MF>
266 int num_comp,
const IntVect& ratio,
int max_order,
int max_width)
269 setBndryValues(
crse, c_start, foo, 0, bnd_start, num_comp, ratio, max_order, max_width);
272template <
typename MF>
#define AMREX_ASSERT(EX)
Definition AMReX_BLassert.H:38
#define AMREX_HOST_DEVICE_FOR_4D(...)
Definition AMReX_GpuLaunchMacrosC.nolint.H:107
#define AMREX_HOST_DEVICE_PARALLEL_FOR_4D(...)
Definition AMReX_GpuLaunchMacrosC.nolint.H:111
Array4< Real > fine
Definition AMReX_InterpFaceRegister.cpp:90
Array4< Real const > crse
Definition AMReX_InterpFaceRegister.cpp:92
A BndryData stores and manipulates boundary data information on each side of each box in a BoxArray.
Definition AMReX_BndryData.H:41
Vector< MultiMask > masks
Boundary condition mask.
Definition AMReX_BndryData.H:146
@ not_covered
Definition AMReX_BndryData.H:44
Geometry geom
Domain used for mask definitions.
Definition AMReX_BndryData.H:148
A BndryRegister organizes FabSets bounding each grid in a BoxArray. A FabSet is maintained for each b...
Definition AMReX_BndryRegister.H:41
BoxArray grids
Definition AMReX_BndryRegister.H:126
const DistributionMapping & DistributionMap() const noexcept
Returns constant reference to associated DistributionMapping.
Definition AMReX_BndryRegister.H:111
FabSetT< MF > bndry[2 *3]
The data.
Definition AMReX_BndryRegister.H:125
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:551
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:73
const Box & Domain() const noexcept
Returns our rectangular domain.
Definition AMReX_Geometry.H:210
bool isPeriodic(int dir) const noexcept
Is the domain periodic in the specified direction?
Definition AMReX_Geometry.H:331
__host__ __device__ Dim3 dim3() const noexcept
Definition AMReX_IntVect.H:170
An InterpBndryData object adds to a BndryData object the ability to manipulate and set the data store...
Definition AMReX_InterpBndryData.H:40
void setPhysBndryValues(const MF &mf, int mf_start, int bnd_start, int num_comp)
Set bndry values at physical boundaries.
Definition AMReX_InterpBndryData.H:130
static constexpr int IBD_max_order_DEF
Definition AMReX_InterpBndryData.H:115
void updateBndryValues(BndryRegisterT< MF > &crse, int c_start, int bnd_start, int num_comp, const IntVect &ratio, int max_order=IBD_max_order_DEF, int max_width=2)
Update boundary values at coarse/fine boundaries.
Definition AMReX_InterpBndryData.H:265
InterpBndryDataT() noexcept=default
default constructor
void setHomogValues()
Set boundary values to zero.
Definition AMReX_InterpBndryData.H:274
void setBndryValues(BndryRegisterT< MF > const &crse, int c_start, const MF &fine, int f_start, int bnd_start, int num_comp, const IntVect &ratio, int max_order=IBD_max_order_DEF, int max_width=2)
Sset bndry values at coarse/fine and physical boundaries.
Definition AMReX_InterpBndryData.H:163
typename MF::value_type value_type
Definition AMReX_InterpBndryData.H:43
Definition AMReX_MFIter.H:57
bool isValid() const noexcept
Is the iterator valid i.e. is it associated with a FAB?
Definition AMReX_MFIter.H:141
An Iterator over the Orientation of Faces of a Box.
Definition AMReX_Orientation.H:135
Encapsulation of the Orientation of the Faces of a Box.
Definition AMReX_Orientation.H:29
__host__ __device__ int coordDir() const noexcept
Returns the coordinate direction.
Definition AMReX_Orientation.H:83
bool notInLaunchRegion() noexcept
Definition AMReX_GpuControl.H:93
Definition AMReX_Amr.cpp:49
__host__ __device__ void interpbndrydata_z_o3(int i, int j, int k, int n, Array4< T > const &bdry, int nb, Array4< T const > const &crse, int nc, Dim3 const &r, Array4< int const > const &mask, int not_covered, int) noexcept
Definition AMReX_InterpBndryData_3D_K.H:90
__host__ __device__ void interpbndrydata_y_o3(int i, int j, int, int n, Array4< T > const &bdry, int nb, Array4< T const > const &crse, int nc, Dim3 const &r, Array4< int const > const &mask, int not_covered, int max_width) noexcept
Definition AMReX_InterpBndryData_2D_K.H:75
__host__ __device__ void interpbndrydata_x_o3(int i, int, int, int n, Array4< T > const &bdry, int nb, Array4< T const > const &crse, int nc, Dim3 const &r, Array4< int const > const &, int, int) noexcept
Definition AMReX_InterpBndryData_1D_K.H:22
__host__ __device__ void interpbndrydata_o1(int i, int, int, int n, Array4< T > const &bdry, int nb, Array4< T const > const &crse, int nc, Dim3 const &r) noexcept
Definition AMReX_InterpBndryData_1D_K.H:11
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:230
void setVal(MF &dst, typename MF::value_type val)
dst = val
Definition AMReX_FabArrayUtility.H:1875
FabArray memory allocation information.
Definition AMReX_FabArray.H:66
Definition AMReX_MFIter.H:20
MFItInfo & SetDynamic(bool f) noexcept
Definition AMReX_MFIter.H:34