Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
amrex::iMultiFab Class Reference

A Collection of IArrayBoxes. More...

#include <AMReX_iMultiFab.H>

Inheritance diagram for amrex::iMultiFab:
amrex::FabArray< IArrayBox > amrex::FabArrayBase

Public Member Functions

 iMultiFab () noexcept=default
 Constructs an empty iMultiFab. Data can be defined at a later time using the define member functions inherited from FabArray.
 iMultiFab (Arena *a) noexcept
 Constructs an empty iMultiFab. Data can be defined at a later time using the define member functions inherited from FabArray. If define is called later with a nullptr as MFInfo's arena, the default Arena a will be used. If the arena in MFInfo is not a nullptr, the MFInfo's arena will be used.
 iMultiFab (const BoxArray &bxs, const DistributionMapping &dm, int ncomp, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
 Constructs a iMultiFab with a valid region defined by bxs and a region of definition defined by the grow factor ngrow.
 iMultiFab (const BoxArray &bxs, const DistributionMapping &dm, int ncomp, const IntVect &ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
 iMultiFab (const iMultiFab &rhs, MakeType maketype, int scomp, int ncomp)
 Make an alias iMultiFab. maketype must be amrex::make_alias. scomp is the starting component of the alias and ncomp is the number of components in the new aliasing iMultiFab.
 ~iMultiFab ()=default
 iMultiFab (iMultiFab &&rhs) noexcept=default
iMultiFab & operator= (iMultiFab &&rhs) noexcept=default
 iMultiFab (const iMultiFab &rhs)=delete
iMultiFab & operator= (const iMultiFab &rhs)=delete
iMultiFab & operator= (int r)
int min (int comp, int nghost=0, bool local=false) const
 Returns the minimum value contained in component comp of the iMultiFab. The parameter nghost determines the number of boundary cells to search for the minimum. The default is to search only the valid regions of the IArrayBoxes.
int min (const Box &region, int comp, int nghost=0, bool local=false) const
 Identical to the previous min() function, but confines its search to intersection of Box b and the iMultiFab.
int max (int comp, int nghost=0, bool local=false) const
 Returns the maximum value contained in component comp of the iMultiFab. The parameter nghost determines the number of boundary cells to search for the maximum. The default is to search only the valid regions of the IArrayBoxes.
int max (const Box &region, int comp, int nghost=0, bool local=false) const
 Identical to the previous max() function, but confines its search to intersection of Box b and the iMultiFab.
Long sum (int comp, int nghost=0, bool local=false) const
 Returns the sum in component comp.
Long sum (Box const &region, int comp=0, bool local=false) const
 Returns the sum of component "comp" in the given "region". – no ghost cells are included.
void plus (int val, int comp, int num_comp, int nghost=0)
 Adds the scalar value val to the value of each cell in the specified subregion of the iMultiFab. The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void plus (int val, const Box &region, int comp, int num_comp, int nghost=0)
 Identical to the previous version of plus(), with the restriction that the subregion is further constrained to the intersection with Box region.
void plus (int val, int nghost)
 Adds the scalar value val to the value of each cell in the valid region of each component of the iMultiFab. The value of nghost specifies the number of cells in the boundary region that should be modified.
void plus (int val, const Box &region, int nghost)
 Adds the scalar value val to the value of each cell in the valid region of each component of the iMultiFab, that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void mult (int val, int comp, int num_comp, int nghost=0)
 Scales the value of each cell in the specified subregion of the iMultiFab by the scalar val (a[i] <- a[i]*val). The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void mult (int val, const Box &region, int comp, int num_comp, int nghost=0)
 Identical to the previous version of mult(), with the restriction that the subregion is further constrained to the intersection with Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void mult (int val, int nghost=0)
 Scales the value of each cell in the valid region of each component of the iMultiFab by the scalar val (a[i] <- a[i]*val). The value of nghost specifies the number of cells in the boundary region that should be modified.
void mult (int val, const Box &region, int nghost=0)
 Scales the value of each cell in the valid region of each component of the iMultiFab by the scalar val (a[i] <- a[i]*val), that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void negate (int comp, int num_comp, int nghost=0)
 Negates the value of each cell in the specified subregion of the iMultiFab. The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.
void negate (const Box &region, int comp, int num_comp, int nghost=0)
 Identical to the previous version of negate(), with the restriction that the subregion is further constrained to the intersection with Box region.
void negate (int nghost=0)
 Negates the value of each cell in the valid region of the iMultiFab. The value of nghost specifies the number of cells in the boundary region that should be modified.
void negate (const Box &region, int nghost=0)
 Negates the value of each cell in the valid region of the iMultiFab that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region that should be modified.
IntVect minIndex (int comp, int nghost=0) const
IntVect maxIndex (int comp, int nghost=0) const
void plus (const iMultiFab &mf, int strt_comp, int num_comp, int nghost)
 This function adds the values of the cells in mf to the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The addition is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified.
void minus (const iMultiFab &mf, int strt_comp, int num_comp, int nghost)
 This function subtracts the values of the cells in mf from the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The subtraction is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified.
void divide (const iMultiFab &mf, int strt_comp, int num_comp, int nghost)
 This function divides the values of the cells in mf from the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The division is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified. Note, nothing is done to protect against divide by zero.
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, const IntVect &ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
Public Member Functions inherited from amrex::FabArray< IArrayBox >
auto get_send_copy_tag_vector (Vector< char * > const &send_data, Vector< std::size_t > const &send_size, Vector< CopyComTagsContainer const * > const &send_cctc, int ncomp, std::uint64_t id) const -> TagVector< CommSendBufTag< value_type > > const *
void pack_send_buffer_gpu (FabArray< IArrayBox > const &src, int scomp, int ncomp, Vector< char * > const &send_data, Vector< std::size_t > const &send_size, Vector< CopyComTagsContainer const * > const &send_cctc, std::uint64_t id)
auto get_recv_copy_tag_vector (Vector< char * > const &recv_data, Vector< std::size_t > const &recv_size, Vector< CopyComTagsContainer const * > const &recv_cctc, int ncomp, std::uint64_t id) -> TagVector< CommRecvBufTag< value_type > > const *
void unpack_recv_buffer_gpu (FabArray< IArrayBox > &dst, int dcomp, int ncomp, Vector< char * > const &recv_data, Vector< std::size_t > const &recv_size, Vector< CopyComTagsContainer const * > const &recv_cctc, CpOp op, bool is_thread_safe, std::uint64_t id, bool deterministic)
void pack_send_buffer_cpu (FabArray< IArrayBox > const &src, int scomp, int ncomp, Vector< char * > const &send_data, Vector< std::size_t > const &send_size, Vector< CopyComTagsContainer const * > const &send_cctc)
void unpack_recv_buffer_cpu (FabArray< IArrayBox > &dst, int dcomp, int ncomp, Vector< char * > const &recv_data, Vector< std::size_t > const &recv_size, Vector< CopyComTagsContainer const * > const &recv_cctc, CpOp op, bool is_thread_safe)
 FabArray () noexcept
 Constructs an empty FabArray<FAB>.
 ~FabArray ()
 The destructor – deletes all FABs in the array.
FabArray< IArrayBox > & operator= (FabArray< IArrayBox > &&rhs) noexcept
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow, const MFInfo &info=MFInfo(), const FabFactory< IArrayBox > &factory=DefaultFabFactory< IArrayBox >())
 Define this FabArray identically to that performed by the constructor having an analogous function signature. This is only valid if this FabArray was defined using the default constructor.
const FabFactory< IArrayBox > & Factory () const noexcept
 Factory used to create FAB instances for this FabArray.
Arena * arena () const noexcept
 Arena configured for allocations by this FabArray.
const Vector< std::string > & tags () const noexcept
 Memory-usage tags recorded for this FabArray's allocations.
bool hasEBFabFactory () const noexcept
 Return whether this FabArray uses an EBFArrayBoxFactory.
value_type * singleChunkPtr () noexcept
std::size_t singleChunkSize () const noexcept
bool isAllRegular () const noexcept
 Return the EB factory's all-regular status, or true for other factories.
bool ok () const
 Return true if the FabArray is well-defined. That is, the FabArray has a BoxArray and DistributionMapping, the FABs are allocated for each Box in the BoxArray and the sizes of the FABs and the number of components are consistent with the definition of the FabArray.
bool isDefined () const
const IArrayBox & operator[] (const MFIter &mfi) const noexcept
 Return a constant reference to the FAB associated with mfi.
const IArrayBox & get (const MFIter &mfi) const noexcept
 Return a constant reference to the FAB associated with mfi.
IArrayBox & atLocalIdx (int L) noexcept
 Return a reference to the FAB associated with local index L.
IArrayBox * fabPtr (const MFIter &mfi) noexcept
 Return pointer to FAB.
void prefetchToHost (const MFIter &mfi) const noexcept
 Request that the FAB selected by iterator mfi be prefetched to host memory, where supported.
void prefetchToDevice (const MFIter &mfi) const noexcept
 Request that the FAB selected by iterator mfi be prefetched to device memory, where supported.
Array4< typename FabArray< IArrayBox >::value_type const > array (const MFIter &mfi) const noexcept
 Read-only Array4 view for the FAB referenced by iterator mfi.
Array4< typename FabArray< IArrayBox >::value_type const > const_array (const MFIter &mfi) const noexcept
 Synonym for array(const MFIter&) that highlights read-only semantics.
MultiArray4< typename FabArray< IArrayBox >::value_type > arrays () noexcept
 Build, if needed, and return mutable Array4 views for local FABs.
MultiArray4< typename FabArray< IArrayBox >::value_type const > const_arrays () const noexcept
 Read-only convenience wrapper equivalent to arrays() const.
void setFab (int boxno, std::unique_ptr< IArrayBox > elem)
 Explicitly set the Kth FAB in the FabArray to point to elem.
IArrayBox * release (int K)
 Release ownership of the FAB. This function is not thread safe.
void clear ()
 Releases FAB memory in the FabArray.
void LocalCopy (FabArray< SFAB > const &src, int scomp, int dcomp, int ncomp, IntVect const &nghost)
 Perform local copy of FabArray data.
void LocalAdd (FabArray< IArrayBox > const &src, int scomp, int dcomp, int ncomp, IntVect const &nghost)
 Perform local addition of FabArray data.
void setVal (value_type val)
 Set all components in the entire region of each FAB to val.
void abs (int comp, int ncomp, int nghost=0)
void plus (value_type val, int comp, int num_comp, int nghost=0)
void mult (value_type val, int comp, int num_comp, int nghost=0)
void invert (value_type numerator, int comp, int num_comp, int nghost=0)
void setBndry (value_type val)
 Set all values in the boundary region to val.
void setDomainBndry (value_type val, const Geometry &geom)
 Set all values outside the Geometry domain described by geom to val.
void capacityOfFabs (LayoutData< Int > &mem) const
 Accumulate the per-FAB allocation sizes.
F::value_type sum (int comp, IntVect const &nghost, bool local=false) const
 Returns the sum of component "comp".
void ParallelAdd (const FabArray< IArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic())
 This function copies data from src to this FabArray. Each FAB in fa is intersected with all FABs in this FabArray and a copy is performed on the region of intersection. The intersection is restricted to the valid regions.
void ParallelCopy (const FabArray< IArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic(), CpOp op=FabArrayBase::COPY)
void copy (const FabArray< IArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic(), CpOp op=FabArrayBase::COPY)
void ParallelAdd_nowait (const FabArray< IArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic())
 Start an asynchronous ParallelAdd over all components.
void ParallelCopy_nowait (const FabArray< IArrayBox > &src, const Periodicity &period=Periodicity::NonPeriodic(), CpOp op=FabArrayBase::COPY)
 Start an asynchronous ParallelCopy that copies every component.
void ParallelCopy_finish ()
 Finish the current nowait ParallelCopy or ParallelAdd operation.
void ParallelCopyToGhost (const FabArray< IArrayBox > &src, int scomp, int dcomp, int ncomp, const IntVect &snghost, const IntVect &dnghost, const Periodicity &period=Periodicity::NonPeriodic())
 Copy source data to destination ghost cells only.
void ParallelCopyToGhost_nowait (const FabArray< IArrayBox > &src, int scomp, int dcomp, int ncomp, const IntVect &snghost, const IntVect &dnghost, const Periodicity &period=Periodicity::NonPeriodic())
 Start an asynchronous version of ParallelCopyToGhost().
void ParallelCopyToGhost_finish ()
 Finish the current ParallelCopyToGhost_nowait() operation.
void Redistribute (const FabArray< IArrayBox > &src, int scomp, int dcomp, int ncomp, const IntVect &nghost)
 Copy from src to this. this and src have the same BoxArray, but different DistributionMapping.
void copyTo (IArrayBox &dest, int nghost=0) const
 Copy the values contained in the intersection of the valid + nghost region of this FabArray with the FAB dest into dest. Note that FAB dest is assumed to be identical on each process.
void shift (const IntVect &v)
 Shift the boxarray by vector v.
bool defined (int K) const noexcept
void FillBoundary (bool cross=false)
 Copy on intersection within a FabArray.
void FillBoundary_nowait (bool cross=false)
void FillBoundary_finish ()
void FillBoundary_test ()
void FillBoundaryAndSync (const Periodicity &period=Periodicity::NonPeriodic())
 Fill ghost cells and synchronize nodal data.
void FillBoundaryAndSync_nowait (const Periodicity &period=Periodicity::NonPeriodic())
void FillBoundaryAndSync_finish ()
void OverrideSync (const Periodicity &period=Periodicity::NonPeriodic())
 Synchronize nodal data.
void OverrideSync_nowait (const Periodicity &period=Periodicity::NonPeriodic())
 Split-phase version of OverrideSync.
void OverrideSync_finish ()
void SumBoundary (const Periodicity &period=Periodicity::NonPeriodic(), bool deterministic=false)
 Sum values in overlapped cells.
void SumBoundary_nowait (const Periodicity &period=Periodicity::NonPeriodic(), bool deterministic=false)
void SumBoundary_finish ()
void EnforcePeriodicity (const Periodicity &period)
 Fill ghost cells with values from their corresponding cells across periodic boundaries, regardless of whether the corresponding cells are valid.
void BuildMask (const Box &phys_domain, const Periodicity &period, value_type covered, value_type notcovered, value_type physbnd, value_type interior)
void FBEP_nowait (int scomp, int ncomp, const IntVect &nghost, const Periodicity &period, bool cross, bool enforce_periodicity_only=false, bool override_sync=false, IntVect const &sumboundary_src_nghost=IntVect(-1), bool deterministic=false)
void FB_local_copy_cpu (const FB &TheFB, int scomp, int ncomp)
void FB_local_add_cpu (const FB &TheFB, int scomp, int ncomp)
void PC_local_cpu (const CPC &thecpc, FabArray< IArrayBox > const &src, int scomp, int dcomp, int ncomp, CpOp op)
LayoutData< int > RecvLayoutMask (const CommMetaData &thecmd)
TagVector< Array4CopyTag< value_type > > const * FB_get_local_copy_tag_vector (const FB &TheFB)
void FB_local_copy_gpu (const FB &TheFB, int scomp, int ncomp)
void FB_local_add_gpu (const FB &TheFB, int scomp, int ncomp, bool deterministic)
void PC_local_gpu (const CPC &thecpc, FabArray< IArrayBox > const &src, int scomp, int dcomp, int ncomp, CpOp op, bool deterministic)
void CMD_local_setVal_gpu (value_type x, const CommMetaData &thecmd, int scomp, int ncomp)
void CMD_remote_setVal_gpu (value_type x, const CommMetaData &thecmd, int scomp, int ncomp)
F::value_type norminf (int comp, int ncomp, IntVect const &nghost, bool local=false, bool ignore_covered=false) const
 Return infinity norm. A NaN counts as infinity.
Public Member Functions inherited from amrex::FabArrayBase
 FabArrayBase ()=default
 ~FabArrayBase ()=default
 FabArrayBase (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow)
 FabArrayBase (const BoxArray &bxs, const DistributionMapping &dm, int nvar, const IntVect &ngrow)
 FabArrayBase (FabArrayBase &&rhs) noexcept=default
 FabArrayBase (const FabArrayBase &rhs)=default
FabArrayBase & operator= (const FabArrayBase &rhs)=default
FabArrayBase & operator= (FabArrayBase &&rhs)=default
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, int ngrow)
void define (const BoxArray &bxs, const DistributionMapping &dm, int nvar, const IntVect &ngrow)
int nGrow (int direction=0) const noexcept
 Return the grow factor that defines the region of definition.
IntVect nGrowVect () const noexcept
int nComp () const noexcept
 Return number of variables (aka components) associated with each point.
IndexType ixType () const noexcept
 Return index type.
bool empty () const noexcept
const BoxArray & boxArray () const noexcept
 Return a constant reference to the BoxArray that defines the valid region associated with this FabArray.
Box box (int K) const noexcept
 Return the Kth Box in the BoxArray. That is, the valid region of the Kth grid.
Box fabbox (int K) const noexcept
 Return the Kth FABs Box in the FabArray. That is, the region the Kth fab is actually defined on.
int size () const noexcept
 Return the number of FABs in the FabArray.
int local_size () const noexcept
 Return the number of local FABs in the FabArray.
const Vector< int > & IndexArray () const noexcept
 Return constant reference to indices in the FabArray that we have access.
int localindex (int K) const noexcept
 Return local index in the vector of FABs.
const DistributionMapping & DistributionMap () const noexcept
 Return constant reference to associated DistributionMapping.
bool is_nodal () const noexcept
 This tests on whether the FabArray is fully nodal.
bool is_nodal (int dir) const noexcept
 This tests on whether the FabArray is nodal in direction dir.
bool is_cell_centered () const noexcept
 This tests on whether the FabArray is cell-centered.
void setMultiGhost (bool a_multi_ghost)
 Record whether this FabArrayBase participates in multi-ghost exchanges.
IntVect nGrowFilled () const noexcept
 Return the halo width currently recorded as up to date.
void setNGrowFilled (IntVect const &ng) noexcept
 Update the bookkeeping on how many ghost cells are known to be valid.
bool isFusingCandidate () const noexcept
 Is this a good candidate for kernel fusing?
BDKey getBDKey () const noexcept
void updateBDKey ()
 Refresh the cached BDKey after rebinding BoxArray or DistributionMapping data.
void flushFPinfo (bool no_assertion=false) const
void flushCFinfo (bool no_assertion=false) const
const TileArray * getTileArray (const IntVect &tilesize) const
 Return the cached tile decomposition used by MFIter.
void clear ()
 Clear this object's BoxArray, DistributionMapping, local index/ownership data, and BDKey so the container can be redefined.
const std::vector< bool > & OwnerShip () const noexcept
 Return owenership of fabs. The concept of ownership only applies when UPC++ team is used. In that case, each fab is shared by team workers, with one taking the ownership.
bool isOwner (int li) const noexcept
void buildTileArray (const IntVect &tilesize, TileArray &ta) const
void flushTileArray (const IntVect &tilesize=IntVect::TheZeroVector(), bool no_assertion=false) const
void define_fb_metadata (CommMetaData &cmd, const IntVect &nghost, bool cross, const Periodicity &period, bool multi_ghost) const
 Populate communication metadata for FillBoundary-style operations.
const FB & getFB (const IntVect &nghost, const Periodicity &period, bool cross=false, bool enforce_periodicity_only=false, bool override_sync=false, IntVect const &sumboundary_src_nghost=IntVect(-1)) const
 Retrieve (and cache) the FillBoundary metadata for the requested halo.
const CPC & getCPC (const IntVect &dstng, const FabArrayBase &src, const IntVect &srcng, const Periodicity &period, bool to_ghost_cells_only=false, const IntVect &offset=IntVect(0)) const
 Retrieve (and cache) the ParallelCopy metadata between two FabArrays.
const RB90 & getRB90 (const IntVect &nghost, const Box &domain) const
void flushRB90 (bool no_assertion=false) const
 This flushes its own RB90.
const RB180 & getRB180 (const IntVect &nghost, const Box &domain) const
void flushRB180 (bool no_assertion=false) const
 This flushes its own RB180.
const PolarB & getPolarB (const IntVect &nghost, const Box &domain) const
void flushPolarB (bool no_assertion=false) const
 This flushes its own PolarB.
ParForInfo const & getParForInfo (const IntVect &nghost) const
 Obtain metadata describing how to launch device ParallelFor over this FabArray.
ParForInfo const & getParForInfo (const IntVect &stride, const IntVect &offset) const
 Obtain metadata for launching device ParallelFor over the valid points whose index equals offset modulo stride.
ParForInfo const & getParForInfoRedBlack () const
 Obtain metadata for a red-black ParallelFor over the valid region.
void flushParForInfo (bool no_assertion=false) const
void clearThisBD (bool no_assertion=false) const
 clear BD count and caches associated with this BD, if no other is using this BD.
void addThisBD ()
 add the current BD into BD count database

Static Public Member Functions

static void Add (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Add src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.
static void Add (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Copy (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Copy from src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.
static void Copy (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Swap (iMultiFab &dst, iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Swap from src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray. The swap is local.
static void Swap (iMultiFab &dst, iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Subtract (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Subtract src from dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.
static void Subtract (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Multiply (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Multiply dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.
static void Multiply (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Divide (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, int nghost)
 Divide dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.
static void Divide (iMultiFab &dst, const iMultiFab &src, int srccomp, int dstcomp, int numcomp, const IntVect &nghost)
static void Initialize ()
static void Finalize ()
Static Public Member Functions inherited from amrex::FabArray< IArrayBox >
static void Saxpy (FabArray< IArrayBox > &y, value_type a, FabArray< IArrayBox > const &x, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y += a*x
static void Xpay (FabArray< IArrayBox > &y, value_type a, FabArray< IArrayBox > const &x, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y = x + a*y
static void LinComb (FabArray< IArrayBox > &dst, value_type a, const FabArray< IArrayBox > &x, int xcomp, value_type b, const FabArray< IArrayBox > &y, int ycomp, int dstcomp, int numcomp, const IntVect &nghost)
 dst = a*x + b*y
static void Saxpy_Xpay (FabArray< IArrayBox > &y, value_type a1, FabArray< IArrayBox > const &x1, value_type a2, FabArray< IArrayBox > const &x2, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y = x2+a2*(y+a1*x1)
static void Saxpy_Saxpy (FabArray< IArrayBox > &y1, value_type a1, FabArray< IArrayBox > const &x1, FabArray< IArrayBox > &y2, value_type a2, FabArray< IArrayBox > const &x2, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y1 += a1*x1; y2 += a2*x2;
static void Saypy_Saxpy (FabArray< IArrayBox > &y1, value_type a1, FabArray< IArrayBox > &y2, value_type a2, FabArray< IArrayBox > const &x, int xcomp, int ycomp, int ncomp, IntVect const &nghost)
 y1 += a1*y2; y2 += a2*x;
Static Public Member Functions inherited from amrex::FabArrayBase
static Long bytesOfMapOfCopyComTagContainers (const MapOfCopyComTagContainers &)
static void Initialize ()
 Initialize from ParmParse with "fabarray" prefix.
static void Finalize ()
static const FPinfo & TheFPinfo (const FabArrayBase &srcfa, const FabArrayBase &dstfa, const IntVect &dstng, const BoxConverter &coarsener, const Geometry &fgeom, const Geometry &cgeom, const EB2::IndexSpace *)
static void flushFPinfo (const EB2::IndexSpace *ispace)
 Erase all FillPatch cache entries built with the given EB index space.
static const CFinfo & TheCFinfo (const FabArrayBase &finefa, const Geometry &finegm, const IntVect &ng, bool include_periodic, bool include_physbndry)
static void updateMemUsage (std::string const &tag, Long nbytes, Arena const *ar)
 Accumulate memory usage statistics for diagnostics.
static void printMemUsage ()
 Print the tracked memory usage table on the current subcommunicator's I/O process.
static Long queryMemUsage (const std::string &tag=std::string("All"))
 Query the currently-live bytes tracked under tag (defaults to the All tag).
static Long queryMemUsageHWM (const std::string &tag=std::string("All"))
 Query the recorded high-water mark tracked under tag (defaults to the All tag).
static void pushRegionTag (const char *t)
 Push a memory-region tag used to classify subsequent FabArray allocations.
static void pushRegionTag (std::string t)
 Overload accepting std::string.
static void popRegionTag ()
 Pop the most recent region tag. The tag stack must be nonempty.
static void flushTileArrayCache ()
 This flushes the entire cache.
static void flushRB90Cache ()
 This flushes the entire cache.
static void flushRB180Cache ()
 This flushes the entire cache.
static void flushPolarBCache ()
 This flushes the entire cache.
static void flushParForCache ()
static bool getAllocSingleChunk ()
 Query whether single-chunk allocation is enabled for new FabArrays.
static std::uint64_t getNextCommMetaDataId ()
 Generate a monotonically increasing identifier for communication metadata objects.

Additional Inherited Members

Public Types inherited from amrex::FabArray< IArrayBox >
using value_type
using fab_type
Public Types inherited from amrex::FabArrayBase
enum  CpOp { COPY = 0 , ADD = 1 }
 parallel copy or add More...
using CopyComTagsContainer = CopyComTag::CopyComTagsContainer
using MapOfCopyComTagContainers = CopyComTag::MapOfCopyComTagContainers
using FPinfoCache = std::multimap<BDKey,FabArrayBase::FPinfo*>
using FPinfoCacheIter = FPinfoCache::iterator
using CFinfoCache = std::multimap<BDKey,FabArrayBase::CFinfo*>
using CFinfoCacheIter = CFinfoCache::iterator
using TAMap = std::map<std::pair<IntVect,IntVect>, TileArray>
using TACache = std::map<BDKey, TAMap>
using FBCache = std::multimap<BDKey,FabArrayBase::FB*>
using FBCacheIter = FBCache::iterator
using CPCache = std::multimap<BDKey,FabArrayBase::CPC*>
using CPCacheIter = CPCache::iterator
using RB90Cache = std::multimap<BDKey,FabArrayBase::RB90*>
using RB90CacheIter = RB90Cache::iterator
using RB180Cache = std::multimap<BDKey,FabArrayBase::RB180*>
using RB180CacheIter = RB180Cache::iterator
using PolarBCache = std::multimap<BDKey,FabArrayBase::PolarB*>
using PolarBCacheIter = PolarBCache::iterator
Public Attributes inherited from amrex::FabArray< IArrayBox >
std::unique_ptr< FBData< IArrayBox > > fbd
std::unique_ptr< PCData< IArrayBox > > pcd
std::unique_ptr< FabArray< IArrayBox > > os_temp
Public Attributes inherited from amrex::FabArrayBase
BoxArray boxarray
DistributionMapping distributionMap
Vector< int > indexArray
std::vector< bool > ownership
IntVect n_grow
int n_comp
BDKey m_bdkey
IntVect n_filled
bool m_multi_ghost = false
Static Public Attributes inherited from amrex::FabArrayBase
static IntVect mfiter_tile_size
 Default tilesize in MFIter.
static int MaxComp = 25
 The maximum number of components to copy() at a time.
static IntVect comm_tile_size
 communication tile size
static FPinfoCache m_TheFillPatchCache
static CacheStats m_FPinfo_stats
static CFinfoCache m_TheCrseFineCache
static CacheStats m_CFinfo_stats
static std::map< std::string, meminfo > m_mem_usage
static std::vector< std::string > m_region_tag
static TACache m_TheTileArrayCache
static CacheStats m_TAC_stats
static FBCache m_TheFBCache
static CacheStats m_FBC_stats
static CPCache m_TheCPCache
static CacheStats m_CPC_stats
static RB90Cache m_TheRB90Cache
static RB180Cache m_TheRB180Cache
static PolarBCache m_ThePolarBCache
static std::multimap< BDKey, ParForInfo * > m_TheParForCache
static std::map< BDKey, int > m_BD_count
 Keep track of how many FabArrays are built with the same BDKey.
static FabArrayStats m_FA_stats
static bool m_alloc_single_chunk = false
Protected Member Functions inherited from amrex::FabArray< IArrayBox >
void clear_arrays ()
 Free the cached Array4s so that they are rebuilt by the next arrays() call.
bool SharedMemory () const noexcept
Protected Attributes inherited from amrex::FabArray< IArrayBox >
std::unique_ptr< FabFactory< IArrayBox > > m_factory
DataAllocator m_dallocator
std::unique_ptr< detail::SingleChunkArena > m_single_chunk_arena
Long m_single_chunk_size
bool define_function_called
 has define() been called?
std::vector< IArrayBox * > m_fabs_v
 The data.
void * m_dp_arrays
void * m_hp_arrays
MultiArray4< value_type > m_arrays
MultiArray4< value_type const > m_const_arrays
Vector< std::string > m_tags
ShMem shmem

Detailed Description

A Collection of IArrayBoxes.

The iMultiFab class is publicly derived from the FabArray<int,IArrayBox> class. It is a collection (stored as an array) of IArrayBoxes useful for storing integer data on a domain defined by a union of rectangular regions embedded in a uniform index space. The iMultiFab class extends the function of the underlying FabArray class just as the IArrayBox class extends the function of BaseFab<int>. Additional member functions are defined for I/O and simple arithmetic operations on these aggregate objects.

This class does NOT provide a copy constructor or assignment operator.

Constructor & Destructor Documentation

◆ iMultiFab() [1/7]

amrex::iMultiFab::iMultiFab ( )
defaultnoexcept

Constructs an empty iMultiFab. Data can be defined at a later time using the define member functions inherited from FabArray.

◆ iMultiFab() [2/7]

amrex::iMultiFab::iMultiFab ( Arena * a)
explicitnoexcept

Constructs an empty iMultiFab. Data can be defined at a later time using the define member functions inherited from FabArray. If define is called later with a nullptr as MFInfo's arena, the default Arena a will be used. If the arena in MFInfo is not a nullptr, the MFInfo's arena will be used.

◆ iMultiFab() [3/7]

amrex::iMultiFab::iMultiFab ( const BoxArray & bxs,
const DistributionMapping & dm,
int ncomp,
int ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< IArrayBox > & factory = DefaultFabFactory<IArrayBox>() )

Constructs a iMultiFab with a valid region defined by bxs and a region of definition defined by the grow factor ngrow.

◆ iMultiFab() [4/7]

amrex::iMultiFab::iMultiFab ( const BoxArray & bxs,
const DistributionMapping & dm,
int ncomp,
const IntVect & ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< IArrayBox > & factory = DefaultFabFactory<IArrayBox>() )

◆ iMultiFab() [5/7]

amrex::iMultiFab::iMultiFab ( const iMultiFab & rhs,
MakeType maketype,
int scomp,
int ncomp )

Make an alias iMultiFab. maketype must be amrex::make_alias. scomp is the starting component of the alias and ncomp is the number of components in the new aliasing iMultiFab.

Parameters
rhs
maketype
scomp
ncomp

◆ ~iMultiFab()

amrex::iMultiFab::~iMultiFab ( )
default

◆ iMultiFab() [6/7]

amrex::iMultiFab::iMultiFab ( iMultiFab && rhs)
defaultnoexcept

◆ iMultiFab() [7/7]

amrex::iMultiFab::iMultiFab ( const iMultiFab & rhs)
delete

Member Function Documentation

◆ Add() [1/2]

void amrex::iMultiFab::Add ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Add() [2/2]

void amrex::iMultiFab::Add ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Add src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.

Parameters
dst
src
srccomp
dstcomp
numcomp
nghost

◆ Copy() [1/2]

void amrex::iMultiFab::Copy ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Copy() [2/2]

void amrex::iMultiFab::Copy ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Copy from src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.

Parameters
dst
src
srccomp
dstcomp
numcomp
nghost

◆ define() [1/2]

void amrex::iMultiFab::define ( const BoxArray & bxs,
const DistributionMapping & dm,
int nvar,
const IntVect & ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< IArrayBox > & factory = DefaultFabFactory<IArrayBox>() )

◆ define() [2/2]

void amrex::iMultiFab::define ( const BoxArray & bxs,
const DistributionMapping & dm,
int nvar,
int ngrow,
const MFInfo & info = MFInfo(),
const FabFactory< IArrayBox > & factory = DefaultFabFactory<IArrayBox>() )

◆ Divide() [1/2]

void amrex::iMultiFab::Divide ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Divide() [2/2]

void amrex::iMultiFab::Divide ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Divide dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.

Parameters
dst
src
srccomp
dstcomp
numcomp
nghost

◆ divide()

void amrex::iMultiFab::divide ( const iMultiFab & mf,
int strt_comp,
int num_comp,
int nghost )

This function divides the values of the cells in mf from the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The division is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified. Note, nothing is done to protect against divide by zero.

Parameters
mf
strt_comp
num_comp
nghost

◆ Finalize()

void amrex::iMultiFab::Finalize ( )
static

◆ Initialize()

void amrex::iMultiFab::Initialize ( )
static

◆ max() [1/2]

int amrex::iMultiFab::max ( const Box & region,
int comp,
int nghost = 0,
bool local = false ) const
nodiscard

Identical to the previous max() function, but confines its search to intersection of Box b and the iMultiFab.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.
Parameters
region
comp
nghost
local

◆ max() [2/2]

int amrex::iMultiFab::max ( int comp,
int nghost = 0,
bool local = false ) const
nodiscard

Returns the maximum value contained in component comp of the iMultiFab. The parameter nghost determines the number of boundary cells to search for the maximum. The default is to search only the valid regions of the IArrayBoxes.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.
Parameters
comp
nghost
local

◆ maxIndex()

IntVect amrex::iMultiFab::maxIndex ( int comp,
int nghost = 0 ) const
nodiscard
Warning
This routine performs an MPI collective, so every rank in the current active MPI communicator must participate.

◆ min() [1/2]

int amrex::iMultiFab::min ( const Box & region,
int comp,
int nghost = 0,
bool local = false ) const
nodiscard

Identical to the previous min() function, but confines its search to intersection of Box b and the iMultiFab.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.
Parameters
region
comp
nghost
local

◆ min() [2/2]

int amrex::iMultiFab::min ( int comp,
int nghost = 0,
bool local = false ) const
nodiscard

Returns the minimum value contained in component comp of the iMultiFab. The parameter nghost determines the number of boundary cells to search for the minimum. The default is to search only the valid regions of the IArrayBoxes.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.
Parameters
comp
nghost
local

◆ minIndex()

IntVect amrex::iMultiFab::minIndex ( int comp,
int nghost = 0 ) const
nodiscard
Warning
This routine performs an MPI collective, so every rank in the current active MPI communicator must participate.

◆ minus()

void amrex::iMultiFab::minus ( const iMultiFab & mf,
int strt_comp,
int num_comp,
int nghost )

This function subtracts the values of the cells in mf from the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The subtraction is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified.

Parameters
mf
strt_comp
num_comp
nghost

◆ mult() [1/4]

void amrex::iMultiFab::mult ( int val,
const Box & region,
int comp,
int num_comp,
int nghost = 0 )

Identical to the previous version of mult(), with the restriction that the subregion is further constrained to the intersection with Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
val
region
comp
num_comp
nghost

◆ mult() [2/4]

void amrex::iMultiFab::mult ( int val,
const Box & region,
int nghost = 0 )

Scales the value of each cell in the valid region of each component of the iMultiFab by the scalar val (a[i] <- a[i]*val), that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
val
region
nghost

◆ mult() [3/4]

void amrex::iMultiFab::mult ( int val,
int comp,
int num_comp,
int nghost = 0 )

Scales the value of each cell in the specified subregion of the iMultiFab by the scalar val (a[i] <- a[i]*val). The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
val
comp
num_comp
nghost

◆ mult() [4/4]

void amrex::iMultiFab::mult ( int val,
int nghost = 0 )

Scales the value of each cell in the valid region of each component of the iMultiFab by the scalar val (a[i] <- a[i]*val). The value of nghost specifies the number of cells in the boundary region that should be modified.

Parameters
val
nghost

◆ Multiply() [1/2]

void amrex::iMultiFab::Multiply ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Multiply() [2/2]

void amrex::iMultiFab::Multiply ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Multiply dst by src including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.

Parameters
dst
src
srccomp
dstcomp
numcomp
nghost

◆ negate() [1/4]

void amrex::iMultiFab::negate ( const Box & region,
int comp,
int num_comp,
int nghost = 0 )

Identical to the previous version of negate(), with the restriction that the subregion is further constrained to the intersection with Box region.

Parameters
region
comp
num_comp
nghost

◆ negate() [2/4]

void amrex::iMultiFab::negate ( const Box & region,
int nghost = 0 )

Negates the value of each cell in the valid region of the iMultiFab that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region that should be modified.

Parameters
region
nghost

◆ negate() [3/4]

void amrex::iMultiFab::negate ( int comp,
int num_comp,
int nghost = 0 )

Negates the value of each cell in the specified subregion of the iMultiFab. The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
comp
num_comp
nghost

◆ negate() [4/4]

void amrex::iMultiFab::negate ( int nghost = 0)

Negates the value of each cell in the valid region of the iMultiFab. The value of nghost specifies the number of cells in the boundary region that should be modified.

Parameters
nghost

◆ operator=() [1/3]

iMultiFab & amrex::iMultiFab::operator= ( const iMultiFab & rhs)
delete

◆ operator=() [2/3]

iMultiFab & amrex::iMultiFab::operator= ( iMultiFab && rhs)
defaultnoexcept

◆ operator=() [3/3]

iMultiFab & amrex::iMultiFab::operator= ( int r)

◆ plus() [1/5]

void amrex::iMultiFab::plus ( const iMultiFab & mf,
int strt_comp,
int num_comp,
int nghost )

This function adds the values of the cells in mf to the corresponding cells of this iMultiFab. mf is required to have the same BoxArray or "valid region" as this iMultiFab. The addition is done only to num_comp components, starting with component number strt_comp. The parameter nghost specifies the number of boundary cells that will be modified. If nghost == 0, only the valid region of each IArrayBox will be modified.

Parameters
mf
strt_comp
num_comp
nghost

◆ plus() [2/5]

void amrex::iMultiFab::plus ( int val,
const Box & region,
int comp,
int num_comp,
int nghost = 0 )

Identical to the previous version of plus(), with the restriction that the subregion is further constrained to the intersection with Box region.

Parameters
val
region
comp
num_comp
nghost

◆ plus() [3/5]

void amrex::iMultiFab::plus ( int val,
const Box & region,
int nghost )

Adds the scalar value val to the value of each cell in the valid region of each component of the iMultiFab, that also intersects the Box region. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
val
region
nghost

◆ plus() [4/5]

void amrex::iMultiFab::plus ( int val,
int comp,
int num_comp,
int nghost = 0 )

Adds the scalar value val to the value of each cell in the specified subregion of the iMultiFab. The subregion consists of the num_comp components starting at component comp. The value of nghost specifies the number of cells in the boundary region of each IArrayBox in the subregion that should be modified.

Parameters
val
comp
num_comp
nghost

◆ plus() [5/5]

void amrex::iMultiFab::plus ( int val,
int nghost )

Adds the scalar value val to the value of each cell in the valid region of each component of the iMultiFab. The value of nghost specifies the number of cells in the boundary region that should be modified.

Parameters
val
nghost

◆ Subtract() [1/2]

void amrex::iMultiFab::Subtract ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Subtract() [2/2]

void amrex::iMultiFab::Subtract ( iMultiFab & dst,
const iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Subtract src from dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray.

Parameters
dst
src
srccomp
dstcomp
numcomp
nghost

◆ sum() [1/2]

Long amrex::iMultiFab::sum ( Box const & region,
int comp = 0,
bool local = false ) const
nodiscard

Returns the sum of component "comp" in the given "region". – no ghost cells are included.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.

◆ sum() [2/2]

Long amrex::iMultiFab::sum ( int comp,
int nghost = 0,
bool local = false ) const
nodiscard

Returns the sum in component comp.

Warning
Unless local is true, this routine performs an MPI collective and every rank in the current active MPI communicator must participate.
Parameters
comp
nghost
local

◆ Swap() [1/2]

void amrex::iMultiFab::Swap ( iMultiFab & dst,
iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
const IntVect & nghost )
static

◆ Swap() [2/2]

void amrex::iMultiFab::Swap ( iMultiFab & dst,
iMultiFab & src,
int srccomp,
int dstcomp,
int numcomp,
int nghost )
static

Swap from src to dst including nghost ghost cells. The two iMultiFabs MUST have the same underlying BoxArray. The swap is local.


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