2#ifndef AMREX_BNDRYREGISTER_H_
3#define AMREX_BNDRYREGISTER_H_
4#include <AMReX_Config.H>
52 int in_rad,
int out_rad,
int extent_rad,
int ncomp);
64 int in_rad,
int out_rad,
int extent_rad,
int ncomp);
68 int in_rad,
int out_rad,
int extent_rad,
int ncomp,
94 int src_comp,
int dest_comp,
int num_comp,
99 int src_comp,
int dest_comp,
int num_comp,
105 int dest_comp,
int num_comp,
int n_ghost = 0);
114 void write (
const std::string& name, std::ostream& os)
const;
117 void read (
const std::string& name, std::istream& is);
129template <
typename MF>
132 int in_rad,
int out_rad,
133 int extent_rad,
int ncomp)
145template <
typename MF>
149 int in_rad,
int out_rad,
150 int extent_rad,
int ncomp)
159template <
typename MF>
163 for (
auto & i : bndry) {
169template <
typename MF>
172 int _out_rad,
int _extent_rad,
int _ncomp,
181 fabs.
define(fsBA,dmap,_ncomp);
188 fabs.
setVal(std::numeric_limits<value_type>::quiet_NaN());
191template <
typename MF>
203 for (
auto const& k : bndry) {
209template <
typename MF>
214 bndry[face()].setVal(v);
218template <
typename MF>
224 const auto f = face();
225 const int ncomp = bndry[f].nComp();
227#pragma omp parallel if (Gpu::notInLaunchRegion())
230 const Box& bx = bfsi.validbox();
231 auto const sfab = rhs[f].array(bfsi);
232 auto dfab = bndry[f].array(bfsi);
235 dfab(i,j,k,n) += sfab(i,j,k,n);
242template <
typename MF>
246 return operator+=(rhs);
249template <
typename MF>
253 int dest_comp,
int num_comp,
int n_ghost)
257 bndry[face()].
linComb(a, mfa, a_comp,
259 dest_comp, num_comp, n_ghost);
264template <
typename MF>
267 int src_comp,
int dest_comp,
int num_comp,
271 bndry[face()].multiFab().ParallelCopy_nowait(src,src_comp,dest_comp,num_comp,
276 bndry[face()].multiFab().ParallelCopy_finish();
281template <
typename MF>
284 int src_comp,
int dest_comp,
int num_comp,
289 bndry[face()].
plusFrom(src,nghost,src_comp,dest_comp,num_comp,period);
294template <
typename MF>
311 const int i = face();
316 bndry[face()].write(facename);
320template <
typename MF>
329 amrex::Abort(
"BndryRegisterT<MF>::read: grids do not match");
339 const int i = face();
344 bndry[face()].read(facename);
349template <
typename MF>
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
#define AMREX_HOST_DEVICE_PARALLEL_FOR_4D(...)
Definition AMReX_GpuLaunchMacrosC.nolint.H:111
A BndryRegister organizes FabSets bounding each grid in a BoxArray. A FabSet is maintained for each b...
Definition AMReX_BndryRegister.H:41
void setVal(value_type v)
Set all boundary FABs to given value.
Definition AMReX_BndryRegister.H:210
int size() const noexcept
Return the number of grids in this domain.
Definition AMReX_BndryRegister.H:77
void write(const std::string &name, std::ostream &os) const
Write (used for writing to checkpoint)
Definition AMReX_BndryRegister.H:296
BndryRegisterT< MF > & copyFrom(const MF &src, int nghost, int src_comp, int dest_comp, int num_comp, const Periodicity &period=Periodicity::NonPeriodic())
Fill the boundary FABs on intersection with given MF.
Definition AMReX_BndryRegister.H:266
BndryRegisterT< MF > & operator+=(const BndryRegisterT< MF > &rhs)
register += rhs
Definition AMReX_BndryRegister.H:220
void setBoxes(const BoxArray &grids)
Set box domain, if not set previously.
Definition AMReX_BndryRegister.H:193
BoxArray grids
Definition AMReX_BndryRegister.H:126
BndryRegisterT< MF > & plus(const BndryRegisterT< MF > &rhs)
Definition AMReX_BndryRegister.H:244
BndryRegisterT< MF > & plusFrom(const MF &src, int nghost, int src_comp, int dest_comp, int num_comp, const Periodicity &period=Periodicity::NonPeriodic())
Increment the boundary FABs on intersect with given MF.
Definition AMReX_BndryRegister.H:283
const DistributionMapping & DistributionMap() const noexcept
Returns constant reference to associated DistributionMapping.
Definition AMReX_BndryRegister.H:111
void clear()
Definition AMReX_BndryRegister.H:161
const FabSetT< MF > & operator[](Orientation face) const noexcept
Return const set of FABs bounding the domain grid boxes on a given orientation.
Definition AMReX_BndryRegister.H:80
static void Copy(BndryRegisterT< MF > &dst, const BndryRegisterT< MF > &src)
Local copy function.
Definition AMReX_BndryRegister.H:351
FabSetT< MF > bndry[2 *AMREX_SPACEDIM]
The data.
Definition AMReX_BndryRegister.H:125
void define(const BoxArray &grids_, const DistributionMapping &dmap, int in_rad, int out_rad, int extent_rad, int ncomp)
Definition AMReX_BndryRegister.H:147
typename MF::value_type value_type
Definition AMReX_BndryRegister.H:44
void read(const std::string &name, std::istream &is)
Read (used for reading from checkpoint)
Definition AMReX_BndryRegister.H:322
BndryRegisterT< MF > & linComb(value_type a, const MF &mfa, int a_comp, value_type b, const MF &mfb, int b_comp, int dest_comp, int num_comp, int n_ghost=0)
Linear combination: this := a*mfa + b*mfb on intersection of MFs with the boundary FABs.
Definition AMReX_BndryRegister.H:251
const BoxArray & boxes() const noexcept
Get box domain (as an array of boxes).
Definition AMReX_BndryRegister.H:74
BndryRegisterT() noexcept=default
The default constructor.
A collection of Boxes stored in an Array.
Definition AMReX_BoxArray.H:550
int readFrom(std::istream &is)
Initialize the BoxArray from the supplied istream. It is an error if the BoxArray has already been in...
Long size() const noexcept
Return the number of boxes in the BoxArray.
Definition AMReX_BoxArray.H:597
bool empty() const noexcept
Return whether the BoxArray is empty.
Definition AMReX_BoxArray.H:603
Calculates the distribution of FABs to MPI processes.
Definition AMReX_DistributionMapping.H:41
Definition AMReX_FabSet.H:149
A FabSet is a group of FArrayBox's. The grouping is designed specifically to represent regions along ...
Definition AMReX_FabSet.H:46
static void Copy(FabSetT< MF > &dst, const FabSetT< MF > &src)
Definition AMReX_FabSet.H:389
void setVal(value_type val)
Definition AMReX_FabSet.H:254
int size() const noexcept
Definition AMReX_FabSet.H:90
void define(const BoxArray &grids, const DistributionMapping &dmap, int ncomp)
Define a FabSetT<MF> constructed via default constructor.
Definition AMReX_FabSet.H:163
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE constexpr IndexTypeND< dim > TheCellType() noexcept
This static member function returns an IndexTypeND object of value IndexTypeND::CELL....
Definition AMReX_IndexType.H:149
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
This provides length of period for periodic domains. 0 means it is not periodic in that direction....
Definition AMReX_Periodicity.H:17
static const Periodicity & NonPeriodic() noexcept
Definition AMReX_Periodicity.cpp:52
bool IOProcessor() noexcept
Is this CPU the I/O Processor? To get the rank number, call IOProcessorNumber()
Definition AMReX_ParallelDescriptor.H:275
Definition AMReX_Amr.cpp:49
std::string Concatenate(const std::string &root, int num, int mindigits)
Returns rootNNNN where NNNN == num.
Definition AMReX_String.cpp:34
bool match(const BoxArray &x, const BoxArray &y)
Note that two BoxArrays that match are not necessarily equal.
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
This shuts up the compiler about unused variables.
Definition AMReX.H:127
void Abort(const std::string &msg)
Print out message to cerr and exit via abort().
Definition AMReX.cpp:230